![[Twilio+Python] Twilio API を使用し SMS 送信をスケジューリングする](https://images.ctfassets.net/ct0aopd36mqt/wp-thumbnail-3f316c20ff5f4f46d1a005e2ad976882/c71162912c717bb0ca7c9b4196a40df5/twilio.png)
[Twilio+Python] Twilio API を使用し 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 を作成してください。
次に、持っている電話番号を追加します。 Add Senders > Sender Type
を Phone Number とし、 Twilio で購入した電話番号を追加します。
電話番号を追加したら、 Skip setup
で残りの設定はスキップして構いません。
Messaging Service を作成後、 Properties
を開き MG から始まる SID を取得しておきます。
環境作成
ローカルに 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****>
指定した時間にメッセージが送信されてくることを確認します。
おわりに
Twilio API を使用することで、簡単にメッセージ送信のスケジューリングを行えることが分かりました。
前回、 Twilio API を使用し電話をかけて音声を流す方法については こちら 。