跳转到正文
OmniChannels.ai

免费工具

短信送达报告(DLR)解码器

粘贴一条或一批 SMPP 送达回执,即可查看每个字段的含义、送达耗时、对应的 webhook 状态,以及 SMPP command_status 错误说明了什么问题。

免费 · 无需注册 · 在浏览器中运行

粘贴一条或多条 deliver_sm 回执的 short_message 文本,每行一条。也可解析单独的 command_status,例如 0x00000058。

解析结果

回执数: 4 · 送达率: 25%

回执数
4
送达率
25%
DELIVRD ÷ stat 已知的回执
中位延迟
1 小时 7 分钟
需要关注
0

按 stat 分类

  • DELIVRD1
  • ACCEPTD1
  • UNDELIV1
  • EXPIRED1

按最接近的 Webhook 状态分类

  • SENT1
  • DELIVERED1
  • FAILED2
  1. 第 1 行stat:DELIVRD最接近的 Webhook 状态: DELIVERED最终状态

    已送达手机。

    与我们 API 标准化状态的参考对应关系。

    消息 ID
    2610101200457381
    与 submit_sm_resp 返回的 message_id 对应。
    sub(已提交)
    001
    最初提交的消息数,通常为 001。
    dlvrd(已送达)
    001
    已送达的消息数,通常为 001 或 000。许多 SMSC 填写得并不严格,因此请以 stat 为准。
    提交时间
    2026年10月10日 12:00:05261010120005
    SMSC 时钟。回执不含时区(通常为 UTC)。
    完成时间
    2026年10月10日 12:00:09261010120009
    SMSC 时钟。回执不含时区(通常为 UTC)。
    送达延迟
    4 秒
    err
    000
    无错误。
    text
    Your code is 482913
    原始消息的前 20 个字符,常被截断或为空。
  2. 第 2 行stat:UNDELIV最接近的 Webhook 状态: FAILED最终状态

    无法送达:号码无效或未启用、用户被限制或网络故障。

    与我们 API 标准化状态的参考对应关系。

    消息 ID
    2610101200457382
    与 submit_sm_resp 返回的 message_id 对应。
    sub(已提交)
    001
    最初提交的消息数,通常为 001。
    dlvrd(已送达)
    000
    已送达的消息数,通常为 001 或 000。许多 SMSC 填写得并不严格,因此请以 stat 为准。
    提交时间
    2026年10月10日 12:002610101200
    SMSC 时钟。回执不含时区(通常为 UTC)。
    完成时间
    2026年10月10日 14:152610101415
    SMSC 时钟。回执不含时区(通常为 UTC)。
    送达延迟
    2 小时 15 分钟
    err
    001
    非零的 err 值因 SMSC 或网络而异(通常源自 GSM 网络原因码)。请查阅服务商的错误列表。
    text
    Your order has shipp
    原始消息的前 20 个字符,常被截断或为空。
  3. 第 3 行stat:expired最接近的 Webhook 状态: FAILED最终状态

    在联系到手机之前有效期已结束(通常是手机关机或不在服务区)。

    与我们 API 标准化状态的参考对应关系。

    消息 ID
    2610101200457383
    与 submit_sm_resp 返回的 message_id 对应。
    sub(已提交)
    001
    最初提交的消息数,通常为 001。
    dlvrd(已送达)
    000
    已送达的消息数,通常为 001 或 000。许多 SMSC 填写得并不严格,因此请以 stat 为准。
    提交时间
    2026年10月10日 12:012610101201
    SMSC 时钟。回执不含时区(通常为 UTC)。
    完成时间
    2026年10月11日 00:012610110001
    SMSC 时钟。回执不含时区(通常为 UTC)。
    送达延迟
    12 小时
    err
    000
    无错误。
    text
    Flash sale ends toni
    原始消息的前 20 个字符,常被截断或为空。
  4. 第 4 行stat:ACCEPTD最接近的 Webhook 状态: SENT中间状态

    已被网络接受。通常随后会有最终回执。SMPP v3.4 正式将 ACCEPTD 定义为客户服务代表代用户手动读取,但大多数 SMSC 和聚合商会把它作为“已被网络接受”的中间回执发送。

    与我们 API 标准化状态的参考对应关系。

    消息 ID
    2610101200457384
    与 submit_sm_resp 返回的 message_id 对应。
    sub(已提交)
    001
    最初提交的消息数,通常为 001。
    dlvrd(已送达)
    000
    已送达的消息数,通常为 001 或 000。许多 SMSC 填写得并不严格,因此请以 stat 为准。
    提交时间
    2026年10月10日 12:022610101202
    SMSC 时钟。回执不含时区(通常为 UTC)。
    完成时间
    2026年10月10日 12:022610101202
    SMSC 时钟。回执不含时区(通常为 UTC)。
    送达延迟
    0 秒
    err
    000
    无错误。
    text
    —
    原始消息的前 20 个字符,常被截断或为空。
  5. 第 5 行 · command_status0x00000058ESME_RTHROTTLED暂时性错误

    Throttling error (ESME has exceeded allowed message limits)

    请稍后以指数退避方式重试,切勿在紧凑循环中重试。

