通过SMPP接收SMS

时间:2011-01-08 09:08:18

标签: smpp

我有一个项目即将到来,我需要通过特定的移动运营商发送和接收消息,该运营商仅提供SMPP接口。整个项目将是一个托管网站。我已经阅读了很多内容,但我还不太了解我方实际需要使用该协议的内容。

我的应用程序是否应该尝试保持与smpp的持续连接? 我可以简单地连接,发送消息然后断开连接吗?

是否正在接收基于推送或拉动的消息?

感谢您的帮助。

3 个答案:

答案 0 :(得分:8)

SMPP是一种点对点协议。这应该意味着SMS Gateway(您的身边)和SMSC(您的移动运营商)需要建立正确的绑定/连接。即使没有SMS或DLR要发送/接收,也会连续交换smpp PDU(enquire_link / inquire-link_resp)以确保绑定已建立。 详细地说,如果你发送一个enquire_link PDU并且没有得到响应(enquire_link_resp),那么绑定就会被破坏。您的短信将不会被送达(将继续排入您的网关商店),您将不会收到MO(传入短信)或DLR(传送报告)。要重新建立连接,您应该重新启动连接。

所以,我的答案是你需要一个与SMSC的持续连接。

答案 1 :(得分:4)

您声明要接收消息,因此至少需要bind_receiver。因为您不知道消息何时进入,所以您必须经常连接,而不是在每次事件后断开连接。

关于“推或拉”的问题,这取决于你如何解决第一个问题。如果您可以构建一个持续连接的解决方案,那么结果就是推送(运营商会在收到消息后立即将其推送给您)。如果(由于某种原因)你不能保持连续的连接,你最终会建立一个拉动机制。您将在X秒内连接到运营商,看看他们是否有等待您的消息。

我确实需要强调2个陷阱:

  1. 如果您没有连接,世界上许多运营商都不会存储甚至接受邮件,因此,根据您与之交互的运营商,您可能会被迫使用连续连接。
  2. 大多数运营商不允许您快速连续打开和关闭连接。断开连接后,无法重新连接X秒的时间范围。

因此,持续的连接确实是可行的方法。或者,您可以查看像Nexmo这样的公司,每次收到消息时都会为您提供HTTP呼叫。

我不确定您开发应用程序的语言是什么,但如果您使用任何流行语言(Java,PHP,Perl),那么有些模块可以为您处理基本的SMPP连接。快速谷歌搜索您的语言和“SMPP客户端”将为您提供参考列表。

答案 2 :(得分:0)

使用SMS聚合器而不是直接连接移动运营商可能是更好的解决方案。然后,您可以通过HTTP API轻松连接到此(执行URL调用以发送SMS,获取URL回调到您的服务器以接收SMS和传送报告)。

通过一些调整(例如持久连接等),您可以获得与smpp几乎相同的性能。

这是找到支持运营商的聚合器的良好开端:http://www.onehop.co/