整理时间:2026-10-13 目标:三平台「应用机器人对指定人推送」+「群机器人 Webhook 推送」 性质:实现参考文档,对接前以各平台官方文档最新版为准。
每个平台两条通道,建议都接:
| 通道 | 适合场景 | 特点 |
|---|---|---|
| 应用消息(对人) | 审批待办、预警定向到人 | 需要建应用、拿凭证、映射用户 ID |
| 群机器人 Webhook | 经营日报、群通知 | 最简单:一个 URL + POST 即可,无需建应用 |
统一抽象:NotificationChannel 接口(send_text/send_markdown/send_card),三平台各实现一个适配器;token 统一缓存+提前刷新;发送走 Celery 队列并限流。
corpid(企业 ID)、agentid、corpsecret(应用 Secret)。设置「可见范围」(要发给谁就把谁加进来)。GET https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={corpsecret}
返回 access_token,7200 秒有效,需缓存+提前刷新。POST https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={token}{"touser":"zhangsan","msgtype":"markdown","agentid":1000002,
"markdown":{"content":"## 审批待办\n> 销售订单 SAL-xxx 待您审批"}}
touser 为成员 userid(可用 @all 发可见范围全员)。支持 text/markdown/图文/模板卡片(按钮交互型可用于“通过/退回”快捷审批)。POST /cgi-bin/user/getuserid(传 mobile)。文档:developer.work.weixin.qq.com/document/path/90236
POST https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={key}{"msgtype":"markdown","markdown":{"content":"今日经营日报\n> 订单 12 单"}}
<@userid> @群成员(企微 5.0.6+)。文档:消息推送(原“群机器人”)配置说明 path/91770
im:message(发送消息)、contact:user.id:readonly 等;设置可用范围(给全员发就设为全体员工)。POST https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal
{"app_id":"...","app_secret":"..."} → tenant_access_token(2 小时有效,需定时刷新)。POST https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id
Header: Authorization: Bearer {tenant_access_token}{"receive_id":"ou_xxx","msg_type":"text","content":"{\"text\":\"销售订单 SAL-xxx 待审批\"}"}
注意:receive_id_type 可选 open_id / user_id / union_id / email / chat_id(chat_id 可发群);推荐 open_id;用户必须在机器人可用范围内。POST /open-apis/contact/v3/users/batch_get_id(需对应权限)。文档:open.feishu.cn → 服务端 API → 消息 → 发送消息(im/v1/message/create)
POST https://open.feishu.cn/open-apis/bot/v2/hook/{token}{"msg_type":"text","content":{"text":"今日经营日报..."}}
timestamp 和 sign)。建议用加签。AppKey / AppSecret / AgentId;开通「工作通知」权限。POST https://oapi.dingtalk.com/gettoken?appkey={key}&appsecret={secret}(或新版 https://api.dingtalk.com/v1.0/oauth2/accessToken)POST https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token={token}{"agent_id":123456,"userid_list":"user123,user456","to_all_user":false,
"msg":{"msgtype":"text","text":{"content":"销售订单 SAL-xxx 待审批"}}}
返回 task_id,可用「获取工作通知发送结果」接口查失败名单。POST /topapi/v2/user/getbymobile。文档:open.dingtalk.com/document/orgapp/asynchronous-sending-of-enterprise-session-messages
POST https://oapi.dingtalk.com/robot/send?access_token={token}{"msgtype":"markdown","markdown":{"title":"经营日报","text":"## 今日经营日报\n- 订单 12 单"}}
backend/app/modules/notifications/channels/ 下每平台一个适配器(wecom_app / wecom_webhook / feishu_app / feishu_webhook / dingtalk_app / dingtalk_webhook),统一 send() 接口。im_identity 映射表(内部 user_id ↔ 平台 + 平台 userid/open_id),手机号匹配作为兜底绑定手段。