如何用Node.js和Twilio发送预定的短信(附代码示例)

304 阅读7分钟

Twilio的宗旨是为通信提供动力--而且是方便快捷的。我们的可编程信息服务已经提供了很长时间,但直到现在,将信息安排在未来某个时间发送,还需要开发者使用他们自己的调度解决方案。

幸运的是,现在这已成为过去!有了消息调度,你可以通过一个API调用来发送你预定的短信,而无需使用自定义调度器。

在本教程中,你将学习如何在一个Node.js应用程序中发送预定的短信通知。

教程要求

购买一个Twilio手机号码

如果你还没有这样做,你的第一个任务是购买一个Twilio电话号码来发送短信。

登录Twilio控制台,选择电话号码,然后点击 "购买号码 "按钮来购买一个Twilio号码。注意,如果你有一个免费账户,你将使用你的试用信用来购买。

在 "购买号码 "页面,选择你的国家,并在 "功能 "栏中勾选短信。如果你想申请一个你所在地区的号码,你可以在 "号码 "栏中输入你的区号。

Buy a Twilio phone number

点击 "搜索 "按钮,看看有哪些号码可用,然后从结果中点击 "购买 "你喜欢的号码。在你确认你的购买后,点击 "关闭 "按钮。

配置信息服务

目前,预定信息只能从信息服务中发送,所以下一步是配置一个信息服务,并将你的Twilio电话号码添加到其中。

仍然在控制台中,找到 "Messaging "产品,点击它的服务选项。然后点击 "创建消息服务 "按钮。

在创建过程的第一页,为该服务输入一个友好的名字,如 "约会",并在 "选择你想使用信息服务的内容 "下拉菜单中选择 "通知我的用户"。

Create messaging service page 1

点击 "创建消息服务 "按钮,进入第二步。

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

Create messaging service part 2

在 "发件人类型 "下拉菜单中选择电话号码,然后点击 "继续"。

在你想作为发件人的电话号码旁边添加一个复选标记,然后点击 "添加电话号码"。

Add senders to messaging service

点击 "第3步:设置整合 "按钮,进入下一步。你不必改变本页的任何设置,只需点击 "第4步:添加合规信息"。

要完成信息服务的配置,请点击 "完成信息服务设置"。现在您可以选择发送一条测试信息。

Messaging service setup complete

测试你的信息服务是否能够发送信息是一个好主意,所以继续点击 "尝试发送信息"。

在 "发往电话号码 "下拉菜单中,选择你的个人号码,这个号码应该是在你的Twilio账户中注册和验证的。在 "来自信息服务SID "中,选择你刚刚创建的信息服务。在 "正文 "中输入一些自己要发送的文本。

Send test SMS

点击 "发送测试短信 "按钮,并确保你的手机收到短信。

Node.js项目设置

在本节中,你将设置一个全新的Node项目。为了使事情井井有条,打开终端或命令提示符,找到一个合适的地方,并创建一个新的目录,你将要创建的项目将住在那里:

mkdir node-scheduled-sms
cd node-scheduled-sms

用这个命令在这个目录中初始化一个Node包:

npm init -y

现在你已经准备好为Node.js安装Twilio辅助库了:

npm install twilio

为了用Twilio发送短信,JavaScript应用程序需要访问你的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 credentials in the Console

TWILIO_MESSAGING_SERVICE_SID 变量是分配给Messaging Service的SID 。你可以在Twilio Console的Messaging Services页面中找到它。这个标识符以字母MG 开始。

用Node.js发送预定短信

你现在可以开始编写Node应用程序的代码了。

在你的文本编辑器或IDE中打开一个名为scheduled_sms.js的新文件,在其中输入这段代码:

// create a Twilio client
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const client = require('twilio')(accountSid, authToken);

async function sendScheduledSms() {
  // schedule message to be sent 61 minutes after current time
  const sendWhen = new Date(new Date().getTime() + 61 * 60000);

  // send the SMS
  const messagingServiceSid = process.env.TWILIO_MESSAGING_SERVICE_SID;
  const message = await client.messages.create({
    from: messagingServiceSid,
    to: '+1xxxxxxxxxx',  // ← your phone number here
    body: 'Friendly reminder that you have an appointment with us next week.',
    scheduleType: 'fixed',
    sendAt: sendWhen.toISOString(),
  });

  console.log(message.sid);
}

sendScheduledSms();

这个简短的应用程序创建了一个Twilio客户端对象的实例,并用来自你先前配置的环境变量的账户SID和Auth Token值对其进行初始化。

sendScheduledSms() 函数是神奇发生的地方。sendWhen 常数被设置为一个Date 对象,该对象代表短信应该被发送的时间。消息调度功能目前要求这个时间超过一小时,少于7天。由于这只是一个练习,我把发送时间设置为61分钟以后,以尽快得到短信。

client.messages.create() 函数被用来创建和安排短信。这个函数接收一个包含短信细节的对象。标准的from,tobody 键分别定义短信的发件人、收件人和文本。这些参数对即时发送和计划发送都是一样的。

对于from 键,使用的是信息服务的sid 。对于to ,输入E.164格式的个人电话号码。body 参数可以是任何你想自己发送的东西。

剩下的两个键是用来告诉Twilio,这个短信应该在以后的时间里发送。scheduleType 键配置了你想使用的调度类型。在我写这篇文章时,唯一允许的值是字符串’fixed’

sendAt 参数配置了信息应该被发送的时间。这个参数必须以ISO 8601格式给出。可以使用Date.toISOString() 方法来获得所需的格式。

应用程序会打印分配给预定信息的sid 值。这是一个标识符,如果你需要,你可以用它来取消消息

准备好尝试这个了吗?

确保你已经为client.messages.create 调用的to 键输入了你自己的电话号码,然后在项目的根目录下运行Node脚本,如下所示:

node scheduled_sms.js

你应该看到一个打印到终端的代码,以字母SM 开始。这就是你的信息的标识符。如果你看到这个代码,那么你就知道消息被成功调度了。

现在你必须等待61分钟才能在你的手机上收到这条短信!在此期间,你可以在Twilio控制台的可编程信息日志部分查看该信息,在该部分下,信息的状态将显示为 "预定",直到发送时间。

Programmable Messaging Logs before delivery

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

Programmable Messaging Logs after delivery