SMS等のメッセージをスケジュール送信できるようになりました!

January 12, 2022
執筆者
レビュー担当者
Liz Yee
Twilion
Chris Piwinski
寄稿者
Twilio の寄稿者によって表明された意見は彼ら自身のものです
Dave Esber
Twilion

Message Scheduling jp

この記事は北米のソリューションエンジニアのShashwat Johariこちらで公開した記事(英語)を日本語化したものです。

毎年何百万人もの開発者がTwilioプラットフォーム上で1000億通以上のメッセージを送受信しているなか、弊社では、お客様のアプリケーション開発や保守運用を容易にするソフトウェアと開発者向けAPIのリリースに注力しています。

お客様からのご要望として、将来の日時を指定してメッセージが送信されるスケジュール設定機能があります。これは、数日後にリマインドやアップデートを送信したいという一般的なアラートや通知のユースケースとなります。今回パブリックベータ版としてリリースしたこのメッセージスケジュール機能を利用いただくことにより、そのユースケースを実現することが可能になります。Twilio Programmable Messaging APIと、メッセージングサービスのメッセージスケジュール機能を利用することで、SMS、MMS、WhatsAppメッセージを将来の日時に送信予約するだけで、あとはTwilioプラットフォーム側でスケジュール調整およびAPIの処理を行います。何よりこの機能は、送信者選択、統合、コンテンツ、コンプライアンスといった、メッセージングサービスとその他のソフトウェア機能とともに、無料で提供されます。

メッセージスケジュール機能の開発経緯

多くのSMSやWhatsAppメッセージは何らかのイベントや起点をトリガーとするメッセージとして送信されますが、予約リマインド、スケジュール式アンケート、請求書支払いのリマインドなどのユースケースでは、日時調整のための追加ロジックが必要です。メッセージスケジュール機能は、これら実装のためのサーバーやバックエンドロジックへの依存を排除し、正しい日時に顧客へメッセージが送信されます。Twilioのメッセージスケジュール機能をリリースする前は、このような処理を行うため、以下のようにいくつかの方法が取られていました。

  1. サーバーにcronジョブを設定し、決められた日時にメッセージを送信する。
  2. バックエンドがイベントをポーリングし、適切なタイミングでメッセージを送信する。

メッセージスケジュール機能を使えば、同じタスクをより少ないコードで実現することができます。Twilioへメッセージ送信のAPIリクエストを行う際に、希望する配信スケジュール日時を設定することができるようになりました。

メッセージスケジュール機能では、メッセージ送信日時を事前に設定しなくてはなりません。この「事前」とは、配信の60分前から7日前までの間であることに注意してください。仮に想定用途が異なるパラメータ(例: 30分前、10日前)を必要とする場合、前述のcronジョブやバックエンドのポーリングのソリューションを引き続き使用ください。

ベータリリースを行う前にパイロットプログラムを通じて、開発者の皆さんから、スケジュール設定されたメッセージをいざというときにキャンセルできるようにしたいという追加の要望をいただきました。この貴重なご意見を精査し、Twilioサーバーサイドのヘルパーライブラリ(SDK)またはREST APIへのHTTPリクエストを使用して、送信待ちのスケジュールメッセージをキャンセルする機能も提供できるようになりました。

メッセージスケジュール機能により、メッセージの性質に応じて営業時間前、営業時間中、営業時間後に送信するようスケジュール設定ができます。ビジネス要件に基づいてメッセージ送信に洗練性がもたらされ、顧客エンゲージメントの促進等につながることが期待できます。また、事前にメッセージをスケジュール設定しておくことで、短時間に大量のメッセージを送信する際にAPIのレート制限を受ける心配がなくなります。一方で、メッセージスケジュール機能は、メッセージのスループット(MPS)や最大キュー長の制限とは独立に運用されることに留意してください。

実際にメッセージをスケジューリング送信する

必要要件

  • 無料のTwilioアカウント(このリンクから無料でサインアップしてください。アカウントのアップグレード時に10ドルのクレジットが付与されます!)
  • Twilioの電話番号
  • Twilioアカウントのメッセージングサービス(メッセージスケジュール機能はメッセージングサービスを通じてアクセスします)
  • コマンドライン(ターミナル)またはPostmanなどのAPIプラットフォームを使って、TwilioにHTTPリクエストを送信することに慣れていること

