统一接口入口
- 方法
- POST
- 地址
-
/sms-api/ - 查询参数
-
action=sms.message.send
accessKeyId=<AccessKey ID> - 请求格式
- application/json
从账号准备、接口认证到逐号码结果,按照清晰的接入步骤,把短信能力连接到你的业务服务。
POST /sms-api/?action=sms.message.send&accessKeyId=ak_<40位十六进制>
X-Sms-Secret: <Secret>
Content-Type: application/json
{
"to": ["+14155550123", "+442071838750"],
"signature": "共享通道",
"templateId": "notify_login",
"templateData": { "CODE": "483920" },
"requestId": "login_20261001_001"
}
01 / QUICK START
注册并登录控制台,确认账号可正常使用。
在接口凭证中创建 AccessKey,并安全保存 Secret。
使用已审核通过的模板,确认变量名称和类型。
检查目标国家价格、可用通道及账户余额。
建议为每个生产服务创建独立凭证,并配置 IP 白名单、发送频率和额度限制。
02 / AUTHENTICATION
外部短信接口使用 AccessKey ID 和 Secret,不使用控制台登录会话。
/sms-api/
action=sms.message.send
accessKeyId=<AccessKey ID>
| 字段 | 必填 | 说明 |
|---|---|---|
X-Sms-Secret
|
是 | 创建或轮换 AccessKey 时返回的 Secret,只在服务端保存并通过请求头发送 |
03 / SEND A MESSAGE
主动传入 requestId,为网络超时后的安全重试保留依据。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
to
|
string | string[] | 是 | 接收号码,支持单个号码或号码数组,使用国际号码格式 |
signature
|
string | 否 | 客户侧业务通道名称,例如“共享通道”;未传时使用默认通道,不是供应商短信签名 |
templateId
|
string | 是 | 已审核通过的短信模板编号 |
templateData
|
object | 是 | 模板变量对象,字段名和类型必须与模板声明一致;number 类型提交 JSON 安全整数,string 类型提交字符串,带前导零的验证码使用字符串类型模板变量 |
requestId
|
string | 否 | 业务幂等号,1 至 100 位字母、数字、点、下划线、冒号或连字符,区分大小写;未传时由服务端生成,建议主动传入;网络超时后使用原编号和相同请求内容重试,同号不同内容返回 40011 |
POST /sms-api/?action=sms.message.send&accessKeyId=ak_<40位十六进制>
X-Sms-Secret: <Secret>
Content-Type: application/json
{
"to": ["+14155550123", "+442071838750"],
"signature": "共享通道",
"templateId": "notify_login",
"templateData": { "CODE": "483920" },
"requestId": "login_20261001_001"
}
04 / RESULTS & ERRORS
请逐项记录号码状态、错误信息和计费结果,避免仅凭 HTTP 状态认定送达。
读取 messages 中的 status、errorCode 与 errorMessage,按号码处理发送结果。
网络超时后使用相同 requestId 和相同内容重试;字段错误先修正,避免盲目重发。
以 amountUsd、billingStatus 和余额流水为准,不在客户端自行推算费用。
| 字段 | 类型 | 说明 |
|---|---|---|
requestId
|
string | 本次请求的幂等号 |
jobId
|
integer | null | 发送任务编号,异步队列场景返回 |
queued
|
boolean | 是否已进入发送队列 |
messages
|
array | 逐号码结果,必须继续检查其中的 status 和 errorCode |
messages[].status
|
string | 号码当前状态,如 submitting、unknown、sent、delivered、failed |
messages[].billingStatus
|
string | 计费状态,如 frozen、consumed、refunded |
messages[].errorCode
|
string | null | 号码级错误码,成功时为空 |
messages[].errorMessage
|
string | null | 号码级错误说明 |
messages[].amountUsd
|
string | 该号码实际计费金额,保留 6 位小数 |
| 错误码 | 含义 | 处理建议 |
|---|---|---|
40001
|
请求参数或号码格式错误 | 检查必填字段、字段类型、号码格式和批量数量 |
40002
|
发送凭证无效 | 检查客户登录凭证或接口 AccessKey 是否有效 |
40003
|
Secret 无效或缺失 | 确认 X-Sms-Secret 与 AccessKey ID 属于同一凭证 |
40004
|
客户账号不可用或无权限 | 检查账号状态、接口权限和来源 IP 白名单 |
40005
|
模板不存在或不可用 | 确认模板编号和审核状态 |
40006
|
通道或目的地不可用 | 确认客户通道已绑定,且目的地和业务场景已开放 |
40007
|
目的地或场景未开放 | 确认目标国家、地区和短信场景已配置并启用 |
40008
|
模板变量校验失败 | 按模板声明传入变量,确保名称、类型和长度正确 |
40009
|
余额不足 | 充值或等待余额到账后,再重新提交原请求 |
40010
|
发送频率或账号额度超限 | 降低发送频率,或检查客户额度和日限额配置 |
40011
|
请求编号冲突 | 相同 requestId 只能对应相同请求内容,换用新的业务编号 |
50001
|
没有可用的上游通道 | 检查平台通道和上游账号配置,稍后重试 |
50002
|
上游提交次数达到上限 | 等待系统处理或查看消息状态,不要重复创建新请求 |
50003
|
系统处理失败 | 保留 requestId 和请求时间,联系平台支持排查 |
LET’S CONNECT
从你的业务场景出发,规划短信接入、发送与持续运营。