PRD Demo:服务号模板消息(OA)实现路径

用于写 PRD:讲清楚「是否需要订阅」「在哪里触发」「用户端与后台如何配合」。以本仓库的 config_demo(1).html 口径(字段名带 .DATA)为准。
可交互 Demo(纯前端,无后端调用)

1) 是否需要“订阅”?(结论 + PRD 可直接引用)

服务号模板消息
“如果要订阅”替代方案
结论
服务号模板消息(OA)不需要用户在 App/小程序里“订阅”。
可发送的关键前置条件是:用户已关注该服务号,且你使用的是该服务号下的 openid 进行发送;否则会报 40003 invalid openid(常见原因:未关注或 openid 不属于该公众号)。

你在 PRD 里写「用户侧需要做什么」

  • 用户只要关注服务号即可成为可推送对象(无需额外订阅弹窗)。
  • 需要解决身份绑定:业务用户 ↔ 公众号 openid
  • 用户点击消息卡片后跳转:可配 H5 url 或小程序 miniprogram

你在 PRD 里写「平台/技术侧需要做什么」

  • 后台同步模板列表:拉取已选用模板(用于配置中心选择)。
  • 配置映射:内部变量 → 外部占位符(形如 keyword1.DATA)。
  • 服务端发送:touser/openid + template_id + data

3) 建议你在 PRD 里写的“实现路径”(一页搞定)

可复制到 PRD 的结构

A. 管理后台(配置中心)

  • 同步模板:拉取服务号“已选用模板列表”,供管理员搜索/选择。
  • 内部模板:internal_template_id + 名称 + 渠道=OA。
  • 映射配置:内部变量 → 外部占位符(如 amount → keyword1.DATA)。
  • 跳转配置:H5 url 或小程序 miniprogram(appid/pagepath)

B. 用户侧(“关注 + 绑定”)

  • App / 小程序提供入口:“绑定微信接收通知”。
  • 绑定动作必须在微信环境内完成:打开微信内 H5(OAuth 获取 openid)或在公众号交互事件里拿 openid。
  • 用户关注服务号后即具备接收资格;无需订阅弹窗。

C. 业务调用(统一发送接口)

  • 业务系统只传:要发给谁(业务用户ID/openid)、发哪个内部模板、业务数据 KV。
  • 消息中台负责:查配置、做映射、组装 data、调用微信发送。
  • 建议幂等:client_msg_id 防重入;建议记录 msgid 便于追踪。

D. 失败与排障(PRD 可写验收点)

  • 未关注/不属于该公众号:会失败(典型 invalid openid)。
  • 内容违规/模板被限:需要可观测(错误码 + 记录)。
  • 可选:提供“查询被拦截消息”排障入口(运营/管理员用)。