Help us understand the problem. What is going on with this article?

[twilio] Twilioで受信メッセージを録音してみる (Twilio Post用サーバ)

More than 5 years have passed since last update.

前提条件

公開サーバ環境

Webサーバ + PHP環境

  • Twilio Post用サーバ環境を構築してみる (AmazonLinux + nginx + php-fpm):

0. 事前準備

ファイル置き場の作成

変数の設定
DIR_HTML='/usr/share/nginx/html'
DIR_TWIML="${DIR_HTML}/sysadm/xml"
DIR_PHP_SCRIPT="${DIR_HTML}/php"
URL_PHP_SCRIPT=$(echo ${DIR_PHP_SCRIPT} | sed "s|${DIR_HTML}||" )
コマンド
sudo mkdir -p ${DIR_TWIML} ${DIR_PHP_SCRIPT} \
  && ls ${DIR_TWIML} ${DIR_PHP_SCRIPT}

1. 電話録音アプリの作成

サーバ上に電話受信アプリを作成します。

1.1. Twilioからのリクエストを処理するスクリプトの作成

変数の設定
FILE_PHP_SCRIPT='handleRecording.php'
MSG_THANKYOU='ご連絡ありがとうございました。'
変数の確認
cat << ETX

  FILE_PHP_SCRIPT: ${FILE_PHP_SCRIPT}
  MSG_THANKYOU: ${MSG_THANKYOU}

ETX
コマンド(日本語の場合)
cat << EOF > ~/${FILE_PHP_SCRIPT}
<?php
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<Response><Say language=\"ja-jp\">${MSG_THANKYOU}</Say></Response>";
EOF

1.2. Webサーバの公開ドキュメントディレクトリにスクリプトを配置

コマンド
sudo cp ~/${FILE_PHP_SCRIPT} ${DIR_PHP_SCRIPT}/ \
  && cat ${DIR_PHP_SCRIPT}/${FILE_PHP_SCRIPT}
/usr/share/nginx/html/php/handleRecording.php
<?php
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
echo "<Response><Say language=\"ja-jp\">ご連絡ありがとうございました。</Say></Response>";

1.3. スクリプトへのアクセス確認

ブラウザで http://<ホスト>/php/handleRecording.php にアクセスして、"ご連絡ありがとうございました。"が表示されればOKです。

2. TwilioMLファイルの作成

2.1. TwilioMLファイルの作成

変数の設定
FILE_TWIML='voicemail_record.xml'
MSG_SAY='ビープおんのあとに、20秒以内でメッセージをおねがいします。終了したらシャープボタンを押してください。'
MSG_ERROR="I did not receive a recording. Goodbye."
MAX_LENGTH_RECORD='20'
変数の確認
cat << ETX

  URL_PHP_SCRIPT:    ${URL_PHP_SCRIPT}
  FILE_TWIML:    ${FILE_TWIML}
  MSG_SAY:           ${MSG_SAY}
  MSG_ERROR:         ${MSG_ERROR}
  FILE_PHP_SCRIPT:   ${FILE_PHP_SCRIPT}
  MAX_LENGTH_RECORD: ${MAX_LENGTH_RECORD}

ETX
コマンド(日本語版)
cat << EOF > ~/${FILE_TWIML}
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say language="ja-jp">${MSG_SAY}</Say>
    <Record
        action="/php/handleRecording.php"
        method="GET"
        maxLength="20"
        finishOnKey="#"
    />
    <Say>${MSG_ERROR}</Say>
</Response>
EOF
コマンド
xmllint ~/${FILE_TWIML} -noout

2.2. Webサーバの公開ドキュメントディレクトリにTwilioMLファイルを配置

TwilioMLを配置場所は、GETで取得できる環境であれば良いのでS3上でもかまいませんが、今回は上記の公開Webサーバ上に配置します。

コマンド
sudo cp ~/${FILE_TWIML} ${DIR_TWIML}/ \
  && cat ${DIR_TWIML}/${FILE_TWIML}
/usr/share/nginx/html/sysadm/xml/complex_gather.xml
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Say language="ja-jp">ビープおんのあとに、20秒以内でメッセージをおねがいします。終了したらシャープボタンを押してください。</Say>
    <Record
        action="/php/handleRecording.php"
        method="GET"
        maxLength="20"
        finishOnKey="#"
    />
    <Say>I did not receive a recording. Goodbye.</Say>
</Response>

2.3. TwilioMLファイルへのアクセス確認

ブラウザで http://<ホスト>/sysadm/xml/voicemail_record.xml にアクセスして、XMLが表示されればOKです。

3. Twilioの設定変更

  • ログイン: http://twilio.kddi-web.com
  • 画面: 'Voice, SMS & MMS' > '電話番号: 'https://jp.twilio.com/user/account/voice-sms-mms/phone-numbers
    • 電話番号のリンクをクリックします。
    • ポップアップで「音声通話」タブを選択します。
    • Request URLにTwiML(XMLファイル)のURLを貼り付けます。
      • 例: http://username:password@<ホスト名>/sysadm/xml/voicemail_record.xml
      • username:passwordには、ベーシック認証のユーザ名(例:sysadm)とパスワード(例:#userPass123)を記述します。
    • URLを貼り付けた欄の右のプルダウンから'HTTP GET'を選択します。

スクリーンショット 2015-10-10 9.07.33.png

  • 「保存」ボタンをクリックします。

4. 電話アプリの動作確認

  • Twilioから割り当てられた電話番号に電話します。

    • voicemail_record.xmlに記述したメッセージが流れます。
  • メッセージを録音します。

    • しばらく待つ、もしくは#キーを押します。
  • handleRecording.phpに記述したメッセージが流れて、電話が切れます。

完了

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away