ユースケース

メッセージスケジュール機能のメリットの一つは、メッセージを使ってEメールのジャーニーフローのようなものを作ることができることです。顧客が特定のアクションを起こしたときに、そのフローに関連するすべてのメッセージを一度にスケジューリングすることができます。メッセージスケジュール機能がなければ、定期的にスクリプトやジョブを実行し、メッセージの受信対象者を確認し、異なるタイミングでメッセージを送信する必要があります。しかし、メッセージのスケジュール機能を利用することで、このような作業を前もって行うことができ、指定された日時にメッセージを送信することができます。また、更新されたメッセージは必要に応じてキャンセルしたり、再スケジュールすることもできます。

このようなユースケースを実感いただくために、次の例では、メッセージスケジュール機能を使って患者さん向けの予約リマインドを作成し、複数のタッチポイントを制御してみます。

このワークフローは、3つの主要なステップで構成されています。

  1. メッセージングサービスに該当のTwilioの電話番号を追加する。
  2. 患者の予約に関連する2つのメッセージを異なる時点で送信するようスケジュール設定する。
  3. 予約取り消しにより、予定されていたメッセージの1つをキャンセルする。

ステップ1:メッセージングサービスにTwilioの電話番号を追加する

メッセージスケジュール機能は、メッセージングサービスでのみ利用可能です。メッセージングサービスにTwilioの電話番号を追加する必要がありますので、こちらのサポートサイト記事に記載の手順を辿ってください。このステップが完了したら、Twilioコンソールにあるサービスのプロパティページ*から、メッセージングサービスのSIDをメモしてください。

(* コンソール画面>Developタブ>Messaging>Services>特定のメッセージングサービスをクリック>Propertiesパネル)

ステップ2: 予約リマインドのメッセージをスケジュール設定する

予約の完了に伴い、以下の関連メッセージをスケジュール送信していきます。

  1. メッセージ1: 予約の24時間前に送信されるリマインドSMS。
  2. メッセージ2: 予約の3時間前に送信されるMMSメッセージ。このMMSにはQRコードが含まれ、QRコードは患者が予約場所に到着した際にチェックインするために利用されます。(日本語編集上の補足: MMSは原稿執筆時点では北米市場でのみ利用可能です。)

新しいターミナルセッションで(ステップ1のngrokセッションを閉じないように注意してください)、次のcurlコマンドを実行してメッセージ1をスケジュールします。

curl -X POST https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Messages.json \
--data-urlencode "Body=This is a reminder about your appointment tomorrow at 3PM with Dr. Strange" \
--data-urlencode "MessagingServiceSid=<Your Messaging Service SID From Step 1>" \
--data-urlencode "To=<xxxxxxxxx>" \
--data-urlencode "ScheduleType=fixed" \
--data-urlencode "SendAt=<メッセージ送信のスケジュール日時〜ISO-8601フォーマットのUTC日時>" \
-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN

ターミナルで上記のコマンドを実行しながら、<Your Messaging Service SID From Step 1>を上記ステップ1でメモしたメッセージングサービスのSIDに、<Your Patient's E.164 Formatted Phone Number>をE.164形式で表記した患者の電話番号に、<Scheduled UTC Date Time in ISO-8601 Format>をISO-8601形式で表記したメッセージ送信のUTC日時(例:  2022-01-01T14:00:00Z)に置き換えることを忘れないようにしてください。また、TWILIO_ACCOUNT_SIDとTWILIO_AUTH_TOKENが環境変数として正しく保存されていることを確認してください。HTTPリクエストを送信すると、あなたのメッセージSIDを含むレスポンスが表示されます。メッセージSIDは、スケジュールされたメッセージをキャンセルしなければならない場合に必要なので、必ず保存しておいてください!

以下は、レスポンス例です。

{
"sid": "SM93b9cd1adf4045c592cd30984d8d4f32", "date_created": "Fri, 31 Dec 2021 07:56:51 +0000",
"date_updated": "Fri, 31 Dec 2021 07:56:51 +0000", "date_sent": null, "account_sid": "REDACTED",
"to": "+17815367324", "from": null, "messaging_service_sid": "REDACTED",
"body": "This is a reminder about your appointment tomorrow at 3PM with Dr. Strange",
"status": "scheduled", "num_segments": "0", "num_media": "0", "direction": "outbound-api",
"api_version": "2010-04-01", "price": null, "price_unit": null, "error_code": null, "error_message": null,
"uri": "/2010-04-01/Accounts/REDACTED/Messages/SM93b9cd1adf4045c592cd30984d8d4f32.json",
"subresource_uris": {"media": "/2010-04-01/Accounts/REDACTED/Messages/SM93b9cd1adf4045c592cd30984d8d4f32/Media.json"}
}

