前提条件
公開サーバ環境
- (参考) Amazon Linux環境の構築
- キーペアの作成 (新規): http://qiita.com/tcsh/items/59303d9506ca7d13f744
 - インスタンスの作成 (Public): http://qiita.com/tcsh/items/ae8f1f0d706237327c5a
 
 
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'を選択します。
 
 
- 「保存」ボタンをクリックします。
 
4. 電話アプリの動作確認
- 
Twilioから割り当てられた電話番号に電話します。
- voicemail_record.xmlに記述したメッセージが流れます。
 
 - 
メッセージを録音します。
- しばらく待つ、もしくは#キーを押します。
 
 - 
handleRecording.phpに記述したメッセージが流れて、電話が切れます。
 
