【问题标题】:Message ID for SMS submission and delivery not the sameSMS 提交和发送的消息 ID 不相同
【发布时间】:2013-08-29 13:32:12
【问题描述】:

作为 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接口相同

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

【问题讨论】:

    标签: sms smpp


    【解决方案1】:

    简答

    不,这不正确。

    您看到这种不匹配的原因是您所连接的 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_id,它可能会向 ESME#1 发送错误的 message_id。这可能会造成各种混乱(就像您的情况一样)。

    【讨论】:

    • 感谢您提供翔实的回答,+1。在接受之前我会做更多的调查。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多