在您的 Web 应用程序中建立移动文本消息传递

了解如何通过 Web 服务器发送和接收文本消息

移动消息传递(特别是短信息服务,即 SMS)是接触用户的重要通信渠道。消息传递也是消费者移动体验的核心部分。然而,由于与封闭的电信服务进行交互存在一些障碍,所以实现移动消息传递应用程序较为困难,成本也很高。本文观察了移动消息传递的背景和挑战,并讨论了应对这些挑战的一些技术方法。在阅读本文之后,您会做好将交互式的文本消息传递整合到您自己的应用程序之中的准备。

Michael J. Yuan, 首席科学家, Ringful Health

http://www.ibm.com/developerworks/i/p-myuan.jpgDr. Michael Yuan 是企业计算和消费者移动技术领域的著名技术专家。他是 5 本有关软件工程方面的书籍的作者,并已在同行评议和行业期刊上发表过 40 多篇文章。Dr. Yuan 在新兴的消费者驱动的医疗保健领域是先行者。他在 Ringful Health 从事的工作已经被全国各大媒体(如华尔街日报纽约时报 以及 洛杉矶时报)广泛地报道并获得认可。



2012 年 5 月 25 日

进入移动消息传递领域的阻碍

移动消息传递的 “封闭” 特征是开发人员进入这个领域的主要阻碍。然而,也正是由于存在这样的阻碍,能够处理移动消息传递的应用程序将占据显著的优势。举例来说,Twitter 源自一家文本消息传递企业,因此 Twitter 微博的字数有着 140 个字符的限制,后来 Twitter 成功发展为目前这样的庞大社交平台。另外一个例子就是 Facebook,这家公司在很久以前就设定了积极的 SMS 计划(通过您的手机向 FBOOK 发送文本)。

消息传递是移动体验的关键组成部分。2010 年,美国人通过手机收发的文本消息超过 2.1 万亿条。在全球范围内,活跃的移动消息传递用户数量远超电子邮件用户,预计两者为 2 比 1 的比例,这使得移动消息传递可能成为当今最普遍、最有效的通信渠道。除此之外,与电子邮件等其他通信渠道相比,移动消息传递附带的垃圾信息更少,也更有可能在送达后立即被接受者阅读。

此外,与作为开放互联网标准的电子邮件不同,移动消息传递是通过封闭的电信基础设施实现的。这也使移动消息传递服务的开发更为困难和昂贵。在本文中,我将为您介绍几种低成本甚至是免费的技术,以便将移动消息传递整合到您的应用程序之中。

移动消息传递基础

什么是 “推送” 通知

随着 iPhone 和安卓手机这类超级手机的兴起,现在完全可以绕过运营商,通过标准 TCP/IP 网络直接向这些手机发送消息。这些消息就称为推送 消息。推送消息是通过 Apple 和 Google 掌控的互联网服务器发送的。推送消息从根本上就是设计用于与应用程序通信的。它们可以发送文本、多媒体文件和特定于应用程序的数据,例如警告声音和显示在应用程序图标上的标记等。推送通知非常适合智能手机应用,但与基于运营商的移动消息传递相比,它们的普及性和可靠性都较差。

SMS 是最常用的移动消息传递渠道。实际上,每一部手机都能收发 SMS 消息,字数限制为 160 个字符。您还需要考虑的是,不同运营商设置的字数限制是不同的,SMS 的安全字数限制为 140 个字符。

多媒体消息服务 (MMS) 增强了 SMS,允许用户通过手机收发照片和短小的视频剪辑。这类消息的大小通常限制为 300KB。从根本上来说,MMS 使用 SMS 向用户发出信号,在用户打开消息时,手机将通过标准电子邮件协议检索多媒体内容。MMS 在年轻人间非常流行,但整体的市场渗透率仍然相对较低,部分原因在于不同运营商之间的媒体负载格式不兼容。

SMS 和 MMS 主要用于对等通信,使用户能够彼此发送消息。作为应用程序开发人员,我们关注的主要是与应用程序之间来回收发消息。用专业术语来说,我们关注的是移动终止 (MT) 消息(从应用程序发送到移动设备)和移动始发 (MO) 消息(从移动设备发送到应用程序)。为了与手机来回收发消息,应用程序需要与电信公司管理的网关服务器进行交互。


免费发送 SMS 和 MMS

通过 SMS 或 MMS 向一个手机号码发送 MT 消息实际上非常简单,只需知道收信人的电话号码和无线运营商即可。几乎所有无线运营商都具有可接收电子邮件消息并将其以 SMS 或 MMS 消息的形式转发至手持设备的电子邮件网关。例如,对于 AT&T 订户,您可以通过将电子邮件发送至 number@txt.att.net 向他们发送 SMS 消息。AT&T 会将电子邮件消息截至 140 个字符,并转发给手机号码。图 1 展示了消息在电话上的显示效果。

图 1. 运营商的电子邮件网关转发的一条 SMS 消息
运营商的电子邮件网关转发的一条 SMS 消息