また、TwilioコンソールのProgrammable MessagingのLogs画面で、メッセージがスケジュールされたことをステータス「Scheduled」で確認することができます。

Programmable Messaging Logs JP

次に、チェックイン用のQRコード付きMMSメッセージを予約時間の3時間前に送信するようにスケジュール設定します。以下のcurlコマンドを実行して、メッセージ2を予約します。

curl -X POST https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Messages.json \
--data-urlencode "MediaUrl=https://i.ibb.co/D7fKNxw/frame.png" \
--data-urlencode "Body=This is a reminder about your appointment tomorrow at 3PM with Dr. Strange" \
--data-urlencode "MessagingServiceSid=<Your Messaging Service SID From Step 1>" \
--data-urlencode "To=<Your Patient's E.164 Formatted Phone Number>" \
--data-urlencode "ScheduleType=fixed" \
--data-urlencode "SendAt=<Scheduled UTC Date Time in ISO-8601 Format>" \
-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN

上記のコマンドを実行する際には、メッセージ1と同様に、プレースホルダーの値を実際の値に置き換えてください。上記のコマンドを実行すると、メッセージ1と同様のレスポンスが返され、TwilioコンソールのProgrammable MessagingのLogs画面でステータス「Scheduled」を確認することができます。スケジュール送信をキャンセルする場合に備えて、メッセージのSIDを保存することを忘れないでください。

ステップ3:送信スケジュールしたメッセージをキャンセルする

スケジュールされたメッセージを取り消すには、キャンセルするメッセージのSIDを指定して MessageリソースにHTTP POSTリクエストを行い、そのステータスを「canceled」に更新する必要があります。以下のcurlコマンドを実行して、スケジュールされたメッセージをキャンセルしてください。

curl -X POST https://api.twilio.com/2010-04-01/Accounts/$TWILIO_ACCOUNT_SID/Messages/MM12719a98409c41eaac88267848290859 \
--data-urlencode "Status=canceled" \
-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN

メッセージがキャンセルされると、TwilioコンソールのProgrammable MessagingのLogs画面で、以下のように確認できるはずです。

Programmable Messaging Logs JP

メッセージスケジュール機能使用時の注意点

メッセージスケジュール機能を使用する際には、以下の点にご注意ください。

  • メッセージスケジュール機能は、メッセージングサービスでのみ利用可能です。メッセージングサービスの設定を行った上で、メッセージのスケジュール送信をリクエストする必要があります。
  • メッセージ送信は前もってスケジュールします。この時間枠は実際の送信タイミングを起点として、60分前〜7日前です。
  • スケジュールされた時刻は、ISO-8601形式のUTC時間(日時)として指定してください。これ以外の形式には対応していません。
  • メッセージをスケジュールした際にメッセージSIDをメモしておくのがベストプラクティスです。
  • メッセージがTwilioによって送信され「finalized」状態になると、キャンセルすることができません。

使ってみましょう!

今日まで、お客様に予約リマインドを送信したい場合、個々のお客様の予約日時を基に個別にタイムラインを追跡してリマインドを送信するか、一度にすべてのメッセージを送信する必要がありました。

今回リリースの機能により、タイムゾーンや営業時間などのさまざまな要因に合わせて、将来の日時にメッセージが送信されるようにスケジュール設定することができます。また、ビジネス要件に応じて、誰がいつ何を受け取るかをより詳細に設定することも可能です。

メッセージのスケジュールは、メッセージングサービスの機能の一部として、追加料金なしで利用いただけます。メッセージングサービスを利用する際に利用できるその他の機能については、ドキュメントでご確認ください。

お客様の成功が私たちの喜びです。

Shashwat JohariはTwilioのソリューションエンジニアで、生粋のテクノロジー愛好家としてTwilioのAPIの世界に生きています。メッセージスケジュール機能に関するフィードバックがありましたら、ぜひ sjohari [at] twilio.com までお寄せください。