![[Twilio+Node.js] Twilio API を使用し SMS 送信をスケジューリングする](https://images.ctfassets.net/ct0aopd36mqt/wp-thumbnail-3f316c20ff5f4f46d1a005e2ad976882/c71162912c717bb0ca7c9b4196a40df5/twilio.png)
[Twilio+Node.js] Twilio API を使用し SMS 送信をスケジューリングする
- Twilio アカウントが作成済みで Account SID と Account Token がある想定です
参考ページ: https://www.twilio.com/docs/messaging/features/message-scheduling
作業環境
バージョン
node: 22.13.1
npm: 10.9.2
node_modules/twilio: 5.4.5
node_modules/@date-fns/tz: 1.2.0
メッセージスケジューリングとは
Twilio のメッセージスケジューリング機能を使用すると、未来の特定の時刻に SMS を自動送信するよう予約することができます。この機能は以下のようなケースで特に役立ちます:
- マーケティングキャンペーンの一環として特定の日時にメッセージを送信したい場合
- 予約確認や予定リマインダーを自動的に送信したい場合
- 時差のある地域のユーザーに最適なタイミングでメッセージを届けたい場合
- 定期的なお知らせや通知を計画的に配信したい場合
メッセージスケジューリングには以下の制約があります:
- メッセージは「15分後以降」かつ「35日以内」に予約する必要があります
- スケジューリングには Messaging Service の使用が必須です
- 各アカウント(サブアカウントを含む)は、一度に最大500,000件のスケジュールメッセージを持つことができます。サブアカウントの制限は親アカウントとは別に計算され、親アカウントの割り当てを消費しません
スケジューリングを使用しない通常のメッセージ送信方法については、前回の記事をご覧ください。
Messaging Service の作成
メッセージスケジューリングには Messaging Services を使用します。 Twilio コンソールの Develop > Messaging > Services > Create Messaging Service
を押下し Messaging Service を作成してください。
次に、持っている電話番号を追加します。 Add Senders > Sender Type
を Phone Number とし、 Twilio で購入した電話番号を追加します。
電話番号を追加したら、 Skip setup
で残りの設定はスキップして構いません。
Messaging Service を作成後、 Properties
を開き MG から始まる SID を取得しておきます。
環境作成
ローカルに Node.js プロジェクトを作成し、 npm で twilio モジュール をインストールします。 twilio モジュール は Node.js での Twilio API 操作を簡略化できるモジュールです。
$ npm install twilio
タイムゾーン関連の処理を行うため、 @date-fns/tz もインストールします。
$ npm install @date-fns/tz
SMS 送信のスケジューリング
スケジューリングを行うスクリプト schedule-sms.js
を作成します。パラメータには次の値を設定します。
パラメータ名 | 設定する値 | 補足 |
---|---|---|
scheduleType | fixed | fixed とすることで、未来の特定の時刻で送信するオプションを指定します。 |
sendAt | 送信する時刻 | メッセージは「15分後以降」かつ「35日以内」で予約する必要があります。時差を考慮し ISO 8691 形式で指定します。 |
messagingServiceSid | Messaging Service SID | 前の手順で取得した SID を指定します。入力が空の時スケジューリングは無効となり直ちに送信されます。 |
body | SMS 本文 | |
to | 宛先の電話番号 |
作成する schedule-sms.js
は下記のとおりです。
const twilio = require('twilio');
const { TZDate } = require('@date-fns/tz');
// Twilio認証情報
const accountSid = '****';
const authToken = '****';
const client = twilio(accountSid, authToken);
// 例として日本時間で 2025 年 3 月 1 日 17:05を指定
const jstDate = new TZDate("2025-03-01 17:05:00", "Asia/Tokyo");
// ISO 8601 形式に変換
const isoDate = jstDate.toISOString();
// メッセージ送信
client.messages
.create({
body: 'スケジューリングされたメッセージ',
messagingServiceSid: 'MG****',
to: '****',
sendAt: isoDate,
scheduleType: 'fixed'
})
.then(message => console.log(`メッセージSID: ${message.sid}`))
.catch(error => console.error(`エラー: ${error.message}`));
動作確認
作成したスクリプトを実行し、 Twilio コンソールの Monitor > Logs > Messaging
にスケジュールされたメッセージが追加されたのを確認します。
$ node schedule-sms.js
メッセージSID: SM****
指定した時間にメッセージが送信されてくることを確認します。
おわりに
Twilio API を使用することで、簡単にメッセージ送信のスケジューリングを行えることが分かりました。
前回、 Twilio API を使用し電話をかけて音声を流す方法については こちら 。