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

[twilio] Twilioメッセージ登録受付アプリを作る (AmazonLinux + nginx + php-fpm + Twilio PHP SDK)

More than 5 years have passed since last update.

Twilioでメッセージ録音システムを構築してみます。

音声メニューに従ってメッセージを録音します。

前提条件

公開サーバ環境

Webサーバ + PHP環境

  • PHP (5.4以上を想定)
  • Twilio PHP SDK

(参考) Twilioで番号入力を受け付けてみる (AmazonLinux + nginx + php-fpm):

Twilioのアカウント

  • Twilioのアカウントを保有していること。
    • Twilioの電話番号
    • Twilioの認証情報 (ACCOUNT SID / AUTH TOKEN)

0. 事前準備

0.1. Twilioアカウント情報の設定

Twilioの「はじめよう」画面から以下の情報を取得して変数に格納します。

  • ACCOUNT SID

  • AUTH TOKEN

  • 電話番号

変数の設定
TWILIO_ACCOUNT_SID='ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
TWILIO_AUTH_TOKEN='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
TEL_TWILIO_ORIGIN=<Twilioで取得した電話番号>

0.2. ファイル置き場の作成

変数の設定
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. アプリケーションディレクトリの作成

変数の設定
DIR_TWILIO_APP="${HOME}/app/twilio-record-app" \
  && echo ${DIR_TWILIO_APP}
APP_NAME=$(echo ${DIR_TWILIO_APP} | sed 's|^.*/||') \
  && echo ${APP_NAME}
コマンド
mkdir -p ${DIR_TWILIO_APP} \
  && cd ${DIR_TWILIO_APP}

1.2. composerのインストール

コマンド
cd ${DIR_TWILIO_APP} \
        && mkdir bin \
        && curl -sS https://getcomposer.org/installer | \
          php -- --install-dir=bin --filename=composer
結果(例)
      #!/usr/bin/env php
      All settings correct for using Composer
      Downloading...

      Composer successfully installed to: /Users/taro/app/twilio-php/composer.phar
      Use it: php bin/composer

1.3. Twilio PHP SDKの導入

参考: https://jp.twilio.com/docs/php/install

コマンド
cd ${DIR_TWILIO_APP} \
        && ./bin/composer require twilio/sdk
結果(例)
      Using version ^4.2 for twilio/sdk
      ./composer.json has been created
      Loading composer repositories with package information
      Updating dependencies (including require-dev)
        - Installing twilio/sdk (4.2.1)
          Downloading: 100%

      Writing lock file
      Generating autoload files
コマンド
ls ${DIR_TWILIO_APP}/vendor/twilio/sdk/Services/Twilio.php > /dev/null 2>&1 \
  && echo $?
