微信多客服会话控制的核心是实现消息自动转接与精准分配,PHP基于官方接口自主调度:定时轮询获取在线客服、绑定用户会话、超时转接并透传原始消息字段,确保状态一致与生命周期可控。

微信多客服会话控制的核心,是让用户消息在客服不在线时自动转接、在线时精准分配,并避免重复接入或会话丢失。PHP开发中不依赖第三方SaaS平台,而是基于微信官方客服接口(如kfaccount、message、customservice等)实现自主可控的会话调度逻辑。
客服账号注册与状态同步
微信要求每个客服必须提前在公众号后台添加并启用,PHP需定时调用getonlinekflist接口获取实时在线客服列表,避免将消息发给离线账号。建议每30秒轮询一次,并缓存结果(如Redis),减少API调用频率和响应延迟。
- 调用
https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist?access_token=ACCESS_TOKEN - 解析返回的
kf_online_list,提取kf_account、status(1=在线,2=忙碌,0=离线) - 本地维护一份“可用客服池”,剔除
status非1的账号,供后续分配使用
用户会话路由与负载均衡
用户首次发送消息时,需为其绑定一个客服;后续消息应延续同一会话,不能每次重新分配。关键在于利用微信消息中的FromUserName作为唯一标识,结合本地会话表做映射。
- 数据库建一张
wechat_kf_session表,字段含:openid、kf_account、last_active_time、status(1=进行中,0=已结束) - 收到新消息:先查表是否存在未结束会话;有则直接转发给对应客服;无则从“可用客服池”中按轮询/权重/空闲时长选一个,插入新记录
- 推荐轮询策略:维护一个计数器,每次分配后+1,对客服总数取模,简单且公平
会话超时与转接机制
客服可能中途掉线或长时间无响应,需主动干预。微信不会主动通知会话中断,PHP服务需自行检测并触发转接。
解析微信公众号文章,提取标题、作者、正文、图片等信息。用户发送链接(mp.weixin.qq.com)时触发,自动提取内容并可保存至飞书表格。
立即学习“PHP免费学习笔记(深入)”;
- 设置
last_active_time为最后一条消息时间,定时任务(如每5分钟)扫描超过10分钟无交互的会话 - 对超时会话,调用
closeconversation关闭当前会话(需msgid,故需在接收消息时存入) - 再调用
createkfsession重新分配客服,并向用户发送提示:“已为您转接至其他客服” - 注意:转接前检查目标客服是否仍在线,否则跳过,进入排队等待逻辑
消息透传与上下文保持
微信客服接口不自动维持上下文,所有消息(文本、图片、语音)都需原样转发,且必须携带MsgId、CreateTime等原始字段,否则客服端无法识别来源或顺序。
- 接收用户消息后,不修改
MsgId、FromUserName、ToUserName、CreateTime - 构造客服消息XML时,
ToUserName填客服账号(如test1@test),FromUserName填公众号原始ID,MsgType与原始一致 - 语音/视频消息需先调用
download接口拉取媒体文件,再上传至客服系统(使用media_id转发),不能直接转发URL
真正稳定的多客服体验,不在接口调用多华丽,而在状态一致性、会话生命周期管理和异常兜底逻辑是否扎实。把在线判断、会话绑定、超时转接这三环跑通,就覆盖了90%的实际场景。


















