OTP 验证码短信模板
每条一段,一个验证码只收一次钱

注册、登录、重置密码、付款确认的现成写法,中文、英文、马来文都有 —— 每条都装得进一段短信,所以每个验证码只扣一次费用。

一条验证码短信要做到什么

验证码短信是收件人在几个 App 之间切换时、花两秒钟看的。它有四件事要做,按这个顺序:

  1. 谁发的。开头写品牌,例如「MyShop:」,因为发件人栏显示的是号码,不是你的名字。(收到时会是「RM0 MyShop:…」:RM0 是我们通道给每条短信加的前缀,这 4 个字符已经算进本页的字数限制里。)
  2. 验证码,紧挨着「验证码」这几个字。手机会在「验证码」「code」这类词旁边找数字,自动显示在键盘上方。
  3. 有效多久。写「5 分钟内有效」,用户就不会输入过期的码再来怪你。
  4. 提醒不要告诉别人。这句话能保护用户,免得有人冒充你打电话来要「刚刚发给你的号码」。

还有三样不该出现:不放链接(验证码短信里带链接正是钓鱼短信的典型样子,也会教坏用户去点短信里的链接),不放促销(会把服务短信变成营销短信),英文模板里不要 emoji 和弯引号(一个非 ASCII 字符就会让整条变成 Unicode,一段从 156 字符掉到 66,费用可能翻倍)。

中文模板

用途模板字数 · 段数
注册【MyShop】您的验证码是 482913,5 分钟内有效,请勿告诉他人。37 字 · 1 段(Unicode)
登录【MyShop】登录验证码 482913,5 分钟内有效。如非本人操作请忽略。39 字 · 1 段(Unicode)
重置密码【MyShop】重置密码验证码 482913,10 分钟内有效。我们不会致电索取验证码。44 字 · 1 段(Unicode)
更换手机号【MyShop】验证码 482913,用于确认绑定此手机号,5 分钟内有效,请勿外泄。43 字 · 1 段(Unicode)
付款确认【MyShop】验证码 482913,用于确认付款 RM150.00,3 分钟内有效,切勿告诉他人。50 字 · 1 段(Unicode)

中文一律按 Unicode 发送,一段只有 66 个字,而不是 156。像上面这么短的验证码仍然是一段,价格和英文一样;多加一句话就可能变成两段、收两次钱 —— 正式上线前用分段计算器算一下。

英文模板

用途模板字数 · 段数
注册MyShop: your verification code is 482913. Valid for 5 minutes. Do not share this code with anyone.98 字 · 1 段
登录MyShop: 482913 is your login code. Valid for 5 minutes. If this wasn't you, ignore this message.96 字 · 1 段
重置密码MyShop: use code 482913 to reset your password. Valid for 10 minutes. We will never ask for this code by phone.111 字 · 1 段
更换手机号MyShop: code 482913 confirms this number for your account. Valid for 5 minutes. Do not share it.96 字 · 1 段
付款确认MyShop: code 482913 confirms your payment of RM150.00. Valid for 3 minutes. Never share this code.98 字 · 1 段
货到付款订单MyShop: code 482913 confirms your COD order #10482. Valid for 10 minutes. Do not share it.90 字 · 1 段

马来文模板

用途模板字数 · 段数
注册MyShop: Kod pengesahan anda ialah 482913. Sah selama 5 minit. Jangan kongsi kod ini dengan sesiapa.99 字 · 1 段
登录MyShop: 482913 ialah kod log masuk anda. Sah selama 5 minit. Abaikan mesej ini jika bukan anda.95 字 · 1 段
重置密码MyShop: Gunakan kod 482913 untuk menetapkan semula kata laluan. Sah 10 minit. Kami tidak akan meminta kod ini melalui telefon.126 字 · 1 段
付款确认MyShop: Kod 482913 mengesahkan bayaran RM150.00 anda. Sah 3 minit. Jangan kongsi kod ini.89 字 · 1 段

马来文和英文用的是同一套普通字母,价格一样。客户大多讲马来文的话,用马来文发验证码不会多花钱。把「MyShop」换成你自己的品牌;不属于你的国际品牌名不要写进短信 —— 马来西亚电信会对含受保护品牌名的短信罚款,并转嫁给发送方。

让手机自动填入验证码

输入六位数字正是用户流失的地方。短信格式写对了,手机可以帮用户自动填:

MyShop: your verification code is 482913. Valid for 5 minutes.

FA+9qCX9VSu
MyShop: your verification code is 482913. Valid for 5 minutes.

@myshop.com.my #482913

这两种格式都很严格:最后一行多一个空格,手机就不认。对用户开放之前,先发一条到自己手机测试。

怎么把模板发出去

你的系统填好验证码,用一个 API 请求把整段文字发出去。生成验证码、保存、限流、核对用户输入的完整做法,见用 PHP、Laravel、WordPress 发送验证码;价格、送达速度和发件号码见短信验证码。

OTP 模板常见问题

验证码短信写多长合适?

短到一段装得下:在我们的通道上,纯英文或马来文最多 156 个字符,含中文或 emoji 则最多 66 个字。本页每条模板都是一段。

验证码短信可以放链接吗?

不要放。验证码短信里带链接看起来像钓鱼短信,还会让用户养成点短信链接的习惯,而且没有任何用处 —— 用户本来就在你的网站或 App 上等验证码。

验证码有效期设多久?

登录和付款验证码 3 到 5 分钟,重置密码最多 10 分钟。有效期越长,被盗的验证码就有越多时间被利用。

验证码短信可以用中文写吗?

可以。中文按 Unicode 发送,一段 66 个字。像上面那样的短模板仍然只占一段。

六位数还是四位数?

六位数。四位数 1 万次就能猜中,六位数有 100 万种组合,而手机自动填入两者一样方便。

把模板发到自己手机试试

把任何一条模板贴进后台,发送前就能看到段数,再看看在手机上实际长什么样。