客户服务产品的核心是把"用户咨询—坐席响应—业务处理—回访闭环"这条链路工程化。在个人微信渠道接入场景下,这条链路的每一环都需要对接 Eyun开发文档 提供的 RESTful 接口。本文按5个功能模块拆解接口映射关系,不展开业务话术设计,只关注接口调用模式与技术约束。
一、消息收发模块
这是客服系统的心脏。发送侧调用 Eyun 的sendText/sendImage/sendFile三类接口,分别对应文本、图片、文件富媒体消息,请求体为 JSON,通过wId(实例ID)指定发送方,Token 鉴权放在请求头。
接收侧依赖 Eyun 的 Webhook 回调。Eyun 定义了4类事件回调(消息/好友/群/状态),客服系统主要消费"消息"事件。回调体为 JSON,包含msgId/fromUser/content/eventType/wId等字段。两个关键约束:
幂等去重:用
msgId做主键去重,防止同一消息被重复处理。5秒响应:回调要求 5 秒内返回 HTTP 200,否则触发重试,最多3次。超时未返回会导致消息堆积。
二、会话管理模块
客服坐席处理问题时需要看到历史对话上下文。Eyun 的消息记录接口支持按fromUser筛选,按时间戳排序返回历史消息列表。分页参数控制单次拉取量,避免一次性拉取超大消息集导致响应变慢。
实际工程中,会话上下文的构建逻辑是:拉取最近 N 条 → 按时间正序拼接 → 截断到上下文窗口长度。这部分不涉及 Eyun 接口本身,属于开发者自建层。
三、快捷回复模块
预设话术库 + 关键词匹配,规则引擎驱动,不依赖 AI。流程是:Webhook 回调到达 → 解析content→ 匹配关键词规则 → 命中则调sendText发送预设回复。
技术要点在于规则匹配要在5秒回调窗口内完成,否则 Eyun 会重试。对于复杂规则(正则、多关键词组合),建议异步队列处理,回调线程立即返回 200,由工作线程消费消息后再调sendText。
四、客户画像模块
Eyun 联系人同步接口拉取好友列表,返回字段含昵称、备注。消息记录接口分析交互频次和偏好时间窗。
增量同步是工程重点:用游标(上次同步时间戳或版本号)标记同步位置,每次只拉取变更部分,避免全量拉取带来的接口压力。同步接口细节可参考 Eyun平台 的接口说明。
五、满意度回访模块
会话结束后,定时任务触发sendText推送评价链接给用户。用户点击评分后,回复消息经 Webhook 回调进入系统,记录评分并关闭工单。
这是一个定时任务 + 回调的闭环结构。定时侧用 Cron 或时间轮调度,回调侧和消息收发模块复用同一套 Webhook 消费逻辑。
六、5模块对比表
模块 | 核心功能 | Eyun接口 | 调用模式 | 技术约束 |
|---|---|---|---|---|
消息收发 | 富媒体消息双向流转 | sendText/sendImage/sendFile + Webhook | 主动发送 + 被动回调 | msgId幂等;5秒返回200 |
会话管理 | 历史对话拉取与上下文构建 | 消息记录接口 | 按需拉取(fromUser筛选) | 分页参数控制单次量 |
快捷回复 | 规则匹配预设话术 | sendText + Webhook | 回调触发发送 | 匹配须在5秒窗口内 |
客户画像 | 联系人同步与交互分析 | 联系人同步 + 消息记录 | 增量同步 | 游标管理避免全量拉取 |
满意度回访 | 评价推送与评分回收 | sendText + Webhook | 定时推送 + 回调闭环 | 定时调度精度 |
七、客服模块接口路由框架
下面是5模块的接口路由框架伪代码,展示 Webhook 回调如何分流到不同模块,以及主动调用如何统一封装 Eyun 接口。
# 客服模块接口路由框架 from fastapi import FastAPI, Request import httpx app = FastAPI() EYUN_BASE = "https://api.eyunz.com" TOKEN = "xxx" WID = "instance_001" seen = set() # msgId幂等去重 def eyun_call(path: str, payload: dict): r = httpx.post(f"{EYUN_BASE}{path}", json=payload, headers={"Token": TOKEN, "Content-Type": "application/json"}) data = r.json() if data.get("code") == 1002: # Token失效,刷新后重试 refresh_token() return eyun_call(path, payload) return data @app.post("/webhook/customer-service") async def webhook(req: Request): body = await req.json() if body["msgId"] in seen: # 感知层幂等 return {"code": 0} seen.add(body["msgId"]) event = body.get("eventType") if event == "message": route_to_modules(body) # 收发/快捷回复/画像/回访共用 elif event == "friend": route_to_contact_sync(body) return {"code": 0} # 5秒内返回200避免重试 def route_to_modules(body): user, content = body["fromUser"], body["content"] save_to_session(user, content) # 会话管理 reply = match_quick_reply(content) # 快捷回复 if reply: eyun_call("/sendText", {"wId": WID, "to": user, "content": reply}) def match_quick_reply(content: str): rules = load_reply_rules() return rules.get(content.strip()) # 关键词精确匹配示例八、小结
5个模块在接口调用上呈现两种模式:主动调用(sendText系列发送、消息记录拉取、联系人同步)与被动回调(Webhook 接收用户消息)。客服系统的工程量集中在后者——回调幂等、5秒超时、重试控制,这三点决定了系统的稳定性上限。接口细节以 Eyun开发文档 为准,本文仅做模块映射层面的梳理。