发送短信API
接口功能
该接口用于向单个或多个手机号发送相同内容的短信。
前提条件
注意事项
- 群发短信时,如果“to”参数携带的号码中包含除数字和+之外的其他字符,则无法向该参数携带的所有号码发送短信。如果“to”参数携带的所有号码只包含数字和+,但部分号码不符合号码规则要求,则在响应消息中会通过状态码标识发送失败的号码,不影响其他正常号码的短信发送。号码之间以英文逗号分隔,每个号码最大长度为21位,最多允许携带500个号码。如果携带超过500个号码,则全部号码都会发送失败。
 - 根据短信内容的长度,一条长短信可能会被拆分为多条短信发送,拆分规则详见短信发送规则。
 - 通过X-WSSE方式鉴权时,生成随机数的时间与发送请求时的本地时间的差值不能超过24小时,否则会导致鉴权失败。
 - 请求body中的参数需要进行urlencode。
 - 通过特殊AK/SK鉴权时,生成随机数的时间与发送请求时的本地时间的差值不能超过15分钟,否则会导致鉴权失败。
 
接口类型
| 
        请求方法  | 
      
        POST  | 
     
|---|---|
| 
        访问URI  | 
      
        /sms/batchSendSms/v1  | 
     
| 
        通信协议  | 
      
        HTTPS/HTTP  | 
     
请求参数
| 
        参数名称  | 
      
        是否必选  | 
      
        参数类型  | 
      
        默认值  | 
      
        说明  | 
     
|---|---|---|---|---|
| 
        Content-Type  | 
      
        是  | 
      
        String  | 
      
        无  | 
      
        固定填application/x-www-form-urlencoded。  | 
     
| 
        Authorization  | 
      
        是  | 
      
        String  | 
      
        无  | 
      
       
 SDK-HMAC-SHA256 Access= app_key的值, SignedHeaders=参与签名的头域(小写), Signature=经过签名算法计算得到的值 具体计算方式请参考添加签名信息到请求头。 
  | 
     
| 
        X-WSSE  | 
      
        否(X-WSSE认证必选)  | 
      
        String  | 
      
        无  | 
      
        
        取值为UsernameToken Username="app_key的值", PasswordDigest="PasswordDigest的值", Nonce="随机数", Created="随机数生成时间"。
         
  | 
     
| 
        X-Sdk-Date  | 
      
        否(特殊AK/SK认证必选)  | 
      
        String  | 
      
        无  | 
      
        格式为:yyyyMMdd'T'HHmmss'Z' X-Sdk-Date不能与发送请求时的本地时间相差太大(15分钟内),否则会导致鉴权失败。  | 
     
| 
        Host  | 
      
        否  | 
      
        String  | 
      
        无  | 
      
        API调用目的地址,用于特殊AK/SK认证:如smsapi.cn-north-4.myhuaweicloud.com:443  | 
     
| 
        编程语言  | 
      
        时间格式  | 
     
|---|---|
| 
        Java  | 
      
        yyyy-MM-dd'T'HH:mm:ss'Z'  | 
     
| 
        PHP  | 
      
        Y-m-d\TH:i:s\Z  | 
     
| 
        Python  | 
      
        %Y-%m-%dT%H:%M:%SZ  | 
     
| 
        C#  | 
      
        yyyy-MM-ddTHH:mm:ssZ  | 
     
| 
        Node.js  | 
      
        toISOString().replace(/.[0-9]+\Z/, 'Z') 注:Node.js中,使用toISOString()转换后的时间格式去除毫秒后即为本接口要求的时间格式。  | 
     
| 
        Go  | 
      
        2006-01-02T15:04:05Z  | 
     
| 
        参数名称  | 
      
        是否必选  | 
      
        参数类型  | 
      
        默认值  | 
      
        说明  | 
     
|---|---|---|---|---|
| 
        from  | 
      
        是  | 
      
        String(1-21)  | 
      
        无  | 
      
        短信发送方的号码。  | 
     
