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

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

Twilio API を使用し、 Python アプリケーションから SMS 送信の予約を手軽に行うことができます。今回はその方法について紹介します。
  • Twilio アカウントが作成済みで Account SID と Account Token がある想定です

参考ページ: https://www.twilio.com/docs/messaging/features/message-scheduling

作業環境

バージョン

Python: 3.11.9
twilio-python: 9.4.6
pytz: 2025.1

メッセージスケジューリングとは

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

環境作成

ローカルに Python プロジェクトを作成し、 pip で twilio-python をインストールします。 twilio-python は Python での Twilio API 操作を簡略化できるライブラリです。

$ pip install twilio

タイムゾーン関連の処理を行うため、 pytz もインストールします。

$ pip install pytz

SMS 送信のスケジューリング

スケジューリングを行うスクリプト main.py を作成します。パラメータには次の値を設定します。

パラメータ名 設定する値 補足
schedule_type fixed fixed とすることで、未来の特定の時刻で送信するオプションを指定します。
send_at 送信する時刻(datetime 型) メッセージは「15分後以降」かつ「35日以内」で予約する必要があります。時差を考慮し ISO 8691 形式で指定します。
messaging_service_sid Messaging Service SID 前の手順で取得した SID を指定します。入力が空の時スケジューリングは無効となり直ちに送信されます。
body SMS 本文
to 宛先の電話番号

作成する main.py は下記の通りです。

from twilio.rest import Client
from datetime import datetime
import pytz

account_sid = "****" # Account SID 
auth_token = "****" # Auth Token 
client = Client(account_sid, auth_token)

# 例として日本時間(JST)で 2025 年 3 月 1 日 17:05 を指定し、 ISO8601 形式に変換
jst_time = pytz.timezone('Asia/Tokyo').localize(datetime(2025, 3, 1, 17, 05, 00))
iso_time = jst_time.isoformat()

message = client.messages.create(
    body="スケジューリングされたメッセージ",
    messaging_service_sid="MG****",
    to="****",
    send_at=iso_time, 
    schedule_type="fixed",
)

print(message)

動作確認

作成したスクリプトを実行し、 Twilio コンソールの Monitor > Logs > Messaging にスケジュールされたメッセージが追加されたのを確認します。

$ python main.py
<Twilio.Api.V2010.MessageInstance account_sid=**** sid=SM****>

TwilioMonitor1

TwilioMonitor2

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

RecievedMessage

おわりに

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

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

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.