SMPP v3.4 command_status 代码

48 个代码

代码名称含义(规范)应对措施
0x00000000ESME_ROKNo error成功
0x00000001ESME_RINVMSGLENMessage length is invalid需修正请求
0x00000002ESME_RINVCMDLENCommand length is invalid需修正请求
0x00000003ESME_RINVCMDIDInvalid command ID需修正请求
0x00000004ESME_RINVBNDSTSIncorrect bind status for given command绑定或会话
0x00000005ESME_RALYBNDESME already in bound state绑定或会话
0x00000006ESME_RINVPRTFLGInvalid priority flag需修正请求
0x00000007ESME_RINVREGDLVFLGInvalid registered delivery flag需修正请求
0x00000008ESME_RSYSERRSystem error暂时性错误
0x0000000AESME_RINVSRCADRInvalid source address需修正请求
0x0000000BESME_RINVDSTADRInvalid destination address需修正请求
0x0000000CESME_RINVMSGIDMessage ID is invalid需修正请求
0x0000000DESME_RBINDFAILBind failed绑定或会话
0x0000000EESME_RINVPASWDInvalid password绑定或会话
0x0000000FESME_RINVSYSIDInvalid system ID绑定或会话
0x00000011ESME_RCANCELFAILcancel_sm failed需修正请求
0x00000013ESME_RREPLACEFAILreplace_sm failed需修正请求
0x00000014ESME_RMSGQFULMessage queue full暂时性错误
0x00000015ESME_RINVSERTYPInvalid service type需修正请求
0x00000033ESME_RINVNUMDESTSInvalid number of destinations需修正请求
0x00000034ESME_RINVDLNAMEInvalid distribution list name需修正请求
0x00000040ESME_RINVDESTFLAGDestination flag is invalid (submit_multi)需修正请求
0x00000042ESME_RINVSUBREPInvalid 'submit with replace' request (submit_sm with replace_if_present_flag set)需修正请求
0x00000043ESME_RINVESMCLASSInvalid esm_class field data需修正请求
0x00000044ESME_RCNTSUBDLCannot submit to distribution list需修正请求
0x00000045ESME_RSUBMITFAILsubmit_sm or submit_multi failed暂时性错误
0x00000048ESME_RINVSRCTONInvalid source address TON需修正请求
0x00000049ESME_RINVSRCNPIInvalid source address NPI需修正请求
0x00000050ESME_RINVDSTTONInvalid destination address TON需修正请求
0x00000051ESME_RINVDSTNPIInvalid destination address NPI需修正请求
0x00000053ESME_RINVSYSTYPInvalid system_type field绑定或会话
0x00000054ESME_RINVREPFLAGInvalid replace_if_present flag需修正请求
0x00000055ESME_RINVNUMMSGSInvalid number of messages需修正请求
0x00000058ESME_RTHROTTLEDThrottling error (ESME has exceeded allowed message limits)暂时性错误
0x00000061ESME_RINVSCHEDInvalid scheduled delivery time需修正请求
0x00000062ESME_RINVEXPIRYInvalid message validity period (expiry time)需修正请求
0x00000063ESME_RINVDFTMSGIDPredefined message invalid or not found需修正请求
0x00000064ESME_RX_T_APPNESME receiver temporary app error code暂时性错误
0x00000065ESME_RX_P_APPNESME receiver permanent app error code需修正请求
0x00000066ESME_RX_R_APPNESME receiver reject message error code需修正请求
0x00000067ESME_RQUERYFAILquery_sm request failed暂时性错误
0x000000C0ESME_RINVOPTPARSTREAMError in the optional part of the PDU body需修正请求
0x000000C1ESME_ROPTPARNOTALLWDOptional parameter not allowed需修正请求
0x000000C2ESME_RINVPARLENInvalid parameter length需修正请求
0x000000C3ESME_RMISSINGOPTPARAMExpected optional parameter missing需修正请求
0x000000C4ESME_RINVOPTPARAMVALInvalid optional parameter value需修正请求
0x000000FEESME_RDELIVERYFAILUREDelivery failure (used for data_sm_resp)暂时性错误
0x000000FFESME_RUNKNOWNERRUnknown error暂时性错误

