微信公众号模板消息 notes 字段不显示问题排查与解决
问题描述
在使用微信公众号测试号发送模板消息时,遇到一个奇怪的问题:模板中定义了6个字段,但 notes(备注)字段始终不显示,其他5个字段都能正常显示。
模板内容如下:
姓名:{{name.DATA}}电话:{{phone.DATA}}时间:{{time.DATA}}项目:{{services.DATA}}员工:{{staff.DATA}}备注:{{notes.DATA}}API 调用返回成功,但微信消息中只显示前5行,备注始终不出现。
排查过程
1. 排除字段数量限制
最初怀疑是微信测试号有字段数量限制(最多5个字段)。通过测试发现:
- 去掉”员工”字段,只发5个字段 → 备注仍然不显示
- 添加更多字段到9个 → 所有字段包括备注都显示了
结论:不是字段数量限制。
2. 排除字符长度限制
根据微信官方文档,模板消息每行内容不超过20字符,总内容不超过200字符。测试数据远未超过限制。
结论:不是字符长度问题。
3. 发现关键规律
通过反复测试发现一个规律:
| 模板字段数 | notes 位置 | notes 是否显示 |
|---|---|---|
| 6个字段 | 最后一个 | 不显示 |
| 9个字段 | 第6个(非最后) | 显示 |
| 7个字段 | 第6个(非最后) | 显示 |
当 notes 是模板的最后一个字段时,它不会显示。
4. 验证 notes 字段名问题
将 notes 替换为其他字段名测试:
| 字段名 | 是否显示 |
|---|---|
| notes | 不显示 |
| remark | 不显示 |
| info | 显示 |
| message | 显示 |
notes 和 remark 都不显示,而 info、message 可以正常显示。
原因分析
微信公众号模板消息 API 原本支持一个 remark 参数,用于在消息底部显示备注信息。但从 2023年3月30日 起,微信官方发布公告:
模板消息不再展示备注(remark)字段
微信对 notes、remark 等字段名进行了特殊处理,将其识别为”备注”类字段,因此不予显示。这是微信的保留字段名限制。
解决方案
方案一:更换字段名(推荐)
将 notes 改为其他名称,如 message、info、desc 等:
姓名:{{name.DATA}}电话:{{phone.DATA}}时间:{{time.DATA}}项目:{{services.DATA}}员工:{{staff.DATA}}留言:{{message.DATA}}方案二:在 notes 后添加占位字段
在 notes 后面添加一个占位字段,使其不再是最后一个字段:
姓名:{{name.DATA}}电话:{{phone.DATA}}时间:{{time.DATA}}项目:{{services.DATA}}员工:{{staff.DATA}}备注:{{notes.DATA}}其他:{{other.DATA}}发送时 other 字段可以不传值或传空值。
代码修改
后端发送通知数据时,将字段名从 notes 改为 message:
// 注意:不能使用 notes 作为字段名,微信会将其识别为保留的"备注"字段而不显示return { name, phone, time: timeRange, services, staff, message // 原来是 notes};总结
- 微信公众号模板消息有保留字段名限制,
notes、remark等会被识别为”备注”字段而不显示 - 这是 2023 年微信政策调整的结果,模板消息不再展示备注内容
- 解决方案是避免使用这些保留字段名,改用
message、info等普通名称 - 排查此类问题时,可以通过添加/删除字段、更换字段名等方式逐步定位