メニュー

Rate this page:

Thanks for rating this page!

We are always striving to improve our documentation quality, and your feedback is valuable to us. How could this documentation serve you better?

PythonおよびFlaskを使用した自動アンケート

電話または SMS から回答可能な自動調査をどのように作成するのか知りたいと思ったことはありませんか?

このチュートリアルでは、Twilio API を使用方法を紹介します。

どのような仕組みになっているのか概要を以下に示します。

  1. エンドユーザーは、調査電話番号に電話をかけるか SMS を送信します。
  2. Twilioに電話やSMSを着信すると、HTTPリクエストを開発者のアプリケーションに発行し、どのように応答するかの指示を問い合わせます。
  3. Your web application instructs Twilio (using TwiML) to Gather or Record if it receives voice input. If using SMS it will prompt for text input with Message.
  4. After each question is answered, Twilio makes another request to your server with the user's input. That input is stored in the application's database.
  5. 回答を保存したらサーバーはTwilioに対して、ユーザーを次の設問あるいはアンケート終了にRedirectするよう指示します。

Instacart uses Twilio to power their customer service surveys and integrate that feedback into their customer database. Read more here.

ここをクリックしてはじめましょう!

調査の作成

便宜を図るため、アプリケーションのレポジトリーには、データベースにロード可能な調査が 1 つすでに格納されています。

You can modify the survey questions by editing the survey.json file located in the root of the repository and re-running the app's dbseed command:

