メニュー

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でプッシュボタン (DTMF信号) からのユーザー入力を収集する

このガイドでは、Pythonアプリケーションで通話中に電話機のプッシュボタン (DTMF信号) を使ってユーザー入力を収集する方法についてご紹介します。 このテクニックを利用することで、エンドユーザー向けに自動音声応答装置 (IVR) やその他の電話ベースのインターフェイスを作成できます。

このコード例ではFlask Webフレームワーク、およびTwilio Python SDK を使用しています。 さぁ、はじめましょう!

着信通話を受けるためにWebアプリケーションを設定する

This guide assumes you have already set up your web application to receive incoming phone calls. If you still need to complete this step, check out this guide. It should walk you through the process of buying a Twilio number and configuring your app to receive incoming calls.

<Gather> TwiML動詞でユーザー入力を収集する

The <Gather> TwiML verb allows us to collect input from the user during a phone call. Gathering user input through the keypad is a core mechanism of Interactive Voice Response (IVR) systems where users can press "1" to connect to one menu of options and press "2" to reach another. These prompts can be accompanied by voice prompts to the caller, using the TwiML <Say> and <Play> verbs. In this example, we will prompt the user to enter a number to connect to a certain department within our little IVR system.

        
        
        
        
        この例では、<Gather>タグ内に入れ子となった<Say>タグを含むTwiMLを返します。 ユーザーは、営業とサポート、いずれかを選択するよう促されます。

        <Gather>を使用してプッシュボタン (DTMF信号) を通じたユーザー入力を収集する

        この例では、<Gather>タグ内に入れ子となった<Say>タグを含むTwiMLを返します。 ユーザーは、営業とサポート、いずれかを選択するよう促されます。

        If the user doesn't enter any input after a configurable timeout, Twilio will continue processing the TwiML in the document to determine what should happen next in the call. When the end of the document is reached, Twilio will hang up the call. In the above example, we use the <Redirect> verb to have Twilio request the same URL again, repeating the prompt for the user

        If a user were to enter input with the example above, the user would hear the same prompt over and over again regardless of what button you pressed. By default, if the user does enter input in the <Gather>, Twilio will send another HTTP request to the current webhook URL with a POST parameter containing the Digits entered by the user. In the sample above, we weren't handling this input at all. Let's update that logic to also process user input if it is present.

              
              
              
              
              既定では、<Gather>は入力が行われるたびに同じURLをリクエストし、現在のTwiML URLを「ループ」させます。

              ユーザーによって送信された数字に基づいて通話ロジックを分岐させる

              既定では、<Gather>は入力が行われるたびに同じURLをリクエストし、現在のTwiML URLを「ループ」させます。

              ユーザー入力収集後に行われるアクション (action) を指定する

              アプリケーション中にまったく別の呼び出し先を設けて、ユーザー入力を処理したいこともあるでしょう。 <Gather>動詞の"action"属性を使えばこれが可能です。 サンプルを書き換え、ユーザー入力の処理を受け持つ第2の呼び出し先を追加してみましょう。

                    
                    
                    
                    
                    この方法で、ユーザー入力を処理する別のルートを作成します。

                    ユーザーからの入力を処理する別のルートの追加

                    この方法で、ユーザー入力を処理する別のルートを作成します。

                    action属性には、サーバーで処理を実行できる別ルートへの相対URLを指定します。 これで、単一のルートでの条件分岐のロジックの代わりに、action属性を使って通話ロジックを別のコードの流れで処理するようリダイレクトすることができます。

                    関連トピック

                    Pythonでコールセンター型のアプリケーションを構築されているなら、これらのテクニックを駆使して実装された完全なサンプルアプリケーション、IVR自動応答システムの (Flask) チュートリアルもお役に立つでしょう。

                    Andrew Baker Ricky Robinett Kevin Whinnery David Prothero Rob Spectre
                    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.