做短信接口对接,最容易卡住的往往不是代码,是模板。模板里的固定文字要过审,模板变量要和程序传的参数一一对上,哪一边出错,用户收到的就是一条看不懂的短信。
我们帮客户排查过很多“短信发不出去”或者“内容乱了”的问题,追到最后,大半跟变量有关。下面按设置顺序讲一遍。
短信模板变量是什么
一条短信里,有的内容每次都一样,有的每次都不同。比如验证码短信,“您的验证码是……,五分钟内有效”这句话是固定的,中间那串数字每次都变。变的那部分,就用一个占位符代替,这个占位符就是模板变量。
写出来大概是这样:
【店铺签名】您的验证码是{code},五分钟内有效,请勿告诉他人。
程序调用接口时,把 code 的实际值传过去,平台替换后再发给用户。审核人员看的是带占位符的模板,所以固定文字要能让人一眼看出这条短信是干什么的。
不同平台的占位符写法不完全一样,有的用花括号,有的用别的符号包起来,以你使用的平台文档为准。下面的例子统一用花括号。
短信模板中的变量名怎么起
变量名是给程序看的,不是给用户看的,起名有几个实用的习惯:
- 用英文字母,见名知意,比如 {name}、{code}、{order}、{time};
- 别用拼音缩写,过半年没人记得 {xm} 是姓名还是项目;
- 同一个账号下,同一种含义的变量名保持一致,开发写代码时少出错;
- 不要加空格和特殊符号,有些平台会直接判定格式错误。
有个细节新手常踩:模板里写的是 {orderNo},代码里传的参数叫 order_no,大小写和下划线不一致,平台就认不出来。结果短信照样发出去了,用户看到的是原封不动的“{orderNo}”。
模板变量的长度和数量
单个变量别太长
平台通常会限制单个模板变量能替换的字数,验证码类变量往往只允许数字或字母。具体上限各家规定不同,提交前查一下文档,别等上线后才发现姓名被截断。
这里还有个计费上的坑。短信超过一定字数会被拆成多条发送、按条计费,而变量替换后的长度是算在内的。模板本身看着不长,一旦 {name} 传进来一个很长的公司全称,整条短信就可能变成两条。估算长度时,按变量可能出现的最长值来算,不要按最短的算。
变量数量要克制
一条模板里塞七八个变量,固定文字只剩几个字,审核基本过不了,因为审核人员看不出你到底要发什么。验证码模板通常一个变量就够;通知类模板,比如发货提醒,放订单号、快递公司、单号两三个变量比较合适。
不同类型短信的模板变量写法
验证码短信最简单,一个 {code},配上用途和有效期说明。
通知类短信要把事情说完整。比如预约提醒:
【店铺签名】{name}您好,您预约的{service}在{time}开始,如需改约请提前联系门店。
营销短信审核最严。变量一般只允许放称呼这类内容,活动内容本身要写在固定文字里,并且带上退订方式。有人想用变量“灵活替换活动内容”,等于绕开审核发未经审核的营销内容,这种做法平台会处理,也不符合规范,我们不建议,也不会帮着做。营销短信本身也只能发给授权过、有业务往来的用户。
链接放进变量这件事,很多平台限制较多,有的直接不允许。需要带链接的,按平台要求报备,别想着用变量藏链接。
设置模板变量时最常见的几个错误
排查下来,出现频率最高的是这几类:
- 发出去显示原始变量名:代码传参的名字和模板里不一致,或者漏传了参数;
- 模板被驳回:变量太多、固定文字说不清用途,或者把签名、公司名也做成了变量;
- 字数超长被拆条:没按变量最长值估算长度;
- 内容出现乱码:变量值里带了表情符号或特殊字符,部分手机显示异常;
- 变量放错位置:变量紧贴着标点或数字,替换后读起来别扭,比如“{name}{time}”连在一起。
遇到问题,先看平台的发送记录和回执,大多数时候错误原因写得很清楚。看不懂的,把模板原文和接口请求参数一起发给服务商,比描述现象好查得多。
上线前的自查
正式切换之前,用测试号码把每个模板都发一遍,变量分别传最短值、最长值和带特殊字符的值,看手机上的实际效果。这一步花不了多少时间,能挡住大部分线上问题。
结论
短信模板变量设置得好,开发对接顺、审核通过快、用户看得懂。核心就三点:变量名清楚统一,长度按最长值估算,固定文字把用途说清楚。营销类模板别拿变量替换活动内容。蔚岚科技在开通短信群发接口时,会帮客户逐个过一遍模板和变量设置,有问题可以打 18720919319 咨询。
常见问题
模板变量可以用中文命名吗?
不建议。部分平台不支持,代码里写中文参数名也容易出编码问题,用英文字母最稳妥。
一个模板里能放几个变量?
没有统一标准,看平台规定和模板类型。原则是固定文字能说明用途,变量只放真正每次会变的内容。
改了模板变量名,需要重新审核吗?
一般需要。模板内容有任何改动,平台都会当作新模板重新审核,审核通过后再改代码里的参数名。
为什么测试正常,正式发送却显示变量名?
多半是正式环境用了另一个模板编号,或者生产代码里的参数名和测试时不一样。对照发送记录里的模板编号查一下。
姓名变量能传客户全名吗?
能,但要考虑长度和隐私。称呼用姓氏加“先生、女士”更短,也更安全,不容易因为名字过长被拆成两条。