{"_id":"@zzedbot/yunzhijia","_rev":"27-ad1b80f4884022a767a2ccb7b4cc4277","name":"@zzedbot/yunzhijia","dist-tags":{"latest":"2.0.1"},"versions":{"2.0.0":{"name":"@zzedbot/yunzhijia","version":"2.0.0","_id":"@zzedbot/yunzhijia@2.0.0","maintainers":[{"name":"zedbot","email":"zedbot@163.com"}],"dist":{"shasum":"de3d9b434ed17749e0f8c9eb3dc29d3c320c0032","tarball":"https://registry.npmjs.org/@zzedbot/yunzhijia/-/yunzhijia-2.0.0.tgz","fileCount":36,"integrity":"sha512-0+Y1f6mp82bKjDBA2AOC02xlaWhPfHgotOVmvbvZUnpGW/ZMVxWlT8OSpaCMRobOvHITGAsOJcavTDT2RS/XdQ==","signatures":[{"sig":"MEYCIQDJTUiHoR99oVMJReQEOy25kSS3TbcpUDs57Ak9tW0/kAIhAJfqyoMtml3TZq2NkBrC/C8JMwzmADmAiudh/ktESoR8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73167},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"91706adb351db409a9fc131c87bf08670cafa520","scripts":{"dev":"tsc --watch","test":"vitest","build":"tsc"},"_npmUser":{"name":"zedbot","email":"zedbot@163.com"},"openclaw":{"extensions":["./dist/index.js"]},"_npmVersion":"10.9.4","description":"金蝶云之家 Channel 插件","directories":{},"_nodeVersion":"22.22.0","dependencies":{"axios":"^1.6.0","openclaw":"^2026.2.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/yunzhijia_2.0.0_1772899380739_0.8652058440369179","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@zzedbot/yunzhijia","version":"2.0.1","description":"金蝶云之家 Channel 插件","type":"module","main":"dist/index.js","scripts":{"build":"tsc","dev":"tsc --watch","test":"vitest"},"dependencies":{"openclaw":"^2026.2.0","axios":"^1.6.0"},"devDependencies":{"@types/node":"^20.0.0","typescript":"^5.0.0","vitest":"^1.0.0"},"openclaw":{"extensions":["./dist/index.js"]},"_id":"@zzedbot/yunzhijia@2.0.1","gitHead":"1f19592055b7d57311c927004e0803c2e19a4c9f","types":"./dist/index.d.ts","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-8K7k9FmMrQxM8JZ0+nqcrypM2VL+mc+WHchOO7m/geB194GAg+pu3IA1ELvgqDkwAf6fl0hqSScC5xFxT5TmFw==","shasum":"63843c2830b9e159f088b3cb4778331049d6fc85","tarball":"https://registry.npmjs.org/@zzedbot/yunzhijia/-/yunzhijia-2.0.1.tgz","fileCount":36,"unpackedSize":73441,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCONe2YMHChfhE+OHYgxxgC+nxEpeEza5WKvaEJJJj8vAIhAIsTe9i/NFRU1tpR77r+QsxY8eYMpTY2mj6pLeWaAJl1"}]},"_npmUser":{"name":"zedbot","email":"zedbot@163.com"},"directories":{},"maintainers":[{"name":"zedbot","email":"zedbot@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/yunzhijia_2.0.1_1772899754779_0.47528060298281916"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-07T16:03:00.660Z","modified":"2026-03-07T16:09:15.080Z","1.0.0":"2026-02-09T19:21:06.749Z","1.0.1":"2026-02-09T19:29:11.786Z","1.0.2":"2026-02-09T19:46:57.303Z","1.0.3":"2026-02-09T19:56:22.680Z","1.0.5":"2026-02-09T20:28:27.415Z","1.0.6":"2026-02-10T02:09:15.835Z","1.0.7":"2026-02-10T02:10:59.467Z","1.0.8":"2026-02-10T02:36:52.404Z","1.0.9":"2026-02-10T02:37:46.853Z","1.0.10":"2026-02-10T02:45:17.512Z","1.0.11":"2026-02-10T02:47:24.481Z","1.0.12":"2026-02-10T03:24:16.001Z","1.0.13":"2026-02-10T03:28:10.495Z","1.0.14":"2026-02-10T03:29:39.962Z","1.0.15":"2026-02-10T03:31:16.245Z","1.0.17":"2026-02-10T03:48:17.777Z","1.0.18":"2026-02-10T03:50:45.890Z","1.0.20":"2026-02-10T06:33:18.563Z","1.0.21":"2026-02-10T06:34:35.016Z","1.0.22":"2026-02-10T06:40:34.472Z","1.0.23":"2026-02-10T06:53:44.040Z","1.0.24":"2026-02-10T06:55:20.403Z","2.0.0":"2026-03-07T16:03:00.892Z","2.0.1":"2026-03-07T16:09:14.922Z"},"description":"金蝶云之家 Channel 插件","maintainers":[{"name":"zedbot","email":"zedbot@163.com"}],"readme":"# 🤖 云之家 Channel 插件\n\nOpenClaw 金蝶云之家 (YunzhiJia) 消息渠道插件，支持在云之家中集成 OpenClaw AI 能力。\n\n![Version](https://img.shields.io/badge/version-2.0.0-blue)\n![License](https://img.shields.io/badge/license-MIT-green)\n\n---\n\n## 📋 简介\n\n云之家 Channel 插件允许你在金蝶云之家的群组或私聊中使用 OpenClaw AI 机器人。支持：\n\n- ✅ Webhook 消息接收（HmacSHA1 签名验证）\n- ✅ AI 智能回复（基于上下文的对话）\n- ✅ 多账户支持\n- ✅ 群组消息处理\n- ✅ 访问控制（白名单机制）\n\n---\n\n## 🚀 快速开始\n\n### 方式一：从 NPM 安装（推荐）⭐\n\n```bash\n# 从 NPM 安装插件\nopenclaw plugins install @zzedbot/yunzhijia\n\n# 启用插件\nopenclaw plugins enable yunzhijia\n\n# 重启 Gateway\nopenclaw gateway restart\n```\n\n> 💡 **优点**: \n> - ✅ 自动下载最新版本\n> - ✅ 支持版本管理\n> - ✅ 易于更新 (`openclaw plugins update yunzhijia`)\n\n### 方式二：从源码安装\n\n```bash\n# 安装插件到 OpenClaw 扩展目录\nopenclaw plugins install <YOUR_WORKSPACE>/projects/yunzhijiachannel\n\n# 或手动复制到扩展目录\ncp -r <YOUR_WORKSPACE>/projects/yunzhijiachannel ~/.openclaw/extensions/yunzhijia\n\n# 启用插件\nopenclaw plugins enable yunzhijia\n\n# 重启 Gateway\nopenclaw gateway restart\n```\n\n### 方式三：从开发目录链接（开发者）\n\n```bash\n# 开发模式下，直接链接到开发目录\nopenclaw plugins install -l <YOUR_WORKSPACE>/projects/yunzhijiachannel\n\n# 重启 Gateway\nopenclaw gateway restart\n```\n\n> 💡 **说明**: \n> - **生产环境**使用 **方式一**（NPM 安装）\n> - **开发环境**使用 **方式三**（链接到开发目录）\n\n---\n\n## ⚙️ 配置\n\n### 1. 获取云之家凭证\n\n登录 [云之家开放平台](https://open.yunzhijia.com/)，创建对话机器人并获取：\n\n| 凭证 | 获取位置 |\n|------|---------|\n| `appId` | 应用详情 |\n| `appSecret` | 安全设置 |\n| `token` | 消息配置 |\n| `webhookToken` | Webhook 设置 |\n\n### 2. 配置 OpenClaw\n\n编辑 `~/.openclaw/openclaw.json`：\n\n```json5\n{\n  \"channels\": {\n    \"yunzhijia\": {\n      \"enabled\": true,\n      \"accounts\": {\n        \"default\": {\n          \"enabled\": true,\n          \"appId\": \"<YOUR_APP_ID>\",\n          \"appSecret\": \"<YOUR_APP_SECRET>\",\n          \"token\": \"<YOUR_TOKEN>\",\n          \"webhookToken\": \"<YOUR_WEBHOOK_TOKEN>\",\n          \"webhookPort\": 18790,\n          \"webhookHost\": \"0.0.0.0\",\n          \"dmPolicy\": \"allowlist\",\n          \"allowFrom\": [\"<USER_OPENID_1>\", \"<USER_OPENID_2>\"]\n        }\n      }\n    }\n  },\n  \"plugins\": {\n    \"allow\": [\"yunzhijia\"],\n    \"entries\": {\n      \"yunzhijia\": {\n        \"enabled\": true\n      }\n    }\n  }\n}\n```\n\n> ⚠️ **安全提示**:\n> - 不要将真实密钥提交到 Git\n> - 建议使用环境变量或密钥管理工具\n> - 定期轮换密钥\n\n### 3. 配置云之家 Webhook\n\n在云之家机器人设置中配置消息接收地址：\n\n```\n消息接收地址：https://<YOUR_DOMAIN>/yunzhijia/webhook/default\n```\n\n> 💡 如果使用内网部署，需要配置外网映射（如 Nginx 反向代理）\n\n### 4. 重启 Gateway\n\n```bash\nopenclaw gateway restart\n```\n\n---\n\n## 📖 配置说明\n\n### 必需字段\n\n| 字段 | 说明 | 示例 |\n|------|------|------|\n| `appId` | 云之家应用 ID | `app_12345` |\n| `appSecret` | 应用密钥（用于签名验证） | `abc123...` |\n| `token` | 消息接收 Token | `token_xyz...` |\n| `webhookToken` | Webhook 发送授权码 | `c7d28f...` |\n\n### 可选字段\n\n| 字段 | 说明 | 默认值 |\n|------|------|--------|\n| `webhookPort` | Webhook 监听端口 | `18790` |\n| `webhookHost` | Webhook 监听地址 | `0.0.0.0` |\n| `webhookPath` | Webhook 路径 | `/yunzhijia/webhook/<accountId>` |\n| `dmPolicy` | DM 策略 (`pairing` \\| `allowlist` \\| `open`) | `pairing` |\n| `allowFrom` | 允许的用户 OpenID 列表 | `[]` |\n| `groupPolicy` | 群组策略 (`allowlist` \\| `open`) | `allowlist` |\n\n### 获取用户 OpenID\n\n**方法 1**: 查看 Gateway 日志\n```bash\ntail -f /tmp/openclaw/openclaw.log | grep operatorOpenid\n```\n\n**方法 2**: 用户首次发消息后，从日志中提取 `operatorOpenid` 字段\n\n---\n\n## 🧪 测试\n\n### 1. 本地 Webhook 测试\n\n```bash\ncd <YOUR_WORKSPACE>/projects/yunzhijiachannel\n./test-webhook.sh\n```\n\n### 2. 查看日志\n\n```bash\n# 实时日志\ntail -f /tmp/openclaw/openclaw.log | grep yunzhijia\n\n# 最近 100 条\ntail -100 /tmp/openclaw/openclaw.log | grep yunzhijia\n```\n\n### 3. 云之家测试\n\n1. 在云之家群组中 @机器人\n2. 发送消息：`你好`\n3. 查看是否收到 AI 回复\n\n---\n\n## 📚 文档导航\n\n### 部署与配置\n- [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) - 详细部署指南\n- [docs/PRODUCTION_CONFIG.md](docs/PRODUCTION_CONFIG.md) - 生产环境配置\n\n### 技术文档\n- [docs/IMPLEMENTATION.md](docs/IMPLEMENTATION.md) - 实现说明\n- [docs/AI_INTEGRATION_GUIDE.md](docs/AI_INTEGRATION_GUIDE.md) - AI 集成指南\n- [docs/YUNZHIJIA_API.md](docs/YUNZHIJIA_API.md) - 云之家 API 文档\n\n### 开发文档\n- [docs/development/](docs/development/) - 开发过程文档\n\n---\n\n## 🏗️ 项目结构\n\n```\nyunzhijiachannel/\n├── src/                      # 源代码\n│   ├── channel.ts            # Channel 核心实现\n│   ├── webhook-server.ts     # Webhook 服务器\n│   ├── crypto.ts             # 签名验证\n│   ├── api.ts                # 消息发送 API\n│   └── ...\n├── docs/                     # 文档目录\n│   ├── DEPLOYMENT.md\n│   ├── PRODUCTION_CONFIG.md\n│   └── ...\n├── package.json              # NPM 配置\n├── openclaw.plugin.json      # OpenClaw 插件清单\n└── tsconfig.json             # TypeScript 配置\n```\n\n### 目录说明\n\n| 目录 | 说明 |\n|------|------|\n| `src/` | TypeScript 源代码 |\n| `docs/` | 项目文档 |\n| `dist/` | 编译输出（自动忽略） |\n| `node_modules/` | NPM 依赖（自动忽略） |\n\n---\n\n## 🛠️ 开发\n\n### 环境要求\n\n- Node.js >= 18\n- npm >= 9\n- OpenClaw >= 2026.3.0\n\n### 安装依赖\n\n```bash\ncd <YOUR_WORKSPACE>/projects/yunzhijiachannel\nnpm install\n```\n\n### 编译\n\n```bash\nnpm run build\n```\n\n### 开发模式\n\n```bash\nnpm run dev\n```\n\n### 测试\n\n```bash\nnpm test\n```\n\n---\n\n## 🔒 安全最佳实践\n\n1. **保护敏感信息**\n   - 不要将 `appSecret` 和 `webhookToken` 提交到 Git\n   - 使用环境变量或密钥管理工具\n   - 定期轮换密钥\n\n2. **访问控制**\n   - 使用 `allowFrom` 白名单限制用户\n   - 配置 `dmPolicy: \"allowlist\"`\n   - 群组启用 `requireMention: true`\n\n3. **网络安全**\n   - 使用 HTTPS 部署 Webhook\n   - 配置防火墙限制访问来源\n   - 定期审计日志\n\n---\n\n## 🐛 故障排查\n\n### 收不到消息\n\n1. 检查云之家 Webhook 地址是否正确\n2. 检查外网映射是否正常\n3. 检查防火墙设置\n4. 查看 Gateway 日志\n\n### 签名验证失败\n\n```bash\n# 检查 appSecret 是否正确\ntail /tmp/openclaw/openclaw.log | grep \"Invalid signature\"\n```\n\n### 无法发送回复\n\n```bash\n# 检查 webhookToken 是否正确\ntail /tmp/openclaw/openclaw.log | grep \"发送失败\"\n```\n\n---\n\n## 📄 许可证\n\nMIT License\n\n---\n\n## 🤝 贡献\n\n欢迎提交 Issue 和 Pull Request！\n\n---\n\n**版本**: v2.0.0  \n**最后更新**: 2026-03-07  \n**维护者**: Zed\n","readmeFilename":"README.md"}