短信提交和发送的消息ID不一样

acr*_*075 2 sms smpp

作为SUBMIT_SM_RESP的一部分返回的消息ID与DELIVER_SM交货收据中返回的消息ID不匹配是否正确?

从阅读SMPP 3.4规范1.2我认为它会,因为附录B中的规格说明了交货收据:

SMSC在最初提交时分配给消息的消息ID.

但我发现例如在SUBMIT_SM_RESP中返回的十六进制是

c81f136b00116d53000000000b68c86e01481101
Run Code Online (Sandbox Code Playgroud)

而在DELIVER_SM中返回的小数是

14420265882147188051
Run Code Online (Sandbox Code Playgroud)

并且没有任何数量的比特显示两者或其部分之间的任何相关性.

我最初认为这是我的一个错误,但我随后在晦涩的文件中找到了短消息服务(SMS)点对点(PP)的技术实现(GSM 03.40)

§9.2.1短消息标识符不在实体之间传送,因此给定消息可能在MS和SC侧具有不同的SMI

然后

§9.3.1...因此SC/GMSC接口的消息标识符与访问的MSC/MS接口的消息标识符不同

那么,我是否正确理解消息ID对于关联提交和传送SMS无用?

Wah*_*dik 9

简短的回答

不,这不正确.

您看到这种不匹配的原因是由于您连接到的SMSC中的某些实现错误.

请继续阅读详细说明.

答案很长

GSM 03.40的摘录是正确的,但这并不意味着你的结论.以下流程将有助于解释这一点.

想象一下以下连接(<>表示SMPP连接):

ESME#1 <> SMSC#1 <> ESME#2

以下是将要发生的一些事件:

  1. ESME#1向具有送达回执请求的SMSC#1发送submit_sm.
  2. SMSC#1发回一个submit_sm_resp,message_id = 1000(由SMSC#1生成).
  3. SMSC#1通过deliver_sm将消息转发到ESME#2.
  4. ESME#2发回一个deliver_sm_resp,message_id = 2000(由ESME#2生成).

    注意:虽然SMPP 3.4规范没有提到这一点,但许多实现都使用message_id来支持送达回执.

  5. SMSC#1收到deliver_sm_resp.现在必须记住将来自ESME#2的message_id = 2000与它的message_id = 1000进行匹配.
  6. 稍后,ESME#2将带有message_id = 2000的送达回执的submit_sm发送回SMSC#1.
  7. SMSC#1将message_id = 2000从ESME#2映射到它的message_id = 2000.
  8. SMSC#1为message_id = 1000创建deliver_sm.

如果SMSC#1无法记住正确映射message_ids,它可以向ESME#1发送错误的message_id.这可能会产生各种混淆(就像你的情况一样).