外部群机器人是企微 API 里一个容易被误解的概念。很多人以为"机器人"是一个独立账号,实际上它是通过 API 向外部群发消息的能力。这篇讲清楚外部群机器人能做什么、怎么发消息、以及交互怎么实现。
先搞清"外部群机器人"是什么
企微的外部群(客户群)里,机器人不是一个人,而是一种能力。你通过 API 向群里发消息,群成员看到的是"企业微信助手"或你自定义的名称在发言。
关键约束:
只能向已有群发消息,不能主动建群(建群走
room/createGroup)消息类型支持文本、富文本、图片、文件
群成员发的消息,通过 Webhook 回调接收
向外部群发消息
向外部群发消息和向个人发消息,接口是同一个message/sendText,区别只在conversationId指向群会话:
def send_to_group(group_conv_id, text): resp = requests.post( f"{BASE}/wx-api/api/message/sendText", headers=HEADERS, json={ "appid": APPID, "conversationId": group_conv_id, "content": text, } ).json() return resp["code"] == 0group_conv_id是群的会话 id,int64。怎么拿到?从群列表接口room/getGroupList里查,或者从group_member_add回调里取。
富文本消息
纯文本太单调,正式通知用富文本:
content = { "title": "订单发货通知", "items": [ {"type": "text", "content": "您的订单已发货"}, {"type": "text", "content": "物流单号:SF123456789", "bold": True}, ] } resp = requests.post( f"{BASE}/wx-api/api/message/sendRichText", headers=HEADERS, json={"appid": APPID, "conversationId": conv_id, "content": content} )富文本支持加粗、颜色、换行,适合发结构化通知。
群成员消息怎么收
群成员发的消息通过 Webhook 回调推给你。message事件的messageType字段区分:
messageType=0:单聊messageType=1:群聊
群聊消息里带roomId(int64),标识具体哪个群:
def handle_message(data): if data["messageType"] == 1: # 群聊 room_id = data["roomId"] sender = data["senderUin"] content = data["content"] # 群消息处理逻辑交互怎么实现
群成员发消息 → 你收到回调 → 自动回复,这就是最基础的交互。进阶玩法:
关键词触发:群里 @机器人 或发特定关键词,自动回复对应内容。
指令解析:把消息当命令解析,比如"查订单 SF123456",自动调订单系统返回结果。
定时推送:不依赖群成员发言,定时向群里发日报、周报、活动提醒。
几个注意点
点 | 说明 |
|---|---|
群会话 id 是 int64 | JSON 里传 number,别加引号 |
群里 @机器人 不会触发回调 | 只有普通消息才推,@ 是客户端行为 |
自己发的消息不回推 | 接口发的消息只推已读回执 |
群成员变动有回调 |
|
一个完整的群机器人流程
# 1. 监听群消息 def handle_group_message(data): room_id = data["roomId"] content = data["content"] if content.startswith("查订单"): order_no = content.replace("查订单", "").strip() result = query_order(order_no) send_to_group(room_id, f"订单 {order_no} 状态:{result}") # 2. 定时推送 def daily_report(): groups = get_active_groups() for g in groups: send_to_group(g["conversationId"], "今日订单量:128")这套流程里,接收靠回调,发送靠 API,交互逻辑全在自己代码里。接口用的是Eyun 平台的企业微信 API,群相关接口走room模块,凭证在官网开通实例时拿到。
外部群机器人的本质是"用 API 模拟一个群成员"。理解这一点,后面的功能扩展都是自然延伸。