与此类似,包含照片附件的电子邮件可作为 MMS 消息,通过运营商的 MMS 电子邮件网关转发至电话。表 1 显示了美国主要运营商的 SMS 和 MMS 电子邮件地址。使用收信人的 10 位电话号码替换电子邮件地址中的 “number” 即可(例如,5125551234@txt.att.net)。

表 1. 美国主要无线运营商的 SMS 和 MMS 网关电子邮件地址
运营商SMS 网关MMS 网关
AT&Tnumber@txt.att.netnumber@mms.att.net
Verizonnumber@vtext.comnumber@vzwpix.com
T-Mobilenumber@tmomail.netnumber@tmomail.net
Sprintnumber@messaging.sprintpcs.comnumber@pm.sprint.com
Virgin Mobilenumber@vmobl.comnumber@vmpix.com

电子邮件网关方法适合发送一次性警告或提醒类的消息,对于其他大多数用例而言,该方法存在着严重的局限性:

  • 消息来自随机电话号码,采用的格式非常糟糕。看起来很不专业。
  • 用户无法回复消息,也无法向您的应用程序发回任何信息。这就将许多类别的应用程序排除在外,其中包括最成功的 SMS 应用程序,如 Twitter 和 American Idol。
  • 由于消息每次都来自不同的电话号码,因此用户无法标记电话号码,并将该号码与您的应用程序关联起来。
  • 在用户注册过程中,您将不得不要求用户提供有关其无线运营商的信息,以便映射到正确的电子邮件网关。

为了采用专业的方式与用户交互,您需要使用可等同于您的服务的一致的电话号码来收发消息。过去,这就是短代码的用武之地。


使用短代码

您可能每天都会看到短代码。短代码就是您在饭店、在体育赛事在房地产公司的待售标志上看到的 5 位号码。他们会请您 “发送短信至 12345” 以便获得更多信息或者优惠券等。短代码是由 “消息聚合服务商” 代表电信公司管理的。美国的主要聚合服务商包括 mblox、Sybase 365 等。您可以向其中的某家聚合服务商注册一个短代码,他们将提供基于 HTTP 的 Web 服务 API,允许您通过短代码向任何电话号码发送消息 (MT),并在有任何人向您的短代码发送消息时收到回叫 (MO)。这看似简单,但通过这种方式使用短代码存在一些严重的障碍:

  • 首先,获得专用短代码的成本很高。每个月需要数千美元的费用,还有数目庞大的初始费用和按消息计算的费用。
  • 其次,短代码由 Mobile Marketing Association (MMA) 管理。MMA 要求所有应用程序经过各运营商的预先认可。这是一个时间漫长、成本高昂的过程。

幸运的是,一些企业提供了共享的短代码,使您能够获得以较低的成本利用短代码的优势。TextMarks 就是这个领域的领先提供商之一。TextMarks 有一个非常容易记住的短代码:41411。 这个短代码由许多应用程序共享,各应用程序通过关键字彼此区分。举例来说,我向 TextMarks 注册了关键字 conf,为此关键字创建了一个回叫 URL(请参见图 2)。回叫 URL 可以包含引用部分传入的 SMS 的模板。例如,\p 引用传入消息发信人的电话号码,\0 在关键字后引用消息文本。

图 2. 在 TextMarks 中注册一个关键字和回叫 URL
在 TextMarks 中注册一个关键字和回叫 URL。

TextMarks 会将以 CONF 开始的所有消息转发至回叫 URL。例如,如果有人使用手机号码 5125551234 发送文本 “conf Michael Jack” 至 41411,那么我的回叫 URL 就会收到下面这样的 GET 请求:

清单 1. GET 请求示例
http://app.ringful.com/conf? attendees=Michael+Jack& phonenumber=15125551234

应用程序会处理请求。它将解析消息、将会议参与者保存到数据库中、提醒参与者,随后生成一条响应,回发给消息发送者。来自回叫 URL 的 HTTP 响应主体将作为回复文本消息发回给用户。这使得构建响应用户输入的 SMS 应用程序倍加轻松(例如,返回餐厅的优惠券或者房屋的销售价格)。

只要用户使用您的关键字向您发送消息,就会注册成为该关键字的订阅者。TextMarks 利用其开发人员 API,允许您随时向订阅者发送 SMS 消息,您可以一次向所有订阅者发送消息,也可以每次向一名订阅者发送消息。以下 API 调用会向您的关键字的所有订阅者发送一条消息:

清单 2. 向您的关键字的所有订阅者发送一条消息的 API 调用
POST TO: http://dev1.api2.textmarks.com/GroupLeader/broadcast_message/
Parameters:
    auth_user=YOUR_USERNAME
    auth_pass=YOUR_PASSWORD
    api_key=API_KEY_FROM_TEXTMARKS
    tm=YOUR_KEYWORD
    msg=The+message+to+send+out

以下调用会向您的关键字的一名订阅者发送一条消息:

清单 3. 向您的关键字的一名订阅者发送一条消息的 API 调用
POST TO: http://dev1.api2.textmarks.com/GroupLeader/send_one_message/
Parameters:
    auth_user=YOUR_USERNAME
    auth_pass=YOUR_PASSWORD
    api_key=API_KEY_FROM_TEXTMARKS
    tm=YOUR_KEYWORD
    to=RECIPIENT_PHONE_NUMBER
    msg=The+message+to+send+out

