Skip to content

DotCraft 企业微信渠道适配器

@dotcraft/channel-wecom 通过 WebSocket 外部渠道协议将企业微信接入 DotCraft。适配器连接 DotCraft AppServer,并在本地启动企业微信机器人 HTTP(S) 回调服务。

个人微信 @dotcraft/channel-weixin 与企业微信 @dotcraft/channel-wecom 是两个独立渠道。

功能概览

  • 通过 WebSocket 连接 DotCraft AppServer
  • 启动企业微信 HTTP(S) 回调服务
  • 支持 XML 消息推送 API 和 JSON 智能机器人 API 回调格式
  • 支持文本、图片、语音转文本、文件、附件、图文混排和事件消息
  • 图片和图文混排图片会下载为临时本地图片并作为多模态输入提交
  • 会话按 userId + chatId 隔离
  • 支持企业微信会话内审批
  • 提供语音和文件 Runtime 工具

前置条件

需求说明
企业微信机器人自建应用或智能机器人,需配置回调 URL、Token、EncodingAESKey
DotCraft AppServer需要启用 WebSocket 模式
WeCom 渠道包发布包中位于 resources/modules/channel-wecom,开发环境中位于 sdk/typescript/packages/channel-wecom
公网回调地址企业微信必须能访问适配器回调 URL;生产环境建议通过反向代理提供 HTTPS

1)工作区配置(.craft/config.json

在工作区 .craft/config.json 中启用 AppServer WebSocket,并注册 WeCom 外部渠道:

json
{
  "AppServer": {
    "Mode": "WebSocket",
    "WebSocket": {
      "Host": "127.0.0.1",
      "Port": 9100,
      "Token": ""
    }
  },
  "ExternalChannels": {
    "wecom": {
      "enabled": true,
      "transport": "websocket"
    }
  }
}

2)适配器配置(.craft/wecom.json

在目标工作区创建 .craft/wecom.json

json
{
  "dotcraft": {
    "wsUrl": "ws://127.0.0.1:9100/ws",
    "token": ""
  },
  "wecom": {
    "host": "0.0.0.0",
    "port": 9000,
    "scheme": "http",
    "adminUsers": ["zhangsan"],
    "whitelistedUsers": [],
    "whitelistedChats": [],
    "approvalTimeoutMs": 60000,
    "robots": [
      {
        "path": "/dotcraft",
        "token": "your_token_here",
        "aesKey": "your_43_char_aeskey"
      }
    ]
  }
}

字段说明:

配置项说明默认值
dotcraft.wsUrlDotCraft AppServer WebSocket 地址ws://127.0.0.1:9100/ws
dotcraft.tokenAppServer WebSocket Token
wecom.host回调服务监听地址0.0.0.0
wecom.port回调服务监听端口9000
wecom.scheme本地回调服务协议,httphttpshttp
wecom.tls.certPath / keyPathhttps 模式证书和私钥路径
wecom.adminUsers管理员企业微信 UserId 列表[]
wecom.whitelistedUsers白名单企业微信 UserId 列表[]
wecom.whitelistedChats白名单 ChatId 列表[]
wecom.approvalTimeoutMs操作审批超时,毫秒60000
wecom.robots机器人回调凭据列表[]

单个机器人配置:

配置项必填说明
path回调路径,如 /dotcraft
token企业微信后台配置的 Token
aesKeyEncodingAESKey,通常 43 位,不含等号

3)企业微信后台配置

在企业微信管理后台配置接收消息:

  • URL:http://your-server:9000/dotcraft
  • Token:与 .craft/wecom.jsonrobots[].token 一致
  • EncodingAESKey:与 .craft/wecom.jsonrobots[].aesKey 一致

如果通过 Nginx/Caddy 等反向代理暴露 HTTPS,适配器仍可监听本地 HTTP。

4)启动

Desktop 会从打包资源中识别 wecom-standard 外部渠道,可在渠道管理界面启动。

开发环境可以直接运行:

bash
cd sdk/typescript
npm run build --workspace @dotcraft/channel-wecom
npx dotcraft-channel-wecom --workspace F:\dotcraft

也可以在包目录下运行:

bash
cd sdk/typescript/packages/channel-wecom
npm run build
npm start -- --workspace F:\dotcraft

使用说明

  • 文件和附件会回复诊断信息,不直接提交给 Agent。
  • 会话按 userId + chatId 隔离,channelContextchat:<ChatId>
  • 支持 /new/help、Heartbeat、Cron 等通用命令和投递链路。
  • 审批关键词包括 同意同意全部拒绝yesyes allno

Runtime 工具

工具作用备注
WeComSendVoice(filePath)向当前企业微信聊天发送语音仅支持 AMR,本地绝对路径,先上传临时素材
WeComSendFile(filePath)向当前企业微信聊天发送文件本地绝对路径,先上传临时素材

这些工具由适配器通过 external channel capabilities 暴露。工具名保持 PascalCase。

Cron 和 Heartbeat

channelto投递目标前置条件
"wecom""chat:<ChatId>""<ChatId>"企业微信会话该 ChatId 已有消息进入,适配器缓存了 webhook

建议在企业微信会话中创建 Cron 任务,让任务自动关联当前 ChatId。若目标 chatId 尚未建立 webhook 缓存,投递会失败并返回 No WeCom webhook is available for target ...

Apache License 2.0