2

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

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

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

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

c81f136b00116d53000000000b68c86e01481101

而 DELIVER_SM 中返回的小数是

14420265882147188051

并且没有多少位摆弄表明两者或其部分之间有任何相关性。

我最初认为这是我的错误,但后来我在不起眼的文档中发现了短消息服务 (SMS) 点对点 (PP) 的技术实现 (GSM 03.40)

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

然后

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

那么,我是否正确理解 Message ID 对关联 SMS 的提交和传递没有用处?

4

2 回答 2

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。这可能会造成各种混乱(就像您的情况一样)。

于 2013-08-29T16:11:49.130 回答
2

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

于 2013-08-30T14:32:57.570 回答