Python向けProgrammable Voiceクイックスタート
必要なものはコード数行のみ。Twilio Programmable Voiceを使用し、Pythonアプリケーションから通話の発着信を行うことができます。
このPythonクイックスタートでは、REST API、Twilio Pythonヘルパーライブラリー、PythonのFlaskマイクロフレームワークを使用し、簡単に通話の発着信を行う方法を説明します。
このクイックスタートでは、以下について説明します。
- Twilioにサインアップし、音声対応のTwilioの電話番号を初めて取得する
- 開発環境を設定し、通話の発着信を行う
- MP3を再生する通話を発信する
- 通話の着信・応答時に、Text to Speechを使用し発信側に対しメッセージを読み上げる
ビデオもご用意しています。Pythonにより通話の発着信を行う方法(YouTube)をご覧ください。
Twilioにサインアップし電話番号を取得する
Twilioアカウント、音声対応のTwilio電話番号をすでにお持ちの場合は、ログインし、次のステップに進んでください。
Pythonから電話をかけるには、Twilioアカウントが必要です。ここでサインアップし、無料トライアルアカウントを取得するか、すでにお持ちのアカウントにログインします。
次に、音声対応のTwilioの電話番号を用意します。音声通話機能付きのTwilio電話番号をお持ちではない場合は、ご購入いただく必要があります。 [Buy a Number](番号を購入する)ページに移動し、[Voice]ボックスをチェックし、[Search](検索)をクリックします。
使用可能な電話番号とその機能のリストが表示されます。好みの番号を探し、[Buy](購入)をクリックし、アカウントに追加します。
これでTwilioアカウントとプログラム可能な電話番号が揃い、通話に必要な基本ツールが準備できました(日本の場合、Regulatory Bundleが必須です)。
TwilioのHTTP APIを使用して電話をかけることもできますが、Twilioの公式Pythonヘルパーライブラリーを使用することにより、作業をさらにシンプルにできます。インストール方法を説明します。
PythonとTwilioヘルパーライブラリーをインストールする
Pythonのクイックスタートのいずれかをすでに終えており、PythonとTwilio Pythonヘルパーライブラリーがインストールされている場合には、このステップを省略し、最初の通話に進むことができます。
Twilioを使用して初めて電話をかけるには、PythonとTwilio Pythonヘルパーライブラリーをインストールしておく必要があります。
Pythonをインストールする
MacマシンまたはLinuxマシンをご使用の場合には、Pythonがすでにインストールされている可能性があります。ターミナルを開き、以下のコマンドを実行することで確認できます。
python --version
次のように表示されます。
$ python --version
Python 3.9 # Python 3.6+ is okay, too
Windowsのユーザーは、こちらのWindowsにPythonをインストールするためのチュートリアルをご覧ください。
TwilioのPython SDKは、Python 3.6以降のみをサポートします。
Twilio Pythonヘルパーライブラリーをインストールする
ライブラリーをインストールする最も簡単な方法は、pipを使用することです。以下をターミナルで実行します。
pip install twilio
「pip: command not found
(pip: コマンドが見つかりません)」というエラーが発生した場合には、ターミナルで以下を実行し、easy_install
でTwilioヘルパーライブラリーをインストールします。
easy_install twilio
手動インストールでは、twilio-pythonのソースコード(ZIP)をダウンロードし、以下のコード
python setup.py install
をtwilio-pythonライブラリーのあるフォルダで実行し、ライブラリーをインストールします。
次に、これを使用し、コードを記述します。
Pythonを使用し通話を発信する
Pythonとtwilio-python
がインストールされたため、購入したTwilioの電話番号から1つのAPIリクエストを使用し、通話を発信できます。make_call.py
という新しいファイルを作成し、このコードサンプルを入力または貼り付けします。
このコードにより、引数として渡される2つの電話番号の間で音声通話が開始されます。「from」番号はTwilioの番号であり、「to」番号は通話相手の番号です。
URL引数はTwiMLを指します。TwiMLは、受信者が応答した際の処理をTwilioに通知します。このTwiMLにより、Text To Speech機能を通じメッセージを読み込み、MP3を再生するようにTwilioに指示します。
このコードを機能させる前に、自分のTwilioアカウントで動作するように少し編集する必要があります。
プレースホルダの認証情報値を置き換える
account_sid
とauth_token
のプレースホルダ値を、ご自身のTwilio認証情報に置き換えます。
https://www.twilio.com/consoleに移動し、ログインします。このページでは、お客様固有のAccount SIDとAuth Tokenを確認できます。この作業は、今回のようにTwilio Clientによりメッセージを送信する際に必要となります。「目」のアイコンをクリックすると、Auth Tokenが表示されます。
make_call.py
を開き、account_sid
とauth_token
の値をご自身固有の値に置き換えます。
注意: 最初は認証情報を直接コードに埋め込んでも問題ありませんが、本番環境にデプロイするまでには、必ず環境変数を使用し、認証情報を保護してください。詳細については、環境変数の設定方法をご覧ください。
toとfrom_の電話番号を置き換える
数分前に購入した音声対応の電話番号を覚えていますか。入力されているfrom_
の番号を、その番号に置き換えます。必ずE.164形式を使用してください。
[+][国コード][エリアコードを含む電話番号]
次に、to
の電話番号をご自身の携帯電話番号に置き換えます。通話を受信できる電話番号であればどの番号でも構いませんが、プロセスを実際に体験するために、ご自身の番号を使用することをお勧めします。上記のように、この値にはE.164形式を使用します。
変更内容を保存し、ターミナルからスクリプトを実行します。
python make_call.py
これで完了です。Twilioの番号から電話がかかり、携帯電話が鳴ります。応答すると短いメッセージが聞こえます。😉
Twilioのトライアルアカウントを使用している場合、Twilioにより確認された番号のみに通話を発信できます。電話番号は、Twilio Consoleの認証済み発信者IDにより認証できます。その他のトライアルアカウントの制限については、無料のTwilioトライアルアカウントでの作業方法に関するガイドをご覧ください。
次に、Twilioの電話番号への着信通話に応答する方法を学びます。まず、Flaskサーバーを設定し、起動します。
Flaskをインストールし、開発環境を設定する
着信通話を処理するには、Twilioからの受信HTTPリクエストを受け付ける軽量のWebアプリケーションが必要です。このクイックスタートではFlaskを使用しますが、アプリケーションから電話を発着信するためのWebフレームワークは、好きなものを使用して構いません。
Windows上のFlaskの設定手順については、こちらのガイドをご覧ください。
pipとvirtualenvをインストールする
Flaskをインストールし、開発環境を設定するには、Flaskをインストールするためのpipと、このプロジェクトに固有のサンドボックスを作成するためのvirtualenvという2つのツールが必要です。これらのツールがすでにインストールされている場合には、次のセクションにスキップできます。
Python 3.4+にはpipが付属するため、Pythonの最近のバージョンをお使いの場合には、何かを新しくインストールする必要はありません。それよりも以前のバージョンをお使いの場合でも心配の必要はありません。pipはvirtualenvに含まれています。それではvirtualenvをインストールしましょう。
Python 2.4をご使用の場合、ターミナルで以下のコマンドを実行します。
easy_install virtualenv
Python 2.5-2.7をご使用の場合、バージョン番号を指定し、ターミナルで以下のコマンドを実行します。
easy_install-2.7 virtualenv
ご使用のバージョンに従い、必要に応じて2.7を2.5または2.6に置き換えます。
Python 3.4+を使用し、virtualenvをインストールするには、以下の手順に従います。
# If you get 'permission denied' errors try running "sudo python" instead of "python"
pip install virtualenv
このステップでエラーが発生する場合は、デバッグのためのヒントをご覧ください。
仮想環境の作成と有効化
virtualenvをインストールした後、ターミナルにおいてこのクイックスタートに使用しているディレクトリに移動し、仮想環境を作成します。
cd Documents/my_quickstart_folder
virtualenv --no-site-packages .
次に仮想環境を有効化します。
source bin/activate
ターミナルではvirtualenvが実行されていることが確認できます。virtualenvを含むディレクトリ名が表示されます。次のように表示されるはずです。
(my_quickstart_folder)USER:~ user$
virtualenvの詳細について確認したり、カスタムの環境変数パスを作成したりするには、こちらの完全ガイドをご覧ください。
依存関係をインストールする
これでFlaskをインストールする準備ができました。requirements.txt
というファイルを作成し、以下の行を追加します。
Flask>=0.12
twilio~=6.0.0
次に、ターミナルでpipを使用しこれらのパッケージの両方をインストールします。
pip install -r requirements.txt
すべてを最初からテストする
まず、virtualenvが有効であることを確認します。
cd Documents/my_quickstart_folder
source bin/activate # On Windows, use .\bin\activate.bat
次に、answer_phone.py
というファイルを作成し、それを開き、以下の行を追加します。
次にこれを実行します。ターミナルにおいて以下を入力します。
python answer_phone.py
次のように表示されるはずです。
$ python answer_phone.py
* Running on http://127.0.0.1:5000/
ブラウザーでhttp://localhost:5000に移動します。「Hello World!」メッセージが表示されるはずです。これで初めてのTwilio Programmable Voiceアプリを作成する準備ができました。
何らかの問題が生じた場合、または以前のPythonバージョン(3.4より前)で環境を設定する場合には、ローカルのPython開発環境を設定するための完全ガイドをご覧ください。
TwilioにFlaskアプリケーションと通信させる
今度は、小さなFlaskアプリケーションを拡張し、音声通話を受けます。しかしその前に、Twilioがローカルの開発環境と通信できることを確認する必要があります。
大半のTwilioサービスは、Webhookを使用することによりアプリケーションと通信します。例えば、Twilioが通話を受けると、通話の処理方法の指示を受けるためにアプリケーションを使用しURLに接続します。
開発環境のFlaskアプリケーションの使用により作業する際、その環境のアプリはそのコンピューター上のプログラムからのみアクセス可能であるため、Twilioからはアクセスできません。インターネットでアプリケーションにアクセスできるようにし、この問題を解決する必要があります。
アプリケーションをHerokuやAWSにデプロイするなど、方法はいくつかありますが、Twilioアプリケーションのテストには手間の少ない方法を採用します。インターネットでアプリケーションに簡単にアクセスできるようにするには、ngrokというツールをお勧めします。ngrokを開始すると、ngrok.ioドメインの一意のURLが提供され、受信リクエストがローカルの開発環境に転送されます。
まだngrokをご利用でない場合には、ダウンロードページに移動し、お使いのオペレーティングシステムに適したバイナリをダウンロードします。ダウンロード後にパッケージを解凍します。
MacまたはLinuxをお使いの場合には、これだけで作業は終わりです。Windowsをご使用の場合は、Windowsにngrokをインストールし、設定する方法についてのガイドを参照してください。ngrokの活用方法などの詳細については、こちらの詳細なブログ記事をご覧ください。
ダウンロード後に、前に作成したHello Worldアプリケーションを起動します。
python answer_phone.py
ngrokを機能させるために、お使いのローカルのアプリケーションがローカルで実行されている必要があります。
次に、新しいターミナルタブまたはウィンドウを開き、このコマンドを使用しngrokを開始します。
./ngrok http 5000
ローカルサーバーが別のポートで実行されている場合には、5000を正しいポート番号に置き換えてください。
次のような出力が表示されるはずです。
この出力から公開URLをコピーし、それをブラウザーに貼り付けます。Flaskアプリケーションの「Hello World!」メッセージが表示されるはずです。
Twilioを使用し着信に応答する
お使いのTwilio番号が通話を受けると、Twilioは次の作業の指示を求めサーバーにHTTPリクエストを送信します。リクエストを受信したら、Twilioに電話への応答方法を指示できます。
このクイックスタートでは、Flaskアプリに通話に応答させ、発信者に対して短いメッセージを言います。再度answer_phone.py
を開き、以下のコードサンプルのようにコードを更新します。
ファイルを保存し、以下のコードを使用しアプリを再起動します。
python answer_phone.py
これにより、Webブラウザーでhttp://localhost:5000/answerを開けるようになるはずです。ページのソースコードを確認すると、以下のテキストがあるはずです。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say voice="alice">Thank you for calling! Have a great day.</Say>
</Response>
このソースコードは、Twilioヘルパーライブラリーを活用した皆さんのコードから生成されたTwiML XMLです。
ngrokがlocalhost上で以前と同じポートで実行されていることを再確認します。これでTwilioが皆さんのアプリケーションにアクセスできるようになります。最後にあと一点のみ、Twilioにリクエストの送信先を伝えれば、皆さんのアプリに電話をかける準備が整います。
Webhook URLを設定する
Twilioが参照する場所を認識できるように、Twilioの電話番号を設定し、新しい着信メッセージの際に、Webhook URLにアクセスするようにします。
- Twilio.comにログインし、[Console's Numbers](Consoleの番号)ページに移動します。
- 音声対応の電話番号をクリックします。
- [Voice & Fax](音声とファックス)セクションを探します。[Accept Incoming](着信受け付け)選択項目が[Voice Calls](音声通話)に設定されていることを確認します。デフォルトの[Configure With](設定方法)選択項目には、[Webhooks]、[TwiML]など、必要なものを設定します。
- [A Call Comes In](次で通話を受信)セクションでは、[Webhook]を選択し、使用するURLを貼り付け、「/answer」ルートを追加します。
変更内容を保存すると、準備完了です。
アプリケーションをテストする
localhostとngrokサーバーが実行されていれば、新しいFlaskアプリケーションをテストできます。
自分の携帯電話から、自分のTwilio電話番号に電話をかけます。ngrokコンソールにHTTPリクエストが表示されます。Flaskアプリはリクエストを処理し、TwiMLで応答します。通話が接続されると、メッセージが聞こえます
次のステップ
Pythonを使用した通話の発着信の基本が理解できました。
ここでFlaskアプリは、TwiML動詞<Say>のみを使用し、音声合成機能により発信者に向けてメッセージを読み上げましたが、<Record>、<Gather>、<Conference>などのTwiML動詞を使用し、他にもさまざまな機能を実行できます。
詳細については、以下のページをご覧ください。
- Pythonでキーパッド(DTMFトーン)を介しユーザーの入力を収集する
- Pythonを使用し、発着信したTwilio Voiceの通話を録音する方法を学ぶ
- Pythonを使用し、電話会議を作成する
- Twilio Programmable VoiceのAPIリファレンスドキュメントを読む
- Pythonを使用し、進行中の通話を変更する方法を学ぶ
- ブラウザーまたはモバイルアプリケーションから電話をかけるのなら、Twilio Clientを使用し、高品質のVoIP通話と連携しましょう。
- Pythonを使用し、Twilioアカウントから進行中または完了した通話に関する情報を取得する
- PythonとFlaskを使用した、オペレーター間の通話転送方法をサンプルアプリケーションチュートリアルで確認する
コミュニケーションの未来を構築。
サポートが必要ですか?
コーディングに関するご質問、ご不明点等ございましたら、お問い合わせからご連絡いただくか、TwilioのStack Overflow Collectiveにアクセスいただくか、Stack OverflowサイトでTwilioタグを検索してください。