做短信接口对接,最容易卡住的往往不是代码,是模板。模板里的固定文字要过审,模板变量要和程序传的参数一一对上,哪一边出错,用户收到的就是一条看不懂的短信。

我们帮客户排查过很多“短信发不出去”或者“内容乱了”的问题,追到最后,大半跟变量有关。下面按设置顺序讲一遍。

短信模板变量是什么

一条短信里,有的内容每次都一样,有的每次都不同。比如验证码短信,“您的验证码是……,五分钟内有效”这句话是固定的,中间那串数字每次都变。变的那部分,就用一个占位符代替,这个占位符就是模板变量。

写出来大概是这样:

【店铺签名】您的验证码是{code},五分钟内有效,请勿告诉他人。

程序调用接口时,把 code 的实际值传过去,平台替换后再发给用户。审核人员看的是带占位符的模板,所以固定文字要能让人一眼看出这条短信是干什么的。

不同平台的占位符写法不完全一样,有的用花括号,有的用别的符号包起来,以你使用的平台文档为准。下面的例子统一用花括号。

短信模板中的变量名怎么起

变量名是给程序看的,不是给用户看的,起名有几个实用的习惯:

  • 用英文字母,见名知意,比如 {name}、{code}、{order}、{time};
  • 别用拼音缩写,过半年没人记得 {xm} 是姓名还是项目;
  • 同一个账号下,同一种含义的变量名保持一致,开发写代码时少出错;
  • 不要加空格和特殊符号,有些平台会直接判定格式错误。

有个细节新手常踩:模板里写的是 {orderNo},代码里传的参数叫 order_no,大小写和下划线不一致,平台就认不出来。结果短信照样发出去了,用户看到的是原封不动的“{orderNo}”。

模板变量的长度和数量

单个变量别太长

平台通常会限制单个模板变量能替换的字数,验证码类变量往往只允许数字或字母。具体上限各家规定不同,提交前查一下文档,别等上线后才发现姓名被截断。

这里还有个计费上的坑。短信超过一定字数会被拆成多条发送、按条计费,而变量替换后的长度是算在内的。模板本身看着不长,一旦 {name} 传进来一个很长的公司全称,整条短信就可能变成两条。估算长度时,按变量可能出现的最长值来算,不要按最短的算。

变量数量要克制

一条模板里塞七八个变量,固定文字只剩几个字,审核基本过不了,因为审核人员看不出你到底要发什么。验证码模板通常一个变量就够;通知类模板,比如发货提醒,放订单号、快递公司、单号两三个变量比较合适。

不同类型短信的模板变量写法

验证码短信最简单,一个 {code},配上用途和有效期说明。

通知类短信要把事情说完整。比如预约提醒:

【店铺签名】{name}您好,您预约的{service}在{time}开始,如需改约请提前联系门店。

营销短信审核最严。变量一般只允许放称呼这类内容,活动内容本身要写在固定文字里,并且带上退订方式。有人想用变量“灵活替换活动内容”,等于绕开审核发未经审核的营销内容,这种做法平台会处理,也不符合规范,我们不建议,也不会帮着做。营销短信本身也只能发给授权过、有业务往来的用户。

链接放进变量这件事,很多平台限制较多,有的直接不允许。需要带链接的,按平台要求报备,别想着用变量藏链接。

设置模板变量时最常见的几个错误

排查下来,出现频率最高的是这几类:

  1. 发出去显示原始变量名:代码传参的名字和模板里不一致,或者漏传了参数;
  2. 模板被驳回:变量太多、固定文字说不清用途,或者把签名、公司名也做成了变量;
  3. 字数超长被拆条:没按变量最长值估算长度;
  4. 内容出现乱码:变量值里带了表情符号或特殊字符,部分手机显示异常;
  5. 变量放错位置:变量紧贴着标点或数字,替换后读起来别扭,比如“{name}{time}”连在一起。

遇到问题,先看平台的发送记录和回执,大多数时候错误原因写得很清楚。看不懂的,把模板原文和接口请求参数一起发给服务商,比描述现象好查得多。

上线前的自查

正式切换之前,用测试号码把每个模板都发一遍,变量分别传最短值、最长值和带特殊字符的值,看手机上的实际效果。这一步花不了多少时间,能挡住大部分线上问题。

结论

短信模板变量设置得好,开发对接顺、审核通过快、用户看得懂。核心就三点:变量名清楚统一,长度按最长值估算,固定文字把用途说清楚。营销类模板别拿变量替换活动内容。蔚岚科技在开通短信群发接口时,会帮客户逐个过一遍模板和变量设置,有问题可以打 18720919319 咨询。

常见问题

模板变量可以用中文命名吗?

不建议。部分平台不支持,代码里写中文参数名也容易出编码问题,用英文字母最稳妥。

一个模板里能放几个变量?

没有统一标准,看平台规定和模板类型。原则是固定文字能说明用途,变量只放真正每次会变的内容。

改了模板变量名,需要重新审核吗?

一般需要。模板内容有任何改动,平台都会当作新模板重新审核,审核通过后再改代码里的参数名。

为什么测试正常,正式发送却显示变量名?

多半是正式环境用了另一个模板编号,或者生产代码里的参数名和测试时不一样。对照发送记录里的模板编号查一下。

姓名变量能传客户全名吗?

能,但要考虑长度和隐私。称呼用姓氏加“先生、女士”更短,也更安全,不容易因为名字过长被拆成两条。