资讯动态

企业微信API接口如何开发外部群机器人?双向消息通信的实现思路

发布时间:2026/9/30 14:36:03 来源:尧图企业网站定制
最近做的企微二开要在客户群里放个机器人——客户在群里说话机器人能收到机器人发消息客户也能看到双向通信是基础。和之前聊的群智能助手不同那篇重点是响应策略这篇重点是双向消息通信本身怎么打通——群消息怎么收、怎么发、机器人怎么识别、群成员怎么管。把调了哪些接口记下来。底层用的是Eyun 平台开放的企微 API统一 POSTJSON鉴权用 App Token 加 appidAuthorization: Bearer eyk_xxxx路径{BASE_URL}/wx-api/api/模块/动作响应封套{code, data, detail, message, time}code 为 0 成功。群消息接收Webhook 收群消息客户在群里发消息Webhook 回调进来消息体里有conversationId群聊是 roomId、fromUin发言者、content、msgTypefrom flask import Flask, request app Flask(__name__) app.route(/wx-api/webhook/, methods[POST]) def webhook(): event request.headers.get(X-Eyun-Event) if event ! message: return ok payload request.json[data] appid payload[appid] conv_id payload[conversationId] # 群聊是roomId from_uin payload[fromUin] content payload[content] msg_type payload[msgType] # 群消息处理 if is_group_conversation(conv_id, appid): handle_group_message(appid, conv_id, from_uin, content, msg_type) return okconversationId在群聊里是 roomIdnumber 类型不能传字符串单聊是客户 uin。要先判断是不是群消息——调群接口查 roomId 是否存在。回调机制和事件类型在Eyun 开发文档里有完整说明。机器人识别群里消息很多机器人不该每条都处理。只处理 机器人 的消息。 信息在消息内容里要解析出来import re def is_at_robot(content, robot_uin): # 企微群里格式机器人昵称 后面跟内容 # 回调里可能有atUserList字段 at_pattern re.compile(rf.*?\s) return bool(at_pattern.search(content))更准的方式是看回调里的atUserList字段里面是被 的用户 uin 列表机器人的 uin 在里面就是要处理。不解析 就处理所有群消息机器人刷屏客户烦。群消息发送conversationId 用 roomId机器人往群里发消息调 message/sendTextconversationId用 roomIdimport requests BASE https://api.eyun.com HEADERS {Authorization: Bearer eyk_xxxx, Content-Type: application/json} def send_group_text(appid, room_id, content): resp requests.post( f{BASE}/wx-api/api/message/sendText, headersHEADERS, json{ appid: appid, conversationId: room_id, # 群消息用roomId content: content } ) return resp.json()[code] 0conversationId必须是 number 类型传字符串会报 -3004 参数错误。这个坑踩过——回调里拿到的 roomId 有时是字符串要int(room_id)转一下。群成员管理拉人踢人机器人要能管群成员——拉新人进群、移除违规成员。这两类操作都走群模块接口但调用前需要先确认机器人有群管理权限否则接口会返回权限不足的错误。下面先看拉人和踢人的核心接口def add_group_member(appid, room_id, uins): 拉人进群uins 是客户 uin 列表一次最多拉 20 人 resp requests.post( f{BASE}/wx-api/api/group/addGroupMember, headersHEADERS, json{appid: appid, roomId: room_id, members: uins} ) return resp.json()[code] 0 def remove_group_member(appid, room_id, uin): 踢人出群一次只能移除一个成员 resp requests.post( f{BASE}/wx-api/api/group/removeGroupMember, headersHEADERS, json{appid: appid, roomId: room_id, member: uin} ) return resp.json()[code] 0 def get_group_members(appid, room_id): 查群成员列表返回成员 uin 列表 resp requests.post( f{BASE}/wx-api/api/group/getGroupMemberList, headersHEADERS, json{appid: appid, roomId: room_id} ) return resp.json()[data][members]addGroupMember拉人进群removeGroupMember踢人出群getGroupMemberList查群成员列表。机器人拉人前要先查成员列表避免重复拉——虽然已在群里的 uin 接口会自动跳过但查一下更稳也能提前过滤掉无效 uin。踢人时要注意一次只能移除一个成员批量踢人要循环调用而且踢人操作不可逆建议先做二次确认再执行。另外群管理接口在Eyun 企业微信 API 平台开通后可用未开通时调用会返回权限错误。实际开发中拉人和踢人往往不是单独调一个接口就完事而是要走一套完整的流程。以「拉新人进群」为例建议按下面几步来先查群成员列表调getGroupMemberList拿到当前群成员 uin 集合把要拉的人过滤一遍去掉已经在群里的 uin避免无效调用。校验 uin 合法性拉人前先确认这些 uin 是有效的客户 uin不是空值或格式错误的字符串否则接口会返回参数错误。分批调用 addGroupMember一次最多拉 20 人如果名单超过 20 人要按 20 人一组分批循环调用每批之间可以稍微加一点延时避免触发频率限制。检查返回结果每次调用后判断code是否为 0不为 0 时把失败的 uin 记录下来方便后续重试或人工处理。踢人的流程类似但更强调「谨慎」先查列表确认目标成员确实在群里再二次确认是否真的要移除最后循环调用removeGroupMember。因为踢人不可逆一旦执行对方需要重新扫码或被重新拉入才能回到群里所以建议在管理后台加一个确认弹窗或者要求操作者输入二次确认口令避免误操作。另外还有一个容易被忽略的点群管理接口的权限是跟着机器人账号走的。如果机器人不是群主或群管理员即使接口开通了调用addGroupMember或removeGroupMember也会返回权限不足的错误。所以在做群管理功能之前先确认机器人在目标群里具备管理权限否则功能做了也白做。双向通信的闭环群机器人双向通信的完整闭环客户在群里发消息 → Webhook回调 → 机器人收到 ↓ 识别是否机器人 ↓ 处理消息内容 ↓ sendText发群消息 → 客户看到每个环节都是接口调用。收消息靠 Webhook 回调发消息靠 sendText管群靠 group 模块。把接口串对了双向通信就通了。群消息的几个坑roomId 必须是 number字符串会报错群消息频率有限制1 分钟内发太多会被限流返回rate_limit机器人不在群里不能发群消息要先拉进群群解散了再发消息会报 -3020 会话错误机器人时回调里 atUserList 字段才有机器人 uin普通群消息没有写在最后外部群机器人双向通信这套东西本质是把企微的消息接口和群接口串起来——Webhook 收群消息、解析 机器人、sendText 发群消息、group 模块管成员。里。把接口串对、识别准、roomId 类型对群机器人双向通信就通了。开通。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