| 
        to  | 
      
        是  | 
      
        String(1-21999)  | 
      
        无  | 
      
        短信接收方的号码,标准号码格式为:+{国家码}{地区码}{终端号码}。 
 如果携带多个接收方号码,则以英文逗号分隔。每个号码最大长度为21位,最多允许携带500个号码。  | 
     
| 
        templateId  | 
      
        是  | 
      
        String(1-32)  | 
      
        无  | 
      
        短信模板ID,用于唯一标识短信模板,请在申请短信模板时获取模板ID。 “templateId”需要与“templateParas”参数配合使用。 中国大陆短信通道号码对应的签名类型和模板ID对应的模板类型必须相同。  | 
     
| 
        templateParas  | 
      
        否  | 
      
        String[]  | 
      
        无  | 
      
        注:当使用无变量模板时,可不带templateParas参数。 短信模板的变量值列表,用于依次填充“templateId”参数指定的模板内容中的变量,该参数需填写为JSONArray格式。请参考模板和变量规范。 列表中变量值的个数及长度必须和“templateId”对应模板内容中定义的变量个数及长度保持一致,例如“templateId”对应的模板内容有2个变量且变量长度分别为5和6,则此处需要设置2个变量值且内容长度分别小于等于5和6。 如模板内容为“您有${NUM_5}件快递请到${TXT_6}领取”时,该参数可填写为'["3","人民公园正门"]'。  | 
     
| 
        statusCallback  | 
      
        否  | 
      
        String(1-1024)  | 
      
        无  | 
      
        客户的回调地址,用于接收短信状态报告,如:http://my.com/receiveSMSReport。 
  | 
     
| 
        extend  | 
      
        否  | 
      
        String(1-128)  | 
      
        无  | 
      
        扩展参数,在状态报告中会原样返回。 不允许赋空值,不允许携带以下字符:“{”,“}”(即大括号)。  | 
     
| 
        signature  | 
      
        否  | 
      
        String(0-32)  | 
      
        无  | 
      
        仅中国大陆短信可携带此参数。 签名名称,必须是已审核通过的,与模板类型一致的签名名称。 仅在templateId指定的模板类型为通用模板时生效且必填,用于指定在通用模板短信内容前面补充的签名。  | 
     
响应参数
| 
        参数名称  | 
      
        是否必选  | 
      
        参数类型  | 
      
        默认值  | 
      
        说明  | 
     
|---|---|---|---|---|
| 
        code  | 
      
        是  | 
      
        String(1-7)  | 
      
        无  | 
      
        请求返回的结果码。  | 
     
| 
        description  | 
      
        是  | 
      
        String(1-512)  | 
      
        无  | 
      
        请求返回的结果码描述。  | 
     
| 
        result  | 
      
        否  | 
      
        SmsID[1-1000]  | 
      
        无  | 
      
        短信ID列表,当目的号码存在多个时,每个号码都会返回一个SmsID。 当返回异常响应时不携带此字段。  | 
     
| 
        参数名称  | 
      
        是否必选  | 
      
        参数类型  | 
      
        默认值  | 
      
        说明  | 
     
|---|---|---|---|---|
| 
        smsMsgId  | 
      
        是  | 
      
        String(1-50)  | 
      
        无  | 
      
        短信的唯一标识。  | 
     
| 
        from  | 
      
        是  | 
      
        String(1-21)  | 
      
        无  | 
      
        短信发送方的号码。  | 
     
| 
        originTo  | 
      
        是  | 
      
        String(1-21)  | 
      
        无  | 
      
        短信接收方的号码。  | 
     
| 
        status  | 
      
        是  | 
      
        String(1-7)  | 
      
        无  | 
      
        短信状态码。以下举例状态码及其说明,具体处理建议请参考接口调用错误码处理。 
  | 
     
| 
        createTime  | 
      
        是  | 
      
        String(1-20)  | 
      
        无  | 
      
        短信资源的创建时间,即短信平台接收到客户发送短信请求的时间,为UTC时间。 格式为:yyyy-MM-dd'T'HH:mm:ss'Z'。  | 
     