結果(例
0

Twilio PHPライブラリファイルの位置を変数に取り込みます。

変数の設定
FILE_LIB_TWILIO="vendor/twilio/sdk/Services/Twilio.php" \
  && ls ${FILE_LIB_TWILIO} > /dev/null 2>&1 \
  && echo $?
結果(例)
0

1.4. Twilioで録音受付をするスクリプトの作成

変数の設定
FILE_PHP_SCRIPT='announce-record.php'
変数の確認"
cat << ETX

  FILE_PHP_SCRIPT:    ${FILE_PHP_SCRIPT}

ETX
コマンド
cat << EOF > ${FILE_PHP_SCRIPT}
<?php
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<Response>
<?php echo "<Say language=\"ja-jp\">お客さまは、" . \$_REQUEST['Digits'] . "を押されました。</Say>" ?>
<?php if (\$_REQUEST['Digits'] == '1') { ?>
    <Say language="ja-jp">ビープおんのあとに、20秒以内で、ご契約についてのメッセージをおねがいします。終了したら、シャープボタンを押してください。</Say>
    <Record
        method="GET"
        maxLength="20"
        finishOnKey="#"
        action="${URL_PHP_SCRIPT}/${APP_NAME}/thankyou.php"
    />
    <Say language="ja-jp">録音できませんでした。</Say>

<?php } elseif (\$_REQUEST['Digits'] == '2') { ?>
    <Say language="ja-jp">ビープおんのあとに、20秒以内で、料金についてのメッセージをおねがいします。終了したら、シャープボタンを押してください。</Say>
    <Record
        method="GET"
        maxLength="20"
        finishOnKey="#"
        action="${URL_PHP_SCRIPT}/${APP_NAME}/thankyou.php"
    />
    <Say language="ja-jp">ろくおんできませんでした。</Say>

<?php } else { ?>
    <Say language="ja-jp">ありがとうございました。</Say>
<?php } ?>
</Response>
EOF

cat ${FILE_PHP_SCRIPT}

動作確認をします。

コマンド
php ${FILE_PHP_SCRIPT} > announce-record.xml \
  && xmllint announce-record.xml --noout \
  && echo $? \
  && rm announce-record.xml
結果(例)
PHP Notice:  Undefined index: Digits in /home/ec2-user/app/twilio-record-app/thankyou.php on line 5
PHP Notice:  Undefined index: Digits in /home/ec2-user/app/twilio-record-app/announce-record.php on line 6
PHP Notice:  Undefined index: Digits in /home/ec2-user/app/twilio-record-app/announce-record.php on line 16
0

1.5. 録音完了後にメッセージを伝える処理するスクリプトの作成

変数の設定
FILE_PHP_SCRIPT='thankyou.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";
?>
<Response><Say language="ja-jp">${MSG_THANKYOU}</Say></Response>
EOF

cat ${FILE_PHP_SCRIPT}

動作確認をします。

コマンド
php ${FILE_PHP_SCRIPT} > thankyou.xml \
  && xmllint thankyou.xml --noout \
  && echo $? \
  && rm thankyou.xml
結果(例)
0

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

コマンド
sudo cp -R ${DIR_TWILIO_APP} ${DIR_PHP_SCRIPT}/ \
  && cat ${DIR_PHP_SCRIPT}/${APP_NAME}/${FILE_PHP_SCRIPT}

3. スクリプトの動作確認

ブラウザでアクセスしてみましょう。

  • http://<ホスト>/php/twilio-record-app/announce-record.php
  • http://<ホスト>/php/twilio-record-app/thankyou.php

'404 Not Found'が表示されなければOKです。

4. TwiMLファイルの作成

4.1. TwiMLファイルの作成

変数の設定
FILE_TWIML="${APP_NAME}.xml"
MSG_SAY='。ようこそ。ごけいやくの型は、1番とシャープを。料金のおといあわせは、2番とシャープを。そのほかのごようのかたわ、9番とシャープを、おしてください。'
MSG_ERROR="番号がわかりませんでした。ありがとうございました。"
MAX_LENGTH_RECORD='20'
変数の確認
cat << ETX

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

ETX
コマンド(日本語版)
cat << EOF > ~/${FILE_TWIML}
<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Gather action="${URL_PHP_SCRIPT}/${APP_NAME}/announce-record.php"
method="GET">
        <Say language="ja-jp">${MSG_SAY}</Say>
    </Gather>
    <Say language="ja-jp">${MSG_ERROR}</Say>
</Response>
EOF

cat ~/${FILE_TWIML}
コマンド
xmllint ~/${FILE_TWIML} -noout

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

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

コマンド
sudo cp ~/${FILE_TWIML} ${DIR_TWIML}/ \
  && cat ${DIR_TWIML}/${FILE_TWIML}

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

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

5. 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/twilio-record-app.xml
      • username:passwordには、ベーシック認証のユーザ名(例:sysadm)とパスワード(例:#userPass123)を記述します。
    • URLを貼り付けた欄の右のプルダウンから'HTTP GET'を選択します。

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

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

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

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

    • twilio-record-app.xmlに記述したメッセージが流れます。
  • 番号を入力します。

  • アナウンスに従って、メッセージを録音します。

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

7. Twilioのログ確認

完了

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