如何使用 Twilio 从用户的单元格 phone 号码发送文本?
How to send a text from the user's cell phone number using Twilio?
我想通过我的 Meteor 应用程序以编程方式发送短信/文本消息;许多人为此推荐 twilio,并且有几个 Meteor Twilio 包(可通过 atmosphere and/or googling/binging 找到)。我不知道这些软件包中的一个是否明显优于另一个,但至少现在,我正在使用 abhiaayer:meteor-twilio 软件包。
我担心的是,当您创建 Twilio 帐户时,他们会为您分配一个 "from" phone 号码(显然,您不能只使用自己的号码)。也许我误解了它是如何工作的,但在我沿着这条路走得太远之前,我想知道短信的发送者——我的应用程序的用户——是否能够使用他们的 phone 号码作为 "from"/发件人 phone 号码。
毕竟,我的应用程序的全部意义在于允许用户向 friends/family 发送多个相同的文本(例如 "where are you?" 或 "are you okay?"),然后得到他们的回复(对 his phone,而不是对 Twilio 提供的号码)。
如果可以将 Twilio 与您自己的 phone 号码用作 "from"/发送号码,有没有人对 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 帐户,并拥有他们分配给我的帐户的 "from" 号码(不是我的实际手机 phone 号码)和 SID,但我不知道这是什么AUTH_TOKEN 应该是。
如果 Twilio 无法实现我的意图,我可能只是编写应用程序,以便可以将所有选定的 "to" 数字复制到剪贴板,以便用户可以将它们粘贴到他的短信屏幕的 "recipients" 文本框;但我希望能为用户提供只需点击一个按钮的奢侈体验。
我认为您无法执行此操作(使用 Twilio 从用户自己的手机号码发送)。如果您的应用是实际的移动应用而不是 Web 应用,您可以使用 Android 或 iOS API 从用户的 phone 发送短信。我不确定这方面的细节,当然 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 会向您发送一个包含详细信息的网络钩子,您可以确定是谁发送了原始邮件并将回复转发回原始发件人。
号码池
这里的一个明显缺陷是,如果多个用户向同一个人发送一条消息,则无法判断他们正在回复哪条消息。没有随 SMS 传递的消息 ID,因此您必须使用多个发送号码(每个唯一发件人一个给特定收件人)。所需的号码数量基本上是一个用户必须回复的不同发件人的最大数量(这通常不可能事先计算出来,因此您必须调用 API 在飞)。
举一个更具体的例子,假设您有 2 个用户 (S1 & S2) 和 3 个收件人 ( R1, R2 & 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 使用号码 N1 的消息。在这种情况下,我们不能使用 N1,因为我们无法确定回复的对象。如果我们还没有,我们需要提供一个新号码 (N2),现在我们可以发送消息 R1。当 R1 回复 N2 我们知道回复需要转发给 S2.
发送给一个收件人的用户越多,您的号码池就越大(也越贵)。可能值得实施某种超时(比如 72 小时),让收件人可以回复。所以在这种情况下,如果在 S1 通过 N1 将消息发送到 R1 之后超时已经过期,我们可以重用 N1 用于 S2 和 R1 之间的通信。显然,这并非万无一失,但可以降低成本。
身份
从合并号码发送的另一个问题。我通过应用程序向 Dan 发送了一条消息,他从一个随机号码收到了这条消息:
Hi Dan, how are you?
丹怎么知道是谁发的信息?您必须为每条消息(或至少是每个对话线程中的第一条消息)添加一些标识符。
我想通过我的 Meteor 应用程序以编程方式发送短信/文本消息;许多人为此推荐 twilio,并且有几个 Meteor Twilio 包(可通过 atmosphere and/or googling/binging 找到)。我不知道这些软件包中的一个是否明显优于另一个,但至少现在,我正在使用 abhiaayer:meteor-twilio 软件包。
我担心的是,当您创建 Twilio 帐户时,他们会为您分配一个 "from" phone 号码(显然,您不能只使用自己的号码)。也许我误解了它是如何工作的,但在我沿着这条路走得太远之前,我想知道短信的发送者——我的应用程序的用户——是否能够使用他们的 phone 号码作为 "from"/发件人 phone 号码。
毕竟,我的应用程序的全部意义在于允许用户向 friends/family 发送多个相同的文本(例如 "where are you?" 或 "are you okay?"),然后得到他们的回复(对 his phone,而不是对 Twilio 提供的号码)。
如果可以将 Twilio 与您自己的 phone 号码用作 "from"/发送号码,有没有人对 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 帐户,并拥有他们分配给我的帐户的 "from" 号码(不是我的实际手机 phone 号码)和 SID,但我不知道这是什么AUTH_TOKEN 应该是。
如果 Twilio 无法实现我的意图,我可能只是编写应用程序,以便可以将所有选定的 "to" 数字复制到剪贴板,以便用户可以将它们粘贴到他的短信屏幕的 "recipients" 文本框;但我希望能为用户提供只需点击一个按钮的奢侈体验。
我认为您无法执行此操作(使用 Twilio 从用户自己的手机号码发送)。如果您的应用是实际的移动应用而不是 Web 应用,您可以使用 Android 或 iOS API 从用户的 phone 发送短信。我不确定这方面的细节,当然 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 会向您发送一个包含详细信息的网络钩子,您可以确定是谁发送了原始邮件并将回复转发回原始发件人。
号码池
这里的一个明显缺陷是,如果多个用户向同一个人发送一条消息,则无法判断他们正在回复哪条消息。没有随 SMS 传递的消息 ID,因此您必须使用多个发送号码(每个唯一发件人一个给特定收件人)。所需的号码数量基本上是一个用户必须回复的不同发件人的最大数量(这通常不可能事先计算出来,因此您必须调用 API 在飞)。
举一个更具体的例子,假设您有 2 个用户 (S1 & S2) 和 3 个收件人 ( R1, R2 & 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 使用号码 N1 的消息。在这种情况下,我们不能使用 N1,因为我们无法确定回复的对象。如果我们还没有,我们需要提供一个新号码 (N2),现在我们可以发送消息 R1。当 R1 回复 N2 我们知道回复需要转发给 S2.
发送给一个收件人的用户越多,您的号码池就越大(也越贵)。可能值得实施某种超时(比如 72 小时),让收件人可以回复。所以在这种情况下,如果在 S1 通过 N1 将消息发送到 R1 之后超时已经过期,我们可以重用 N1 用于 S2 和 R1 之间的通信。显然,这并非万无一失,但可以降低成本。
身份
从合并号码发送的另一个问题。我通过应用程序向 Dan 发送了一条消息,他从一个随机号码收到了这条消息:
Hi Dan, how are you?
丹怎么知道是谁发的信息?您必须为每条消息(或至少是每个对话线程中的第一条消息)添加一些标识符。