
消息推送看着就是调一个发送接口但推给谁、推什么、什么时候推这三件事没想清楚上线后问题一堆推错人、内容超长被截断、集中推送被限流。这篇按这三个问题把推送功能的实现捋一遍。接口层用的是Eyun 平台开放的企微 API推送走 message 模块。推给谁目标解析推送目标有两类内部员工和外部客户。员工用 uin 定位客户用 uin 或手机号查。目标解析通常有三种方式直接给 uin、按标签筛选、按部门批量。标签筛选用列表接口先拉出成员再逐个推。解析放在推送前统一做一次别在发送循环里重复查。推什么内容构造纯文本用 sendText带标题描述和链接的用 sendRichText。内容构造有两个注意点一是长度上限超了要截断或分条二是卡片字段title、description、url 各有自己的长度限制。如果推的是纯文本把关键信息放在前 30 个字员工在消息列表里能一眼看到重点。什么时候推即时与定时即时推送事件发生就推比如审批通过通知申请人。定时推送日报周报这类用定时任务批量推。定时任务要错峰别整点集中发容易被限流。事件触发的推送还要注意并发同一秒多个事件推给同一个人消息会刷屏。加一层合并短时间窗口内同一人的多条通知合成一条再发。失败补救发送失败分两类可重试的限流、超时进重试队列不可重试的参数错、会话错记流水转人工。每次推送写一条流水记目标、内容摘要、结果方便追溯。结尾消息推送的坑基本都集中在目标和时机上——推给谁要解析准什么时候推要错峰失败了要有补救。这三点做到位推送功能就能稳。