如何使用Twilio从用户的手机号码发送文本?

时间:2015-10-17 22:06:58

标签: meteor sms twilio

我想以编程方式从我的Meteor应用程序发送短信/短信;许多人为此推荐twilio,并且有几个Meteor Twilio包(可通过atmosphere和/或谷歌搜索/ binging找到)。我不知道其中一个包装是否明显优于另一个包装,但至少现在,我正在使用abhiaayer:meteor-twilio包装。

我担心的是,当您创建Twilio帐户时,他们会为您分配一个“来自”的电话号码(显然,您不能使用自己的电话号码)。也许我误解了它是如何工作的,但在我走这条路之前,我想知道短信的发送者 - 我的应用程序的用户 - 是否能够使用他们的电话号码作为“发件人”/发件人电话号码。

毕竟,我的应用程序的重点是允许用户向朋友/家人发送多个相同的文本(例如“你在哪里?”或“你还好吗?”),然后得到回复从他们回来(到他的手机,而不是Twilio提供的号码)。

如果可以使用Twilio和你自己的电话号码作为“发送”/发送号码,有没有人得到关于Meteor包首选项(abhiaayer,andreioprisan,DispatchMe)的建议以及如何从Meteor完成?

我认为基本代码几乎相同,无论使用哪个包;例如,这是andreioprisan package

中的一个例子
twilio = Twilio(ACCOUNT_SID, AUTH_TOKEN);
  twilio.sendSms({
    to:'+16515556677', // Any number Twilio can deliver to
    from: '+14506667788', // A number you bought from Twilio and can use for outbound communication
    body: 'word to your mother.' // body of the SMS message
  }, function(err, responseData) { //this function is executed when a response is received from Twilio
    if (!err) { // "err" is an error received during the request, if any
      // "responseData" is a JavaScript object containing data received from Twilio.
      // A sample response from sending an SMS message is here (click "JSON" to see how the data appears in JavaScript):
      // http://www.twilio.com/docs/api/rest/sending-sms#example-1
      console.log(responseData.from); // outputs "+14506667788"
      console.log(responseData.body); // outputs "word to your mother."
    }
});

我确实创建了一个Twilio帐户,并且他们分配了我的帐户和SID的“起始”号码(不是我的实际手机号码),但我不知道AUTH_TOKEN应该是什么。

如果Twilio无法实现我的意图,我可以做的只是编写应用程序,以便将所有选定的“到”数字复制到剪贴板,以便用户可以将它们粘贴到他的短信屏幕中“收件人“文本框;但是我希望能够让用户轻松点按一下按钮。

1 个答案:

答案 0 :(得分:4)

我认为你不能这样做(使用Twilio从用户自己的手机号码发送)。如果您的应用是实际的移动应用而不是网络应用,您可以使用Android或iOS API从用户的手机发送短信。我不确定这方面的详细信息,当然对于iOS来说,看起来你不能完全自动地这样做,原因显而易见(你可能只是垃圾邮件所有用户的联系人,例如会给用户带来金钱成本。)

这里有一个Cordova插件可以做你想做的事情:https://github.com/cordova-sms/cordova-sms-plugin(我还没有使用它,所以不能保证,但它似乎是积极维护的)。

如果它是一个网络应用程序,你建议将数字复制到剪贴板是迄今为止最直接的解决方案,我建议在第一个实例中。为了完整起见,我在下面列出了一些细节和注意事项,以便您可以通过几种方式与Twilio(或其他替代品,如Nexmo)进行双向通信,以防有人发现它有用。尽管如此,这并不完全是微不足道的。单向沟通很多更容易!

通过API发送

用户可以在您的应用中输入消息并选择将其发送给谁。然后,您的应用程序将连接到您的服务器,该服务器使用Twilio API向N个收件人发送N条消息。这些消息似乎来自Twilio提供的号码。

通过短信发送

用户手动向您的Twilio号码发送短信,然后您从Twilio收到服务器的webhook,其中包含消息详细信息。您必须进行处理以确定将消息转发给谁,然后使用Twilio API执行此操作。收件人将再次看到来自Twilio提供的号码的消息。

回复

当收件人回复邮件时,Twilio会向您发送包含详细信息的webhook,您可以确定是谁发送了原始邮件并将回复转发回原始发件人。

号码池

这里一个明显的缺陷是,如果多个用户向同一个人发送消息,那么就无法告诉他们回复哪个消息。没有通过短信传递的消息ID,因此您必须使用多个发送号码(每个唯一发件人一个给特定的收件人)。所需的数量基本上是一个用户必须回复的不同发送者的最多数量(这通常不可能预先解决,因此您必须调用API来动态提供新的数字。)< / p>

举一个更具体的例子说你有2个用户( S1 &amp; S2 )和3个收件人( R1 R2 &amp; R3 )。您有1个Twilio提供的号码( N1 )。

  • S1 通过您的应用向 R1 发送消息,您使用 N1 通过Twilio API发送消息。 R1 会收到来自 N1 的消息。如果他们回复,您会收到来自 R1 N1 的消息,因此您知道需要将其转发到 S1

  • S1 通过您的应用向 R2 发送消息, R2 尚未收到任何消息,因此您可以重复使用 N1 发送消息。 R2 回复 N1 ,您可以再次将其转发至 S1 。如果这是在应用内交付,没有其他问题,如果通过短信转发回复,那么我们需要提供一个新号码( N2 )以启用 S1 回复 R2 的回复。

  • S2 通过您的应用向 R3 发送消息,因为您可以重复使用 N1 并仍然正确路由回复。

  • 现在,如果 S2 R1 发送消息,我们就会发现 R1 已收到来自 S1 <的消息< / strong>使用数字 N1 。在这种情况下,我们无法使用 N1 ,因为我们无法识别回复的目的。如果我们还没有,我们需要设置一个新号码( N2 ),现在我们可以发送消息 R1 。当 R1 回复 N2 时,我们知道回复需要转发到 S2

发送给一个收件人的用户越多,您的号码池就越大(也越贵)。它可能值得实现某种类型的超时(比如72小时),其中收件人可以回复。因此,在这种情况下,如果 S1 通过 N1 将消息发送到 R1 后超时已过期,我们可以重复使用 N1 用于 S2 R1 之间的通信。显然,这并非完全万无一失,但它可以降低成本。

身份

从汇总号码发送的另一个问题。我通过应用程序向Dan发送消息,然后他从随机数字中收到该消息:

  你好Dan,你好吗?

丹如何知道是谁发送了这条消息?您必须为每条消息添加一些标识符(或至少在每个会话线程中添加第一个标识符)。