# 通过短信发送 OTP 和验证码

> 一次 REST 调用即可向 228 个国家和地区发送一次性验证码：支持事务型标记、较短有效期、幂等重试和签名送达 webhook。无需 KYC，以加密货币支付。

要使用 SMSMeteor 发送 OTP 验证码，请调用 `POST /v1/messages`：号码使用 E.164 格式，短信以您的品牌开头并包含验证码，将 `validity` 设为验证码的有效期，并将 `window.quiet_hours` 设为 `bypass`。响应中会包含价格，`message.delivered` webhook 会确认送达，通常只需几秒。

开设账户无需身份验证，从第一条到第一百万条验证码，都按目的地适用相同费率。

## 推荐设置

- 流量类型：事务型，不受静默时段限制
- API 调用：`POST /v1/messages`，每个验证码调用一次
- 有效期：5 到 10 分钟（默认为 48 小时）
- 长度：一个分段；中文使用 Unicode，纯拉丁文本使用 GSM-7；不含链接
- 重试：使用同一个 `Idempotency-Key`，绝不发送第二个验证码
- 确认方式：`message.delivered` webhook 或状态轮询

## 操作步骤

1. 创建密钥：为签发验证码的服务创建仅限发送权限的 API 密钥；如果服务运行在固定服务器上，请设置 IP 允许列表。测试密钥可让您无需余额就搭建完整流程。
2. 发送验证码：品牌在前，验证码其次，有效期最后。控制在一个分段。将 validity 设为验证码寿命，并把短信标记为事务型。
3. 监听结果：delivered 事件完成闭环；如果 failed 事件说明号码未知，您的界面应要求用户提供其他号码，而非继续提供重发选项。
4. 保护端点：按号码、IP 和账户限制请求速率，并在第二次请求后要求完成验证。向有效号码大量发送短信会产生费用。

## 什么决定验证码能否及时送达

用户能否及时看到验证码取决于三点：线路、格式和时段。线路由我们负责：为每个目的地使用经过实测的线路，事务型流量绝不会排在群发任务之后。格式由您决定：文本应简短，中文使用 Unicode，纯拉丁文本可使用 GSM-7；并在开头写明品牌，因为在美洲以及要求注册发件人的地区，收件人看到的是号码而非您的名称。时段则由事务型标记处理，使短信能在当地营销时段之外发出。

验证码短信中不要放链接。运营商对含链接验证码的过滤比任何其他模式都严格，而在用户看来，被过滤的验证码与产品故障毫无区别。

## 不会白白消耗余额的重发逻辑

允许用户在 30 秒后再次请求，之后依次等待 60 秒、120 秒。签发新验证码时使旧验证码失效。使用用户和尝试次数构建幂等键，这样您一侧发生超时时可以安全重试。webhook 报告因号码未知而失败时，请停止提供重发：问题在号码，不在网络。

按目的地衡量从验证码发出到用户输入的转化率。这比任何回执都更能说明实际送达，因为它同时涵盖了手机、通知和用户本人。

## 示例短信

发件人：METEOR："ACME：您的验证码是 493 201，10 分钟后失效。我们绝不会向您索要此验证码。"

```bash
curl https://api.smsmeteor.com/v1/messages \
  -H "Authorization: Bearer $SMSMETEOR_KEY" \
  -H "Idempotency-Key: otp-user-8841-attempt-1" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155550142",
    "from": "ACME",
    "text": "ACME：您的验证码是 493 201，10 分钟后失效。",
    "validity": 10,
    "window": { "quiet_hours": "bypass" },
    "campaign": "otp-login"
  }'
```

## 常见问题

**OTP 短信多快可以送达？** 在线路运行正常时，API 调用后几秒内验证码即可到达手机。事务型短信不会排在群发任务之后；状态页面会公布送达延迟，供您查看当前数据。

**可以在夜间发送 OTP 验证码吗？** 可以。将 window.quiet_hours 设为 bypass，短信就会按事务型处理，在所有目的地立即发出。静默时段只会暂缓营销流量。

**验证码会把我的品牌显示为发件人吗？** 在支持按原样显示字母数字发件人的目的地会显示。在美洲、中国及要求注册的国家和地区，收件人看到的是号码，因此品牌应写在短信开头。每个国家和地区页面都会说明相关规则。

**一条 OTP 短信多少钱？** 按目的地公布的单个分段费率计费，例如发送到美国为 $0.0084，发送到印度为 $0.0256。不收单次验证费或月费。

**发送验证码需要验证公司吗？** 不需要。只凭电子邮件地址即可开设账户。我们检查的是内容：验证码可以发送，冒充银行或公共服务机构则不允许。

**如何防止机器人通过验证码端点耗尽余额？** 请在您一侧按号码、IP 和账户限制速率，在第二次请求后增加验证，并拒绝您不提供服务的目的地。不支持的号码前缀会免费拒绝，但发送到有效号码的短信会计费。



---
来源：[HTML 页面](https://smsmeteor.com/zh/use-cases/otp-verification)。由 SMSMeteor 使用与页面相同的数据生成。[全站摘要](https://smsmeteor.com/zh/llms.txt)
