Skip to content

10 — 模板消息代发(HMAC)

第三方委托平台使用已配置模板发送短信 / 微信公众号 / 邮件。
与事项/公告管道并列、独立不写站内收件箱。

设计方案:doc/45-开放模板消息代发.md
代码锚点:OpenNotifyControllerOpenNotifyHmacFilterOpenNotifySendService

基路径/api/open/notify
鉴权:与 02-事项推送-HMAC.md 完全一致


1. 鉴权头

Header必填说明
X-Client-IdSSO client_id
X-TimestampUnix ,±300
X-SignatureHMAC-SHA256 Hex
X-Idempotency-Key一期仅透传,幂等以 Body externalId 为准

签名串:

text
{clientId}\n{timestamp}\n{rawBody}

GET /records 无 Body 时 rawBody 为空串。
system_code 只认 Client 绑定


2. 接口

2.1 提交代发

POST /api/open/notify/send

字段必填说明
externalId第三方业务主键;UK=(system_code, externalId),同键返回原记录
channelTypeEMAIL / SMS / WECHAT
templateCode邮件/短信为平台 templateCode;微信为 sceneCode
templateParamsMap<String,String> 模板变量
username平台用户名(必须存在且启用)
email仅 EMAIL;若传须与用户档案邮箱一致
phone仅 SMS;若传须与用户绑定手机一致
openid仅 WECHAT;若传须与用户 wechat_oa_openid 一致

成功 data

字段说明
requestCode入站请求编码
externalId回显
statusDISPATCHED / 幂等时为历史状态
outboundRecordCode外发台账编码(已派发时)
outboundStatus外发状态摘要(若可查)
errorMessage失败摘要

业务拒绝(用户不存在、账号不一致、未绑定、模板停用)→ code=400,并写入入站台账 status=REJECTED(不调用外发)。

2.2 查询记录

GET /api/open/notify/records?requestCode= ?externalId=(二选一)

返回入站记录 + 可选 outboundStatus。仅本 Client 绑定 system_code 下可见。


3. 收件人规则

  1. 必须传 username;禁止无平台账号的裸手机/邮箱/openid 代发。
  2. 未传渠道直达字段时,从用户档案解析(邮箱 / 手机明文 / wechat_oa_openid)。
  3. 传了直达字段则必须与档案一致,否则 400。
  4. 档案未绑定对应渠道 → 400「用户未绑定…」。

微信 openid 绑定:登录用户 PUT /api/notify/wechat/oa-openid(管理端会话,非本开放面)。


4. 模板

仅能使用平台已配置且启用的模板:

  • 邮件:/api/notify/mail/templates(管理端)
  • 短信:/api/notify/sms/templates
  • 微信:/api/notify/wechat/templatessceneCode

第三方不能通过本 API 注册模板。


5. 与其他管道边界

能力路径是否本能力
站内待办/api/open/matters
站内公告/api/open/notices
模板代发/api/open/notify/**
管理端通知配置/api/notify/**否(非第三方)