Python 实战:基于 RPA 协议的企业微信外部群机器人自动@回复功能实现

在企业微信的私域运营中,如何让外部群的机器人做到"有问必答"且能私有化部署?官方的 Webhook 机器人无法在外部群主动拉取和识别所有成员的消息。

本文将分享如何利用 RPA 第三方协议接口,通过监听回调消息,实现一个当外部群成员 @机器人 时,自动解析并精准回复的 Python 脚本。

  1. 接收回调消息结构(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 字典对照表。