提醒推送
定位:用户触发后的服务通知。预约确认、开场提醒、退款结果、危机跟进能发; 促销、群发、与用户本次服务无关的内容不能发(微信会限流甚至封接口)。
通道与降级
| 通道 | 前提 | 接口 | 限制 |
|---|---|---|---|
服务号模板消息 template | 用户已关注该服务号 | message/template/send |
只能用「我的模板」里的模板;内容必须与服务节点相关 |
公众号订阅通知 subscribe | 用户点过授权、攒了额度 | message/subscribe/bizsend |
一次授权=一条额度;长期订阅仅政务/医疗等少数类目开放 |
小程序订阅消息 mp_subscribe | 用户在小程序里授权 | message/subscribe/send |
同样一次一条;字段名是 thing1/date2 这种带类型的键 |
| 短信 / 站内 | — | 由业务站点自己负责 | 中台不做短信:各机构短信账号资质与签名不同,且腾讯云签名必须与营业执照主体一致 |
顺序由设置项 msg_channel_pref 决定(默认 template → subscribe)。全部不可用时消息记 skipped
并把每一档的跳过原因拼全 —— 这不是错误,是"触达不到",站点应当把它当作降级到短信/站内的信号。
发送 POST /api/v1/message/send
{ "event_key": "booking_remind",
"openid": "oXXXX…", // 或 "unionid": "uXXXX…"
"params": { "first": "您有一场咨询即将开始",
"keyword1": "10月18日 14:00", "keyword2": "朱老师",
"keyword3": "面询 · 60 分钟", "remark": "如需改期请提前 24 小时" },
"url": "https://vip.onzx.cn/me/appt/3391",
"miniprogram_appid": "", // 填了则以小程序卡片形式跳转
"page": "",
"send_now": "0" // 1 = 同步发送并立即返回结果
}
{ "ok": true, "data": { "job_id": 812, "channel": "template", "status": "queued", "mode": "queued" } }
参数名建议固定用
first / keyword1…keyword4 / remark 这套超集:
微信只渲染模板里存在的字段,所以机构在 mp 后台换了模板通常不用改代码。
名字对不上时在后台「消息模板 → 字段对应」里映射一次即可。
查结果 POST /api/v1/message/status
{ "job_ids": [812, 813] }
→ { "jobs": [ { "id":812, "status":"sent", "wechat_msgid":"…" },
{ "id":813, "status":"skipped", "skip_reason":"template:用户未关注该服务号" } ] }
订阅额度怎么攒
方式 1:中台引导页(省域名名额,推荐)
POST https://wx.onzx.cn/api/v1/message/grant-link
{ "event_key": "booking_remind", "return": "/me?sub=1" }
→ { "url": "wx.onzx.cn/subscribe/3f1c…", "template_ids": ["…"] }
# 站点在预约成功页 / 支付成功页把这个链接露出来,用户点进去再点「允许」
引导页跑在中台域名上,「JS 接口安全域名」因此只占用中台这 1 条名额。 页面文案已明确写"会收到什么、不会收到广告",符合微信对诱导订阅的限制。
方式 2:站点自己弹窗后回报额度
POST https://wx.onzx.cn/api/v1/message/grant
{ "openid": "oXXXX…", "template_id": "…", "times": 1 }
额度是"用户同意次数",不与具体内容绑定;后台会记录 剩余/已用,
微信用户 与 消息模板 页都能看到。
频控与合规红线
- 中台硬闸:同一收件人同一事件每日上限(
hub_msg_rate_day,默认 8),超过直接skipped。 - 微信口径:同类通知 7 天内不宜超过 3 条、两次推送间隔不宜小于 12 小时;无交互的冷启动推送属违规。
- 45009(日配额耗尽)自动退避到 1 小时后重试。不要手动狂点重发 —— 配额是全账号共享的,包括 edusoho 的用量。
- 模板消息行业类目里没有「心理咨询」,只能在现有类目(如教育)的模板库里挑。
api_set_industry每月只能改 1 次,且改类目会删除原类目已申请的模板 —— 存量系统在用模板消息时千万不要改类目。
错误码速查
| errcode | 含义与处理 |
|---|---|
| 43004 / 40003 | openid 不合法或不是本账号粉丝 → 引导关注,或降级到短信/站内 |
| 43101 | 用户未订阅或额度用完 → 用引导页攒额度 |
| 45009 | 账号日配额耗尽 → 等退避,别硬打 |
| 40036 / 40018 | 模板 ID / 详情不合法 → 后台从「我的模板」重新生成映射 |
| 40164 | 中台出口 IP 不在白名单 → 开发者平台加 IP |
本页内容随代码一起版本化(V0.1.0)。发现文档与实际行为不一致,请当缺陷报告。