| 
        countryId  | 
      
        否  | 
      
        String(1-3)  | 
      
        无  | 
      
        短信接收方号码的国家码。  | 
     
| 
        total  | 
      
        否  | 
      
        int  | 
      
        无  | 
      
        短信拆分条数。  | 
     
结果码说明
| 
        响应码  | 
      
        结果码  | 
      
        英文描述  | 
      
        中文描述  | 
      
        处理方法  | 
     
|---|---|---|---|---|
| 
        200  | 
      
        000000  | 
      
        Success.  | 
      
        发送请求成功。  | 
      
        无需处理。  | 
     
| 
        400  | 
      
        E000000  | 
      
        System error.  | 
      
        系统异常。  | 
      
        请先对照代码样例检查templateParas参数设置是否正确。若排查代码后仍未解决问题,请联系管理员处理。  | 
     
| 
        E000001  | 
      
        Authorization not contained in the HTTP header.  | 
      
        HTTP消息头未找到Authorization字段。  | 
      
        请检查HTTP消息头中是否携带了Authorization字段。  | 
     |
| 
        E000002  | 
      
        realm not contained in Authorization.  | 
      
        Authorization字段中未找到realm属性。  | 
      
        请检查Authorization字段中的是否携带了realm属性。  | 
     |
| 
        E000003  | 
      
        profile not contained in Authorization.  | 
      
        Authorization字段中未找到profile属性。  | 
      
        请检查Authorization字段中的是否携带了profile属性。  | 
     |
| 
        E000004  | 
      
        The value of realm in Authorization must be SDP.  | 
      
        Authorization中realm属性值应该为“SDP”。  | 
      
        请检查Authorization字段中的realm属性值是否为“SDP”。  | 
     |
| 
        E000005  | 
      
        The value of profile in Authorization must be UsernameToken.  | 
      
        Authorization中profile属性值应该为“UsernameToken”。  | 
      
        请检查Authorization字段中的profile属性值是否为“UsernameToken”。  | 
     |
| 
        E000006  | 
      
        The value of type in Authorization must be app_key.  | 
      
        Authorization中type属性值应该为“Appkey”。  | 
      
        请检查Authorization字段中的type属性值是否为“Appkey”。  | 
     |
| 
        E000007  | 
      
        type not contained in Authorization.  | 
      
        Authorization字段中未找到type属性。  | 
      
        请检查Authorization字段中是否携带了type属性。  | 
     |
| 
        E000008  | 
      
        WSSE not contained in Authorization.  | 
      
        Authorization中没有携带WSSE。  | 
      
        请检查Authorization字段中是否携带了WSSE。  | 
     |
| 
        E000020  | 
      
        X-WSSE not contained in the HTTP header.  | 
      
        HTTP头未找到X-WSSE字段。  | 
      
        请检查HTTP消息头中是否携带了X-WSSE字段。  | 
     |
| 
        E000021  | 
      
        UserName not contained in X-WSSE.  | 
      
        X-WSSE字段中未找到UserName属性。  | 
      
        请检查X-WSSE字段中的是否携带了UserName属性。  | 
     |
| 
        E000022  | 
      
        Nonce not contained in X-WSSE.  | 
      
        X-WSSE字段中未找到Nonce属性。  | 
      
        请检查X-WSSE字段中的是否携带了Nonce属性。  | 
     |
| 
        E000023  | 
      
        Created not contained in X-WSSE.  | 
      
        X-WSSE字段中未找到Created属性。  | 
      
        请检查X-WSSE字段中的是否携带了Created属性。  | 
     |
| 
        E000024  | 
      
        PasswordDigest not contained in X-WSSE.  | 
      
        X-WSSE字段中未找到PasswordDigest属性。  | 
      
        请检查X-WSSE字段中的是否携带了PasswordDigest属性。  | 
     |
| 
        E000025  | 
      
        The format of Created is incorrect.  | 
      
        Created属性格式错误。  | 
      
        请检查X-WSSE字段中的Created属性格式是否正确。  | 
     |
