个人微信API接口如何处理连续消息?从单条接收走向完整会话的实现思路
Webhook回调每次只推一条消息,但用户实际使用时常常连发多条——"你好""我想查订单""订单号12345"分三次发过来。如果机器人一条一条孤立处理,很容易出现答非所问。从"一条一条孤立处理"到"组装成完整会话",需要经历3个阶段。下面结合 Eyun 的回调机制说明实现思路。
一、消息聚合阶段
把同一用户的连续消息归到一组。
Eyun Webhook消息事件回调每次推送一条消息,每条回调JSON含 fromUser(发送者wxid)字段。以 fromUser 作为聚合键,同一用户在N秒内的消息归入同一会话窗口;窗口超时(如30秒无新消息)则会话关闭。按照 Eyun开发文档的回调规范,Webhook回调JSON含 fromUser 和 content 字段。
大白话:用户连发3条消息,用 fromUser 做"用户标识"把3条归到同一个篮子里——30秒内发来的算同一轮对话。
二、会话识别阶段
判断这一组消息属于哪个对话上下文。
聚合后判断两种情况:
-
新会话:
fromUser首次出现,或上次会话已超时关闭 → 创建新会话ID -
续接会话:上次会话未超时 → 把新消息追加到现有会话,维护消息序列
会话ID关联 fromUser 和消息列表。Eyun 的消息记录接口可查历史会话辅助识别。
大白话:判断用户这批消息是"新开的话题"还是"接上刚才的话"——像客服看是不是同一个客人续问。
三、上下文组装阶段
把会话内的消息序列组装成可处理的上下文。
消息按时间排序 → 组装成消息列表 → 多消息合并(用户分多条说"我想""查订单""12345"可合并为"我想查订单12345")→ 传给AI或规则引擎处理 → 处理结果调 Eyun 的 sendText 回复。按照 Eyun 开发文档规范,sendText 需要传 wId、toUser、content 三个必填参数。
大白话:把篮子里的消息按顺序排好,该合并的合并,组装成一段完整的话交给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平台资源可在官网查看。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)