说明依据 SMPP v3.4 规范第 5.1.3 节。

不想自己解析回执?我们的短信 API 会把标准化的送达状态推送到您的 Webhook,高并发场景还可使用 SMPP 绑定。 Webhook 文档SMPP 指南企业短信 API

您在此输入的任何内容都不会发送到我们的服务器。

简短回答

SMPP 送达报告(DLR)是您提交短信后,SMSC 通过 deliver_sm PDU 返回的回执。其文本格式依次为 id、sub、dlvrd、submit date、done date、stat、err 和 text。stat 字段表示结果:DELIVRD 表示已送达手机;UNDELIV、EXPIRED、DELETED 和 REJECTD 为最终失败;ENROUTE 和 ACCEPTD 为中间状态。日期格式为 YYMMDDhhmm,有时带秒。

如何解码短信送达回执

  1. 1

    复制回执文本

    从 SMPP 客户端或 SMSC 日志中取出 deliver_sm PDU 的 short_message,例如 id:… sub:001 dlvrd:001 … stat:DELIVRD err:000。日志前缀会被忽略。

  2. 2

    每行粘贴一条

    可粘贴单条回执或数百条回执。也可以把 0x00000058 或 ESME_RTHROTTLED 这样的 command_status 值单独放在一行。

  3. 3

    查看解码字段

    每条回执会显示状态含义、是否为最终状态、最接近的 webhook 状态、可读日期、送达延迟,以及字段缺失或不一致时的警告。

  4. 4

    查看批量汇总

    查看按 stat 与 webhook 状态统计的数量、送达率和中位延迟,然后将全部结果复制为 JSON,用于工单或测试数据。

SMPP 送达回执的结构

提交短信时若将 registered_delivery 设为 1,SMSC 之后会通过接收端或收发端连接回传一个 deliver_sm PDU。其 esm_class 中的 0x04 位表示这是送达回执而非入站消息,short_message 中携带文本回执。SMPP v3.4 规范的附录 B 将这一格式作为示例给出,几乎所有 SMSC 都遵循它:id:IIIIIIIIII sub:SSS dlvrd:DDD submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DDDDDDD err:E text:…。

