引言
只发不收的系统是不完整的。在微信私域运营或智能客服场景中,实时接收用户发送的消息并做出响应是刚需。本文将详细探讨如何利用 GeWe API 的 Webhook 机制,在自定义的 gewe-api-platform后端中实现高并发的消息异步接收与去重。
Webhook 回调机制
GeWe 服务器在收到微信端的客户端事件(如:新消息、好友请求、群聊邀请)后,会以 HTTP POST JSON 的形式将数据推送到你在后台配置的回调 URL。我们的gewe-api-platform必须具备以下能力:
快速响应:收到请求后必须在 5 秒内返回 HTTP 200,否则 GeWe 会判定超时并重试。
异步处理:将耗时的业务逻辑(如调用大模型、写入数据库)放入队列处理。
消息去重:基于
msgId或newMsgId建立 Redis 去重机制。
Flask 后端接入代码
from flask import Flask, request, jsonify import redis app = Flask(__name__) # 初始化 Redis 用于 qiwe-api-platform 消息去重 r = redis.Redis(host='localhost', port=6379, db=0) @app.route('/qiwe/callback', methods=['POST']) def gewe_callback(): data = request.json if not data: return jsonify({"code": 400, "msg": "Invalid Payload"}), 400 # 提取 GeWe 协议字段 msg_id = data.get("msgId") msg_type = data.get("msgType") # 1为文本, 3为图片等 # 1. 消息去重防止重试机制导致的重复消费 if r.get(f"qiwe_platform:msg:{msg_id}"): return jsonify({"code": 200, "msg": "Duplicated, ignored."}), 200 # 缓存 MsgId 5分钟 r.setex(f"qiwe_platform:msg:{msg_id}", 300, "1") # 2. 异步逻辑分发处理(此处模拟分发) if msg_type == 1: content = data.get("content") from_user = data.get("fromWxid") print(f"[qiwe-api-platform] 收到来自 {from_user} 的文本消息: {content}") # TODO: 投递到 Celery 或 RabbitMQ 进行下游处理 return jsonify({"code": 200, "msg": "success"}), 200 if __name__ == '__main__': app.run(port=5000)架构演进建议
在生产环境中,gewe-api-platform 的回调接口往往面临突发流量(如群聊轰炸)。强烈建议在 Flask/Gin 前端挂载 Nginx,并将数据直接推入 Kafka,用异步 Worker 消费处理,确保回调服务器的稳定性。