{"_id":"@agentxin-ai/plugin-dingtalk","name":"@agentxin-ai/plugin-dingtalk","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.4":{"name":"@agentxin-ai/plugin-dingtalk","version":"0.0.4","repository":{"type":"git","url":"git+https://github.com/agentxin-ai/agentxin-plugins.git"},"type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{"./package.json":"./package.json",".":{"@agentxin-plugins-starter/source":"./src/index.ts","types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"dependencies":{"tslib":"^2.3.0"},"devDependencies":{"@types/express":"^5.0.6","@types/passport":"^1.0.17"},"peerDependencies":{"zod":"3.25.67","@agentxin-ai/chatkit-types":"^0.0.12","@agentxin-ai/plugin-sdk":"^3.8.1","i18next":"25.6.0","@metad/contracts":"^3.8.1","@nestjs/common":"^11.1.6","axios":"1.12.2","chalk":"4.1.2","@langchain/core":"0.3.72","@nestjs/core":"^11.1.6","@nestjs/passport":"^11.0.5","express":"4.21.2","passport":"^0.6.0","@nestjs/cache-manager":"^3.0.1","@nestjs/cqrs":"^11.0.3","@nestjs/typeorm":"^11.0.0","bull":"^4.12.6","cache-manager":"^7.2.0","typeorm":"^0.3.24","date-fns":"^3.0.4","rxjs":"^7.8.1","@langchain/langgraph":"0.4.7"},"_id":"@agentxin-ai/plugin-dingtalk@0.0.4","description":"DingTalk integration plugin for AgentXin AI platform.","bugs":{"url":"https://github.com/agentxin-ai/agentxin-plugins/issues"},"homepage":"https://github.com/agentxin-ai/agentxin-plugins#readme","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-up607A/uC8d+SOueRsHk7OCjuERayrAwNYY+1Sm20wRTABN27JO3KNwrVWbdwh8mL18uXCM2eQLkpmkCyWBoLw==","shasum":"63f2d86a1c42fa91b42bca95d4ea653a237690a5","tarball":"https://registry.npmjs.org/@agentxin-ai/plugin-dingtalk/-/plugin-dingtalk-0.0.4.tgz","fileCount":5,"unpackedSize":9406,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD74r/dfGUhubW7FRTylRciA0K/7rCRWabQqZJv48/ZGAIgcqRBdCA6gg5qmSfhVZQE85V7BVqehqo4Pn0pnjlbYVM="}]},"_npmUser":{"name":"agentxin-ai","email":"1304040880@qq.com"},"directories":{},"maintainers":[{"name":"agentxin-ai","email":"1304040880@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/plugin-dingtalk_0.0.4_1773917131738_0.2669328873768442"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-19T10:45:31.614Z","0.0.4":"2026-03-19T10:45:31.878Z","modified":"2026-03-19T10:45:32.099Z"},"maintainers":[{"name":"agentxin-ai","email":"1304040880@qq.com"}],"description":"DingTalk integration plugin for AgentXin AI platform.","homepage":"https://github.com/agentxin-ai/agentxin-plugins#readme","repository":{"type":"git","url":"git+https://github.com/agentxin-ai/agentxin-plugins.git"},"bugs":{"url":"https://github.com/agentxin-ai/agentxin-plugins/issues"},"readme":"# @agentxin-ai/plugin-dingtalk\n\nDingTalk integration plugin for AgentXin AI platform.\n\n## Features\n\n- Bidirectional messaging with DingTalk\n- HTTP webhook event handling (messages, mentions, card actions)\n- HTTP callback signature verification + AES decrypt\n- Encrypted callback ACK response (`msg_signature + encrypt + timeStamp + nonce`)\n- Outbound text/markdown/interactive card message sending\n- Message update/recall with degrade fallback (`degraded=true`)\n- Anonymous conversation key strategy:\n  - `integrationId + conversationId + senderId`\n- Trigger binding + conversation binding persistence\n- Built-in notify middleware tools:\n  - `dingtalk_send_text_notification`\n  - `dingtalk_send_rich_notification`\n  - `dingtalk_update_message`\n  - `dingtalk_recall_message`\n  - `dingtalk_list_users`\n  - `dingtalk_list_chats`\n\n## Installation\n\nThis plugin is loaded automatically when placed in the plugins directory.\n\n## Configuration\n\nConfigure integration options in admin panel:\n\n- `clientId` (AppKey)\n- `clientSecret`\n- `robotCode` (required for group/user proactive send APIs)\n- `agentxinId`\n- `preferLanguage`\n- `httpCallbackEnabled` (must be `true` in v1)\n- `callbackToken`\n- `callbackAesKey`\n- `appKey` (optional alias for callback decrypt validation, defaults to `clientId`)\n- `webhookAccessToken` / `webhookSignSecret` (optional fallback path)\n\n## Webhook URL\n\n```\nPOST /api/dingtalk/webhook/:integrationId\n```\n\n## API Endpoints\n\n- `POST /api/dingtalk/webhook/:integrationId`\n- `GET /api/dingtalk/callback-config?integration=<id>`\n- `GET /api/dingtalk/action?integrationId=<id>&conversationUserKey=<key>&action=dingtalk:end`\n- `GET /api/dingtalk/user-select-options?integration=<id>`\n- `GET /api/dingtalk/chat-select-options?integration=<id>`\n- `GET /api/dingtalk/recipient-select-options?integration=<id>&recipientType=<type>`\n\n## Database\n\nThe plugin registers two entities (and corresponding tables) in TypeORM:\n\n### `plugin_dingtalk_conversation_binding`\n\nPurpose: bind one DingTalk conversation user key to one AgentXin conversation.\n\n| Column | Type | Nullable | Notes |\n| --- | --- | --- | --- |\n| `id` | `uuid` | no | primary key |\n| `userId` | `varchar(128)` | yes | optional normalized sender id |\n| `conversationUserKey` | `varchar(255)` | no | `integrationId:conversationId:senderId` or fallback key |\n| `agentxinId` | `varchar(36)` | no | target agentxin id |\n| `conversationId` | `varchar(36)` | no | AgentXin chat conversation id |\n| `tenantId` | `varchar(36)` | yes | tenant scope |\n| `organizationId` | `varchar(36)` | yes | organization scope |\n| `createdById` | `varchar(36)` | yes | audit |\n| `updatedById` | `varchar(36)` | yes | audit |\n| `createdAt` | `timestamptz` | no | auto create timestamp |\n| `updatedAt` | `timestamptz` | no | auto update timestamp |\n\nIndexes:\n- unique: `plugin_dingtalk_conversation_binding_user_id_uq` on (`userId`)\n- unique: `plugin_dingtalk_conversation_binding_user_key_agentxin_uq` on (`conversationUserKey`, `agentxinId`)\n- index: `plugin_dingtalk_conversation_binding_tenant_org_idx` on (`tenantId`, `organizationId`)\n\n### `plugin_dingtalk_trigger_binding`\n\nPurpose: bind one DingTalk integration to one agentxin in trigger mode.\n\n| Column | Type | Nullable | Notes |\n| --- | --- | --- | --- |\n| `id` | `uuid` | no | primary key |\n| `integrationId` | `varchar(36)` | no | integration id |\n| `agentxinId` | `varchar(36)` | no | target agentxin id |\n| `tenantId` | `varchar(36)` | yes | tenant scope |\n| `organizationId` | `varchar(36)` | yes | organization scope |\n| `createdById` | `varchar(36)` | yes | audit |\n| `updatedById` | `varchar(36)` | yes | audit |\n| `createdAt` | `timestamptz` | no | auto create timestamp |\n| `updatedAt` | `timestamptz` | no | auto update timestamp |\n\nIndexes:\n- unique: `plugin_dingtalk_trigger_binding_integration_id_uq` on (`integrationId`)\n- index: `plugin_dingtalk_trigger_binding_tenant_org_idx` on (`tenantId`, `organizationId`)\n\n## Event Subscription Setup (DingTalk Console)\n\nUse the callback-config endpoint output to configure callback URL and check required callback fields.\nIn DingTalk event subscription, select robot-related events based on your scenario, at minimum:\n\n- Robot message receive events\n- Robot card callback events\n\nIn AgentXin integration settings, click \"Test\" to validate credentials and get `webhookUrl` directly for DingTalk callback configuration.\n\n## Migration\n\n- ChatBI middleware is not included in v1.\n- OAuth login is not included in v1.\n- AI interactive card (`ai_card`) is intentionally removed from plugin v1 scope.\n- Use `interactive` mode in `dingtalk_send_rich_notification` for URL button cards.\n\n## License\n\nAGPL-3.0\n","readmeFilename":"README.md","_rev":"1-2fe2d3ecff98a85c7e981d94206ba620"}