在企业微信的私域运营中,如何让外部群的机器人做到"有问必答"且能私有化部署?官方的 Webhook 机器人无法在外部群主动拉取和识别所有成员的消息。
本文将分享如何利用 RPA 第三方协议接口,通过监听回调消息,实现一个当外部群成员 @机器人 时,自动解析并精准回复的 Python 脚本。
- 接收回调消息结构(JSON)
当外部群有人发送消息时,第三方底层会向你的服务器推送如下格式的数据:
{
"event": "EventGroupMsg",
"data": {
"fromWxid": "23849204823@bytecode",
"finalFromWxid": "wxid_chatuser123",
"content": "@Bot 今天天气怎么样?",
"msgId": 987654321
}
}
2. 自动化回复核心代码
我们使用 Flask 来接收回调,并调用 API 进行主动文本下发:
python
from flask import Flask, request, jsonify
import requests
import json
app = Flask(__name__)
# 基础配置
API_URL = "http://api.geweapi.com/v2/api/message/sendText"
TOKEN = "your_device_token"
BOT_WXID = "wxid_myrobot123" # 机器人的微信ID
@app.route('/weixin/callback', methods=['POST'])
def wechat_callback():
callback_data = request.json
# 判断是否为群消息且包含@信息
if callback_data.get("event") == "EventGroupMsg":
msg_data = callback_data.get("data", {})
room_id = msg_data.get("fromWxid") # 群ID
content = msg_data.get("content", "")
# 触发关键词或被@判断
if f"@{BOT_WXID}" in content or "@Bot" in content:
# 移出@标签,提取纯文本指令
clean_query = content.replace(f"@{BOT_WXID}", "").strip()
# 执行回复逻辑
reply_text = f"收到您的消息!您触发了自动化指令,查询内容为:{clean_query}"
execute_reply(room_id, reply_text)
return jsonify({"status": "success"})
def execute_reply(room_id, text):
payload = {
"wId": TOKEN,
"toWxid": room_id,
"content": text
}
headers = {"Content-Type": "application/json"}
try:
res = requests.post(API_URL, data=json.dumps(payload), headers=headers)
print("主动调用外部群接口返回:", res.json())
except Exception as e:
print("请求异常:", e)
if __name__ == '__main__':
app.run(port=5000)
架构建议
在实际生产环境中,外部群的消息量通常极大,建议在接收到回调后,使用 Redis / RabbitMQ 做一层异步队列削峰,避免高并发时导致处理阻塞。有关更完整的群组事件回调类型(如入群通知、退群通知),可以直接去 GeweAPI开发文档 查阅完整的 Event 字典对照表。