如何在jsmpp中将消息分离到第三方活页夹

How to separate messages to third party binders in jsmpp

我正在使用 jsmpp 库开发短信网关。

这是我的场景。

我在 2 个连接上绑定到 SMSC(电信公司),并通过 SMSC 分配给我的 2 个简码(例如 30002 和 30003)接收消息.

然后,第三方绑定器(涉及群发短信推送的公司)通常应该直接绑定到 SMSC 绑定到我的网关通过 SMPP 连接到我的 SMPP 服务器(它充当它们的某种 SMSC

第三方活页夹 将消息发送到 SMPP 服务器,我捕获这些消息,将它们排队并发送到主 SMSC(电讯公司).

电信公司随后回复送达报告和群发消息报告中的消息以及我转发给第三方活页夹的其他数据。

当我只有 1 个 第三方活页夹.

时,此方案效果很好

但现在我们想要处理一个更一般的情况,我们有很多 第三方绑定器

因为我只有 2 个 短代码 可用 SMSC 将消息转发给我,我怎么知道第三个中的哪一个派对活页夹拥有 SMSC 响应?

我有一个令人讨厌且效率低下的选择,即将回复转发给所有关联的第三方。

除上述之外唯一的选择是从 SMSC 中为每个 获取不同的 短代码 第三方活页夹,这对我的场景来说不划算。

首先,您可以非常轻松地将所有 DLR 转发给正确的第三方。为此,您必须在您选择的数据库中存储一些额外的数据(如果您只有 1 个应用程序节点且流量较低,即使 SQLite 也足够;否则寻找一些 NoSQL 解决方案):

  1. 每次收到来自电信 SMSC 的 submit_sm_resp 数据包时,开始存储一对(实际上是键值对)message_id -> third_party_id
  2. 每次收到来自 SMSC 的 deliver_sm 数据包时,从数据包中检索 message_id,然后在您的数据库中查找此 message_id 以找到转发它的第三方到.
  3. 在成功转发 message_id 的最终 DLR 后考虑删除 message_id -> third_party_id 对。

MO 消息的情况更糟。为多个客户端(第三方)使用单个短代码的唯一可能(但仍然非常糟糕)的方法是对您的数据使用 TTL 和超时的脆弱组合。它也只有在您期望的每个 MO 都是对先前 MT 消息的回复时才有意义。

  1. 使用 TLV 或额外的 SMPP links 将需要接收方回复的传入 MT 分开。我们称这些 MT 为 Questions.
  2. 处理 Questions 这样的事情:
  3. 像这样处理 MO 消息 (Answers):

更新。文字阐述

为了知道 MO 消息(不是送达报告)的正确第三方,您需要一些关于消息收件人的额外信息。此信息可能来自第三方或订阅者(首先发起 MO 消息的人)。我的图表正式描述了第三方向您提供此信息的情况。

  1. 第三方向您发送了他们希望收件人Answered发送的 MT 消息。
  2. 你在数据库中记下,如果收件人在接下来的 N 分钟内向你发送了一条 MO 消息,那么这条 Answer 应该转发给上述第三方。

很抱歉我的回答不是特定于 jsmpp 但我对这个库知之甚少,但是,我也相信一旦你理解了算法,无论你使用什么乐器,实现它应该相当容易.