RoR + SMS:用于发送/接收SMS的Rails Web应用程序体系结构?
哪种Web应用程序体系结构可以很好地接收/发送SMS文本消息? "体系结构"是指特定的体系结构,而不是一般的体系结构,例如MVC。
背景:我正在构建一个Web应用程序,该应用程序接收来自/向手机发送查询的查询。应用程序设计(和业务模型)期望通过短信与手机设备进行通信。 IOW:没有MVC网页"视图"。手机屏幕实际上是"视图"。
解决方案
这取决于我们将如何接收和发送SMS消息。
有一个特定的短消息协议(SMPP http://en.wikipedia.org/wiki/SMPP)。
为此,我们将需要一个SMPP服务器。
如果我们使用HTTP提供程序上的各种SMS中的一种(例如Clickatell http://www.clickatell.com),则可以使用诸如RoR之类的Web框架,因为发送和接收SMS消息实际上都是Web请求。 。
在这种情况下,系统视图是对网关的HTTP响应,而不是手机屏幕。实际上涉及很多步骤:
"手机->蜂窝网络->网关->服务",然后回复:"手机<蜂窝网络<网关<服务"
我会问这是否真的是一个Web应用程序。如果视图层是SMS,则不必使用Internet进行传输,则可以使用硬件连接到手机网络。
如果我们想使用商业化的http / sms网关,那么有一篇很好的文章介绍了如何使用Rails应用程序中的Ruby Clicktell gem。似乎是尝试的好方法。
在使用rails之前,我已经做过其中之一。我创建了一个预算跟踪器,可以通过手机向其发送命令。我用它来创建一份清单,这些清单是我在即将到来的薪水上需要购买/处理的物品的清单。当检查进来时,我将发送命令以将每个项目从列表中标记出来。我还包括用于查询列表的命令。这些命令看起来像" lc mar4",以在3月的预算列表中创建第四个薪水。创建列表后,无需指定列表即可发送命令,并且使脚本仅在未指定列表的情况下将命令应用于最后一个列表,并压缩其他参数。 " la court 50 p"也会在mar4列表中添加一个名为" court"的项目,该项目的值为50,标记为" p",我称之为待处理。当我负责该星期五的法庭活动时,我可以发送" lu court 50 d"(lu法庭50 d),该标签会用标签" d"将具有相同值的法庭项目更新为完成。我有一个名为" lp"的命令,它将打印当前列表。 " lp d"将在当前列表上打印所有带有" d"标签的项目。 " lsum p"将在当前列表上打印所有待处理的项目。
我做了一个空的Rails应用。制作了我的数据库模式和模型,但是没有控制器。我有一个脚本,其中包含一个pop / ssl库,该脚本在某个地方可以从我为此设置的gmail帐户下载电子邮件。从那时起,这非常简单,只需检查每条消息的新消息,确保它来自我的手机并解析该消息,并有选择地发回响应即可。 (我已将该电子邮件地址编程到手机中,并向该电子邮件地址发送文本命令)。我添加了一个cron作业,并将其设置为每分钟运行一次。
我不知道该体系结构是什么,但它基本上是一种查询第三方并根据响应执行不同操作的服务。如果我们使用短代码编写了真正的SMS,现在我想告诉我们,我认为需要大量投资才能真正实现这些功能。通过短信网关通过电子邮件发送文本消息可能会更容易开始开发。
我并不是说这是到目前为止最好的方法,将消息"推送"给我而不是每分钟检查一次会更酷,但是,我只是想在我的预算和手机之间取得平衡。