营销短信换成中文模板后网关返回 400 invalid content,同一账号发英文模板正常,积压 1.2 万条。乍看像缓存或者权限的锅,追下去往往不是。
curl -X POST https://sms.example.com/send -d '{"content":"Your code is 1234"}'
content.encode('ascii')
追下去是这么回事:网关文档写明模板只接受 GSM-7 字符集,中文需要走另一条通道。代码把中文直接塞进英文模板接口,没有做字符集判断。错误被包装成 400,队列一直在重试。
碰到「第三方接口仅英文」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
具体做法是,按内容字符集选择通道 纯 ASCII 走原接口;含中文的模板改用支持 UCS-2 的接口并单独计费;发送前做一次字符集检测 不匹配就拒绝入队;用中英文模板各发一条 对比响应码。
验收就看一点,中文模板走新通道返回 200,英文模板仍走原接口,积压队列清空。
