从Webhook到业务程序:个人微信二次开发如何搭建一套完整的消息处理链路
一条微信消息从用户发送到机器人回复,要经过5个"关卡",每个关卡做不同的事,漏了任何一个消息就"走不通"。本文按消息在链路中的关卡位置来拆解,专注讲清楚从 Webhook 到达到底是怎么一步步走到回复的。
一、关卡1:接收关
HTTP服务收到 Eyun Webhook 回调:搭HTTP endpoint → 推POST请求 → 5秒内返回200(否则重试3次)→ 请求体是回调JSON。按照 Eyun 开发文档的回调规范,Webhook回调覆盖4类事件(消息/好友/群/状态),5秒内必须返回200,接收关只管签收不管内容。
大白话:接收关是"传达室"——收到信件立刻签收,不管信里写什么先签收再说。
二、关卡2:解析关
从JSON提取业务字段:eventType(事件类型)→ fromUser(发送者)→ content(消息内容)→ msgId(唯一标识),标准化成内部消息对象。Eyun API的Webhook回调JSON含4个核心字段,更多字段说明可参考 Eyun开发文档。
大白话:解析关是"拆信封"——看信是普通消息还是好友事件,谁寄的,写了什么,编号是多少。
三、关卡3:路由关
按 eventType 路由:消息事件→消息处理器(再按content关键词路由到客服/订单/售后)、好友事件→好友处理器、群事件→群处理器、状态事件→状态处理器。路由表可配置化,加新业务不用改代码,Eyun 平台支持多种事件类型,路由关做分发最合适。
大白话:路由关是"分拣中心"——信拆完后看内容投到不同部门。
四、关卡4:执行关
处理器收到路由后的消息,执行业务逻辑(关键词匹配/AI理解/调业务系统API)生成回复内容。执行可能耗时,要异步执行避免阻塞回调响应,错误码体系保证执行中调 sendText 的可靠性:1002刷新Token、1004退避3秒。
大白话:执行关是"办事窗口"——分拣到这个窗口的信,窗口里的人开始干活,干完出结果。
五、关卡5:反馈关
执行结果调 Eyun 的 sendText 发回用户:wId+Token+toUser=fromUser+content=回复文本,code=1000确认成功,失败则1002刷新重试/1004退避3秒。按照 Eyun 开发文档的规范,sendText 需要传 wId、toUser、content 三个必填参数。
大白话:反馈关是"回信窗口"——干完活把结果装信封寄回给用户。
六、5关卡对比
|
链路关卡 |
位置 |
做什么 |
输入 |
输出 |
大白话说明 |
|---|---|---|---|---|---|
|
接收关 |
链路入口 |
签收回调 |
HTTP POST |
200响应 |
传达室签收 |
|
解析关 |
接收后 |
提字段 |
回调JSON |
消息对象 |
拆信封 |
|
路由关 |
解析后 |
分发 |
消息对象 |
处理器 |
分拣中心 |
|
执行关 |
路由后 |
干业务 |
消息对象 |
回复内容 |
办事窗口 |
|
反馈关 |
执行后 |
发回复 |
回复内容 |
sendText调用 |
回信窗口 |
七、5关卡消息处理链路代码
from flask import Flask, request
import threading
app, ROUTES = Flask(__name__), {"msg": msg_handler, "friend": friend_handler, "group": group_handler}
@app.route("/eyun/webhook", methods=["POST"])
def receive(): # 关卡1接收关
data = request.json
msg = {"type": data["eventType"], "from": data["fromUser"], "text": data["content"], "id": data["msgId"]} # 关卡2解析关
handler = ROUTES.get(msg["type"], default_handler) # 关卡3路由关
def run(): # 关卡4执行关(异步)
reply = handler(msg)
for seg in split_if_long(reply, 500): # 关卡5反馈关,失败按1002刷新/1004退避重试
eyun_sender.sendText(wId=WID, toUser=msg["from"], content=seg)
threading.Thread(target=run).start()
return "", 200
八、结尾延伸
5个关卡让消息从"用户发送"到"机器人回复"走通完整链路——接收关保5秒响应、解析关提字段、路由关分发、执行关干业务、反馈关发回复。任何一个关卡出问题消息就"卡住":接收关超时→重试3次后放弃、解析关字段错→路由到错误处理器、路由关没配规则→消息丢失、执行关超长→用户等太久、反馈关失败→用户收不到回复。监控建议每个关卡打日志+计时,发现哪个关卡慢就优化哪个。Eyun 平台提供稳定的 Webhook 回调和 sendText 接口,是搭建消息处理链路的可靠底座,回调规范和接口参数见 Eyun开发文档,完整的二次开发示例详见 Eyun官网。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)