PythonとFlaskを使用した予定リマインダー
このウェブアプリケーションでは、Twilio を使って、近く予定されているアポイントメントを思い出させるために、テキストメッセージをお客様に送信する方法を示します。
Flask を使って、ユーザーインターフェイスをサポートするウェブアプリケーションを構築し、Celery を使って、然るべき時点でリマインダーテキストメッセージをお客様に送信します。
このチュートリアルでは、このアプリケーションを実行するための主要なコードをいくつか紹介します。コードを実行する方法については、GitHub のプロジェクトの README をお読みください。
Yelpが飲食店に対してレストランの予約確認に、いかにしてSMSを使用しているのか見てみましょう。
さぁ、はじめましょう! 下のボタンをクリックして開始します。
Twilio を使うようにアプリケーションを設定する
Twilio APIを使用して備忘録のテキストメッセージを送信できるようにする前に、アカウントの資格情報を構成することが必要です。 これらはTwilio Consoleで見つかります。 また、SMS 用の電話番号も必要です。電話番号を探すか、またはここで新しいものを購入できます。
これらの環境変数を .env
ファイルに取り込み、autoenv を使って、プロジェクトを開くたびにこれを適用します。このアプリケーションの設定方法については、プロジェクトの README をお読みください。
これで構成については準備ができました。 ここからは、アプリケーション構造について見ていきましょう。
アプリケーション構造
Application
オブジェクトは、Flask アプリの中核です。 アプリを初期化し、URL を設定して、すべての環境変数にプルします。
celery
メソッドは、皆さんのFlaskアプリケーションからの設定とコンテキストを使用してCeleryを構成するためのひな型です。 今回のアプリケーションではCeleryのブローカーとしてRedisを使用します。 しかし他の利用可能なCeleryブローカーを使用することも可能です。
Celery をマシンでローカルに実行するには、README の指示に従ってください。
Application
の準備が整ったら、Appointment model
を作成しましょう。
アポイントメントモデル
アポイントメントモデルは非常にシンプルです。name
および phone_number
フィールドで、リマインダーの送信先を指定します。time
、timezone
、delta
フィールドで、リマインダーをいつ送信するかを指定します。
SQLAlchemy を使って、モデルを駆動し、一緒に使用する最適な ORM インターフェイスを提供します。
さらに、リマインダーの送信に適した時間を設定できるよう、メソッド get_notification_time
を追加しました。便利な arrow ライブラリーにより、この種の時間計算は簡単です。
続いて、このモデルを使用して新規Appointment
を作成し、備忘録を受け受ーリングします。
新しいリマインダーのスケジューリング
このビューは、新しいアポイントメントの作成と新しいリマインダーのスケジューリングを処理します。/appointment
URL に送信された POST データを受け入れます。
WTForms を使って、forms/new_appointment.py
で定義した NewAppointmentForm
という名前のクラスを使い、フォームデータを検証します。
その後、arrow を使って、アポイントメントの時刻のタイムゾーンを UTC 時刻に変換します。
その後、新しい Appointment
オブジェクトを保存し、定義した send_sms_reminder
という名前の Celery タスクを使ってリマインダーをスケジュールします。
次では、このタスクを見てみましょう。
Twilio API クライアントをセットアップする
tasks.py
モジュールには、send_sms_reminder
タスクの定義が含まれています。このモジュールの上部で、twilio-python ライブラリーを使って、Client
の新しいインスタンスを作成します。
この client
オブジェクトを使い、send_sms_reminder
関数で Twilio API を使ってテキストメッセージを送信します。
ここではsend_sms_reminder
を見てみましょう。
リマインダーの送信
これは、appointment.create
ビューで呼び出した send_sms_reminder
関数です。関数は appointment_id
パラメーターから始まります。このパラメーターを使って、データベースから Appointment
オブジェクトを取得します。これが Celery のベストプラクティスです。
テキストメッセージの本文を構成するには、arrow を使って、アポイントメントに保存されている UTC 時刻をお客様のローカルなタイムゾーンに戻します。
その後、メッセージ自体の送信は client.messages.create()
を呼び出すだけです。お客様の電話番号を to
引数として、Twilio 番号を from_
引数として使います。
一丁あがり! 近く予定されているアポイントメントのリマインダーを送信するために、Flask アプリケーションをすべて設定しました。
関連トピック
このサンプルアプリケーションがお役に立つことを願っています。
TwilioおよびFlaskを使用するPython開発者でしたら、下記のチュートリアルもお楽しみいただけるでしょう:
ウェブページのボタンを押して、電話を介して訪問者をライブサポートまたはセールス担当者に接続します。
テキストメッセージを介した二要素認証を追加することで、Flask アプリのログイン機能のセキュリティを強化します。
これは役に立ちましたか?
Thanks for checking out this tutorial! If you have any feedback to share with us, please reach out on Twitter... we'd love to hear your thoughts, and know what you're building!
ヘルプが必要ですか?
誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。