跳转到内容

企业微信智能机器人 API 模式

企业微信“智能机器人 API 模式”是面向单聊和群聊 @机器人 的正式双向通道,与“消息推送(原群机器人)”不是同一种能力。本文依据 2026 年更新的企业微信官方资料整理,核验日期为 2026-09-08;未在真实企业创建机器人。

能力消息推送(原群机器人)自建应用消息/回调智能机器人 API 模式
固定群单向通知应用会话或应用管理的群可主动推送,但不是最简通知入口
接收用户发给机器人的消息可接收发给应用的消息/事件是,单聊或群聊 @机器人
AI 对话与流式回复可自行实现,但协议较通用官方提供被动、主动及长连接流式机制
监听任意群聊否,只处理与机器人的交互

智能机器人不代表必须使用企业微信内置模型。API 模式可以把消息交给规则引擎、业务 API 或任意 LLM。

  1. 企业微信已开通智能机器人能力,操作者有相应创建和配置权限。
  2. 有一个内部测试群或测试成员,能把智能机器人加入/用于会话。
  3. 二选一准备接入环境:Webhook 需要公网 HTTPS URL、Token、EncodingAESKey;长连接需要 BotID、Secret 和常驻 SDK 进程。
  4. 服务端能持久化事件去重键、会话上下文和异步任务状态。

后台能力会按企业版本、灰度和管理员策略变化。如果管理后台没有“智能机器人”或“API 模式”,先由企业管理员确认功能可用性,不要改用消息推送 Webhook 冒充对话入口。

  1. 在企业微信管理后台创建智能机器人并开启 API 模式
  2. 选择“设置接收消息 URL”,填写公网 HTTPS URL、Token 与 EncodingAESKey。
  3. 按“回调和回复的加解密方案”实现 URL 验证、签名校验、消息解密和加密回复。
  4. 保存配置后,在测试单聊发送 /ping,或在测试群 @机器人 /ping

Webhook 每次回调建立 HTTP 连接,需要公网入口并处理加解密,但服务端无状态、易水平扩展。

  1. 在 API 模式中选择“长连接”,获取 BotID 和 Secret。
  2. Node.js 安装官方 @wecom/aibot-node-sdk;Python 安装 wecom-aibot-python-sdk
  3. 用 SDK 建立订阅,处理 aibot_msg_callback 与相关事件。
  4. 实现心跳、断线重连和多实例连接管理。官方建议心跳间隔为 30 秒。

长连接不要求固定公网 IP,也无需自行处理回调消息加解密;但必须维护连接和心跳。官方文档指出长连接与 Webhook 是 API 模式的两种接收方式,应按部署条件选一种主路径。

用户向机器人单聊,或在群聊中 @机器人 时触发消息回调。Webhook 解密后的消息与长连接的 aibot_msg_callback 都应标准化成:事件 ID、会话 ID、用户 ID、消息类型、文本、引用关系和回复句柄。

Webhook 回调可提供 response_url;官方规定每个 response_url 只能调用一次,有效期 1 小时。长连接则通过 SDK 的回复/发送动作返回消息,流式响应需要持续主动推送,直到 finish=true

使用官方回调 ID 做事件去重;若某类回调没有单独事件 ID,则组合消息 ID、会话 ID 和事件类型。会话键推荐 wecom:{corpId}:{chatId},单聊再按用户隔离。

下面的 URL 来自已解密的当前回调,只能使用一次。不要将它写入长期日志或会话历史。

Terminal window
curl -X POST 'RESPONSE_URL' \
-H 'Content-Type: application/json' \
-d '{"msgtype":"markdown","markdown":{"content":"pong"}}'

最小业务流是:收到 /ping,验证用户与会话,立即被动回复 pong,或把任务入队后使用回调里的 response_url 主动回复。确定性 /status、工单查询、审批命令同样适用,不需要 LLM。

Webhook 被动回复必须遵循官方加密格式和时限;耗时业务不要阻塞回调。长连接模式通过 SDK 回复普通消息,不能直接照搬 HTTP XML/加密响应代码。

传统自建应用也可以配置“接收消息”回调并回复发给应用的消息,但它不等于监听任意群,也不具备智能机器人专用的流式回复体验。新建 AI 对话优先评估智能机器人 API 模式。

const conversationKey = `wecom:${corpId}:${normalized.chatId}`;
const answer = await generateReply({
messages: await history.withUserMessage(conversationKey, normalized.text),
signal: AbortSignal.timeout(20_000),
});
await normalized.reply(answer);

Webhook 模式下,先快速完成平台确认,再在 1 小时且单次调用约束内使用 response_url。长连接模式可按官方协议逐步更新流式内容并最终设置 finish=true;连接中断或模型失败时必须结束占位状态或发送失败提示。

  • Webhook 先验签再解密,使用官方加解密库并校验企业/机器人接收方标识。
  • BotID、Secret、Token、EncodingAESKey 和 response_url 全部按敏感凭据处理。
  • 长连接使用官方 SDK,落实 30 秒心跳、断线重连和连接数量限制;多实例不要无控制抢占。
  • 做事件去重和会话串行,确保一次性的 response_url 不会被两个 Worker 同时消费。
  • 群聊仅响应 @机器人,对模型工具调用按企业、成员和业务资源重新鉴权,防范提示词注入。
  • Markdown 最长字节数、媒体大小和发送频率遵循官方当前限制;超限前在本地截断或分段。

后台只有“消息推送”,没有智能机器人 API 模式:两者不是同一功能。让企业管理员确认版本、灰度和权限,不要用群通知 Webhook 接收消息。

response_url 第二次调用失败:官方限制每个 URL 只能调用一次,有效期 1 小时。并发任务应先原子占用回复句柄。

长连接收不到群消息:确认机器人已用于该会话,并要求用户在群内 @机器人;它不会监听所有群消息。

Webhook URL 校验通过但消息解密失败:检查 Token、EncodingAESKey、签名参数、原始请求体和接收方 ID 是否属于同一个机器人配置。