状态回调
所有文档

          简单消息服务 SMS

          状态回调

          描述

          将短信下发的状态报告通过回调业务方服务地址的方式告知业务方。

          URL

          由业务方提供。用户可以在“开发配置“中设置自己的上行回调地址

          HTTP Method

          POST

          HTTP Header

          头域(Header) 示例值 说明
          Content-Type application/json;charset=utf-8 -
          requestId 54eb30d9-fead-4048-bb8b-200cf12ab8e9 本次推送对应的消息id.客户端可以根据该字段去重
          timestamp 1462774903112 推送时间戳
          signature 693b669f77f9c19030466263144646a 该字段为推送时的认证字段。客户端可以根据该字段进行认证。算法:md5(token + timestamp + body),其中body为状态推送请求的request body token为客户对应的唯一标示,若为空则不参与签名的生成。加密过程请参考:MD5加密代码示例

          请求参数

          名称 类型 是否必需 备注
          code String 0-发送成功,2-发送失败
          requestId String 请求id,与短信发送请求中的requestId对应
          messageId String 短信消息id
          mobile String 手机号
          carrierCode String 运营商原生状态码
          custom String 用户在发送请求中自定义的参数
          attemptCount int 尝试推送的次数,推送失败时会重试3次。无重试则为1
          segmentCount int 短信拆分后的条数
          deliverTime String 抵达时间,UTC时间
          requestTime String 请求时间,UTC时间

          响应参数

          响应参数由业务方自定义。百度云SMS会根据回调响应中的HTTP Status来判断是否回调成功,Status为200表示回调成功,非200表示回调失败。

          回调重试策略

          由于网络原因导致的推送失败(如连接超时等),SMS会启动重试策略。重试策略:推送失败,立即重试3次,失败后,间隔一个小时重试一次,最大重试次数是10次,超过最大重试次数停止重试。基于此重试策略,对于同一个messageId可能会重复推送,建议用户忽略第二次收到的状态推送请求,以避免重复处理。

          其他注意事项

          注意百度云SMS的回调请求源IP和端口均不固定,建议业务方不要对回调地址设置IP白名单。

          状态回调请求示例

          POST /your/callback/url HTTP/1.1
          signature: 4eaca69ae63c4b823653c671f1eb5fa5
          requestId: 71bdbef0ac8847378da21ecb142a14e7
          timestamp: 1597320812102
          Content-Type: application/json;charset=utf-8
          
          {
              "requestTime":"2019-12-03T22:53:00Z",
              "deliverTime":"2019-12-03T22:53:05Z",
              "code":"0",
              "requestId":"a6d5f1d9ca2048e5a5454e75da1db563",
              "custom":"example custom",
              "carrierCode":"DELIVRD",
              "mobile":"13800138000",
              "messageId":"c5366f96477b49ca90bcdff2516fe521"
          }

          响应示例

          HTTP/1.1 200 OK
          Content-Length: 50
          Content-Type: aplication/json;charset=UTF-8
          Date: Wed, 04 Dec 2019 06:53:13 GMT

          MD5加密示例

          import org.apache.commons.codec.digest.DigestUtils;
          
          public static void main(String... args) {
              String token = "dfb97fb8170a539acd576b710877c2b0";
              String timestamp = "1597320812102";
              String body = "{\"requestId\":\"6373df1f-3465-454e-a745-0de13154cf67\",\"messageId\":\"6373df1f-3465-454e-a745-0de13154cf67_13060412623\",\"mobile\":\"13800138000\",\"code\":\"0\",\"requestTime\":\"2020-08-13T12:13:14Z\",\"deliverTime\":\"2020-08-13T12:13:32Z\",\"custom\":null,\"carrierCode\":\"DELIVRD\",\"attemptCount\":1,\"segmentCount\":2}";
              String signature = DigestUtils.md5Hex(token + timestamp + body);
              System.out.println(signature);
              // 输出为:34d38bbfef1c471a951a4019561139fb
          }
          上一篇
          短信下发
          下一篇
          上行回调