| 
        E000026  | 
      
        UsernameToken not contained in X-WSSE.  | 
      
        X-WSSE字段中未找到UsernameToken属性。  | 
      
        请检查X-WSSE字段中的是否携带了UsernameToken属性。  | 
     |
| 
        E000027  | 
      
        Invalid request.  | 
      
        非法请求。  | 
      
        根据API接口文档的参数描述和要求,检查请求携带的参数是否都合法。  | 
     |
| 
        E000040  | 
      
        The value of ContentType must be application/x-www-form-urlencoded.  | 
      
        ContentType值应该为application/x-www-form-urlencoded。  | 
      
        请检查ContentType头域的取值是否为“application/x-www-form-urlencoded”。  | 
     |
| 
        E000041  | 
      
        X-Sdk-Date header is empty.  | 
      
        X-Sdk-Date为空  | 
      
        特殊AK/SK认证时,请检查HTTP消息头X-Sdk-Date的值。  | 
     |
| 
        E000042  | 
      
        The format of X-Sdk-Date header is invalid.  | 
      
        X-Sdk-Date格式错误  | 
      
        特殊AK/SK认证时,请检查HTTP消息头X-Sdk-Date的格式,格式为:yyyyMMdd'T'HHmmss'Z'  | 
     |
| 
        E000043  | 
      
        The format of Authorization header is incorrect.  | 
      
        Authorization格式错误  | 
      
        特殊AK/SK认证时,请检查HTTP消息头Authorization格式。  | 
     |
| 
        E000044  | 
      
        X-Sdk-Date is expired.  | 
      
        X-Sdk-Date过期  | 
      
        特殊AK/SK认证时,请检查HTTP消息头X-Sdk-Date的时间,不能与发送请求时的本地时间相差太大(15分钟内),否则会导致鉴权失败。  | 
     |
| 
        E000045  | 
      
        Authorization verify failed.  | 
      
        Authorization校验失败  | 
      
        特殊AK/SK认证时,请检查HTTP消息头Authorization中的Signature字段。  | 
     |
| 
        E000503  | 
      
        The parameter format is incorrect.  | 
      
        参数格式错误。  | 
      
        请检查参数格式是否正确。  | 
     |
| 
        E000510  | 
      
        The SMS fails to be sent. For details, see Status.  | 
      
        短信发送失败,描述见参数status。  | 
      
        查看响应参数中的status确认发送失败的原因,修改后重新发送。  | 
     |
| 
        401  | 
      
        E000101  | 
      
        Authentication failed.  | 
      
        鉴权失败。  | 
      
        请检查Authorization和X-WSSE参数的填写是否正确。  | 
     
| 
        E000102  | 
      
        Invalid app_key.  | 
      
        app_key无效。  | 
      
        请检查请求携带的app_key填写是否正确。 如app_key填写正确,建议检查app接入地址是否正确(从控制台“应用管理”获取)。  | 
     |
| 
        E000103  | 
      
        The status of the app_key is unavailable.  | 
      
        app_key不可用。  | 
      
        请联系管理员确认该app_key状态是否正常。  | 
     |
| 
        E000104  | 
      
        Invalid app_secret.  | 
      
        app_secret无效。  | 
      
        请检查请求携带的app_secret填写是否正确。  | 
     |
| 
        E000105  | 
      
        Invalid digest.  | 
      
        PasswordDigest无效。  | 
      
        请检查请求携带的PasswordDigest填写是否正确。  | 
     |
| 
        E000106  | 
      
        The app_key is not allowed to invoke this API.  | 
      
        app_key没有调用本API的权限。  | 
      
        请联系管理员确认该app_key是否具有“短信能力开放”能力。  | 
     |
| 
        E000109  | 
      
        The user status is deactivated.  | 
      
        用户状态未激活。  | 
      
        请联系管理员激活用户。  | 
     |
| 
        E000110  | 
      
        Time out limit.  | 
      
        时间超出限制。  | 
      
        请确认X-WSSE鉴权时,生成随机数的时间与发送请求时的本地时间不能相差太大(具体差值请与管理员确认)。  | 
     |
