{"_id":"@agentor/chat-wecom","_rev":"14-710f69e6315b1715c06e0e3fee3d56df","name":"@agentor/chat-wecom","dist-tags":{"edge":"0.1.3","latest":"0.1.3"},"versions":{"0.0.1":{"name":"@agentor/chat-wecom","version":"0.0.1","keywords":["bot","chat","webhook","wechat-work","wecom","企业微信"],"author":{"url":"https://www.demomacro.com/","name":"Demo Macro","email":"abc@imst.xyz"},"license":"MIT","_id":"@agentor/chat-wecom@0.0.1","maintainers":[{"name":"demomacro","email":"abc@imst.xyz"}],"homepage":"https://github.com/DemoMacro/agentor#readme","bugs":{"url":"https://github.com/DemoMacro/agentor/issues"},"dist":{"shasum":"4923b3b41c86ef67f525affb1547b5d5e2ac2faa","tarball":"https://registry.npmjs.org/@agentor/chat-wecom/-/chat-wecom-0.0.1.tgz","fileCount":4,"integrity":"sha512-XSwadbHSOUYsZ6Dz+w0Ma7qwdczzDCXAjhn7roZJ4WKs2/yVbAsm7dcbPHVFfDO0f9bWycdhDWPynLggnlDHdw==","signatures":[{"sig":"MEUCIQD1WhWgzSoy0EDwkU9v/zZU4Cdu7zby0sdJUYP8Q7OO/wIgT8aSMykfSjE5FA046i8LoUdrIrljY+V9cAgMuYBEl8s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38032},"main":"dist/index.mjs","type":"module","_from":"file:agentor-chat-wecom-0.0.1.tgz","types":"dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"scripts":{"dev":"basis build --stub","build":"basis build"},"_npmUser":{"name":"demomacro","email":"abc@imst.xyz"},"_resolved":"C:\\Users\\abc\\AppData\\Local\\Temp\\45d84b91a15d8e9f98cb46a1fff94b35\\agentor-chat-wecom-0.0.1.tgz","_integrity":"sha512-XSwadbHSOUYsZ6Dz+w0Ma7qwdczzDCXAjhn7roZJ4WKs2/yVbAsm7dcbPHVFfDO0f9bWycdhDWPynLggnlDHdw==","repository":{"url":"git+https://github.com/DemoMacro/agentor.git","type":"git"},"_npmVersion":"11.9.0","description":"WeChat Work (企业微信) integration toolkit with Webhook, Bot, and App support","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@chat-adapter/shared":"4.28.1"},"_hasShrinkwrap":false,"devDependencies":{"h3":"2.0.1-rc.22","chat":"^4.28.1"},"peerDependencies":{"chat":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chat-wecom_0.0.1_1778997345513_0.36854521389535266","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@agentor/chat-wecom","version":"0.0.3","keywords":["agentor","bot","chat-adapter","wecom","template-card","wechat-work","websocket","企业微信","群机器人"],"author":{"url":"https://www.demomacro.com/","name":"Demo Macro","email":"abc@imst.xyz"},"license":"MIT","_id":"@agentor/chat-wecom@0.0.3","maintainers":[{"name":"demomacro","email":"abc@imst.xyz"}],"homepage":"https://github.com/DemoMacro/agentor#readme","bugs":{"url":"https://github.com/DemoMacro/agentor/issues"},"dist":{"shasum":"b2169b376147c90d38fc95ea8af8e0a3c32810e9","tarball":"https://registry.npmjs.org/@agentor/chat-wecom/-/chat-wecom-0.0.3.tgz","fileCount":5,"integrity":"sha512-nCAxBk8YcjJxTEjnEGvmPCBHxz08uVB7IYKb/kwXaQb05I4xPkHn2czyfGSdSXbjVZGc8M0xjtHdBLIxd69Cng==","signatures":[{"sig":"MEUCIQDpc0/59x2mxji0iB3GFWs/X/IuH330nR9Mvzb2CqPQtQIgcjwvOl0Wg5eUOqNHWRTj/1QiquqcY2XNMrc9XWhj6S8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73243},"main":"dist/index.mjs","type":"module","_from":"file:agentor-chat-wecom-0.0.3.tgz","types":"dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"scripts":{"dev":"basis build --stub","build":"basis build"},"_npmUser":{"name":"demomacro","email":"abc@imst.xyz"},"_resolved":"C:\\Users\\abc\\AppData\\Local\\Temp\\a765a9d52389d7b8171b788f24b8de48\\agentor-chat-wecom-0.0.3.tgz","_integrity":"sha512-nCAxBk8YcjJxTEjnEGvmPCBHxz08uVB7IYKb/kwXaQb05I4xPkHn2czyfGSdSXbjVZGc8M0xjtHdBLIxd69Cng==","repository":{"url":"git+https://github.com/DemoMacro/agentor.git","type":"git"},"_npmVersion":"11.9.0","description":"企业微信 (WeCom) Chat SDK 适配器，支持 Webhook 群机器人、智能机器人（回调 URL / WebSocket 长连接）和自建应用","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@chat-adapter/shared":"4.28.1"},"_hasShrinkwrap":false,"devDependencies":{"h3":"2.0.1-rc.22","chat":"^4.28.1"},"peerDependencies":{"chat":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chat-wecom_0.0.3_1779037865524_0.4978419362616522","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@agentor/chat-wecom","version":"0.0.4","keywords":["agentor","bot","chat-adapter","template-card","websocket","wechat-work","wecom","企业微信","群机器人"],"author":{"url":"https://www.demomacro.com/","name":"Demo Macro","email":"abc@imst.xyz"},"license":"MIT","_id":"@agentor/chat-wecom@0.0.4","maintainers":[{"name":"demomacro","email":"abc@imst.xyz"}],"homepage":"https://github.com/DemoMacro/agentor#readme","bugs":{"url":"https://github.com/DemoMacro/agentor/issues"},"dist":{"shasum":"510147d052daf2ef6413a410d4b989905b778ac0","tarball":"https://registry.npmjs.org/@agentor/chat-wecom/-/chat-wecom-0.0.4.tgz","fileCount":5,"integrity":"sha512-uNTMhkRAgqQrthRDRlFuIiFaoy8blIXU5mdGnaNOIuo8uMA/qrsrPEkwgIGMy1WUIJDVOLRe5sdQVGAaVedj/g==","signatures":[{"sig":"MEYCIQDV1BjGgsFuflhUuVp/5OXVfu+Xg1F42WHHLSBgP9O9RgIhAOgRChdMxKv6cuvDO6+Tam2IgXwr0iwGlW/fiFB4b2AM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":687114},"main":"dist/index.mjs","type":"module","_from":"file:agentor-chat-wecom-0.0.4.tgz","types":"dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"scripts":{"dev":"basis build --stub","build":"basis build"},"_npmUser":{"name":"demomacro","email":"abc@imst.xyz"},"_resolved":"C:\\Users\\abc\\AppData\\Local\\Temp\\38fd8d131af15507cec59306dc3aed80\\agentor-chat-wecom-0.0.4.tgz","_integrity":"sha512-uNTMhkRAgqQrthRDRlFuIiFaoy8blIXU5mdGnaNOIuo8uMA/qrsrPEkwgIGMy1WUIJDVOLRe5sdQVGAaVedj/g==","repository":{"url":"git+https://github.com/DemoMacro/agentor.git","type":"git"},"_npmVersion":"11.9.0","description":"企业微信 (WeCom) Chat SDK 适配器，支持 Webhook 群机器人、智能机器人（回调 URL / WebSocket 长连接）和自建应用","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@chat-adapter/shared":"4.29.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/chat-wecom_0.0.4_1779128517969_0.4278028794014146","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@agentor/chat-wecom","version":"0.1.0","keywords":["agentor","bot","chat-adapter","chat-sdk","template-card","websocket","wechat-work","wecom","企业微信","群机器人"],"author":{"url":"https://www.demomacro.com/","name":"Demo Macro","email":"abc@imst.xyz"},"license":"MIT","_id":"@agentor/chat-wecom@0.1.0","maintainers":[{"name":"demomacro","email":"abc@imst.xyz"}],"homepage":"https://github.com/DemoMacro/agentor#readme","bugs":{"url":"https://github.com/DemoMacro/agentor/issues"},"dist":{"shasum":"9fdf822a532f210657a537374aab9b0370909c67","tarball":"https://registry.npmjs.org/@agentor/chat-wecom/-/chat-wecom-0.1.0.tgz","fileCount":6,"integrity":"sha512-kWDHIL/q3AEaSAU3fb6ToQRIiQOnLMO7L4s0gMV0avYVxTMLXi5w4KUlogg08nlCBKiPp9+dmNfMqZUYVw7Iog==","signatures":[{"sig":"MEQCIH4WpbEXNLNKTW8oW3iK0WxYxlRZ4EGSmpAojPtyi4U2AiAGZhqN0s9IGmGnUVHQwYB7CgUiSSYeO0xZMySC4A9O+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79085},"main":"dist/index.mjs","type":"module","_from":"file:agentor-chat-wecom-0.1.0.tgz","types":"dist/index.d.mts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"scripts":{"dev":"basis build --stub","test":"vp test run","build":"vp pack","test:watch":"vp test","test:coverage":"vp test run --coverage"},"_npmUser":{"name":"demomacro","email":"abc@imst.xyz"},"_resolved":"C:\\Users\\abc\\AppData\\Local\\Temp\\2f19d719939f5acb978f2e666ff8c150\\agentor-chat-wecom-0.1.0.tgz","_integrity":"sha512-kWDHIL/q3AEaSAU3fb6ToQRIiQOnLMO7L4s0gMV0avYVxTMLXi5w4KUlogg08nlCBKiPp9+dmNfMqZUYVw7Iog==","repository":{"url":"git+https://github.com/DemoMacro/agentor.git","type":"git"},"_npmVersion":"11.9.0","description":"企业微信 (WeCom) Chat SDK 适配器，支持 Webhook 群机器人、智能机器人（回调 URL / WebSocket 长连接）和自建应用","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@chat-adapter/shared":"4.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"chat":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chat-wecom_0.1.0_1779386919926_0.2747467758054323","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@agentor/chat-wecom","version":"0.1.1","keywords":["agentor","bot","chat-adapter","chat-sdk","template-card","websocket","wechat-work","wecom","企业微信","群机器人"],"author":{"url":"https://www.demomacro.com/","name":"Demo Macro","email":"abc@imst.xyz"},"license":"MIT","_id":"@agentor/chat-wecom@0.1.1","maintainers":[{"name":"demomacro","email":"abc@imst.xyz"}],"homepage":"https://github.com/DemoMacro/agentor#readme","bugs":{"url":"https://github.com/DemoMacro/agentor/issues"},"dist":{"shasum":"587bff51bfbfa5281b31fd802bb1497ff3463b8d","tarball":"https://registry.npmjs.org/@agentor/chat-wecom/-/chat-wecom-0.1.1.tgz","fileCount":6,"integrity":"sha512-Nz6LPKB1HLGnnm7AyqH8ffuJK0RzAOkvw21SIrfG9vOhcp8xUmTtDuFPhnumL1wxOB+Y/ucWgChdcvq1a7SLEg==","signatures":[{"sig":"MEYCIQCyn9/BkGNlzyHDCl8k5rGV+pG/C3Yx/z0GznXwHSW6RgIhAOG1Vz5Nrx0zRAHLrupeWN73fJLonepuIcZK3REhmrBX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79800},"main":"dist/index.mjs","type":"module","_from":"file:agentor-chat-wecom-0.1.1.tgz","types":"dist/index.d.mts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"scripts":{"dev":"basis build --stub","test":"vp test run","build":"vp pack","test:watch":"vp test","test:coverage":"vp test run --coverage"},"_npmUser":{"name":"demomacro","email":"abc@imst.xyz"},"_resolved":"C:\\Users\\abc\\AppData\\Local\\Temp\\58e2462a9776032f23e50718d8e40da1\\agentor-chat-wecom-0.1.1.tgz","_integrity":"sha512-Nz6LPKB1HLGnnm7AyqH8ffuJK0RzAOkvw21SIrfG9vOhcp8xUmTtDuFPhnumL1wxOB+Y/ucWgChdcvq1a7SLEg==","repository":{"url":"git+https://github.com/DemoMacro/agentor.git","type":"git"},"_npmVersion":"11.16.0","description":"企业微信 (WeCom) Chat SDK 适配器，支持 Webhook 群机器人、智能机器人（回调 URL / WebSocket 长连接）和自建应用","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@chat-adapter/shared":"4.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"chat":"4.35.0"},"peerDependencies":{"chat":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chat-wecom_0.1.1_1785202811710_0.13395255210492296","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@agentor/chat-wecom","version":"0.1.2","keywords":["agentor","bot","chat-adapter","chat-sdk","template-card","websocket","wechat-work","wecom","企业微信","群机器人"],"author":{"url":"https://www.demomacro.com/","name":"Demo Macro","email":"abc@imst.xyz"},"license":"MIT","_id":"@agentor/chat-wecom@0.1.2","maintainers":[{"name":"demomacro","email":"abc@imst.xyz"}],"homepage":"https://github.com/DemoMacro/agentor#readme","bugs":{"url":"https://github.com/DemoMacro/agentor/issues"},"dist":{"shasum":"8dee1cef4331695781d58b97312102299483d32f","tarball":"https://registry.npmjs.org/@agentor/chat-wecom/-/chat-wecom-0.1.2.tgz","fileCount":6,"integrity":"sha512-V0hsNVzSeO6cIT5yfaz7AQnY7DcqlOk+fCpmHKFlOQgDVQ5nMBWzDDuu43rMA9Ws+bfLr3hxUBCbNY4YO88tYg==","signatures":[{"sig":"MEQCIBEBkf1lI+Z1hqz83b3RNCxxnkvGb0cxGrVRRDKN/PjyAiBWkDKlvJ6vnwXYBWZ2np+4XUK10VYz2wS3x915G8hZ8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85930},"main":"dist/index.mjs","type":"module","_from":"file:agentor-chat-wecom-0.1.2.tgz","types":"dist/index.d.mts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"scripts":{"dev":"basis build --stub","test":"vp test run","build":"vp pack","test:watch":"vp test","test:coverage":"vp test run --coverage"},"_npmUser":{"name":"demomacro","email":"abc@imst.xyz"},"_resolved":"C:\\Users\\abc\\AppData\\Local\\Temp\\d0d9a64f69f46fa3458768ef9706b14a\\agentor-chat-wecom-0.1.2.tgz","_integrity":"sha512-V0hsNVzSeO6cIT5yfaz7AQnY7DcqlOk+fCpmHKFlOQgDVQ5nMBWzDDuu43rMA9Ws+bfLr3hxUBCbNY4YO88tYg==","repository":{"url":"git+https://github.com/DemoMacro/agentor.git","type":"git"},"_npmVersion":"11.16.0","description":"企业微信 (WeCom) Chat SDK 适配器，支持 Webhook 群机器人、智能机器人（回调 URL / WebSocket 长连接）和自建应用","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@chat-adapter/shared":"4.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"chat":"4.35.0"},"peerDependencies":{"chat":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chat-wecom_0.1.2_1786064266236_0.1523563710971354","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@agentor/chat-wecom","version":"0.1.3","keywords":["agentor","bot","chat-adapter","chat-sdk","template-card","websocket","wechat-work","wecom","企业微信","群机器人"],"author":{"url":"https://www.demomacro.com/","name":"Demo Macro","email":"abc@imst.xyz"},"license":"MIT","_id":"@agentor/chat-wecom@0.1.3","maintainers":[{"name":"demomacro","email":"abc@imst.xyz"}],"homepage":"https://github.com/DemoMacro/agentor#readme","bugs":{"url":"https://github.com/DemoMacro/agentor/issues"},"dist":{"shasum":"3c263cbbc9bad4cf22879052306ca59ef1eae9da","tarball":"https://registry.npmjs.org/@agentor/chat-wecom/-/chat-wecom-0.1.3.tgz","fileCount":6,"integrity":"sha512-GglCIY/xRtlfmKnHSbhpid5wKtE1gFwPuNCVRP/vQ3YZt5Q9hj0Ych+g/3GXE0bXy6tLFhGhtWsmG0Ar/1hhoQ==","signatures":[{"sig":"MEQCIA6gE3VR/MphWqkqWMMRwukKdVLfWqXiAYZJO75gcPRbAiA3BewsGymHm789fPUfl5LkSgC2B0ueNAeUxJ5EOi9OVw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90714},"main":"dist/index.mjs","type":"module","_from":"file:agentor-chat-wecom-0.1.3.tgz","types":"dist/index.d.mts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"scripts":{"dev":"basis build --stub","test":"vp test run","build":"vp pack","test:watch":"vp test","test:coverage":"vp test run --coverage"},"_npmUser":{"name":"demomacro","email":"abc@imst.xyz"},"_resolved":"C:\\Users\\abc\\AppData\\Local\\Temp\\6f5eb4ab19e2d7143f23222caf73b16e\\agentor-chat-wecom-0.1.3.tgz","_integrity":"sha512-GglCIY/xRtlfmKnHSbhpid5wKtE1gFwPuNCVRP/vQ3YZt5Q9hj0Ych+g/3GXE0bXy6tLFhGhtWsmG0Ar/1hhoQ==","repository":{"url":"git+https://github.com/DemoMacro/agentor.git","type":"git"},"_npmVersion":"11.16.0","description":"企业微信 (WeCom) Chat SDK 适配器，支持 Webhook 群机器人、智能机器人（回调 URL / WebSocket 长连接）和自建应用","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@chat-adapter/shared":"4.35.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"chat":"4.35.0"},"peerDependencies":{"chat":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/chat-wecom_0.1.3_1786279388826_0.6717468396637556","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-05-17T05:55:45.429Z","modified":"2026-08-09T12:43:11.056Z","0.0.1":"2026-05-17T05:55:45.677Z","0.0.3":"2026-05-17T17:11:05.677Z","0.0.4":"2026-05-18T18:21:58.171Z","0.1.0":"2026-05-21T18:08:40.086Z","0.1.1":"2026-07-28T01:40:11.863Z","0.1.2":"2026-08-07T00:57:46.377Z","0.1.3":"2026-08-09T12:43:08.994Z"},"bugs":{"url":"https://github.com/DemoMacro/agentor/issues"},"author":{"url":"https://www.demomacro.com/","name":"Demo Macro","email":"abc@imst.xyz"},"license":"MIT","homepage":"https://github.com/DemoMacro/agentor#readme","keywords":["agentor","bot","chat-adapter","chat-sdk","template-card","websocket","wechat-work","wecom","企业微信","群机器人"],"repository":{"url":"git+https://github.com/DemoMacro/agentor.git","type":"git"},"description":"企业微信 (WeCom) Chat SDK 适配器，支持 Webhook 群机器人、智能机器人（回调 URL / WebSocket 长连接）和自建应用","maintainers":[{"name":"demomacro","email":"abc@imst.xyz"}],"readme":"# @agentor/chat-wecom\n\n[![npm version](https://img.shields.io/npm/v/@agentor/chat-wecom)](https://www.npmjs.com/package/@agentor/chat-wecom)\n[![npm downloads](https://img.shields.io/npm/dm/@agentor/chat-wecom)](https://www.npmjs.com/package/@agentor/chat-wecom)\n[![npm license](https://img.shields.io/npm/l/@agentor/chat-wecom)](https://www.npmjs.com/package/@agentor/chat-wecom)\n\n[English](./README.md) | **[中文](./README.zh-CN.md)**\n\n> [Chat SDK](https://github.com/DemoMacro/agentor) 适配器，用于 [企业微信 (WeCom)](https://developer.work.weixin.qq.com/) 消息集成。\n\n## 功能特性\n\n- **Webhook (群机器人)** — 通过 Webhook URL 推送消息到群聊\n- **Bot (智能机器人)** — 支持回调 URL 和 WebSocket 长连接两种模式收发消息\n- **App (应用)** — 发送应用消息、接收回调事件、管理 Access Token\n- **富媒体支持** — 图片、语音、视频、文件的上传下载\n- **卡片消息** — 将 Chat SDK 的 `CardElement` 转换为企业微信 Template Card\n- **安全加密** — AES-256-CBC 加解密 + SHA1 签名校验\n\n## 安装\n\n```bash\n# Install with npm\nnpm install chat @agentor/chat-wecom\n\n# Install with yarn\nyarn add chat @agentor/chat-wecom\n\n# Install with pnpm\npnpm add chat @agentor/chat-wecom\n```\n\n## 快速开始\n\n### Webhook (群机器人)\n\n单向推送消息到群聊：\n\n```typescript\nimport { createWeComWebhookAdapter } from \"@agentor/chat-wecom\";\n\nconst adapter = createWeComWebhookAdapter({\n  key: process.env.WECOM_WEBHOOK_KEY!,\n});\n\nconst threadId = adapter.encodeThreadId({ key: process.env.WECOM_WEBHOOK_KEY! });\nconst result = await adapter.postMessage(threadId, \"Hello from @agentor/chat-wecom!\");\n```\n\n### Bot — WebSocket 长连接模式 (智能机器人)\n\n通过 WebSocket 直连企业微信服务，无需公网端点：\n\n```typescript\nimport { createWeComBotAdapter } from \"@agentor/chat-wecom\";\n\nconst adapter = createWeComBotAdapter({\n  botId: process.env.WECOM_BOT_WS_BOT_ID!,\n  secret: process.env.WECOM_BOT_WS_SECRET!,\n});\n\nawait adapter.initialize({\n  processMessage: async (_adapter, threadId, factory) => {\n    const message = await factory();\n    await adapter.postMessage(threadId, message.text);\n  },\n});\n\n// 断开连接\nawait adapter.disconnect();\n```\n\n### Bot — 回调 URL 模式 (智能机器人)\n\n通过 HTTP 回调接收和回复消息，需要公网可达的端点：\n\n```typescript\nimport { createWeComBotAdapter } from \"@agentor/chat-wecom\";\n\nconst adapter = createWeComBotAdapter({\n  mode: \"callback\",\n  token: process.env.WECOM_BOT_TOKEN!,\n  encodingAESKey: process.env.WECOM_BOT_ENCODING_AES_KEY!,\n});\n\nawait adapter.initialize({\n  processMessage: async (_adapter, threadId, factory) => {\n    const message = await factory();\n    await adapter.postMessage(threadId, message.text);\n  },\n});\n\n// 在 HTTP 服务器中处理回调\n// adapter.handleWebhook(request) → Response\n```\n\n### App (应用)\n\n发送应用消息并接收回调事件：\n\n```typescript\nimport { createWeComAppAdapter } from \"@agentor/chat-wecom\";\n\nconst adapter = createWeComAppAdapter({\n  corpId: process.env.WECOM_APP_CORP_ID!,\n  corpSecret: process.env.WECOM_APP_CORP_SECRET!,\n  agentId: Number(process.env.WECOM_APP_AGENT_ID!),\n  token: process.env.WECOM_APP_TOKEN, // 接收回调时必填\n  encodingAESKey: process.env.WECOM_APP_ENCODING_AES_KEY, // 接收回调时必填\n});\n\n// 发送消息\nconst threadId = adapter.encodeThreadId({\n  corpId: process.env.WECOM_APP_CORP_ID!,\n  userId: \"user-id\",\n});\nconst result = await adapter.postMessage(threadId, \"Hello from app!\");\n\n// 撤回消息\nawait adapter.deleteMessage(threadId, result.id);\n\n// 获取 Access Token\nconst token = await adapter.getAccessToken();\n```\n\n## 环境变量\n\n| 变量名                       | 必填       | 说明                         |\n| ---------------------------- | ---------- | ---------------------------- |\n| `WECOM_WEBHOOK_KEY`          | Webhook    | Webhook 群机器人 Key         |\n| `WECOM_BOT_TOKEN`            | Bot (回调) | 回调 Token                   |\n| `WECOM_BOT_ENCODING_AES_KEY` | Bot (回调) | 回调消息加解密 Key (43 字符) |\n| `WECOM_BOT_WS_BOT_ID`        | Bot (WS)   | 智能机器人 ID                |\n| `WECOM_BOT_WS_SECRET`        | Bot (WS)   | 智能机器人 Secret            |\n| `WECOM_APP_CORP_ID`          | App        | 企业 ID                      |\n| `WECOM_APP_CORP_SECRET`      | App        | 应用 Secret                  |\n| `WECOM_APP_AGENT_ID`         | App        | 应用 AgentId                 |\n| `WECOM_APP_TOKEN`            | App (回调) | 回调 Token                   |\n| `WECOM_APP_ENCODING_AES_KEY` | App (回调) | 回调消息加解密 Key (43 字符) |\n\n## 配置项\n\n### Webhook (群机器人)\n\n| 选项            | 类型           | 默认值             | 说明                                                            |\n| --------------- | -------------- | ------------------ | --------------------------------------------------------------- |\n| `key`           | `string`       | —                  | Webhook Key (必填)                                              |\n| `userName`      | `string`       | `\"WeCom Webhook\"`  | 机器人显示名称                                                  |\n| `cardActionUrl` | `string`       | 企微官网           | 卡片无链接时 `card_action` 的兜底 URL（见下文「整卡点击」小节） |\n| `fetch`         | `typeof fetch` | `globalThis.fetch` | 自定义 fetch 函数                                               |\n\n### Bot (智能机器人)\n\n| 选项             | 类型                        | 默认值                 | 说明                                                            |\n| ---------------- | --------------------------- | ---------------------- | --------------------------------------------------------------- |\n| `mode`           | `\"callback\" \\| \"websocket\"` | `\"websocket\"`          | 连接模式                                                        |\n| `token`          | `string`                    | —                      | 回调 Token (callback 模式必填)                                  |\n| `encodingAESKey` | `string`                    | —                      | 加解密 Key (callback 模式必填)                                  |\n| `botId`          | `string`                    | —                      | 机器人 ID (websocket 模式必填)                                  |\n| `secret`         | `string`                    | —                      | 机器人 Secret (websocket 模式必填)                              |\n| `userName`       | `string`                    | `\"WeCom Bot\"`          | 机器人显示名称                                                  |\n| `cardActionUrl`  | `string`                    | 企微官网               | 卡片无链接时 `card_action` 的兜底 URL（见下文「整卡点击」小节） |\n| `wsUrl`          | `string`                    | 企业微信默认           | WebSocket 服务地址                                              |\n| `WebSocket`      | `typeof WebSocket`          | `globalThis.WebSocket` | 自定义 WebSocket 类                                             |\n\n### App (应用)\n\n| 选项             | 类型           | 默认值             | 说明                                                            |\n| ---------------- | -------------- | ------------------ | --------------------------------------------------------------- |\n| `corpId`         | `string`       | —                  | 企业 ID (必填)                                                  |\n| `corpSecret`     | `string`       | —                  | 应用 Secret (必填)                                              |\n| `agentId`        | `number`       | —                  | 应用 AgentId (必填)                                             |\n| `token`          | `string`       | —                  | 回调 Token (接收回调时必填)                                     |\n| `encodingAESKey` | `string`       | —                  | 加解密 Key (接收回调时必填)                                     |\n| `userName`       | `string`       | `\"WeCom App\"`      | 应用显示名称                                                    |\n| `cardActionUrl`  | `string`       | 企微官网           | 卡片无链接时 `card_action` 的兜底 URL（见下文「整卡点击」小节） |\n| `fetch`          | `typeof fetch` | `globalThis.fetch` | 自定义 fetch 函数                                               |\n\n## 平台配置\n\n### Webhook (群机器人)\n\n1. 在企业微信群聊中添加「群机器人」\n2. 选择「自定义机器人」并创建\n3. 复制 Webhook 地址中的 `key` 参数\n\n### Bot (智能机器人)\n\n1. 登录[企业微信管理后台](https://work.weixin.qq.com/wework_admin/frame)\n2. 进入「应用管理」→「智能机器人」创建机器人\n3. 回调模式：配置回调 URL 并填写 Token 和 EncodingAESKey\n4. WebSocket 模式：获取 Bot ID 和 Secret\n\n### App (应用)\n\n1. 登录[企业微信管理后台](https://work.weixin.qq.com/wework_admin/frame)\n2. 进入「应用管理」→「自建」创建应用\n3. 获取 CorpId、CorpSecret、AgentId\n4. 如需接收回调：在应用详情中配置「接收消息」的 URL、Token、EncodingAESKey\n\n## 消息类型支持\n\n### 接收消息\n\n| 消息类型        | Webhook | Bot (回调/WS) | App |\n| --------------- | ------- | ------------- | --- |\n| 文本 (text)     | —       | ✅            | ✅  |\n| 图片 (image)    | —       | ✅            | ✅  |\n| 语音 (voice)    | —       | ✅            | ✅  |\n| 视频 (video)    | —       | ✅            | ✅  |\n| 文件 (file)     | —       | ✅            | —   |\n| 位置 (location) | —       | —             | ✅  |\n| 链接 (link)     | —       | —             | ✅  |\n| 混合 (mixed)    | —       | ✅            | —   |\n\n> Webhook 为单向推送，不支持接收消息。App 不支持 file 类型回调（企业微信平台限制），视频和语音需通过企业微信内置录制功能发送。\n\n### 发送消息\n\n| 消息类型      | Webhook   | Bot (回调) | Bot (WS)    | App         |\n| ------------- | --------- | ---------- | ----------- | ----------- |\n| Markdown      | ✅        | ✅         | ✅          | ✅          |\n| 图片 (image)  | ✅ base64 | —          | ✅ media_id | ✅ media_id |\n| 语音 (voice)  | ✅        | —          | ✅          | ✅          |\n| 视频 (video)  | —         | —          | ✅          | ✅          |\n| 文件 (file)   | ✅        | —          | ✅          | ✅          |\n| Template Card | ✅        | ✅         | ✅          | ✅          |\n\n> Webhook 和 Bot (回调) 的 Template Card 仅支持 `text_notice` 和 `news_notice` 两种类型。Bot (WS) 和 App 支持全部 5 种卡片类型。Bot (WS) 的媒体消息通过 `respond_msg`（回复消息）发送，主动推送 (`send_msg`) 仅支持 Markdown 和 Template Card。\n\n## 媒体文件处理\n\n### 媒体上传\n\n```typescript\nimport { uploadAppMedia, uploadWebhookMedia } from \"@agentor/chat-wecom\";\n\n// 应用消息上传\nconst mediaId = await uploadAppMedia(accessToken, {\n  data: imageBuffer,\n  filename: \"image.png\",\n  mimeType: \"image/png\",\n});\n\n// Webhook 上传\nconst mediaId = await uploadWebhookMedia(webhookKey, {\n  data: fileBuffer,\n  filename: \"document.pdf\",\n});\n```\n\n### 媒体下载\n\n```typescript\nimport { downloadAppMedia, fetchEncryptedMedia } from \"@agentor/chat-wecom\";\n\n// 通过 mediaId 下载应用消息媒体\nconst { data, filename } = await downloadAppMedia(accessToken, mediaId);\n\n// 下载并解密 Bot 加密媒体（需要 aeskey）\nconst { data, filename } = await fetchEncryptedMedia(url, aeskey);\n```\n\n`postMessage` 会自动处理媒体上传流程：传入 `FileUpload` 时，先上传获取 `media_id`，再发送对应类型的媒体消息。\n\n## 卡片消息\n\n支持将 Chat SDK 的 `CardElement` 自动转换为企业微信 Template Card（5 种卡片类型）：\n\n| 卡片类型               | 说明     |\n| ---------------------- | -------- |\n| `text_notice`          | 文本通知 |\n| `news_notice`          | 图文通知 |\n| `button_interaction`   | 按钮交互 |\n| `vote_interaction`     | 投票交互 |\n| `multiple_interaction` | 多选交互 |\n\n卡片类型根据 `CardElement` 内容自动推断：\n\n- 包含多选/下拉 → `multiple_interaction`\n- 包含单选 → `vote_interaction`\n- 包含按钮 → `button_interaction`\n- 包含图片 → `news_notice`\n- 默认 → `text_notice`\n\n### 整卡点击（card_action）\n\n企业微信要求 `text_notice` / `news_notice` 的 `card_action`（整卡点击跳转）**必填且必须是跳转**，`button_interaction` 则**可选**。由于 `CardElement` 没有「整卡链接」字段，`card_action` 的 URL 按以下优先级解析：\n\n1. 卡片的第一个链接（`LinkElement` / `LinkButtonElement`）\n2. 头部图片（`imageUrl`）\n3. 适配器的 `cardActionUrl` 配置\n4. 内置默认（`https://work.weixin.qq.com`）\n\n`button_interaction` 在卡片无链接/图片时省略 `card_action`（整卡不可点击）；`text_notice` / `news_notice` 始终设置 `card_action`（必填），无链接时回退到 `cardActionUrl` 或内置默认。\n\n```typescript\nimport type { CardElement } from \"chat\";\n\nconst card: CardElement = {\n  type: \"card\",\n  title: \"审批通知\",\n  subtitle: \"请审批以下申请\",\n  children: [\n    {\n      type: \"fields\",\n      children: [{ type: \"field\", label: \"申请人\", value: \"张三\" }],\n    },\n    {\n      type: \"actions\",\n      children: [\n        { type: \"button\", label: \"同意\", style: \"primary\", id: \"approve\" },\n        { type: \"button\", label: \"拒绝\", style: \"danger\", id: \"reject\" },\n      ],\n    },\n  ],\n};\n\nawait adapter.postMessage(threadId, card);\n```\n\n### 卡片按钮回调闭环\n\n`button_interaction` / `vote_interaction` / `multiple_interaction` 卡片的按钮点击，以 chat-sdk 标准的交互动作接入：用户点击后企业微信回调 `template_card_event`，适配器解析后调用 `chat.processAction`，`ButtonElement.id` 映射为 `ActionEvent.actionId`，用 `chat.onAction(actionId, handler)` 响应。\n\n> 仅 **App（应用）** 模式支持按钮回调（Webhook 群机器人、Bot 模式无交互回调）。\n\n回调 XML 中的 `ResponseCode`（72 小时有效、一次性）用于 `updateTemplateCard` 更新卡片状态（如按钮变「已处理」）。发送卡片时 `/message/send` 响应也会返回 `response_code`，二者均可用于更新。\n\n```typescript\nimport { isWeComAppAdapter, type WeComAppCallbackMessage } from \"@agentor/chat-wecom\";\n\n// 1. 注册按钮点击处理器（actionId = ButtonElement.id）\nchat.onAction(\"approve\", async (event) => {\n  const raw = event.raw as WeComAppCallbackMessage;\n  console.log(`${event.user.userId} 点击 ${event.actionId}，taskId=${raw.taskId}`);\n\n  // 2. 用回调里的 responseCode 把按钮变为不可点击\n  if (isWeComAppAdapter(event.adapter) && raw.responseCode) {\n    await event.adapter.updateTemplateCard({\n      responseCode: raw.responseCode,\n      replaceName: \"已同意\",\n    });\n  }\n});\n```\n\n`updateTemplateCard` 参数：\n\n| 参数                                        | 说明                                                      |\n| ------------------------------------------- | --------------------------------------------------------- |\n| `responseCode`                              | 来自回调 `raw.responseCode` 或发送响应 `raw.responseCode` |\n| `replaceName`                               | 按钮变灰替换文案（与 `templateCard` 二选一）              |\n| `templateCard`                              | 整卡替换为新卡片（与 `replaceName` 二选一）               |\n| `userIds` / `partyIds` / `tagIds` / `atAll` | 更新范围，全部缺省时默认 `atAll` 更新所有接收者           |\n\n投票/多选卡片的用户提交结果在 `raw.selectedItems`（`{ questionKey, optionIds }[]`）。\n\n## 加解密\n\n所有回调通信使用 AES-256-CBC 加密和 SHA1 签名校验：\n\n```typescript\nimport { encrypt, decrypt, calculateSignature, verifySignature } from \"@agentor/chat-wecom\";\n\nconst encrypted = await encrypt(encodingAESKey, \"Hello\", \"receiveId\");\nconst decrypted = await decrypt(encodingAESKey, encrypted, \"receiveId\");\n\nconst signature = await calculateSignature(token, timestamp, nonce, encrypted);\nconst valid = await verifySignature(token, timestamp, nonce, encrypted, signature);\n```\n\n## 不支持的操作\n\n以下操作会抛出 `NotImplementedError`：\n\n- `editMessage` — 所有适配器均不支持\n- `deleteMessage` — 仅 App 适配器支持\n- `fetchMessages` / `fetchThread` — 不支持\n- `addReaction` / `removeReaction` — 不支持\n\n## License\n\nMIT © [Demo Macro](https://www.demomacro.com/)\n","readmeFilename":"README.zh-CN.md"}