通过Twilio Business Account发送WhatsApp消息,匹配已审核模板仍报错63016
63016错误的核心根因
你碰到的报错根本不是模板文本对不对的问题,是调用接口的方式从根上就错了:
- 你现在的代码是通过
body参数直接传拼好的全文发送,这种调用方式在Twilio的逻辑里,只会被识别为24小时会话窗口内的自由消息 - 当用户没主动给你发消息、24小时会话窗口已经关闭时,Twilio根本不会把你传入的body文本和后台已审批的模板库做逐字匹配——哪怕你一个标点一个空格都和审核版一模一样,系统也会默认你发的是没经过模板审核的普通消息,直接抛63016。
- 你观察到的“用户先发一条消息、24小时内跑代码就能正常发”的现象刚好能印证这个逻辑:会话窗口开启后平台就放开了模板校验,普通body的自由消息不受限制,自然就能发出去。
现存代码的核心问题
- 没走模板发送的专用参数,直接把拼好的模板全文当普通消息的body传,从调用层就没触发模板匹配的校验流程,系统压根不知道你要发的是哪个已审批模板
- 日志里显示的未转义硬换行、特殊引号这类字符,哪怕你拼的文本和模板完全一致,因为没走专用模板通道,系统也不会认定这是模板消息
- 就算退一万步说,你手动拼文本的方式只要差一个标点、换行的转义格式不对,也会触发匹配失败,但这是次要问题,核心问题是调用方式不对。
修复方案
替换为正确的模板发送调用逻辑
会话窗口外发送已审批模板时,别手动拼模板全文塞body里,直接引用控制台里已审批通过的模板唯一标识,由系统自动加载审核过的模板文本、填充你传的动态变量就行:
import json def send_template_message(phone, approved_template_sid, template_params): try: message = twilio_client.messages.create( from_=f'whatsapp:{MY_SENDER_NUMBER}', to=f'whatsapp:{phone}', # 关键参数:传入已审批模板的SID,触发正式的模板匹配流程 content_sid=approved_template_sid, # 传入模板的动态变量,要和模板里的占位符一一对应 content_variables=json.dumps(template_params) ) except TwilioRestException as e: return False, e.msg return True, ''
这种调用方式下,Twilio直接从后台拉取已经过审的模板内容,不会因为你手动拼文本时的格式、标点偏差触发校验失败。
细节校验注意点
- 传入的模板SID要和当前发件号码、当前账号下的已审批模板绑定对应,不能跨账号、跨发件号调用其他模板的SID
- 模板内的换行格式要和审核版本保持一致:如果审核时模板的换行是用
\n转义实现的,传动态变量内容时别直接插未转义的硬换行,避免字符不一致触发匹配失败 - 特殊标点要和审核版本的编码完全匹配:比如你提到的单引号、逗号、感叹号,要确认全/半角和提交审核时的内容一致,别出现字符替换偏差
内容的提问来源于stack exchange,提问作者Hanan
相关产品推荐
相关产品推荐