| 
        E000111  | 
      
        Incorrect username or password.  | 
      
        用户名或密码错误。  | 
      
        系统找不到app_key对应的用户信息,请联系管理员处理。  | 
     |
| 
        E000112  | 
      
        The subscriber status is frozen.  | 
      
        用户状态已冻结。  | 
      
        若是因账户欠费冻结,请参考华为云账户充值完成充值,到账后自动解冻。 若是因业务违规冻结,请整改业务后联系运营经理申请解冻。  | 
     |
| 
        403  | 
      
        E000620  | 
      
        The app client ip is not in ip white list.  | 
      
        对端app IP不在白名单列表中。  | 
      
       
  | 
     
| 
        E000623  | 
      
        Number of SMSs sent by the SP reached the limit.  | 
      
        SP短信发送量达到限额。  | 
      
        请联系运营经理协商调整SP短信发送量最大限额。  | 
     |
| 
        E000630  | 
      
        Number of SMSs sent by the SP reached the country/region limit.  | 
      
        SP 发送量达到国家/地区级限额  | 
      
        设置流量阈值时,为该号码所属国家/地区设置了限额值。租户发往该国家/地区的短信数量累计 超过限额值导致短信发送失败。 请在控制台"通用设置"页面,修改/删除该号码所属国家/地区的限额值。详细操作请参见设置流量阈值。若限额值大小不满足需求,请联系运营经理协商调整SP短信发送量最大限额。  | 
     
接口示例
- 请求示例1(X-WSSE认证)
    
POST /sms/batchSendSms/v1 HTTP/1.1 x-real-ip: 10.10.10.168 x-real-port: 10443 host: ompap.inner content-length: 184 date: Fri, 13 Apr 2018 06:31:39 GMT authorization: WSSE realm="SDP",profile="UsernameToken",type="Appkey" x-wsse: UsernameToken Username="ZRBRz4bAXoFgEH7o4Ew308eXc1RA",PasswordDigest="NDA1MWIwNjI2ZTkyNWFlM2FhMTE5NDE1YTk5NjU1YWE4NjNlZTY1MmRhYzkxZGViNzczZjdjMjkzZWQ4ZjAwNA==",Nonce="ac1c911c4792492687f8f6b2264a491e",Created="2018-05-26T00:35:30Z" accept: application/json content-type: application/x-www-form-urlencoded from=1069031221280012&to=%2B8615512345678&templateId=abcdefghabcdefghabcdefghabcdefgh&templateParas=%5B%22520520%22%5D&statusCallback=http%3A%2F%2F205%2E145%2E111%2E168%3A9330%2Freport
 - 请求示例2(AK/SK认证)
    
POST /sms/batchSendSms/v1 HTTP/1.1 Host: smsapi.cn-north-4.myhuaweicloud.com:443 content-length: 184 X-Sdk-Date: 20230519T005038Z Authorization: SDK-HMAC-SHA256 Access=uxOF5yvM0H3C0t5G0xc272g7hA2I, SignedHeaders=content-type;host;x-sdk-date, Signature=082f05bcd561e291a7469939980c022f721a581967cc30eb3725c7aea4bd634d Content-Type: application/x-www-form-urlencoded from=1069********0012&to=%2B86155****5678&templateId=abcdefghabcdefghabcdefghabcdefgh&templateParas=%5B%22520520%22%5D&statusCallback=http%3A%2F%2F205%2E145%2E111%2E168%3A9330%2Freport
 - 响应示例
    
HTTP/1.1 200 OK Date: Fri, 13 Apr 2018 06:29:08 GMT Server: WebServer Content-Type: application/json;charset=UTF-8 Content-Length: 247 {"result":[{"originTo":"+8615512345678","createTime":"2018-05-25T16:34:34Z","from":"1069031221280012","smsMsgId":"d6e3cdd0-522b-4692-8304-a07553cdf591_8539659","status":"000000","countryId":"CN","total":2}],"code":"000000","description":"Success"}