SMS提交和传递的消息ID不相同

SMS提交和传递的消息ID不相同,sms,smpp,Sms,Smpp,作为SUBMIT_SM_RESP一部分返回的邮件ID与DELIVER_SM delivery Receive中返回的邮件ID不匹配是否正确 通过阅读,我认为会,因为规范在附录B中规定了交货收据: SMSC最初分配给消息的消息ID 提交 但我发现,例如,在SUBMIT_SM_RESP中返回的十六进制是 c81f136b00116d53000000000b68c86e01481101 而交付SM中返回的十进制数为 14420265882147188051 再多的位篡改也不会显示这两个或其部分之间

作为SUBMIT_SM_RESP一部分返回的邮件ID与DELIVER_SM delivery Receive中返回的邮件ID不匹配是否正确

通过阅读,我认为会,因为规范在附录B中规定了交货收据:

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

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

c81f136b00116d53000000000b68c86e01481101
而交付SM中返回的十进制数为

14420265882147188051
再多的位篡改也不会显示这两个或其部分之间的任何相关性

起初我认为这是我的一个bug,但后来我在这个晦涩难懂的文档中发现了它

§9.2.1短消息标识符不在实体和 因此,给定消息在MS和SC处可能具有不同的smi 侧面

后来

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

那么,我是否正确理解了邮件ID对于关联SMS的提交和交付是无用的?

简短回答 不,这是不对的

您看到这种不匹配的原因是您所连接的SMSC中存在一些实现错误

请继续阅读详细解释

长话短说 GSM 03.40的摘录是正确的,但并不意味着你的结论。下面的流程将有助于解释这一点

设想以下连接(表示SMPP连接):

ESME#1 SMSC#1 ESME#2

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

  • ESME#1向SMSC#1发送提交sm和收货请求

  • SMSC#1发回一个submit#sm#resp,其中包含一条消息#id=1000(由SMSC#1生成)

  • SMSC#1通过传送sm将消息转发给ESME#2

  • ESME#2发回一个deliver#sm#resp,其中包含一条消息_id=2000(由ESME#2生成)

    注意:尽管SMPP 3.4规范没有提到这一点,但许多实现都会使用消息id来支持交付回执

  • SMSC#1接收交付sm#响应。现在它必须记住将来自ESME#2的消息_id=2000与它的消息_id=1000进行匹配

  • 稍后,ESME#2将带有消息_id=2000的送达回执的submit#sm发送回SMSC#1

  • SMSC#1将ESME#2中的消息#id=2000映射到它的消息#id=2000

  • SMSC#1为消息_id=1000创建传递sm


  • 如果SMSC#1未能记住正确映射消息#id,它可能会向ESME#1发送错误的消息#id。这可能会造成各种混乱(就像您的情况一样)。

    我的问题是,我使用32位方法将十六进制转换为十进制,而返回值的前16个字符的64位转换与交货收据匹配。所以这是我的错误,但多亏瓦希德·萨迪克确认了这两人的匹配

    谢谢你提供了翔实的答案,+1。在接受之前,我会做更多的调查。