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

时间:2013-08-29 13:32:12

标签: sms smpp

作为SUBMIT_SM_RESP的一部分返回的消息ID与DELIVER_SM送达回执中返回的消息ID不匹配是否正确?

从阅读SMPP 3.4 spec 1.2我认为会这样做,因为附录B中的规格说明了送货单:

  

SMSC最初分配给消息的消息ID   提交。

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

c81f136b00116d53000000000b68c86e01481101

虽然在DELIVER_SM中返回的小数为

14420265882147188051

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

我最初认为这是我的错误,但我随后在晦涩的文件Technical realization of the Short Message Service (SMS) Point-to-Point (PP) (GSM 03.40)中找到了

  

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

以后

  

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

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

2 个答案:

答案 0 :(得分: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。
  9. 如果SMSC#1无法记住正确映射message_ids,它可能会向ESME#1发送错误的message_id。这可能会产生各种混淆(就像你的情况一样)。

答案 1 :(得分:2)

我的问题是我使用32位方法从十六进制转换为十进制,而返回值的前16个字符的64位转换与交货收据相匹配。所以这是我的错误,但感谢Wahid Sadik确认两者有望匹配。