一条微信消息从用户发送到机器人回复,要经过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 需要传 wIdtoUsercontent 三个必填参数。

大白话:反馈关是"回信窗口"——干完活把结果装信封寄回给用户。

六、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官网。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