[Twilio+Node.js] Twilio API を使用し SMS 送信をスケジューリングする

[Twilio+Node.js] Twilio API を使用し SMS 送信をスケジューリングする

Twilio API を使用し、 Node.js アプリケーションから 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 を作成してください。

TwilioConsole1

次に、持っている電話番号を追加します。 Add Senders > Sender Type を Phone Number とし、 Twilio で購入した電話番号を追加します。

TwilioConsole2

TwilioConsole3

電話番号を追加したら、 Skip setup で残りの設定はスキップして構いません。

TwilioConsole4

Messaging Service を作成後、 Properties を開き MG から始まる SID を取得しておきます。

TwilioConsole5

環境作成

ローカルに 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****

TwilioMonitor1

TwilioMonitor2

指定した時間にメッセージが送信されてくることを確認します。

RecievedMessage

おわりに

Twilio API を使用することで、簡単にメッセージ送信のスケジューリングを行えることが分かりました。

前回、 Twilio API を使用し電話をかけて音声を流す方法については こちら

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.