如何在jsmpp中将消息分隔给第三方绑定器

时间:2016-04-09 01:07:35

标签: java sms smpp jsmpp

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

这是我的情景。

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

然后,第三方活页夹(参与批量短信推送的公司)通常应该直接绑定到 SMSC 通过 SMPP绑定到我的网关与我的 SMPP 服务器的连接(作为 SMSC 对他们进行排序)

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

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

当我只有1个第三方活页夹时,此方案效果很好。

但现在我们想处理一个更常见的情况,即我们有很多第三方活页夹

由于 SMSC 只有2个短代码可以向我发送消息,我怎么知道哪个第三方活页夹拥有 SMSC 响应?

我有一个令人讨厌的低效选项,可以将回复转发给所有连接的第三方。

除上述内容外,唯一的另一个选择是为每个第三方活页夹 SMSC 获取不同的短代码,这是我的方案不符合成本效益。

1 个答案:

答案 0 :(得分:1)

首先,您可以轻松地将所有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 -> third_party_id的最终DLR后,请考虑删除message_id对。
  4. MO消息的情况要糟糕得多。对多个客户端(第三方)使用单个短代码的唯一可能(但仍然非常糟糕)的方法是在数据上使用TTL和超时的脆弱组合。只有当您期望的每个MO都是对先前MT消息的回复时,它才有意义。

    1. 使用TLV或额外SMPP links分隔需要接收方回复的传入MT。我们打电话给那些MT Questions
    2. 处理Questions这样的事情: MT
    3. 处理MO消息(Answers),如下所示: MO
    4. UPD。文字阐述

      为了了解MO消息的正确第三方(不是发送报告),您需要一些关于消息发送给谁的其他信息。此信息可能来自第三方或订户(首先发起MO消息的用户)。我的图表正式描述了第三方为您提供此信息的情况。

      1. 第三方向您发送收件人希望为Answered的MT邮件。
      2. 您在数据库中做了一个注释,如果收件人在接下来的N分钟内向您发送了MO消息,则应将此Answer转发给上述第三方。
      3. 我很抱歉我的答案并非针对jsmpp,但我对这个库知之甚少,但是,我也相信,无论你的乐器如何,一旦你理解了算法,它应该相当容易。< / p>