Webhook回调每次只推一条消息,但用户实际使用时常常连发多条——"你好""我想查订单""订单号12345"分三次发过来。如果机器人一条一条孤立处理,很容易出现答非所问。从"一条一条孤立处理"到"组装成完整会话",需要经历3个阶段。下面结合 Eyun 的回调机制说明实现思路。

一、消息聚合阶段

把同一用户的连续消息归到一组。

Eyun Webhook消息事件回调每次推送一条消息,每条回调JSON含 fromUser(发送者wxid)字段。以 fromUser 作为聚合键,同一用户在N秒内的消息归入同一会话窗口;窗口超时(如30秒无新消息)则会话关闭。按照 Eyun开发文档的回调规范,Webhook回调JSON含 fromUsercontent 字段。

大白话:用户连发3条消息,用 fromUser 做"用户标识"把3条归到同一个篮子里——30秒内发来的算同一轮对话。

二、会话识别阶段

判断这一组消息属于哪个对话上下文。

聚合后判断两种情况:

  • 新会话fromUser 首次出现,或上次会话已超时关闭 → 创建新会话ID

  • 续接会话:上次会话未超时 → 把新消息追加到现有会话,维护消息序列

会话ID关联 fromUser 和消息列表。Eyun 的消息记录接口可查历史会话辅助识别。

大白话:判断用户这批消息是"新开的话题"还是"接上刚才的话"——像客服看是不是同一个客人续问。

三、上下文组装阶段

把会话内的消息序列组装成可处理的上下文。

消息按时间排序 → 组装成消息列表 → 多消息合并(用户分多条说"我想""查订单""12345"可合并为"我想查订单12345")→ 传给AI或规则引擎处理 → 处理结果调 Eyun 的 sendText 回复。按照 Eyun 开发文档规范,sendText 需要传 wIdtoUsercontent 三个必填参数。

大白话:把篮子里的消息按顺序排好,该合并的合并,组装成一段完整的话交给AI理解。

四、三阶段对比

构建阶段

做什么

聚合键

关键技术点

Eyun接口

大白话说明

消息聚合

归组同用户连续消息

fromUser

时间窗口超时

Webhook回调

把3条消息装一个篮子

会话识别

判断新会话或续接

会话ID

会话状态判断

消息记录接口

判断是新话题还是续问

上下文组装

排序合并成上下文

消息序列

多消息合并

sendText

排好顺序交给AI

五、代码框架

import time
from collections import defaultdict

# 会话存储: {fromUser: {sid, msgs, last_ts}}
sessions = defaultdict(dict)
TIMEOUT = 30  # 会话超时秒数

def on_webhook(msg):
    """Eyun Webhook回调入口"""
    fu = msg["fromUser"]
    now = time.time()
    # 阶段1: 消息聚合 - 判断窗口是否超时
    s = sessions.get(fu)
    if not s or now - s["last_ts"] > TIMEOUT:
        # 阶段2: 会话识别 - 新会话
        sessions[fu] = {"sid": f"S{int(now)}", "msgs": [], "last_ts": now}
    sessions[fu]["msgs"].append(msg["content"])
    sessions[fu]["last_ts"] = now
    return sessions[fu]

def reply(fu, w_id):
    """阶段3: 上下文组装后回复"""
    s = sessions[fu]
    context = " ".join(s["msgs"])  # 多消息合并
    answer = call_ai(context)
    send_text(w_id=w_id, to_user=fu, content=answer)  # 调 Eyun sendText
    sessions.pop(fu, None)  # 会话关闭

六、结尾

3个阶段让消息从"一条一条孤立处理"变成"组装成完整会话"——聚合阶段按 fromUser 归组、识别阶段判断新会话还是续接、组装阶段排序合并成上下文。没有这3步,用户连发3条消息机器人只能逐条回3次;有了这3步,机器人能把3条消息当一次完整对话处理。

会话超时时间是关键参数:太短(10秒)用户还没打完字就断、太长(5分钟)不同话题混在一起。建议根据业务场景设30-120秒。更多 Eyun平台资源可在官网查看。

Logo

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

更多推荐