Twilio的宗旨是为通信提供动力--而且是方便快捷的。我们的可编程信息服务已经提供了很长时间,但直到现在,将信息安排在未来某个时间发送,还需要开发者使用他们自己的调度解决方案。
幸运的是,现在这已成为过去!有了消息调度,你可以通过一个API调用来发送你预定的SMS和MMS消息,而不需要使用自定义调度器。
在本教程中,你将学习如何在Ruby中发送预定短信通知。
教程要求
- Ruby的第3版或更新版本。如果你的操作系统没有提供Ruby解释器,你可以去ruby-lang.org下载一个安装程序。
- 安装Bundler,以管理你的Ruby依赖性。
- 一个Twilio账户。如果你是Twilio的新手,请点击这里,现在就可以创建一个免费账户,当你升级到付费账户时,可以获得10美元的积分。你可以查看免费Twilio账户的功能和限制。
- 一个能够接收短信的智能手机,来测试这个项目。
购买一个Twilio手机号码
如果你还没有这样做,你的第一个任务是购买一个Twilio电话号码来发送短信。
登录Twilio控制台,选择电话号码,然后点击 "购买号码 "按钮来购买一个Twilio号码。注意,如果你有一个免费账户,你将使用你的试用信用来购买。
在 "购买号码 "页面,选择你的国家,并在 "功能 "栏中勾选短信。如果你想申请一个你所在地区的号码,你可以在 "号码 "栏中输入你的区号。

点击 "搜索 "按钮,看看有哪些号码可用,然后从结果中点击 "购买 "你喜欢的号码。在你确认你的购买后,点击 "关闭 "按钮。
配置信息服务
目前,预定信息只能从信息服务中发送,所以下一步是配置一个信息服务,并将你的Twilio电话号码添加到其中。
仍然在控制台中,找到 "Messaging "产品,点击它的服务选项。然后点击 "创建消息服务 "按钮。
在创建过程的第一页,为该服务输入一个友好的名字,如 "约会",并在 "选择你想使用信息服务的内容 "下拉菜单中选择 "通知我的用户"。

点击 "创建消息服务 "按钮,进入第二步。
在配置的这一部分,你必须把发件人电话号码添加到服务使用的发件人池中。点击 "添加发件人 "按钮,添加你在前一部分获得的Twilio电话号码。

在 "发件人类型 "下拉菜单中选择电话号码,然后点击 "继续"。
在你想作为发件人的电话号码旁边添加一个复选标记,然后点击 "添加电话号码"。

点击 "第3步:设置整合 "按钮,进入下一步。你不必改变这个页面的任何设置,只需点击 "第4步:添加合规信息"。
要完成对信息服务的配置,请点击 "完成信息服务设置"。现在您可以选择发送一条测试信息。

测试你的信息服务是否能够发送信息是一个好主意,所以继续点击 "尝试发送信息"。
在 "发往电话号码 "下拉菜单中,选择你的个人号码,这个号码应该是在你的Twilio账户中注册和验证的。在 "来自信息服务SID "中,选择你刚刚创建的信息服务。在 "正文 "中输入一些自己要发送的文本。

点击 "发送测试短信 "按钮,并确保你的手机收到短信。
红宝石项目设置
在本节中,你将设置一个全新的Ruby项目。为了使事情井井有条,打开终端或命令提示符,找到一个合适的地方,并创建一个新的目录,你将要创建的项目将在这个目录中存在:
mkdir ruby-scheduled-sms
cd ruby-scheduled-sms
接下来,通过运行这个命令在这个目录中创建一个本地Gemfile:
bundle init
bundle config set –local path vendor/bundle
现在你已经准备好为Ruby安装Twilio辅助库了:
bundle add twilio-ruby
为了用Twilio发送短信,Ruby应用程序需要访问你的Twilio账户凭证来进行验证。此外,它还需要与你刚刚创建的消息服务相关的SID。
定义这些配置值的最方便的方法是为它们设置环境变量。在bash或zsh会话中,你可以按以下方式配置这些设置:
export TWILIO_ACCOUNT_SID=xxxxxxxxx
export TWILIO_AUTH_TOKEN=xxxxxxxxx
export TWILIO_MESSAGING_SERVICE_SID=xxxxxxxxx
如果你是在Windows上学习本教程,在命令提示符窗口中使用set ,而不是export 。
你需要把所有的xxxxxxxxx 占位符替换成适用于你的账户的正确值。前两个变量是你的Twilio "账户SID "和你的 "Auth Token"。你可以在Twilio控制台主页面的仪表板上的 "账户信息 "下找到它们。