由于附录 B 只是示例而非严格规则,真实回执会有差异:键名小写、多余空格、submit_date 带下划线、带秒的 12 位日期,或缺少 text。本解码器兼容上述所有情况,并告诉您缺少哪些字段。

  • id:SMSC 在 submit_sm_resp 中返回的消息 ID,用于把回执与您的消息对应。规范示例为 10 个字符,但许多 SMSC 使用更长的 ID,有时是十六进制。
  • sub 和 dlvrd:最初提交的消息数和已送达的消息数,均为 3 位数字。主要用于分发列表;单条短信通常为 001 和 001(或 000)。
  • submit date 和 done date:消息提交的时间和到达最终状态的时间,采用 SMSC 的时钟。
  • stat:最终或中间状态,是形如 DELIVRD 的 7 个字母代码。
  • err:3 个字符的错误码,由网络或 SMSC 自定义;000 表示无错误。
  • text:原始消息的前 20 个字符,通常被截断或为空。
  • 可选 TLV 会以更清晰的形式重复这些数据:receipted_message_id(0x001E)、message_state(0x0427)和 network_error_code(0x0423)。

DLR stat 状态码及含义

SMPP v3.4 定义了八种消息状态。ENROUTE 和 ACCEPTD 为中间状态,其余为最终状态。我们的 API 将所有渠道统一为六种 webhook 状态(SUBMITTED、SENT、DELIVERED、READ、FAILED、REJECTED),解码器会为每个 stat 值显示最接近的对应状态。该映射仅供参考:适用于您账户的确切规则会在开通阶段确认。

  • DELIVRD(message_state 2):已送达手机。最接近的 webhook 状态:DELIVERED。
  • ACCEPTD(6):正式含义是「客服代用户人工读取」,但多数 SMSC 把它当作「网络已接受」的中间回执发送。最接近:SENT。
  • ENROUTE(1):仍在传输中,例如排队等待重试。最接近:SENT。
  • UNDELIV(5):无法送达,例如号码无效或未激活。最接近:FAILED。
  • EXPIRED(3):在有效期结束前未能联系到手机,常因手机关机或不在服务区。最接近:FAILED。
  • DELETED(4):送达前被删除,例如通过 cancel_sm。最接近:FAILED。
  • REJECTD(8):被网络或防火墙拒绝,例如 Sender ID 未报备或内容被拦截。最接近:REJECTED。
  • UNKNOWN(7):SMSC 没有最终状态。请视为未确认,而不是已证实的失败。

err 错误码:为什么没有通用列表

err 字段宽度为三个字符,SMPP 规范并未定义其取值。000 始终表示无错误,但非零值来自 SMSC 厂商、运营商或中间的聚合商。有些 SMSC 会透传 GSM MAP 错误原因(例如 MAP 错误 1 表示未知用户,27 表示用户不可达),其他 SMSC 则全部映射到自己的错误表。

如果回执带有 network_error_code TLV(0x0423),则更可靠:第一个八位组表示网络类型(3 代表 GSM),后两个八位组为错误码。若 DELIVRD 回执的 err 非零,则前后矛盾,值得向服务商反馈;解码器会对此标记。

command_status 错误与送达回执的区别

SMPP 在两个时点报告问题。submit_sm_resp 中的 command_status 在毫秒内到达,说明 SMSC 是否接受了您的请求;0x00000000(ESME_ROK)表示已接受,而不是已送达。送达回执在数秒到数天后到达,携带最终结果。

command_status 的取值定义于 SMPP v3.4 的 5.1.3 节。生产环境中最常见的有:0x00000058 ESME_RTHROTTLED(超出约定的每秒消息数:请降速,并以指数退避重试)、0x00000014 ESME_RMSGQFUL(队列已满:请退避)、0x0000000A 和 0x0000000B(源或目的地址无效),以及 0x0000000D 或 0x0000000E(绑定失败或密码错误)。0x00000400 到 0x000004FF 保留给 SMSC 厂商自定义错误,遇到这些请向您的服务商咨询。

