当前位置: 首页 > news >正文

企业微信消息回调怎么对接?重复推送和已读别搞混

适合人群:正在做企微客服、SCRM、聚合会话的后端同学 说明:下文按「调用 + 回调」双通道思路整理,字段名以你实际对接文档为准。

前言
很多人联调时卡在同一类问题上:

回调能收到,但消息重复入库
已读、撤回被当成新消息
文本还行,图片/文件处理到一半就乱了
本文把 消息回调的分流和去重 说清楚,方便你一次搭稳。

  1. 先认信封,再看内容
    回调入口通常是一个公网 HTTP 接口。常见结构类似:
{"uuid":"实例标识","type":"事件大类","json":{"msgtype":"文本或其他","referid":0}}

建议处理顺序固定成三步:

校验 uuid,确认是哪个在线账号
按 type 做大类路由(登录 / 联系人 / 群 / 消息)
消息类再按 msgtype 细分,并做幂等

  1. type 大类:别用一个巨大 if
async functiondispatch(uuid,type,json){if(isLoginEvent(type))returnhandleLogin(uuid,json)if(isContactEvent(type))returnhandleContact(uuid,json)if(isRoomEvent(type))returnhandleRoom(uuid,json)if(isMessageEvent(type))returnhandleMessage(uuid,json)returnsaveUnknown(uuid,type,json)// 先落日志,别直接 500}

原则:

登录态、联系人、群、消息 分处理器
未知 type 先存原始报文,避免对方重试把你打挂
3. msgtype:按类型处理,不要一刀切入库
类型 建议
文本
直接进会话表 / 推坐席
图片/文件
先存元数据,异步下载
语音/视频
注意时长与转码任务
撤回/系统提醒
更新状态,不当新会话
文件类还要区分来源(外部文件 vs 企微内部/CDN),下载接口可能不同,别写死成一套。

  1. referid:已读不是新消息
    联调里常见约定(以文档为准):

referid = 0:多为原消息
referid ≠ 0:多为衍生事件(例如已读相关)
错误写法:

// 危险:每条回调都 insert
db.insertMessage(json)
更稳妥:

if(Number(json.referid||0)===0){awaitupsertOriginalMessage(json)}else{awaitapplyDerivedEvent(json)// 已读/状态更新}
  1. 幂等:用唯一键挡住重复推送
    至少选一个稳定键:

uuid + msgid
或 uuid + type + 关键去重字段
推荐两层存储:

原始事件表:可重复,保真,便于重放
业务消息表:唯一索引,保证逻辑上不重复
回调入口尽量快速返回成功,再异步处理,降低对方超时重推概率。

  1. 最小可运行骨架
    /callback
    ├─ 快速 ACK
    ├─ 写 events_raw
    ├─ 按 type 路由
    └─ 消息类:msgtype + referid + 幂等
    本地可用内网穿透验证公网可达;上线后重点盯:回调失败率、重复率、处理耗时。

  2. 和双通道怎么配合
    回调只解决「收事件」。完整业务还要:

主动调用:发消息、建群、客户相关动作
回调下发:消息与状态回流
两边都用同一个实例标识(常见为 uuid),日志里同时打调用与推送,排查会轻松很多。

模块摘要与场景说明见项目门户;完整接口与示例可在体验环境查阅:

体验环境:https://www.wecomkit.cn/

小结
消息回调想稳,抓住三件事:

type 分流
msgtype 分类处理
referid + 幂等
先把这三层搭对,再扩媒体类型和业务规则,会少走很多回头路。

http://www.jsqmd.com/news/1293350/

相关文章:

  • 深圳机器视觉培训:零基础入门到项目实战精讲
  • Drawpile 开源项目教程
  • AI直播软件怎么选?2026 AI直播工具硬核测评:萤瓴AI、讯飞智作、火山引擎、商汤如影选型指南
  • OpenClaw智能助手框架:微内核与插件化架构解析
  • Sunshine游戏串流:打破空间限制,让高性能游戏无处不在
  • MiniCPM-o 4.5全双工交互技术解析与端侧部署实战
  • 2026 年杭州工装拆除、微挖出租,商铺酒店改造施工避坑指南 - LYL仔仔
  • 艾默生质量流量计2700/1700系列安装调试全流程与故障排查指南
  • 论文写作软件核心需求与选型指南
  • 多张覆盖视场的平面棋盘图片; 、对每张图片用 OpenCV 的 findChessboardCorners 检测内角点并用 corn ...
  • 2026年软文自助发稿平台哪家强?6大平台AI辅助发稿功能,媒介星内容优化更省心 - 天下观知
  • 如何高效管理虚幻引擎资源:UnrealPakViewer深度解析与实战指南
  • 3步解锁网易云音乐:ncmdump免费解密工具完整指南
  • 红米Note 17系列上手体验:性价比之王宝座还稳吗?
  • Agent经典面试题:MCP 是什么?它和普通工具调用、插件系统有什么区别?
  • 2026郑州制冰厂哪家好 工业降温用冰精选指南 - 谁都没有我好看
  • 什么是向量数据库?从原理、选型到 RAG 实战
  • 终极指南:如何在Windows电脑上免费运行iOS应用
  • OSPF协议深度解析:从链路状态原理到企业网络实战配置
  • C++集群聊天客户端核心模块:登录、注册与退出业务的设计与实现
  • RTAB-MAP中TF问题处理与ROS坐标系调试指南
  • DeepSeek LeetCode 3785. 避免禁用值的最小交换次数 Java实现
  • 2026年降低运行成本的污水处理托管运营推荐:药剂成本优化服务商选择指南 - 全域品牌推荐
  • Greasy Fork终极指南:5分钟掌握网页定制魔法,解锁浏览器超能力
  • Python金融大数据分析:股票预测系统实战
  • OpenClaw开源智能代理框架:多模态AI开发实战指南
  • 抖音下载器:从零开始构建个人内容库的完整指南
  • 单片机计算机毕设之基于嵌入式单片机的液位温度测控系统设计 基于 STM32 的常温加热双模式饮水装置控制系统(012101)
  • 介绍 DS随心转批量导出国产 AI 多轮对话并免费生成 Markdown 底稿的流程,包含格式选择、能力边界和隐私复核。
  • 移动与工业、智能互联网时代,华为技术专利水平到底怎么样