{"_id":"@sunnoy/wecom","_rev":"30-6b7d3e95ee73638b868ac2842f83271e","name":"@sunnoy/wecom","dist-tags":{"latest":"3.4.0"},"versions":{"1.0.0":{"name":"@sunnoy/wecom","version":"1.0.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.0.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"360254f33ca0bd5590018eee36bce5fcb39295ec","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.0.0.tgz","fileCount":15,"integrity":"sha512-f+NK10qaaSA9kdNHc8unD0FrXWWk17c3f5AXpQjH8NII8o0xg4GuIoHeGTDEDcZJfRaExWbABzZwMwyuFDiqSQ==","signatures":[{"sig":"MEUCIQD7Rmmh8HeY9vdCUdNl+AWT/N5ns7i3WSI/O+LKoHoQHgIgOJRZT5+MvzWQDzWTB8YCh6DDO/53JnX8IWuUbBYBXN4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93665},"main":"index.js","type":"module","gitHead":"2adfcd4b02c3df028a9b94a4708facaacc786990","_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"fast-xml-parser":"^4.2.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.0.0_1770284822947_0.7828756750678565","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@sunnoy/wecom","version":"1.1.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.1.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"f2bed3fef0c65beed1f47a697c276de1df85bb2b","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.1.0.tgz","fileCount":15,"integrity":"sha512-hgh0ylhFEx+/HDChjBgfB9OFGc4Kwkz02MQ8mW4Ia6tEiEdYOqIcUWirRP1hjuezt0ht0Oy+E5OA8Gw87hNPiQ==","signatures":[{"sig":"MEUCICsCQ3UG+CKMFp/k4r992Cpp8ra2GrriDLHDjbF/yCEEAiEAhuQL/galsiTxjzkvj/0ub5wOBOs+GRTkBDkQT/ixFFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97129},"main":"index.js","type":"module","gitHead":"7329da8bec6fc127398910db1fc2bdccc7f89fee","_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"fast-xml-parser":"^4.2.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.1.0_1770287504173_0.5572361827291019","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@sunnoy/wecom","version":"1.1.2","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.1.2","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"60d6d06e1c56dc2e1e1a56a95e9f72ff81504ad0","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.1.2.tgz","fileCount":15,"integrity":"sha512-z0vyjKa1sUULqzi8iYyVu1/O6x9HMqzKSI0AjvHp1aznd4r8zjibavSm4QVMx3+eTYRGrVPiSA9Ah3gbCd//Cw==","signatures":[{"sig":"MEYCIQDpluhemSi52K+Y0+TlbaSalAErz8IQ8N4QMkyYCt6tYgIhAKlfZQLRpFIL5tyXJO93ExPvK7kNazzfFh8AydQ21JsF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":102497},"main":"index.js","type":"module","gitHead":"3413283c488efaa3c99d95b2d010578cdd2964cb","_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"fast-xml-parser":"^4.2.0"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.1.2_1770344908064_0.22645985030140214","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@sunnoy/wecom","version":"1.2.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.2.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"baa1cca96a5a26163fa42bacdbc1689c72b40ada","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.2.0.tgz","fileCount":14,"integrity":"sha512-iyPwZgKBbKYNEakR0fPgCxFrJxQRaRo5NtBGqrSdsi1YtWmS/uiFgegV+uEHWTTfIZTwMjwsg60wvjdjtn8dlQ==","signatures":[{"sig":"MEQCIDKq0N2MRUwSBIm4IZtDP9XDnaSLVCvqk5LmtHg5jrgYAiA2X4GKTmKZ/Na/C9Ids/GRp4xIu0SKpQxnXCqIUjQudw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":117325},"main":"index.js","type":"module","gitHead":"bf2eac7bf60475fd5f507b8ea9b15888732469e1","_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.2.0_1770371829557_0.07007448758108592","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@sunnoy/wecom","version":"1.3.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.3.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"eb4eaf25a5703acd9cdf9864f1f95ce988336b9e","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.3.0.tgz","fileCount":31,"integrity":"sha512-oyU9LIz1z+oBAEJJS5j90SMCH74BhYEs4crcE2HmpOYZxSir40GtGY1UiwllwyztsMLb++F5sQgBktJhfm7sHQ==","signatures":[{"sig":"MEQCICNhS+KxTXVEWyBgG+uf9sQvi4n22i/gEqE+sF9m+WOeAiA+158WK58s+Wv+tRvs+LMsnVX3nzsVlF/vYoxdxIdwXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183844},"main":"index.js","type":"module","gitHead":"e7d55ba5803a144599ee7972c5f71ae6d3c5a0c5","scripts":{"test":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.3.0_1772271462770_0.8624713314459993","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@sunnoy/wecom","version":"1.4.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.4.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"72ac1b484534901d340d40fa0e8cac0a68089ee2","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.4.0.tgz","fileCount":32,"integrity":"sha512-x9LK6ZJepqVpY3jG4eMn3VwQ7HWosq4BXbBH9OzJlBf2FmPpF7/+e7fji5llwplZu+KECnH0ekTFjsTEElgWXw==","signatures":[{"sig":"MEQCIFpqaiZa8hVgdVuT9kO1zfQbA+fxCQR2sztHHfX/gGbfAiBaCOX0JQp2LpdfcUPx/2k2/klNQ8xJGGzv9fxhd5csKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225222},"main":"index.js","type":"module","gitHead":"4e78670d3f052d2e3debcbbd741ef630f59af492","scripts":{"test":"npm run test:unit","test:e2e":"node --test tests/e2e/*.e2e.test.js","test:unit":"node --test tests/*.test.js","test:e2e:ali-ai":"bash tests/e2e/run-ali-ai.sh"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.4.0_1772442159192_0.35085015883132975","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@sunnoy/wecom","version":"1.4.1","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.4.1","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"b58e55d060a3eccfa57c78703c65b351a581afc2","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.4.1.tgz","fileCount":32,"integrity":"sha512-5naTyhM7xbyygoiaNCtvExu7YAzBly3alnCvB2afUuS6eGVZJH/pcpGb+OP+ScbGIFqqvtJUQR7FOM20xRSEjA==","signatures":[{"sig":"MEQCIAEk76jsVhn8zkuuvD0rqveUX5tIrpYhVfxUfEqjXA/AAiAkEhV/INgXZCFyHIYg5obLsBL+RnjU5wtRi2p/DqXuDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229138},"main":"index.js","type":"module","gitHead":"b5a218566d0ae0869cc61d019ff5a621677770e7","scripts":{"test":"npm run test:unit","test:e2e":"node --test tests/e2e/*.e2e.test.js","test:unit":"node --test tests/*.test.js","test:e2e:ali-ai":"bash tests/e2e/run-ali-ai.sh"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.4.1_1772443106734_0.34840355994458116","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@sunnoy/wecom","version":"1.5.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.5.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"2c48806bb20e3e776126393a5ac4d384f0b6acbe","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.5.0.tgz","fileCount":32,"integrity":"sha512-Nj9NV8V53+2fZvld1uMoR5KOLpJDDWSCouCunlSbV29WSZcznO7YnddyOZHck2nJBuFsJZG3R2spr08Vp6+IWA==","signatures":[{"sig":"MEUCIHJgqM4tf0LNSlg+9+u93JAC0QxKsYxzP5IBzX2AIbyrAiEA3gJmlnxG1bZeIsGV4rG7vhH+gWB1bZUNC/Hb/1Nde60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231959},"main":"index.js","type":"module","gitHead":"4a5bfb2c629882ea96e835e639072a15d247e7af","scripts":{"test":"npm run test:unit","test:e2e":"node --test tests/e2e/*.e2e.test.js","test:unit":"node --test tests/*.test.js","test:e2e:ali-ai":"bash tests/e2e/run-ali-ai.sh"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.5.0_1772507303763_0.5212566879368716","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@sunnoy/wecom","version":"1.5.1","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.5.1","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"e89428d92dcf6fd1fbc4d38a9ebefca9052baa0f","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.5.1.tgz","fileCount":33,"integrity":"sha512-ybwXkLQePnf+B1hHcloiVJuez9LbXn7wI76VIi96jYpeeOkhep6Uh5d6ieVwevUDckpmcmglhx6MHxCNtKSaDg==","signatures":[{"sig":"MEUCIQCArH0mp5lnefd5rKJoc7gJMcAC/mvKX8+bW1sQsC5IowIgAatfJXfu3lrhtsT8/JINZqbewMzVJy2CWuTontL8EYs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242634},"main":"index.js","type":"module","gitHead":"39698b5dac29eed6e9a9e6a9ad4d86891bd25ccf","scripts":{"test":"npm run test:unit","test:e2e":"node --test tests/e2e/*.e2e.test.js","test:unit":"node --test tests/*.test.js","test:e2e:ali-ai":"bash tests/e2e/run-ali-ai.sh"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.5.1_1772617801281_0.5529209092904253","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@sunnoy/wecom","version":"1.6.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.6.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"0fc58c24abe2a3f93800754f03672fd3dc5e1023","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.6.0.tgz","fileCount":34,"integrity":"sha512-PkWt+h2Ui+/1BxAkkvVgqLGQyjUPVNTCfuCIqWIe51opWPGnklihZC80eLkZEb9etRluvGVbojboLgpDAk+xAA==","signatures":[{"sig":"MEUCIQDA5dTmlONgMHFJ+H+VeoM8QfvRNF3Q4mpr1QYMY0c45QIgH1k4y/ZyW5TO4zp7u1ak3ESOFXuX4jkuoCpI+DjR/0k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242459},"main":"index.js","type":"module","gitHead":"e1035e6691af72569f072d367206e00a417800a7","scripts":{"test":"npm run test:unit","test:e2e":"node --test tests/e2e/*.e2e.test.js","test:unit":"node --test tests/*.test.js","test:e2e:ali-ai":"bash tests/e2e/run-ali-ai.sh"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.6.0_1772624630322_0.5687197787594718","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@sunnoy/wecom","version":"1.6.2","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.6.2","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"5b4009709030e7e605ad34f648121db25dee7025","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.6.2.tgz","fileCount":33,"integrity":"sha512-qOfNJ4IPUgEdQ5gsHdnhwD5m1oV1T6Sbj9UbgRcij39DvONME0zsOxswiV/De7yCPEtLKlYOCtL13j9ZsxsMqg==","signatures":[{"sig":"MEUCIQCYBqR0GcnaDNs8gq5kS/1iLN5GA2Cc9qxb7a5jiILWmQIgWDWRhcndIUkIKOpvYKN5yASGP7PoiB4IpYhlVCNyjvw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244715},"main":"index.js","type":"module","scripts":{"test":"npm run test:unit","test:e2e":"node --test tests/e2e/*.e2e.test.js","test:unit":"node --test tests/*.test.js","test:e2e:ali-ai":"bash tests/e2e/run-ali-ai.sh"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.6.2_1772680329508_0.006746403704764425","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@sunnoy/wecom","version":"1.7.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.7.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"097ee49314f1cf50886bce48761ebf240df2a09c","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.7.0.tgz","fileCount":35,"integrity":"sha512-zPDAgmOhvDhnxyPArj3pO3x8fN7wvpzXT8MySRH3JQtNlstM2CDMiLx5Ar3mAILBn0f/xhLyg276PArtuN7yaA==","signatures":[{"sig":"MEYCIQDwRrJ8vMqG1Y5jjL219nDvgGXrHvCPWEmJeLgasz50kAIhALQerN7/DR7bVB3QKJmi3Y5wh8nhDemrVn7Woq5cBOs/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251775},"main":"index.js","type":"module","gitHead":"ef3f0a2df6a80c4d4265053ae1b88c66d1e7214b","scripts":{"test":"npm run test:unit","test:e2e":"node --test tests/e2e/*.e2e.test.js","test:unit":"node --test tests/*.test.js","test:e2e:ali-ai":"bash tests/e2e/run-ali-ai.sh"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.7.0_1772701834225_0.3380496025041282","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@sunnoy/wecom","version":"1.7.1","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.7.1","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"4a2b64e87b80e1b16b9b0828ffdc5849499ecf66","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.7.1.tgz","fileCount":35,"integrity":"sha512-GV/XiRSvl0QUSHvG0zEJqW+/4GDCCM1Zzb4J/UlBp9o0DBSmyfN/L4PIBGOG9Swlr1AzfhtLcLwusYYISo08bw==","signatures":[{"sig":"MEUCIDdlAQsO7iG9ToHBWlSCh4hJAJfHX6yOJHJswKmtD7yHAiEA2LjWnmi28HCQmIpuGbPn851h7RcdCy9VHmfyhBUq3r0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252576},"main":"index.js","type":"module","gitHead":"023a0efdc2212f24a3f1503716c210908bfc6247","scripts":{"test":"npm run test:unit","test:e2e":"node --test tests/e2e/*.e2e.test.js","test:unit":"node --test tests/*.test.js","test:e2e:ali-ai":"bash tests/e2e/run-ali-ai.sh"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.7.1_1772708718427_0.17529261385105244","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@sunnoy/wecom","version":"1.8.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.8.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"02fe5eeea50157635db0f1fc3144b3c1c0dc7037","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.8.0.tgz","fileCount":35,"integrity":"sha512-QNSkjMu6jJMjWzxfab9TYH393ZYuOCUYUuzrP4Y4Ta7zchE0XoXmRt6ip8Y/JrDPJMW4Ta/hr1nNCVKNUjmB5Q==","signatures":[{"sig":"MEYCIQD0xnoXYcHKnev6eHOy7KfaGNY6SLo4hqyrAjELioOKPQIhANj016/TQEwASgF2OUlTEVvPwbWhNC3NIvwchyhjCgC9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":255143},"main":"index.js","type":"module","gitHead":"2b38aa47901b54f7daad36f837b9d283a5cc46a4","scripts":{"test":"npm run test:unit","test:e2e":"node --test tests/e2e/*.e2e.test.js","test:unit":"node --test tests/*.test.js","test:e2e:ali-ai":"bash tests/e2e/run-ali-ai.sh"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.8.0_1772768339157_0.20038764435180867","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@sunnoy/wecom","version":"1.9.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@1.9.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"4ba2e29d28a4786a178e6d86dd93db5cf30dcaf2","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-1.9.0.tgz","fileCount":35,"integrity":"sha512-LEfSKTPxBL7s6h17bjHuAAXsXeh8yaJgBc/nqrJDBgyVYV+6mAKYqUng7cHo2QORateNP7R2eiHDSd2q7xBO6g==","signatures":[{"sig":"MEYCIQCLVEESBROn/AUJrErxj8U9iTjVd4zazKOBNYaz5DOx4wIhAK5A52SiPqI+814tXbrwDSrSFRpUzcHt8ZBKuPjv2Yc8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257587},"main":"index.js","type":"module","gitHead":"89412741c92b1187cb323f902c66c055443b6bba","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_1.9.0_1772801997770_0.5047604955750766","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@sunnoy/wecom","version":"2.0.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@2.0.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"8bc31c704e8837fe1c66d050d0a1de281f4a92b3","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-2.0.0.tgz","fileCount":29,"integrity":"sha512-S7tiflqDtALLqcmk1q7G3AwhxV+gBpfOqYJNqKeNzDSdclQ8srkqDx42Q9+fuzeZUilF137qD2jjZr0iDzuNEg==","signatures":[{"sig":"MEYCIQD0V2CgJVcnKakvt4xgWYaXLiN/w12XwDd5FecZa+P6RAIhAM2KuPAh3r+HS/v3I1CZ+twl/vM8uort3jl97jq3Qk67","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186234},"main":"index.js","type":"module","gitHead":"7bbde3c8d259f57de73e0a3a8653a87b9855f1a6","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@wecom/aibot-node-sdk":"^1.0.1"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_2.0.0_1773135107077_0.3599326088326691","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@sunnoy/wecom","version":"2.0.1","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@2.0.1","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"5e46326ab3658154c7e773eaf29de09c9458e723","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-2.0.1.tgz","fileCount":29,"integrity":"sha512-gcGBHs4HTUwGLGl4vMT12c7b52S8uAiV1cQ3ZZEjst3gO+RhhfPqSNEFxZ+RHIYDCxkyEXdu1qFSEE8aL1wvQQ==","signatures":[{"sig":"MEUCIQDIhzFGWpa9MXDcqoU9UFZYK0rxUW9JRvzINPceqJd/+wIgfDglkCgncA4550NFYT0Qb2vYDbpoFfU1jOl6eljU3vE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189462},"main":"index.js","type":"module","gitHead":"2a6401b74e7c8faedce861cf0adddeedc855e260","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@wecom/aibot-node-sdk":"^1.0.1"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_2.0.1_1773144319041_0.876742888759785","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@sunnoy/wecom","version":"2.0.2","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@2.0.2","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"a56e9ec77876e2abc8196206c85a6f564df7f564","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-2.0.2.tgz","fileCount":29,"integrity":"sha512-V/P0a/0JyNKjXlLQAJBvvfX2nUKiiRwahZXwzj1cyRuoE7vbAxPJ5RXukBtMI73zh7wSbF2AMirsWPrraOX64Q==","signatures":[{"sig":"MEQCIA+mcP6BZ1Mud6eIxFF3lDeDNKuKnxX4zb22zFa/y6ogAiAjy1YgtY32X8nGujl6qvRNEKJDue4SquWI5EipyNusbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189434},"main":"index.js","type":"module","gitHead":"7662a3b63e6b61f0097052325da3778d5f81d242","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@wecom/aibot-node-sdk":"^1.0.1"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_2.0.2_1773215497670_0.9365093933083832","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@sunnoy/wecom","version":"2.1.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@2.1.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"84ad02602fb4163abdaaa50ef4168291703a6153","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-2.1.0.tgz","fileCount":32,"integrity":"sha512-q/59R7S5y4X7aN6rX0epo0rYdSAPPZ6ckuHMsadS67vnzWr2BhcK9uESx5Qk/mrxtpvOe1qXyj6U6avbwEQB3w==","signatures":[{"sig":"MEUCIQDq6TKOGV4/h4AKr9729CIuKkE2iTj1ggT6V3Ctv7P9eQIgdnetyE+YCnJSRVxgk+Z2PkGJ7nJdoqMbeVwDTyCb1hg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224630},"main":"index.js","type":"module","gitHead":"11cc7e7c96d2f5d65e4b5c7277169efb79479e8c","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"@wecom/aibot-node-sdk":"^1.0.1"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_2.1.0_1773222090270_0.46628469770745773","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@sunnoy/wecom","version":"2.2.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@2.2.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"d1441ace79a6817032b3f54e6fdf252187c50782","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-2.2.0.tgz","fileCount":37,"integrity":"sha512-/1+67tlQnDgHounM2nL3dkHgxV0JBqI3mpBTLo6ERYpYrOlEmdByBVDuVa1Eq6uF4LYgcIE9ZSLAfc7wqT+ciA==","signatures":[{"sig":"MEUCIQCr4sQ7wU0cTAA3SF39oSBGGWk9/VJxlV9jQ2oyFCWC2QIgONwf5MQuNifvl39VN0S58hDq+dpZSP+G3A09T2Sirvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":286451},"main":"index.js","type":"module","gitHead":"7054cc637376ef8f87ad4198bb4a47ce4bd7074d","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^21.3.0","@wecom/aibot-node-sdk":"^1.0.2"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_2.2.0_1773545662209_0.8114600744321014","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@sunnoy/wecom","version":"2.2.1","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@2.2.1","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"7dab1bfc196604286b9580d2beb56922d5b31ea6","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-2.2.1.tgz","fileCount":62,"integrity":"sha512-pz9vNO0S7G/6wpGyhtlYm3zl+2z/0ttz158c0r6DKBB7a4oCzQObbMRQhtVJLo0+HKtQu9bpkIISwKGlDMvA8w==","signatures":[{"sig":"MEQCIHy/Rf8wxHZllpBddxuj/+4yt4DZ7OVB3wTTq3Nm0pmyAiB3cf9RI7u0iAwC4Bsm6q7GjUuirUiBuw0CuVEwi/ptcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":398926},"main":"index.js","type":"module","gitHead":"3da8f41aec22463e5eea84adecff0c55fe537870","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^21.3.0","@wecom/aibot-node-sdk":"^1.0.2"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_2.2.1_1773821156071_0.5726327453846807","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@sunnoy/wecom","version":"2.3.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@2.3.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"91d96afb08cf5f23e9c63526b5620eee70c01b70","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-2.3.0.tgz","fileCount":66,"integrity":"sha512-ewuK0Nhc7L4Gq4WsVTyUQ+IXwDajUMlSSamkphohC+lCdAU4yREZ7+1ySeI/fbzeMewbyCWtawQSbo0q0J+aoA==","signatures":[{"sig":"MEQCIACc9pHuKzp4DU/IehPtzqfn+/mxTuxsNGoQMA9BlMnQAiAFE1DgSUtpgTUp5szDWV4Dk5209ehMwhLrXk1jPddtzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":458570},"main":"index.js","type":"module","gitHead":"059c697310ee1d9b918d9824e518e0e31a6cb6d2","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^21.3.0","@wecom/aibot-node-sdk":"^1.0.3"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_2.3.0_1773971480546_0.029399429193043503","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@sunnoy/wecom","version":"2.4.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@2.4.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"3bcaf68783ed0f45ac78a042c46d8a290677c6a8","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-2.4.0.tgz","fileCount":71,"integrity":"sha512-bzFcm4gaSjLLE0G23mGNaK/+aEDbaG5nZEQZ9Cq5Bgd/dlcyHsEb1bHm2+eBieP8xHHs8WqWf7BWBIGn6wlcxw==","signatures":[{"sig":"MEQCIFgzBuV7GbS8L0WUH/mNICefaflQr+IBVWHwnTsPlXpjAiAZy01IdquHbDTxplMZEI7IzktYarZRpOJ34Wl1EzWzMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":474984},"main":"index.js","type":"module","gitHead":"f5153918b3d9dc05aa9400f54e4adc5a4cf34aa6","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^21.3.0","@wecom/aibot-node-sdk":"^1.0.3"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_2.4.0_1774254539416_0.7403242894160573","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"@sunnoy/wecom","version":"2.4.1","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@2.4.1","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"db5afaf8c8fabe349222107dc17f5428aa4b4fa3","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-2.4.1.tgz","fileCount":71,"integrity":"sha512-7UxlQqxysrsLfxkEuMUHAYtgdvtGkRdgCjeINLH7kH6Ws760nUZYnoGE/SD2pLsgQ5CvCpAq+0/9MygWE+qdqg==","signatures":[{"sig":"MEUCIQDBpsv+9fLrnmF/S0uvhyVQbogpzQ2Yl+RObNTe0ETq2gIgQ7+JSB5234e9S8Nm5hSOaZ9aSbNgZV2cc0sjZKIR+QY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":475460},"main":"index.js","type":"module","gitHead":"9d251b907ac13f1f82e6c2f15a8ff8ab37796317","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^21.3.0","@wecom/aibot-node-sdk":"^1.0.3"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"*"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_2.4.1_1774255009621_0.18452908533874401","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@sunnoy/wecom","version":"3.0.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@3.0.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"9f216a0533a67727df380207cfb85672a2ccdf68","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-3.0.0.tgz","fileCount":72,"integrity":"sha512-uXEJgw+z9M7Q5HMNkpvA52EHgUUKbEw2uhtwyBf4GzlnvgitNcTNIkB+H9J/0En/GsitVWu036Kaav6LnOvCPw==","signatures":[{"sig":"MEQCIGHGofjcjN3mbEGWzOKNddUN0tBre3Q/mbS8sP1pXkSCAiBW8q686mWWjtEZICZx0ZftcscW2Rsrj7ljxIidVlVugQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":484775},"main":"index.js","type":"module","gitHead":"5a2f6b57577e9102957d8253f62b7ad2b912affc","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^21.3.0","pinyin-pro":"^3.28.0","@wecom/aibot-node-sdk":"^1.0.3"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"^2026.3.23-2"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_3.0.0_1774341698482_0.7873742683261946","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@sunnoy/wecom","version":"3.1.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@3.1.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"e910bcc1b07e34a39c595fcaa2d459cfd08359db","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-3.1.0.tgz","fileCount":51,"integrity":"sha512-nNrNLSyb/MW//WBQzQ/yiFdRlNwTRQX9nGeRwL3lBMlOXv3k8bj3/HgLBPihiksMus3yJO6wSMLyN0M5DLaiCQ==","signatures":[{"sig":"MEUCIB02rnoGOBD3wGy6JVXCQ5vSYqDvUi9NqpC0LQ56kd36AiEAzl4k7F7Jl8du2KhURxI5rsGle7dpyktGlUysoisw6z8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416133},"main":"index.js","type":"module","gitHead":"7cb4ced4b2c2b8d3d9c19557d9277934a42c9160","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^21.3.0","pinyin-pro":"^3.28.0","@wecom/aibot-node-sdk":"^1.0.6"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"^2026.3.23-2"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_3.1.0_1777279754118_0.12816725849477772","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@sunnoy/wecom","version":"3.2.0","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","_id":"@sunnoy/wecom@3.2.0","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"dist":{"shasum":"430622eee91c0683625d65720dc1d127a3f79d3a","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-3.2.0.tgz","fileCount":51,"integrity":"sha512-yDpeez9RR8NGwpSm9IrCh5TPiKt7mICwyiAnM8aEUeBjKq0F11rSelZRWYI6lT+ND6vk76Ksfacep3Ub2FTgjA==","signatures":[{"sig":"MEQCIAbVxiZm9l/+/Bz5i+8ulrbl/yxtYp9sE0LBTxXV59LYAiATYr1HK+ipT9OJrS72zlBpu+sR5CYaIMGdoZVx94ug1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":427613},"main":"index.js","type":"module","gitHead":"503a1d5403bc3a57763b9ef17c60a9d5e31b53d9","scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"openclaw":{"channel":{"id":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","label":"Enterprise WeChat","order":90,"aliases":["wecom","wework"],"docsPath":"/channels/wecom","docsLabel":"wecom","selectionLabel":"Enterprise WeChat (AI Bot)"},"install":{"npmSpec":"@sunnoy/wecom","defaultChoice":"npm"},"extensions":["./index.js"]},"_npmVersion":"10.9.4","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","directories":{},"_nodeVersion":"22.22.0","dependencies":{"file-type":"^21.3.0","pinyin-pro":"^3.28.0","@wecom/aibot-node-sdk":"^1.0.6"},"_hasShrinkwrap":false,"peerDependencies":{"openclaw":"^2026.3.23-2"},"optionalDependencies":{"undici":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/wecom_3.2.0_1777282326967_0.0008947562110639407","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"@sunnoy/wecom","version":"3.4.0","description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","type":"module","main":"index.js","peerDependencies":{"openclaw":"^2026.3.23-2"},"optionalDependencies":{"undici":"^7.0.0"},"scripts":{"test":"npm run test:unit","test:unit":"node --test tests/*.test.js"},"openclaw":{"extensions":["./index.js"],"channel":{"id":"wecom","label":"Enterprise WeChat","selectionLabel":"Enterprise WeChat (AI Bot)","docsPath":"/channels/wecom","docsLabel":"wecom","blurb":"Support for Enterprise WeChat (WeCom) AI Bot integration","order":90,"aliases":["wecom","wework"]},"install":{"defaultChoice":"npm","npmSpec":"@sunnoy/wecom"}},"keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"author":"","license":"ISC","dependencies":{"@wecom/aibot-node-sdk":"^1.0.7","file-type":"^21.3.0","pinyin-pro":"^3.28.0"},"_id":"@sunnoy/wecom@3.4.0","gitHead":"df2e426457a0e587bbfe63f185ffe002cbf61e6f","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-FhUfjhJjZ42rppogCdt7lztjumgWwzqq7YGn93vDFeTykHVKLATJztFS9IsX7oS8fJGzrGBLCrClp+maGBgl9g==","shasum":"d9b7d6fef98fba3e3d824c23419177dec2b97a72","tarball":"https://registry.npmjs.org/@sunnoy/wecom/-/wecom-3.4.0.tgz","fileCount":57,"unpackedSize":515027,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDg4iXiTswsAsLCvmjq5zLm51zYGkOmkZqdJWfF4zmH9gIhAOs+Cz3YJtIVVLy08aIYcNHd/5LiAbMTE2Qfj5F47yzt"}]},"_npmUser":{"name":"sunnoy","email":"tzhsz.123@gmail.com"},"directories":{},"maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/wecom_3.4.0_1779695945262_0.18805924473021784"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-05T09:47:02.837Z","modified":"2026-05-25T07:59:05.546Z","1.0.0":"2026-02-05T09:47:03.092Z","1.1.0":"2026-02-05T10:31:44.322Z","1.1.2":"2026-02-06T02:28:28.234Z","1.2.0":"2026-02-06T09:57:09.689Z","1.3.0":"2026-02-28T09:37:42.906Z","1.4.0":"2026-03-02T09:02:39.332Z","1.4.1":"2026-03-02T09:18:26.901Z","1.5.0":"2026-03-03T03:08:23.943Z","1.5.1":"2026-03-04T09:50:01.415Z","1.6.0":"2026-03-04T11:43:50.483Z","1.6.1":"2026-03-05T03:00:50.642Z","1.6.2":"2026-03-05T03:12:09.702Z","1.7.0":"2026-03-05T09:10:34.385Z","1.7.1":"2026-03-05T11:05:18.611Z","1.8.0":"2026-03-06T03:38:59.331Z","1.9.0":"2026-03-06T12:59:57.911Z","2.0.0":"2026-03-10T09:31:47.218Z","2.0.1":"2026-03-10T12:05:19.196Z","2.0.2":"2026-03-11T07:51:37.888Z","2.1.0":"2026-03-11T09:41:30.437Z","2.2.0":"2026-03-15T03:34:22.366Z","2.2.1":"2026-03-18T08:05:56.250Z","2.3.0":"2026-03-20T01:51:20.710Z","2.4.0":"2026-03-23T08:28:59.564Z","2.4.1":"2026-03-23T08:36:49.756Z","3.0.0":"2026-03-24T08:41:38.666Z","3.1.0":"2026-04-27T08:49:14.265Z","3.2.0":"2026-04-27T09:32:07.110Z","3.4.0":"2026-05-25T07:59:05.434Z"},"license":"ISC","keywords":["openclaw","wecom","enterprise-wechat","chat","plugin"],"description":"Enterprise WeChat AI Bot channel plugin for OpenClaw","maintainers":[{"name":"sunnoy","email":"tzhsz.123@gmail.com"}],"readme":"# OpenClaw 企业微信（WeCom）增强插件\n\n[![npm](https://img.shields.io/npm/v/@sunnoy/wecom)](https://www.npmjs.com/package/@sunnoy/wecom)\n[![license](https://img.shields.io/npm/l/@sunnoy/wecom)](LICENSE)\n\n`@sunnoy/wecom` 是 [OpenClaw](https://github.com/openclaw/openclaw) 企业微信渠道的**社区增强插件**，基于官方 [`@wecom/wecom-openclaw-plugin`](https://github.com/WecomTeam/wecom-openclaw-plugin) 的 WebSocket 长连接骨架，提供多账号管理、动态 Agent 隔离、Agent API / Webhook 增强出站、企业微信 MCP 文档/智能表格能力、指令白名单、配额感知等企业级特性。\n\n底层 SDK：[`@wecom/aibot-node-sdk`](https://github.com/WecomTeam/aibot-node-sdk) — 企业微信智能机器人 Node.js SDK。\n\n> **⚠️ 从 HTTP 回调迁移到长连接：** 2.0 版本完全采用企业微信 [AI 机器人 WebSocket 长连接模式](https://open.work.weixin.qq.com/help2/pc/cat?doc_id=21657)。如果你之前使用 HTTP 回调（Token + EncodingAESKey + 回调 URL），需要在企业微信管理后台将机器人切换到长连接模式，然后删除旧的回调配置。切换后只需 `botId` 和 `secret` 即可接入。\n\n> **2.1 新增：** 在 WS 长连接之外，2.1 版本新增了企业微信**自建应用\"接收消息\"HTTP 回调**作为可选入站通道。在 `channels.wecom.agent` 下配置 `callback.token`、`callback.encodingAESKey`、`callback.path` 即可同时启用，与 WS 通道并行运行，互不影响。\n\n## 相比官方插件的增强特性\n\n下表列出了本插件相比 [官方 WeCom OpenClaw 插件](https://github.com/WecomTeam/wecom-openclaw-plugin)（[npm](https://www.npmjs.com/package/@wecom/wecom-openclaw-plugin)）额外提供的能力：\n\n| 特性 | 官方插件 | 本插件 |\n| --- | :---: | :---: |\n| WebSocket 长连接 + 流式回复 | ✅ | ✅ |\n| 私聊 / 群聊接收 | ✅ | ✅ |\n| DM 准入策略（pairing / open / allowlist / disabled） | ✅ | ✅ |\n| 群聊准入策略（open / allowlist / disabled） | ✅ | ✅ |\n| 按群配置发送者白名单 | ✅ | ✅ |\n| 思考占位（`<think>` 占位符） | ✅ | ✅ |\n| CLI 交互式配置向导 | ✅ | ✅ |\n| **多账号管理**（多 Bot 独立配置、共享字段继承） | ❌ | ✅ |\n| **动态 Agent 路由**（按用户 / 群自动隔离会话与工作区） | ❌ | ✅ |\n| **Workspace 模板**（自动为新 Agent 复制 AGENTS.md 等引导文件） | ❌ | ✅ |\n| **Agent API 增强出站**（自建应用主动发送文本、图片、文件） | ❌ | ✅ |\n| **部门 / 标签目标发送**（`party:` / `tag:` 寻址） | ❌ | ✅ |\n| **Webhook Bot 群通知**（命名 webhook 映射，markdown / 图片 / 文件） | ❌ | ✅ |\n| **指令白名单**（限制普通用户可执行的 slash 命令） | ❌ | ✅ |\n| **管理员绕过**（命令白名单 + 动态 Agent 路由） | ❌ | ✅ |\n| **运行时配额感知**（被动回复 24h 窗口 + 主动发送额度追踪与告警） | ❌ | ✅ |\n| **Pending Reply 重试**（WS 断连后自动通过 Agent API 补发未送达回复） | ❌ | ✅ |\n| **Reasoning 流式节流**（800ms 节流防止 SDK 队列溢出） | ❌ | ✅ |\n| **`<think>` 标签规范化**（兼容 `<thinking>` / `<thought>` 等变体） | ❌ | ✅ |\n| **Reply 媒体指令解析**（自动提取 LLM 输出中的 `MEDIA:` / `FILE:` 路径） | ❌ | ✅ |\n| **出站代理**（`network.egressProxyUrl`） | ❌ | ✅ |\n| **自定义 API 基础地址**（`network.apiBaseUrl` / `WECOM_API_BASE_URL`） | ❌ | ✅ |\n| **Bindings 路由**（固定绑定企业微信账号到指定 Agent） | ❌ | ✅ |\n| **消息去重**（reqId + msgId 去重，防止重复处理） | ❌ | ✅ |\n| **入站图文混排**（`mixed` 消息拆解为文本 + 图片） | ❌ | ✅ |\n| **入站语音转写**（`voice.content` 自动提取） | ❌ | ✅ |\n| **入站引用消息**（`quote` 上下文透传） | ❌ | ✅ |\n| **自建应用回调入站**（HTTP 回调作为独立入站通道，与 WS 并行） | ❌ | ✅ |\n| **Agent API Markdown 回复**（回调入站回复默认 markdown 格式） | ❌ | ✅ |\n| **入站/出站信息日志**（WS / CB 收发日志，便于追踪消息流） | ❌ | ✅ |\n| **官方 MCP 2026.4.23 对齐**（doc auth、SmartPage、媒体拦截器） | ✅ | ✅ |\n| **MCP 多账号 fallback**（默认账号非长连接时自动选择可用 Bot） | ❌ | ✅ |\n| **MCP doc-only Skills 部署约束**（避免误用 contact/todo/msg 等未开通能力） | ❌ | ✅ |\n\n## 目录\n\n- [相比官方插件的增强特性](#相比官方插件的增强特性)\n- [前置要求](#前置要求)\n- [安装](#安装)\n- [从 HTTP 回调迁移](#从-http-回调迁移)\n- [运行测试](#运行测试)\n- [配置](#配置)\n- [私聊与群聊准入策略](#私聊与群聊准入策略)\n- [企业微信侧配置](#企业微信侧配置)\n- [消息能力与投递策略](#消息能力与投递策略)\n- [企业微信 MCP 文档与智能表格](#企业微信-mcp-文档与智能表格)\n- [动态 Agent 与路由](#动态-agent-与路由)\n- [自建应用回调入站](#自建应用回调入站)\n- [常见问题](#常见问题)\n- [项目结构](#项目结构)\n- [自定义 Skills 配合沙箱使用实践](#自定义-skills-配合沙箱使用实践)\n- [相关链接](#相关链接)\n- [贡献与协议](#贡献与协议)\n\n## 前置要求\n\n- 已安装 [OpenClaw](https://github.com/openclaw/openclaw) `2026.3.23-2+`\n- 企业微信管理后台权限，可创建 AI 机器人或自建应用\n- **机器人已切换到长连接模式**（参考[官方文档](https://open.work.weixin.qq.com/help2/pc/cat?doc_id=21657)）\n- 运行 OpenClaw 的机器可以出站访问：\n  - `wss://openws.work.weixin.qq.com`\n  - `https://qyapi.weixin.qq.com`（启用 Agent / Webhook 时）\n\nBot 主链路不需要企业微信反向访问你的 HTTP 回调地址。\n\n## 安装\n\n```bash\nopenclaw plugins install @sunnoy/wecom\n```\n\n> **3.0 兼容性说明：** 从 `3.0.0` 开始，本插件仅支持 OpenClaw `2026.3.23-2+`。旧版 OpenClaw 请继续使用 `2.x`。\n\n> **3.1 MCP 说明：** `wecom_mcp` 已按官方 `@wecom/wecom-openclaw-plugin@2026.4.23` 协商版本与 `@wecom/aibot-node-sdk@1.0.6` 对齐。企业规模和机器人权限仍由企业微信后端控制；当前大型企业常见只开放 `doc` 类 MCP 能力。\n\n> **从官方插件迁移：** 如果之前使用 `openclaw plugins install @wecom/wecom-openclaw-plugin`，请先卸载官方插件再安装本插件。`channels.wecom` 配置字段兼容，无需修改。\n\n## 从 HTTP 回调迁移\n\n如果之前使用 HTTP 回调模式（Token + EncodingAESKey + 回调 URL），迁移步骤如下：\n\n1. **企业微信后台**：进入「应用管理」→「智能机器人」，将机器人切换到长连接模式（参考[官方文档](https://open.work.weixin.qq.com/help2/pc/cat?doc_id=21657)）\n2. **记录凭证**：切换后获取新的 `BotId` 和 `Secret`\n3. **更新配置**：在 `~/.openclaw/openclaw.json` 中：\n   - 设置 `channels.wecom.botId` 和 `channels.wecom.secret`\n   - 删除旧的 `token`、`encodingAesKey`、回调 URL 相关配置\n4. **安装插件**：`openclaw plugins install @sunnoy/wecom`\n5. **重启 Gateway**：`openclaw gateway restart`\n\n迁移后不再需要公网可达的 HTTP 回调地址，插件会主动连接企业微信 WebSocket。\n\n## 运行测试\n\n```bash\nnpm test\n```\n\n## 配置\n\n### 单账号示例\n\n在 `~/.openclaw/openclaw.json` 中添加：\n\n```json\n{\n  \"plugins\": {\n    \"entries\": {\n      \"wecom\": {\n        \"enabled\": true\n      }\n    }\n  },\n  \"channels\": {\n    \"wecom\": {\n      \"enabled\": true,\n      \"botId\": \"aibxxxxxxxxxxxxxxxx\",\n      \"secret\": \"xxxxxxxxxxxxxxxx\",\n      \"welcomeMessage\": \"你好，我是 AI 助手。\",\n      \"sendThinkingMessage\": true,\n      \"dmPolicy\": \"pairing\",\n      \"allowFrom\": [],\n      \"groupPolicy\": \"open\",\n      \"groupAllowFrom\": [],\n      \"adminUsers\": [\"admin-userid\"],\n      \"commands\": {\n        \"enabled\": true,\n        \"allowlist\": [\"/new\", \"/compact\", \"/help\", \"/status\"]\n      },\n      \"dynamicAgents\": {\n        \"enabled\": true,\n        \"adminBypass\": false,\n        \"persistToConfig\": false\n      },\n      \"dm\": {\n        \"createAgentOnFirstMessage\": true\n      },\n      \"groupChat\": {\n        \"enabled\": true,\n        \"requireMention\": true,\n        \"mentionPatterns\": [\"@\"]\n      },\n      \"workspaceTemplate\": \"/path/to/template-dir\",\n      \"workspaceTemplateExtraFiles\": [\"scripts/\", \"requirements.txt\"],\n      \"mediaLocalRoots\": [\"/tmp/openclaw\"],\n      \"agent\": {\n        \"corpId\": \"wwxxxxxxxxxxxxxxxx\",\n        \"corpSecret\": \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n        \"agentId\": 1000002\n      },\n      \"webhooks\": {\n        \"ops\": \"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx\",\n        \"dev\": \"yyy\"\n      },\n      \"network\": {\n        \"egressProxyUrl\": \"http://proxy.internal:8080\",\n        \"apiBaseUrl\": \"https://qyapi.weixin.qq.com\"\n      }\n    }\n  }\n}\n```\n\n`webhooks` 的 value 既可以是完整 URL，也可以只写群机器人的 `key`。\n\n### 核心配置\n\n| 配置项 | 类型 | 必填 | 说明 |\n| --- | --- | --- | --- |\n| `plugins.entries.wecom.enabled` | boolean | 是 | 启用插件 |\n| `channels.wecom.enabled` | boolean | 否 | 渠道开关 |\n| `channels.wecom.botId` | string | 是 | 企业微信 AI 机器人 Bot ID |\n| `channels.wecom.secret` | string | 是 | 企业微信 AI 机器人 Secret |\n| `channels.wecom.websocketUrl` | string | 否 | WS 地址，默认 `wss://openws.work.weixin.qq.com` |\n| `channels.wecom.sendThinkingMessage` | boolean | 否 | 是否先发送 `<think></think>` 占位，默认 `true`。该配置只控制企微思考气泡/占位消息；真实推理内容还要求当前 OpenClaw session 的 `reasoningLevel` 为 `stream` |\n| `channels.wecom.welcomeMessage` | string | 否 | 进入会话欢迎语（非空时固定使用该字符串） |\n| `channels.wecom.welcomeMessagesFile` | string | 否 | 欢迎语列表文件路径。支持：`{ \"messages\": [ ... ] }` 或顶层数组；每条欢迎语可为**一行一个字符串的数组**（推荐，易读），或单条字符串（可含 `\\\\n`）。相对路径基于 OpenClaw 状态目录（`~/.openclaw` 或 `OPENCLAW_STATE_DIR`）。未设置 `welcomeMessage` 时从该文件随机选取；**修改文件后无需重启服务**（按 mtime 自动重读） |\n| `channels.wecom.adminUsers` | string[] | 否 | 管理员用户 ID，可绕过命令白名单 |\n| `channels.wecom.defaultAccount` | string | 否 | 多账号模式默认账号 |\n\n### 准入与安全配置\n\n| 配置项 | 类型 | 必填 | 说明 |\n| --- | --- | --- | --- |\n| `channels.wecom.dmPolicy` | string | 否 | `pairing`、`allowlist`、`open`、`disabled`，默认 `pairing` |\n| `channels.wecom.allowFrom` | string[] | 否 | 私聊 allowlist |\n| `channels.wecom.groupPolicy` | string | 否 | `open`、`allowlist`、`disabled`，默认 `open` |\n| `channels.wecom.groupAllowFrom` | string[] | 否 | 允许触发的群聊 ID 列表 |\n| `channels.wecom.groups` | object | 否 | 按群覆盖配置，可为某个群单独设置 `allowFrom` |\n| `channels.wecom.commands.enabled` | boolean | 否 | 是否启用命令白名单，默认 `true` |\n| `channels.wecom.commands.allowlist` | string[] | 否 | 普通用户允许执行的命令 |\n\n### 路由与工作区配置\n\n| 配置项 | 类型 | 必填 | 说明 |\n| --- | --- | --- | --- |\n| `channels.wecom.dynamicAgents.enabled` | boolean | 否 | 是否启用动态 Agent，默认 `true` |\n| `channels.wecom.dynamicAgents.adminBypass` | boolean | 否 | 管理员是否绕过动态 Agent，默认 `false` |\n| `channels.wecom.dynamicAgents.persistToConfig` | boolean | 否 | 首次创建动态 Agent 时是否写入 `openclaw.json`，默认 `false`。开启后新会话可能触发 gateway 配置重载 |\n| `channels.wecom.dm.createAgentOnFirstMessage` | boolean | 否 | 私聊是否按用户建独立 Agent，默认 `true` |\n| `channels.wecom.groupChat.enabled` | boolean | 否 | 是否启用群聊处理，默认 `true` |\n| `channels.wecom.groupChat.requireMention` | boolean | 否 | 群聊是否要求 @ 才响应，默认 `true` |\n| `channels.wecom.groupChat.mentionPatterns` | string[] | 否 | 群聊触发前缀，默认 `[\"@\"]` |\n| `channels.wecom.workspaceTemplate` | string | 否 | 动态 Agent 工作区模板目录 |\n| `channels.wecom.workspaceTemplateExtraFiles` | string[] | 否 | 在默认模板文件之外额外复制的相对路径文件/目录，例如 `[\"scripts/\", \"requirements.txt\"]`。会跳过绝对路径、`../`、`.git`、`node_modules`、`.env*` |\n| `channels.wecom.mediaLocalRoots` | string[] | 否 | 额外允许被动回复读取的宿主机目录列表。用于放行 `MEDIA:/abs/path` 或 `FILE:/abs/path` 指向的本地文件；默认只允许当前 Agent workspace 和浏览器产物目录。注意：浏览器工具返回的宿主机路径在 block reply 阶段仍可能被 core sandbox 校验拦下，建议先用 `stage_browser_media` 复制到 `/workspace/...` 后再回复。多账号模式下也可配置在 `channels.wecom.<accountId>.mediaLocalRoots`。修改后需重启 Gateway 生效 |\n\n### 增强出站配置\n\n| 配置项 | 类型 | 必填 | 说明 |\n| --- | --- | --- | --- |\n| `channels.wecom.agent.corpId` | string | 否 | 自建应用 CorpID |\n| `channels.wecom.agent.corpSecret` | string | 否 | 自建应用 Secret |\n| `channels.wecom.agent.agentId` | number | 否 | 自建应用 AgentId |\n| `channels.wecom.agent.replyFormat` | string | 否 | 回调入站回复格式，`\"markdown\"`（默认）或 `\"text\"` |\n| `channels.wecom.agent.callback.token` | string | 否 | 回调验签 Token |\n| `channels.wecom.agent.callback.encodingAESKey` | string | 否 | 回调消息解密密钥（43 位） |\n| `channels.wecom.agent.callback.path` | string | 否 | 回调 HTTP 路由路径，如 `\"/webhooks/app\"` |\n| `channels.wecom.webhooks` | object | 否 | 群机器人 webhook 映射 |\n| `channels.wecom.network.egressProxyUrl` | string | 否 | Agent / Webhook 出站代理 |\n| `channels.wecom.network.apiBaseUrl` | string | 否 | 企业微信 API 基础地址覆盖，默认官方地址 |\n\nAgent 增强出站不需要 `token`、`encodingAesKey`、回调 URL；只有需要同时启用**回调入站**时才需配置 `agent.callback.*`。\n\n### 多账号示例\n\n```json\n{\n  \"channels\": {\n    \"wecom\": {\n      \"defaultAccount\": \"open\",\n      \"adminUsers\": [\"admin-userid\"],\n      \"commands\": {\n        \"enabled\": true,\n        \"allowlist\": [\"/new\", \"/compact\", \"/help\", \"/status\"]\n      },\n      \"open\": {\n        \"botId\": \"aib-open-xxx\",\n        \"secret\": \"secret-open-xxx\",\n        \"dmPolicy\": \"open\"\n      },\n      \"support\": {\n        \"botId\": \"aib-support-xxx\",\n        \"secret\": \"secret-support-xxx\",\n        \"dmPolicy\": \"pairing\",\n        \"mediaLocalRoots\": [\"/tmp/openclaw\"],\n        \"agent\": {\n          \"corpId\": \"wwxxxxxxxxxxxxxxxx\",\n          \"corpSecret\": \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n          \"agentId\": 1000002\n        },\n        \"webhooks\": {\n          \"ops\": \"https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx\"\n        }\n      }\n    }\n  }\n}\n```\n\n多账号模式下：\n\n- 顶层共享字段会合并到各账号\n- `channels.wecom.<accountId>` 是每个账号自己的覆盖项\n- 动态 Agent ID 会自动带账号前缀\n- 旧的 v1 `token` / `encodingAesKey` 字段不再使用\n\n## 私聊与群聊准入策略\n\n### 私聊 `dmPolicy`\n\n| 值 | 含义 |\n| --- | --- |\n| `pairing` | 默认模式。陌生用户首次私聊会收到配对码，管理员执行 `openclaw pairing approve wecom <code>` 后放行 |\n| `allowlist` | 只允许 `allowFrom` 中的用户私聊，不自动发配对码 |\n| `open` | 允许所有能私聊机器人的企业微信成员直接进入会话 |\n| `disabled` | 禁用私聊 |\n\n`open` 的含义就是：如果机器人可见范围允许，企业内任何能私聊到这个 Bot 的成员都可以直接使用。\n\n### 群聊策略\n\n| 配置 | 说明 |\n| --- | --- |\n| `groupPolicy: \"open\"` | 所有群可触发 |\n| `groupPolicy: \"allowlist\"` + `groupAllowFrom` | 只允许指定群 |\n| `groupPolicy: \"disabled\"` | 禁用群聊 |\n| `groupChat.requireMention` | 群聊是否必须 @ 才触发 |\n| `groups.<chatId>.allowFrom` | 某个群里仅允许指定成员触发 |\n\n## 企业微信侧配置\n\n### 1. 创建 AI 机器人（Bot 主链路）\n\n这是 v2 的主接入方式，使用 WebSocket 长连接。\n\n1. 登录[企业微信管理后台](https://work.weixin.qq.com/wework_admin/frame)\n2. 进入「应用管理」→「智能机器人」\n3. 创建机器人，选择长连接模式（参考[官方文档](https://open.work.weixin.qq.com/help2/pc/cat?doc_id=21657)）\n4. 创建完成后记录 `BotId` 和 `Secret`\n5. 填入 OpenClaw 配置的 `channels.wecom.botId` 和 `channels.wecom.secret`\n6. 启动 OpenClaw，插件会主动连接官方 WebSocket\n\n长连接模式下不需要配置 HTTP 回调 URL、Token、EncodingAESKey。\n\n### 2. 创建自建应用（Agent 增强出站 + 可选回调入站）\n\n自建应用承担两个可选职责：\n\n**增强出站**（主动推送消息）：\n- 主动给用户 / 群 / 部门 / 标签发消息\n- 上传图片和文件\n- 当 WS 断连时作为回复后备通道\n\n**回调入站**（可选，与 WS 并行）：\n- 企业微信将用户消息以 HTTP POST 推送到你的服务器\n- 适合需要独立入站 URL 或不方便使用 WS 长连接的场景\n\n创建步骤：\n\n1. 在企业微信后台创建自建应用\n2. 记录 `CorpID`、`AgentId`、`Secret`\n3. 填入配置：\n   - `channels.wecom.agent.corpId`\n   - `channels.wecom.agent.agentId`\n   - `channels.wecom.agent.corpSecret`\n4. **仅启用回调入站时**，额外在应用的「接收消息」中配置回调 URL，并填入对应的 `agent.callback.*` 配置（见[自建应用回调入站](#自建应用回调入站)）\n\n### 3. 配置群机器人（Webhook 增强出站，可选）\n\nWebhook 只负责群通知。\n\n1. 在目标群添加群机器人\n2. 复制 webhook URL 或 key\n3. 配置到 `channels.wecom.webhooks`\n4. 发送目标使用 `webhook:<name>`\n\n## 消息能力与投递策略\n\n### 能力矩阵\n\n| 能力 | Bot（WS） | Agent API | Webhook |\n| --- | :---: | :---: | :---: |\n| 私聊接收 | ✅ | ✅（回调入站） | — |\n| 群聊接收（可配置 @ 触发） | ✅ | ✅（回调入站） | — |\n| 被动流式回复 | ✅ | — | — |\n| 被动最终帧图片 | ✅ | ✅ | ✅ |\n| 主动发送文本 | ✅ | ✅ | ✅ |\n| 主动发送图片 / 文件 | — | ✅ | ✅ |\n| 发送到部门 / 标签 | — | ✅ | — |\n| 思考过程 `<think>` | ✅ | — | — |\n| 欢迎语 | ✅ | — | — |\n| WS 断连补发 | — | ✅ | — |\n\n### 入站消息\n\n| 类型 | 说明 |\n| --- | --- |\n| `text` | 文本消息 |\n| `image` | 图片（AES 加密下载 + 解密） |\n| `voice` | 语音（自动提取转写文本 `voice.content`） |\n| `file` | 文件（AES 加密下载 + 解密） |\n| `mixed` | 图文混排（自动拆解为文本 + 图片） |\n| `quote` | 引用消息（上下文透传） |\n\n### 被动回复\n\n被动回复统一走 WebSocket `replyStream`：\n\n- 文本内容支持 Markdown\n- `<thinking>`、`<thought>` 等变体会被规范化为 `<think>`\n- 可先发送 `<think></think>` 占位（配置 `sendThinkingMessage`）\n- 如果只看到“等待模型响应”而没有真实思考内容，请检查对应 session 的 `reasoningLevel` 是否为 `stream`；插件会为缺失值初始化为 `stream`，但不会覆盖用户已显式设置的 `off`\n- 思考流式更新采用 800ms 节流，防止 SDK 队列溢出\n- 最终回复 `finish=true` 时可附带图片 `msg_item`\n- 若最终回复包含 WS 不支持的媒体（文件等），会先文本提示再通过 Agent API 补发\n\n本插件会自动解析模型输出中的 `MEDIA:` / `FILE:` 指令，并在回复完成后上传对应文件：\n\n- 图片使用 `MEDIA:/abs/path`\n- PDF、音频、视频、压缩包、Office 文档等非图片文件使用 `FILE:/abs/path`\n- 沙箱内当前工作区文件可直接写成 `MEDIA:/workspace/...` 或 `FILE:/workspace/...`\n- 浏览器生成的文件默认允许从 OpenClaw 状态目录下的浏览器媒体目录读取，但如果浏览器工具返回的是宿主机绝对路径，先调用 `stage_browser_media`，再使用它返回的 `MEDIA:/workspace/...` 或 `FILE:/workspace/...`\n- 宿主机其他目录默认不放行；如果需要回复 `/tmp/openclaw/report.pdf` 这类文件，请把其父目录加入 `channels.wecom.mediaLocalRoots`，多账号模式可配在 `channels.wecom.<accountId>.mediaLocalRoots`\n- 更新 `mediaLocalRoots` 后需重启 Gateway 生效\n\n### 主动发送与后备策略\n\n主动发送分层：\n\n1. 普通文本优先走 WS `sendMessage`\n2. 目标为 `webhook:<name>` 时走 Webhook\n3. 目标为用户 / 群 / 部门 / 标签，且配置了 Agent 时走 Agent API\n4. 发送图片 / 文件时，WS 侧给出文本提示，媒体交给 Agent / Webhook 通道\n5. 未配置 Agent / Webhook 时，只保留 WS 文本提示\n\n### WS 断连自动重试\n\n当 WS 断连导致最终回复发送失败时：\n\n1. 插件自动将未送达回复加入 pending 队列（TTL 5 分钟，最多 50 条）\n2. WS 重连并认证成功后，自动通过 Agent API 补发所有 pending 回复\n3. 过期条目自动丢弃，不会无限积压\n\n### 运行时配额感知\n\n插件做本地近似记账，并把状态暴露到账号 snapshot / status：\n\n- 连接占线：同一个 `botId` 被其他实例接管时，标记 `displaced`\n- 24h 被动回复窗口：按会话追踪 reply quota（限额 30，告警 24）\n- 每会话每日主动发送额度：按会话追踪 active send quota（限额 10，告警 8）\n- 接近上限或触顶时输出 warning\n\n当前策略是\"感知 + 告警\"，不做硬阻断。\n\n### 支持的目标格式\n\n| 格式 | 示例 | 说明 |\n| --- | --- | --- |\n| `wecom:<userId>` | `wecom:zhangsan` | 发给企业微信用户 |\n| `group:<chatId>` | `group:wr123456` | 发给群聊 |\n| `party:<id>` | `party:2` | 发给部门 |\n| `tag:<name>` | `tag:Developers` | 发给标签 |\n| `webhook:<name>` | `webhook:ops` | 发给 webhook 群 |\n| `<chatId>` | `wr123456` | 直接写群 ID 也可识别 |\n\n## 企业微信 MCP 文档与智能表格\n\n`wecom_mcp` 通过企业微信官方 MCP Server 调用文档和智能表格能力。本插件默认使用官方协商版本 `2026.4.23`，并保留社区增强：\n\n- 自动透传当前企业微信发送人的 `userid`，用于 MCP 后端做用户级鉴权\n- 保留原始大小写 `chatId/chatType`，文档权限错误时可发送企业微信授权卡片\n- `smartpage_create` 支持 `page_filepath`，调用前读取本地 Markdown 文件并填入 `page_content`\n- `smartpage_get_export_result` 会把大段 Markdown `content` 保存为本地文件，返回 `content_path`\n- `get_msg_media` 会把 base64 媒体保存为本地文件，避免把大文件塞进模型上下文\n- 默认账号不是长连接机器人时，自动回退到第一个配置了 `botId/secret` 的账号获取 MCP 配置\n\n推荐只部署当前机器人实际开通的 doc 类 skills：\n\n- `wecom-preflight`\n- `wecom-doc-manager`\n- `wecom-smartsheet-schema`\n- `wecom-smartsheet-data`\n\n如果企业微信返回 `errcode: 846609` / `unsupported mcp biz type`，表示当前机器人未开通对应 MCP category。不要改用其他 category 或反复探路。\n\n如果返回 `forbidden for current apikey`，表示企业微信 MCP 后端拒绝当前机器人/apikey 访问目标文档或智能表格。插件无法绕过该限制，需要在企业微信侧给机器人或当前用户开通访问权限，或改用机器人可访问的文档/智能表格链接。\n\n从源码仓库同步到自管 OpenClaw 主机时，可参考运维脚本：\n\n```bash\nscripts/install-plugin.sh\n```\n\n该脚本会把插件代码同步到远端插件目录、在远端执行 `npm ci --omit=dev`、只同步 doc 相关 WeCom skills、清空插件本地 `skills/`，并保持远端文件 ownership 为 `root:root`。脚本默认参数面向本仓库的自管部署环境，其他环境请按实际主机和目录传入参数。\n\n## 动态 Agent 与路由\n\n### 动态 Agent\n\n默认路由规则：\n\n- 私聊：`wecom-dm-<userId>`\n- 群聊：`wecom-group-<chatId>`\n- 多账号私聊：`wecom-<accountId>-dm-<userId>`\n- 多账号群聊：`wecom-<accountId>-group-<chatId>`\n\n好处：\n\n- 每个用户 / 群聊独立上下文\n- 每个动态 Agent 独立工作区\n- 可以按账号进一步隔离\n\n### Workspace 模板\n\n`workspaceTemplate` 目录中的模板文件会在动态 Agent 首次创建时复制到工作区：\n\n- `AGENTS.md`、`BOOTSTRAP.md`、`CLAUDE.md`、`SOUL.md`、`TOOLS.md`、`IDENTITY.md`、`USER.md`、`HEARTBEAT.md`、`system-prompt.md`\n\n如果需要额外复制脚本或数据文件，可以配置 `workspaceTemplateExtraFiles`，值必须是 `workspaceTemplate` 下的相对路径：\n\n```json\n{\n  \"channels\": {\n    \"wecom\": {\n      \"workspaceTemplate\": \"/path/to/template-dir\",\n      \"workspaceTemplateExtraFiles\": [\"scripts/\", \"requirements.txt\", \"tools/helper.py\"]\n    }\n  }\n}\n```\n\n插件会递归复制目录，并跳过绝对路径、`../` 路径穿越、`.git`、`node_modules`、`.env*` 等敏感项。\n\n插件会在工作区里写入 `.openclaw/wecom-template-state.json` 记录首次模板同步状态。已有 state 的工作区后续只补缺，不覆盖已有文件。\n\n`BOOTSTRAP.md` 只会在工作区还没有 `memory/` 或 `MEMORY.md` 时参与同步；一旦工作区已经出现记忆痕迹，插件就不再回种 bootstrap，避免打断已完成 onboarding 的会话。\n\n历史工作区如果还没有 state，插件会先补写 state，再按“只补缺、不覆盖”处理，避免存量工作区被重新整批同步。\n\n### Bindings\n\n如果 OpenClaw 配置了 `bindings`，则优先按 binding 路由，不会被动态 Agent 覆盖。\n\n## 自建应用回调入站\n\n自建应用的「接收消息」HTTP 回调可作为额外的入站通道，与 WS 长连接并行运行，互不干扰。适合已有自建应用的场景，或需要独立回调 URL 的情况。\n\n### 配置\n\n在 `channels.wecom.agent` 下增加 `callback` 子对象：\n\n```json\n{\n  \"channels\": {\n    \"wecom\": {\n      \"botId\": \"aib-xxx\",\n      \"secret\": \"bot-secret-xxx\",\n      \"agent\": {\n        \"corpId\": \"wwxxxxxxxxxxxx\",\n        \"corpSecret\": \"app-secret-xxx\",\n        \"agentId\": 1000002,\n        \"replyFormat\": \"markdown\",\n        \"callback\": {\n          \"token\": \"YourToken\",\n          \"encodingAESKey\": \"43位密钥\",\n          \"path\": \"/webhooks/app\"\n        }\n      }\n    }\n  }\n}\n```\n\n| 字段 | 说明 |\n| --- | --- |\n| `agent.callback.token` | 企业微信「接收消息」里配置的 Token |\n| `agent.callback.encodingAESKey` | 43 位 EncodingAESKey |\n| `agent.callback.path` | Gateway 监听的 HTTP 路径，需与企业微信后台填写的 URL 一致 |\n| `agent.replyFormat` | 回复格式，`\"markdown\"`（默认）或 `\"text\"` |\n\n### 企业微信侧配置\n\n1. 进入自建应用 → 「接收消息」\n2. 填写 URL：`https://<your-gateway-host>:<port><path>`（例如 `https://example.com:18789/webhooks/app`）\n3. 填写 Token 和 EncodingAESKey（与配置保持一致）\n4. 点击「保存」，企业微信将发送 GET 请求验证（gateway 会自动回复 echostr）\n5. 验证通过后，用户发给自建应用的消息将通过 HTTP POST 推送到 gateway\n\n### 支持的消息类型\n\n| 类型 | 说明 |\n| --- | --- |\n| `text` | 文本消息 |\n| `image` | 图片（通过 Agent API 下载） |\n| `voice` | 语音文件 |\n| `file` | 文件 |\n| `video` | 视频文件 |\n\n事件类消息（关注、进入会话等）会被静默忽略。\n\n## 常见问题\n\n### Q: 2.0 和之前最大的区别是什么？\n\n2.0 完全采用 WebSocket 长连接，不再使用 HTTP 回调。需要在企业微信后台将机器人切换到[长连接模式](https://open.work.weixin.qq.com/help2/pc/cat?doc_id=21657)。\n\n### Q: 3.0 为什么不能再装在旧 OpenClaw 上？\n\n3.0 开始直接适配 OpenClaw `2026.3.23-2+` 的新版 plugin SDK 导出和媒体/runtime 约定，旧版 core 缺少这些接口。旧环境请固定使用 `2.x`。\n\n### Q: 之前用的官方插件 `@wecom/wecom-openclaw-plugin`，怎么迁移？\n\n```bash\n# 卸载官方插件\nopenclaw plugins uninstall wecom-openclaw-plugin\n# 安装本插件\nopenclaw plugins install @sunnoy/wecom\n# 重启\nopenclaw gateway restart\n```\n\n`channels.wecom` 配置字段兼容，无需修改。\n\n### Q: `dmPolicy: \"open\"` 是不是企业里任何人都能私聊？\n\n是。前提是该成员对这个机器人可见，并且能在企业微信里私聊到它。\n\n### Q: `pairing` 模式怎么放行用户？\n\n用户第一次私聊会收到配对码。管理员执行：\n\n```bash\nopenclaw pairing approve wecom <code>\n```\n\n### Q: Agent 还需要配置 `token` / `encodingAesKey` 吗？\n\n不需要。Agent 只做增强出站，保留 `corpId`、`corpSecret`、`agentId` 即可。\n\n### Q: 入站图片还依赖全局 `EncodingAESKey` 吗？\n\n不依赖。WS 消息体里的图片 / 文件自带独立 `aeskey`，插件按 `image.aeskey` 或 `file.aeskey` 下载与解密。\n\n### Q: 收到 `disconnected_event` 是什么情况？\n\n通常表示同一个 `botId` 被另一个实例接管了。企业微信同一时刻只允许一个活跃长连接。\n\n### Q: 什么时候会走 Agent 或 Webhook？\n\n- `webhook:<name>` 目标固定走 Webhook\n- 发送部门 / 标签 / 媒体消息时优先走 Agent\n- WS 断连后的 pending 回复通过 Agent API 补发\n- WS 文本主动发送失败时，尝试回退到 Agent\n\n### Q: 回复本地文件时提示“没有权限访问路径”怎么办？\n\n先确认文件路径是否在允许目录里：\n\n- 当前 Agent 工作区文件默认允许，可直接用 `FILE:/workspace/...` 或 `MEDIA:/workspace/...`\n- 浏览器生成的文件默认允许，但浏览器工具返回的宿主机路径建议先用 `stage_browser_media` 转成 `/workspace/...`\n- 宿主机其他目录需要把父目录加入 `channels.wecom.mediaLocalRoots`\n- 多账号模式如果只想对某个账号生效，可配置 `channels.wecom.<accountId>.mediaLocalRoots`\n\n例如：\n\n```json\n{\n  \"channels\": {\n    \"wecom\": {\n      \"mediaLocalRoots\": [\"/tmp/openclaw\"]\n    }\n  }\n}\n```\n\n修改后重启 Gateway。`v2.2.1+` 已支持把 `mediaLocalRoots` 并入被动回复文件允许目录。\n\n### Q: `60020 not allow to access from your ip` 是什么问题？\n\n企业微信自建应用 API 的可信 IP 限制。把当前服务器出口 IP 加入企业微信应用的可信 IP 白名单即可。\n\n## 项目结构\n\n```text\nopenclaw-plugin-wecom/\n├── index.js                      # 插件入口、生命周期、onboarding\n├── dynamic-agent.js              # 动态 Agent 路由判断\n├── image-processor.js            # 图片格式检测、MD5、Base64\n├── logger.js                     # 结构化日志\n├── think-parser.js               # <think> 标签规范化\n├── utils.js                      # 工具函数\n├── openclaw.plugin.json          # 插件元数据\n├── wecom/\n│   ├── accounts.js               # 多账号管理与配置继承\n│   ├── agent-api.js              # Agent API（Token、发送、上传）\n│   ├── allow-from.js             # allowlist 规范化与匹配\n│   ├── callback-crypto.js        # 回调 AES 解密与签名验证\n│   ├── callback-inbound.js       # 自建应用回调入站处理\n│   ├── callback-media.js         # 回调媒体下载\n│   ├── channel-plugin.js         # 核心通道（sendNotice / sendMedia）\n│   ├── commands.js               # 指令白名单与命令拦截\n│   ├── constants.js              # 常量定义\n│   ├── dm-policy.js              # 私聊准入策略\n│   ├── group-policy.js           # 群聊准入策略\n│   ├── http.js                   # HTTP 请求 + 代理\n│   ├── mcp-tool.js               # 企业微信 MCP Streamable HTTP 调用与拦截器\n│   ├── onboarding.js             # CLI 交互式配置向导\n│   ├── runtime-telemetry.js      # 运行时配额追踪\n│   ├── sandbox.js                # 沙箱集成\n│   ├── state.js                  # 插件状态管理\n│   ├── target.js                 # 目标解析（user / group / party / tag / webhook）\n│   ├── webhook-bot.js            # Webhook Bot 发送\n│   ├── workspace-template.js     # 工作区模板同步\n│   ├── ws-monitor.js             # WS 消息处理、流式回复、节流、重试\n│   └── ws-state.js               # WS 状态 + pending reply 队列\n└── tests/\n    ├── accounts-reserved-keys.test.js\n    ├── api-base-url.test.js\n    ├── callback-crypto.test.js\n    ├── callback-inbound.test.js\n    ├── channel-plugin.media-type.test.js\n    ├── channel-plugin.notice.test.js\n    ├── dynamic-agent.test.js\n    ├── image-processor.test.js\n    ├── issue-fixes.test.js\n    ├── mcp-tool.test.js\n    ├── reply-media-directive.test.js\n    ├── runtime-telemetry.test.js\n    ├── target.test.js\n    ├── think-parser.test.js\n    ├── workspace-template.test.js\n    ├── ws-monitor.quote-mixed.test.js\n    └── ws.e2e.test.js\n```\n\n## 自定义 Skills 配合沙箱使用实践\n\nOpenClaw 支持自定义 Skills 并通过沙箱（Docker）隔离执行，下面保留一份生产环境常见配置示例：\n\n```json\n{\n  \"agents\": {\n    \"defaults\": {\n      \"sandbox\": {\n        \"mode\": \"all\",\n        \"workspaceAccess\": \"rw\",\n        \"scope\": \"agent\",\n        \"docker\": {\n          \"image\": \"your-registry.com/openclaw-agent:v2026.x.x\",\n          \"readOnlyRoot\": false,\n          \"network\": \"bridge\",\n          \"extraHosts\": [\n            \"your-domain.internal:xxx.xxx.xxx.xxx\"\n          ],\n          \"binds\": [\n            \"/path/to/skills:/workspace/skills:ro\"\n          ],\n          \"dangerouslyAllowReservedContainerTargets\": true,\n          \"dangerouslyAllowExternalBindSources\": true\n        },\n        \"prune\": {\n          \"idleHours\": 87600,\n          \"maxAgeDays\": 3650\n        }\n      }\n    }\n  },\n  \"skills\": {\n    \"allowBundled\": [\"_none_\"],\n    \"load\": {\n      \"extraDirs\": [\"/path/to/skills\"],\n      \"watch\": true,\n      \"watchDebounceMs\": 250\n    }\n  }\n}\n```\n\n关键点：\n\n- `sandbox.mode: \"all\"` 表示所有操作都走沙箱\n- `sandbox.workspaceAccess: \"rw\"` 允许 Agent 读写工作区\n- `sandbox.scope: \"agent\"` 表示每个 Agent 独立沙箱\n- `sandbox.docker.binds` 可把宿主机技能目录映射到容器内 `/workspace/skills`\n- `skills.load.extraDirs` 用于声明自定义 Skills 加载目录\n- `skills.load.watch` 改动 Skill 后自动热加载\n\n## 相关链接\n\n- [OpenClaw](https://github.com/openclaw/openclaw) — 开源 AI Agent 运行时\n- [官方 WeCom OpenClaw 插件](https://github.com/WecomTeam/wecom-openclaw-plugin)（[npm](https://www.npmjs.com/package/@wecom/wecom-openclaw-plugin)）\n- [`@wecom/aibot-node-sdk`](https://github.com/WecomTeam/aibot-node-sdk) — 企业微信智能机器人 Node.js SDK\n- [企业微信 AI 机器人官方文档](https://open.work.weixin.qq.com/help2/pc/cat?doc_id=21657)\n\n## 贡献与协议\n\n- 贡献说明见 `CONTRIBUTING.md`\n- 许可证为 `ISC`\n","readmeFilename":"README.md"}