尽管 TextMarks 非常有用,但对于用户来说,记忆您的关键字,并在每次向您发送消息时使用这个关键字作为其文本消息的前缀,这些仍然非常繁琐。此外,您不能对未首先使用您的关键字向您发送消息的人(也就是非订阅者)发送 MT 消息。短代码和关键字的整个就是为大规模的消息广播设计的,与许多应用程序所需的一对一交互截然相反。对于一对一的交互,长代码或许是最好、最经济的选择。


使用长代码

“长代码” 这个术语表示常规的十位电话号码。不必每月支付数千美元的费用来租用短代码,您实际上可以通过低至每月 1 美元的价格租用常规电话号码(如果使用 Google Voice,甚至可以免费使用)。这些电话号码并非与实际电话关联,因此也称为 “虚拟号码”。随后您就可以通过这些虚拟号码收发移动消息。

Twilio 不仅仅是移动消息

Twilio API 还允许您通过虚拟号码接打语音电话,它支持类似于 Skype 的 VoIP 通话。在 Twilio 的网站和 API 文档中可以找到更多信息(请参见 参考资料 部分提供的链接)。

Twilio 是与长代码交互的 Web 服务的领先提供商。利用 Twilio API,您可以接收发送给该电话号码的任何消息,并向任何手机号码发送消息,包括国际电话号码在内。

Twilio 提供了一个管理控制台,允许您管理多个虚拟号码。这些号码每个月的费用仅为 1 美元,因此您也可以为每个应用程序租用一个号码,使用户永远不必使用任何关键字来区分应用程序。Twilio 对于通过其 API 发送或接收的每一条 SMS 收取 1 美分的费用。

Twilio web 服务 API 设计精良、易于使用。Twilio 为开发人员提供了多种编程语言的 SDK,从而进一步实现了简化。这里给出了基于其 Java SDK 的一些示例。下面的清单展示了如何向手机号码发送一条消息。

清单 4. 通过 Twilio API 向任何手机号码发送一条 SMS 消息
public static void sendSms (String from, String to, 
        String msg) throws Exception {
    TwilioRestClient client = 
        new TwilioRestClient YOUR_API_KEY, null);
    String path = "/2010-04-01/Accounts/"+
        client.getAccountSid()+"/SMS/Messages";

    Map<String, String> vars = 
        new HashMap <String, String> ();
    vars.put("From", from);
    vars.put("To", to);
    vars.put("Body", msg);

    TwilioRestResponse tresp = 
        client.request(path, "POST", vars);
    if (tresp.isError()) {
        throw new Exception ("Twilio response error: " 
            + tresp.getResponseText());
    }
}

对于 MO 消息,Twilio 的处理方式与 TextMarks 相同:它将消息转发至管理控制台中注册的回叫 URL,并使用来自回叫 URL 的 HTTP 响应主体回复用户。举例来说,如果一名用户向我的虚拟号码发送了 “Hello World”,则我注册的回叫 URL 将收到如下一条 HTTP GET 请求:

http://my.callback.com/process?
    From=5125551234&To=3215554567&Body=Hello+World

请注意,Twilio 调用有一个 To 参数,标识消息接收者的虚拟号码。这个参数必不可少,因为一个 Twilio 帐户可以注册多个虚拟号码。随后,我的呼叫 URL 中的 servlet 即可处理传入的消息,并生成影响。


MMS 的未来展望

至此为止,除了 MMS 电子邮件网关之外,我讨论的全部服务处理的都是 SMS 交互。MMS 从本质上就比 SMS 复杂,因为必须针对每一种手机、每一家运营商调整多媒体内容。举例来说,每种设备都有不同的屏幕分辨率,需要不同的视频格式,每个网络对于消息大小的上限都有着自己的限制。

即便 Twitter 也仅仅是从 2011 年 9 月才开始支持有限美国运营商的 MMS,而此时其 SMS 服务已经大获成功,这进一步体现了 MMS 的难度。

幸运的是,Hook Mobile 等众多新兴企业都在开发和营销支持运营商间 MMS 消息传递的新型 Web 服务。Hook Mobile 的 MMS API 尚未公开发布(您必须注册为合作伙伴),但无疑是一个值得关注、令人兴奋的领域!

对于智能手机用户,推送消息是 MMS 的一种极具吸引力的替代方案,因此我将在未来的文章中介绍推送。

参考资料

学习

  • CTIA 是移动消息使用情况和渗透率的权威来源。
  • MMA 移动广告指南 是有关通过移动消息传递营销接触客户的获准方法和流程的业界指南。
  • TextMarks 是基于其短代码 41411 的低成本 SMS 解决方案的领先提供商。
  • Hook Mobile 是跨运营商 MMS 解决方案的领先提供商。

获得产品和技术

  • Twilio 通过其易于使用的 Web 服务 API 提供了基于长代码的 SMS 和语音 API。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=移动开发, Web development
ArticleID=817177
ArticleTitle=在您的 Web 应用程序中建立移动文本消息传递
publish-date=05252012