作为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无用?
不,这不正确.
您看到这种不匹配的原因是由于您连接到的SMSC中的某些实现错误.
请继续阅读详细说明.
GSM 03.40的摘录是正确的,但这并不意味着你的结论.以下流程将有助于解释这一点.
想象一下以下连接(<>表示SMPP连接):
ESME#1 <> SMSC#1 <> ESME#2
以下是将要发生的一些事件:
ESME#2发回一个deliver_sm_resp,message_id = 2000(由ESME#2生成).
注意:虽然SMPP 3.4规范没有提到这一点,但许多实现都使用message_id来支持送达回执.
如果SMSC#1无法记住正确映射message_ids,它可以向ESME#1发送错误的message_id.这可能会产生各种混淆(就像你的情况一样).