如何通过SMS Gateway获取包含发送明细的SMS Delivery Reports?
获取SMS Delivery Reports明细数据的实操方案
首先确认你所用的SMS Gateway是否支持明细送达报告(DLR)能力,绝大多数商用短信网关、运营商直连网关都原生支持该功能,默认仅返回总成功数通常是配置未开启导致:
- 发送短信的接口请求中,需主动添加要求返回DLR的参数,多数网关的标准参数为
dlr_enable=1,开启后网关才会记录每个号码的送达状态 - 提前在你的业务侧预存每个发送请求的唯一message ID与对应目标手机号的映射关系,后续状态报告将通过该ID做匹配关联
- 在你的服务端配置可公网访问的DLR回调接口,在网关后台绑定该地址,网关收到运营商返回的送达状态后,会主动推送包含message ID、送达状态、状态错误码、送达时间的明细数据到该接口,你侧收到数据后匹配预存的手机号映射即可得到全量明细
- 发送短信的接口请求中,需主动添加要求返回DLR的参数,多数网关的标准参数为
如果你使用的是自研/开源短信网关(如Kannel、Gammu),走SMPP协议对接运营商的场景,需自行配置DLR相关参数:
- 与运营商建立SMPP绑定的时候,需开启接收
DELIVER_SM类型PDU报文的权限,运营商的送达报告均封装在该类型报文中 - 解析报文时提取
receipted_message_id(对应发送时返回的message ID)、destination_addr(目标手机号)、state(送达状态标识,0为送达成功,其余值对应不同失败原因)三个核心字段,即可直接得到每个号码的发送状态
- 与运营商建立SMPP绑定的时候,需开启接收
若所用网关仅支持批量查询而非主动回调,可调用网关的批次明细查询接口,传入发送批次ID、发送时间范围作为查询条件,拉取对应批次下所有手机号的状态明细,注意处理接口的分页逻辑,拉取全量数据后再做汇总,避免遗漏分页数据
注意:部分运营商对营销类、低频触达类短信的送达报告会有最长72小时的延迟,建议设置72小时的状态等待窗口,不要在发送后立刻统计最终结果,避免把延迟送达的号码误判为发送失败。
内容的提问来源于stack exchange,提问作者Nirav Shah
相关产品推荐
相关产品推荐