$ python manage.py dbseed

        
        
        
        
        automated_survey_flask/parsers.py

        ここで、Twilioで動作するアンケートのフローをインタビューループとして理解すべく時間を取りましょう。

        インタビューループとは?

        インタビューループ

        The user can answer a question for your survey over the phone by either their phone's keypad or by voice. After each interaction Twilio will make an HTTP request to your web application with either the string of keys the user pressed or a URL to a recording of their voice input.

        SMSのアンケートについては、設問の送信されたTwilio番号に別のSMSを返信することでその設問に回答します。

        ユーザーの入力を処理、保存、応答するのは、アプリケーションの役割です。

        このフローを調べて、アプリケーションが実際にどのように機能するのかを見てみましょう。

        Twilio電話番号を構成する

        Twilio 番号の設定

        インタビューのプロセスを始めるには、Twilio番号をひとつ構成して、音声通話の着信やSMSの受信時にHTTPリクエストをWebアプリケーションに送信することが必要です。

        いずれかの電話番号をクリックし、お使いのサーバーを指し示す音声通話およびメッセージURLを構成します。 今回のコードでは、音声向けに/voice、SMS向けに/messageにルーティングしています。

        自動アンケートのWebhookセットアップ

        If you don't already have a server configured to use as your webhook, ngrok is a great tool for testing webhooks locally.

        Next, we will see how to handle requests to our webhooks.

        Twilioリクエストに返信する

        Twilio リクエストへの応答

        Right after receiving a call or SMS, Twilio will send a request to the URL specified in that phone number's configuration.

        The endpoint used for a call is the /voice endpoint. It will check to see if we have a survey with questions to be answered, welcome the user, and redirect them to the first question using Twilio's <Redirect> verb.

        /messageエンドポイントは各SMSを受信してユーザーを歓迎し、彼らを適切な設問にリダイレクトします。 SMSリクエストがそのセッションにquestion_id変数を含んでいる場合は、回答を保存するためにanswerエンドポイントにリダイレクトします。 このルーティングについては後々、より注意深く掘り下げる予定です。 現時点では、ユーザーを歓迎した後に最初のアンケートの設問に遷移すると考えてください。

              
              
              
              
              automated_survey_flask/survey_view.py

              Let's see how we can use a Controller to handle and maintain the state of the survey.

              questionコントローラーを構築する

              質問コントローラー

              This endpoint checks if the incoming request is from an SMS or a Call and builds a survey question as a TwiML response. Each type of question and interaction (Call or SMS) will produce different instructions on how to proceed. For instance, we can record a voice message or gather a key press during a call, but we can't do the same for text messages.

              When the user interacts with our survey over SMS we don't have something like an ongoing call session with a well defined state. Since all SMS requests will be sent to the /message main endpoint, it becomes harder to know if an SMS is answering question 2 or 20. To solve that, we can use Twilio Cookies to keep track of what question is being answered at the moment. This is done by setting a question_id session key, leaving Flask to handle cookie management.

                    
                    
                    
                    
                    automated_survey_flask/question_view.py

                    レスポンスの構築方法を見てみましょう。

                    TwiMLレスポンスを構築する

                    TwiML 動詞の構築

                    If the survey question is "numeric" or "boolean" (yes/no) in nature, then we use the <Gather> verb. However, if we expect the user to record a free-form answer we use the <Record> verb. Both verbs take an action attribute.

                    Twilio will use this attribute to define our answer endpoint to use as a callback. That endpoint will be responsible for receiving and storing the caller's answer.

                    During the Record verb creation, we also ask for a Transcription. Twilio will process the recording and extract useful text, making a request to our transcription endpoint when the transcription is complete.

                          
                          
                          
                          
                          automated_survey_flask/question_view.py

                          ここで、レスポンスを受信したら行うべきことを確認しておきましょう。

                          アンケートのレスポンスを処理する

                          レスポンスの処理

                          ユーザーが回答を送信すると、Twilioは何が起こったかを説明するリクエストを開発者に送信し、追加の指示を問い合わせます。

                          At this point, we need to recover data from Twilio's request parameters (extract_content handles this) and store it in the database.

                          Recovered parameters vary according to what we asked in our questions:

                          • Body SMS経由で送信された回答のテキストメッセージが含まれます。
                          • Digits 数値で回答する質問に対して入力されたキーが含まれます。
                          • RecodingUrl 録音されたメッセージへのURLが含まれます。
                          • TranscriptionText contains the text of a voice recording transcription.

                          Finally we redirect to our Question controller, which will ask the next question in the loop. This is done in the redirect_twiml function.

                                
                                
                                
                                
                                automated_survey_flask/answer_view.py

                                アンケートのレスポンスを処理するメソッド

                                automated_survey_flask/answer_view.py

                                最後に、結果をどのように視覚化するかを見てみましょう。

                                調査結果を表示する

                                調査結果の表示

                                For this route we simply query the database for our survey answers using SQLAlchemy and then display the information within a template. We show a panel for every question from the survey, and inside each panel we list the responses from the different calls.

                                アプリケーションのrootルートからこのパネルにアクセスできます。

                                      
                                      
                                      
                                      
                                      automated_survey_flask/views.py

                                      調査結果を表示する

                                      automated_survey_flask/views.py

                                      これで終わりです!

                                      このチュートリアル内で構築するアプリケーションに対してTwilio番号が構成されている場合、アンケートを受けて、アプリケーションのrootルート直下で結果を参照できます。 このサンプルアプリケーションがお役に立つことを願っています。

                                      関連トピック

                                      次はどこでしょうか?

                                      Twilio を使う Python 開発者であれば、他のチュートリアルもお楽しみください。

                                      プッシュボタン (DTMF信号) からのユーザー入力を収集する

                                      電話機のプッシュボタンを通じて(DTMFトーンを使用して)、通話中にユーザー入力を収集します。

                                      SMS と MMS メッセージを受信し返信する

                                      Use Programmable SMS to respond to incoming SMS messages in your web application.

                                      これは役に立ちましたか?

                                      Thanks for checking this tutorial out! If you have any feedback to share with us, we'd love to hear it. Connect with us on Twitter and let us know what you build!

                                      Jose Oliveros Agustin Camino Orlando Hidalgo Kat King Samuel Mendes Andrew Baker
                                      Rate this page:

                                      ヘルプが必要ですか?

                                      We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd browsing the Twilio tag on Stack Overflow.