Twilio Gatherを使用して、Twilio番号に着信する音声通話を録音し、テキストに転写します

こんにちは、チャールです。このブログでTwilio Gatherを使用して、Twilio番号に着信する音声通話を録音し、テキストに転写します。

前提条件:

  • Twilio(無料)アカウント
  • Python Flask
  • ngrok
  • 紹介:

  • Twilio Gather: Twilioの動詞は、Twilio Voice API内で使用される強力な機能で、電話中に発信者から数字(電話番号など)または音声入力を収集することができます。
  • Python Flask: Pythonのマイクロウェブフレームワークです。
  • ngrok: ローカルマシンで実行中のウェブサーバーをインターネットに公開できるツールです。
  • 最初に、Twilioアカウントを作成して番号を取得してください。

    お気に入りのコードエディタを使ってください。

    Pythonをインストールした後、pipを使用してFlaskとTwilioのPython SDKをインストールしてください。

    pip install Flask twilio

    ngrokのウェブサイトからngrokをダウンロードしてください。

    やりましょう!

    ディレクトリを作成し、必要なパッケージをインストールして、以下のコードを書いてください。

    from flask import Flask
    from requests.api import request
    from twilio.twiml.voice_response import Gather,VoiceResponse
    
    app = Flask(__name__)
    
    @app.route("/voice", methods=['GET', 'POST'])
    def voice():
        response = VoiceResponse()
        gather = Gather(
            action='/results', 
            method='GET',
            language='ja-JP',
            input='speech',
            speech_model='phone_call',
            speech_timeout='5',
            enhanced='true')
       
        gather.say("メセージを残してください!", voice='Polly.Mizuki')
    
        response.append(gather)
        
        print(response)
        return(str(response))
    
    @app.route("/results",methods=['GET'])
    def results():
        response = VoiceResponse()
        response.say("ありがとうございます", voice='Polly.Mizuki')
        print(request)
        
        return(str(response))
    
    if __name__ == "__main__":
        app.run(debug=True)

    コードを理解しましょう。

    • /voice ルートは、着信を処理するために定義されます。Twilioがあなたの番号に電話を受けると、このエンドポイントにリクエストを送り、その後 voice() 関数が実行されます。

      /voiceルート

    • VoiceResponseオブジェクトが作成されます。このオブジェクトは、メッセージを再生するか入力を収集するかなど、Twilioが通話で何をするかを指示します。
    • Gatherオブジェクトが使います。Gatherはいくつかのパラメータで設定されます:
      • action='/results' は、収集した入力をTwilioがどこに送るかを指示します。入力を収集した後、Twilioは/resultsエンドポイントへリクエストを行います。
      • method='GET' は、アクションURLへのリクエストを行う際のTwilioのHTTPメソッドを指定します。
      • language='ja-JP' は、音声認識の言語を日本語に設定します。
      • input='speech' は、IVRがDTMFトーン(キーパッド入力)ではなく音声入力を聞くように指示します。
      • speech_model='phone_call' は、通話音声の音声認識を最適化します。
      • speech_timeout='5' は、Twilioが音声入力を処理する前の最大無音時間を設定します。
      • enhanced='true' は、より高い精度のために強化された音声認識を有効にします。
    • Gatherは、.say() メソッドを使用して、発信者にメッセージを日本語で残すように促します。これは、テキストから音声への変換にAmazon PollyのMizuki声を使用します。
    • Gatherを設定した後、それをVoiceResponseに追加します。レスポンスは文字列に変換され(str(response))、返されます。これをTwilioは通話の対話をガイドするために使用します。

      /results ルート

    • 発信者が応答した後、TwilioはGatherアクションによって指定された/resultsエンドポイントに入力を送ります。results() 関数は次にこの入力を処理します:
      • 新しいVoiceResponseオブジェクトが作成され、発信者に対するレスポンスを生成します。
      • .say() メソッドが再び使用され、日本語で発信者に感謝します。

    コードを実行する

  • コードを実行するには、python3 を実行してください。これにより、フラスクサーバーが実行されます。
  • 新しいターミナルで、ngrok http 5000 を実行してください。これにより、公開URLが生成されます。
  • Twilio>Phone numbers>Manage>Active numbersを管理に行き、「Voice Configuration」の下で、Webhookを選択し、/voice を入力して設定を保存してください。
  • Twilio番号に電話をかけ、メッセージを話してみてください。フラスクログでメッセージが書き起こされるのを見ることができるはずです。
  • まとめ:

    Python Flaskを使用してTwilio Voice Callのセットアップに成功しました。このセットアップでは、ユーザーがボタンを押さずに5秒間沈黙している場合、自動的に通話が拒否されます。異なるGatherコンポーネントも試してください。

    ありがとうございます!