日期、时区与送达延迟

回执日期采用 YYMMDDhhmm,许多 SMSC 会追加秒数(YYMMDDhhmmss)。回执不包含时区:时间取决于 SMSC 时钟,通常为 UTC。解码器按原样显示日期,并将延迟计算为 done date 减去 submit date;只要两者来自同一时钟,就不受时区影响。

延迟是有用的质量信号。发往可达手机的健康验证码流量,通常在数秒内完成。较长的延迟随后出现 EXPIRED,说明手机可能关机或处于漫游;done 日期早于 submit 日期则说明两个时钟不一致。精度为分钟的日期无法衡量不足一分钟的延迟,因此建议选择会返回秒数的 SMSC。

在生产环境中可靠处理回执

对每个 deliver_sm 都要回复 deliver_sm_resp,即使您的处理失败,否则 SMSC 会重发并可能对该连接限速。请保存原始回执,再按消息 ID 异步且幂等地处理,因为回执可能重复或乱序到达:迟到的 ENROUTE 绝不能覆盖 DELIVRD。

如果您不想解析回执,我们的 REST 短信 API 会以统一的 webhook 状态提供同样的信息,遗漏的回执还可通过 POST /sms/resendDlr 重新推送。大流量发送方和渠道合作伙伴可使用基于 TLS 的 SMPP 连接。

送达报告常见问题

短信送达报告中的 stat:DELIVRD 是什么意思?

DELIVRD 是 SMPP 中「已送达」的消息状态:SMSC 已确认消息到达收件人的手机。它不代表消息被打开或阅读,普通短信没有已读回执。在我们的 webhook 中,它对应 DELIVERED。

UNDELIV、EXPIRED 和 REJECTD 有什么区别?

UNDELIV 表示网络无法送达,例如号码无效或未激活。EXPIRED 表示在有效期结束前一直在尝试送达,通常因手机关机或不在服务区。REJECTD 表示网络或防火墙拒绝了该消息,例如 Sender ID 未报备或内容被拦截。

SMPP DLR 中的 ACCEPTD 是什么意思?

在 SMPP v3.4 规范中,ACCEPTD 表示消息由客服代用户人工读取。实际上,多数 SMSC 和聚合商把它用作网络已接受消息的中间回执,之后还会有最终的 DELIVRD 或失败回执。

SMPP 错误 0x00000058 是什么?

0x00000058 是 ESME_RTHROTTLED:您每秒发送的消息数超出了连接所允许的上限。这是暂时性的。请降低发送速率,保持合理的未确认 submit_sm PDU 窗口,并以指数退避而非立即重试被拒绝的消息。

err:000 是什么意思?其他 err 码在哪里查?

err:000 表示无错误。非零 err 值并非 SMPP 规范所定义,而是来自 SMSC 厂商、运营商或聚合商,有些会透传 GSM MAP 错误原因。请向服务商索取其错误码表,若存在 network_error_code TLV 也请一并查看。

SMPP 送达回执使用什么日期格式?

submit date 和 done date 使用 YYMMDDhhmm,例如 2610101201 表示 2026 年 10 月 10 日 12:01。许多 SMSC 会追加秒数(YYMMDDhhmmss)。不包含时区,采用 SMSC 的时钟,通常为 UTC。

为什么我没有收到送达报告?

常见原因包括:submit_sm 中的 registered_delivery 未设为 1、只使用了发送端绑定而没有接收端绑定、目的网络不返回回执,或客户端没有确认 deliver_sm。有些线路只返回中间回执。对于 REST 流量,请检查您的 webhook 接口,并通过 /sms/resendDlr 重新推送回执。

使用此工具时,我的回执文本会被发送到别处吗?

不会。解码器完全在您的浏览器中运行。您粘贴的任何内容,包括消息 ID 或消息文本,都不会发送到我们的服务器。

更多免费工具