1

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

这是我的场景。

我通过 2 个连接绑定到SMSC(电信公司),并通过 2 个简码接收消息,例如 30002 和 30003 ,由 (电信公司),并通过SMSC

然后,通常应该直接绑定到SMSC的第三方绑定器(参与批量短信推送的公司)通过SMPP连接到我的SMPP服务器(用作SMSC的一种)的

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

电信公司随后回应发送报告和来自批量消息报告的消息以及我转发给第三方活页夹的其他数据进行响应。

当我只有 1个第三方活页夹时,这种情况效果很好时,这种情况效果很好。

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

由于我只有 2 个短代码可供SMSC将消息转发给我,我如何知道哪个第三方活页夹拥有SMSC响应?

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

除了上述之外,唯一的其他选择是从SMSC为每个第三方 binder获取不同的短代码,这对我的方案来说并不划算。

4

1 回答 1

1

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

  1. 每次从电信 SMSC 收到 submit_sm_resp 数据包时,就开始存储一对(实际上是键值)message_id -> third_party_id
  2. 每次您从 SMSC 接收到 Deliver_sm 数据包时,从数据包中检索该message_id数据包,然后message_id在您的数据库中查找该数据包以查找要将其转发给哪个第三方。
  3. 在成功转发最终 DLR 后,请考虑删除该message_id -> third_party_idmessage_id

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

  1. TLV使用或 extra分隔需要从接收方回复的传入 MT SMPP links。让我们称之为 MT Questions
  2. 处理Questions这样的事情: 公吨
  3. 像这样处理 MO 消息 ( Answers): 莫

UPD。文本阐述

为了了解 MO 消息的正确第三方(而不是传递报告),您需要一些有关消息发送给谁的附加信息。此信息可能来自第三方或订阅者(首先发起 MO 消息的人)。我的图表正式描述了第三方向您提供此信息的情况。

  1. 第三方向您发送他们希望Answered接收者发送的 MT 消息。
  2. 您在数据库中记下,如果收件人在接下来的 N 分钟内向您发送 MO 消息,Answer则应将其转发给上述第三方。

很抱歉,我的回答并不具体,jsmpp但我对这个库知之甚少,但是,我也相信,一旦你理解了算法,无论你的仪器如何,实现算法都应该相当容易。

于 2016-04-09T19:00:31.047 回答