TWILIO_MESSAGING_SERVICE_SID 变量是分配给Messaging Service的SID 。你可以在Twilio Console的Messaging Services页面中找到它。这个标识符以字母MG 开始。
用Ruby发送一个预定的短信
现在你已经准备好开始编写Ruby应用程序的代码了。
在你的文本编辑器或IDE中打开一个名为scheduled_sms.rb的新文件,在其中输入这段代码:
require 'rubygems'
require 'date'
require 'twilio-ruby'
# create a Twilio client
account_sid = ENV['TWILIO_ACCOUNT_SID']
auth_token = ENV['TWILIO_AUTH_TOKEN']
@client = Twilio::REST::Client.new(account_sid, auth_token)
# schedule message to be sent 61 minutes after current time
minute = 1.0 / (24 * 60)
send_when = DateTime.now + 61 * minute
# send the SMS
messaging_service_sid = ENV['TWILIO_MESSAGING_SERVICE_SID']
message = @client.messages.create(
from: messaging_service_sid,
to: '+1xxxxxxxxxx', # ← your phone number here
body: 'Friendly reminder that you have an appointment with us next week.',
schedule_type: 'fixed',
send_at: send_when.iso8601
)
puts message.sid
这个简短的应用程序创建了一个Twilio客户端对象的实例,并用来自你先前配置的环境变量的账户SID和Auth Token值来初始化它。
send_when 变量被设置为一个DateTime 对象,它代表了短信应该被发送的时间。消息调度功能目前要求这个时间是提前1小时以上,少于7天。由于这只是一个练习,我把发送时间设置为61分钟以后,以尽快得到短信。
@client.messages.create() 函数被用来创建和安排短信。这个函数接受标准的from,to 和body 参数,分别定义短信的发送人、接收人和正文。这些参数对于即时发送和计划发送都是一样的。
对于from 参数,使用短信服务的SID 。对于to ,输入E.164格式的个人电话号码。body 参数可以是任何你想自己发送的东西。
剩下的两个参数用来告诉Twilio这个短信应该在以后的时间发送。schedule_type 参数配置了你想使用的调度类型。在我写这篇文章的时候,这个参数的唯一允许值是字符串’fixed’ 。send_at 参数配置了信息应该被发送的时间。这个参数是以ISO 8601格式给出的。
应用程序会打印分配给预定信息的sid 值。这是一个标识符,如果你需要,你可以用它来取消信息。
准备好试用这个了吗?
确保你已经为client.messages.create 调用的to 参数输入了你自己的电话号码,然后在项目的根目录下运行Ruby脚本,如下所示。
bundle exec ruby scheduled_sms.rb
你应该看到一个打印到终端的代码,以字母SM 开始。这是你的信息的标识符。如果你看到这个代码,那么你就知道消息被成功调度了。
现在你必须等待61分钟才能在你的手机上收到这条短信!在此期间,你可以在Twilio控制台的可编程消息日志部分查看该消息,在该部分下,该消息的状态将显示为 "预定",直到发送时间。

当一小时过去,你的短信被送达时,信息的状态将变为 "已送达"。你也能看到你的Twilio电话号码作为发件人。
