すごいぜTwilio!イカスぜBeanstalk!

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

twilio-logobeanstalk-logo

こんにちは、サービス開発グループの千葉(@kachina_t)です。 先日Twilio x AWS勉強会(Twilio API 勉強会 Vol.3)に参加してきました。 サーバーワークスでは、結構なアクセス数のIVRシステムの運用をしており 自前で何台ものAsteriskを管理するのが手間なので もっとラクができないかなと考えTwilioに目が向いたワケです。 ってのが建前で、なにかと『しゃべらせたがり』な僕としては 乗るしかない、Twilioのビッグウェ(ry それでは、今回の勉強会をふりかえりながら 簡単なサンプルを作成していきたいと思います。

Twilioについて

まずはTwilioについて、細かい説明はこちらを確認してください。 ざっくり言うと、音声通話アプリケーションの開発を容易にする為のSaaSです。 なんと、米大統領選でも利用された実績あり! 『米大統領選で使われた電話API「Twilio」、「選挙中1秒数100コール、終わればゼロ」に即対応』 自前で大量アクセスに耐えうるIVRシステムを構築した経験から この『秒間100コール』にはとても驚きました。

Beanstalkについて

これも細かい説明はこちらを確認してください。 ざっくり言うと、AWSのPaaSです。 HerokuやEngineYardとの比較は 以下を参照ください。 『Heroku と Engine Yard と Elastic Beanstalk

やること

BeanstalkでPHPの実行環境を構築し、そこにTwilioで実行するIVR処理のコードをデプロイする。

PHP実行環境構築の前準備

まずは、こちらを参考に『eb』コマンドの実行環境を整えます。 つぎに、適当な場所にアプリケーションディレクトリを作成してリポジトリの初期化をします。

PHP実行環境の初期化

『eb init』を実行し、対話式で環境情報を入力していきます。

PHP実行環境の起動

『eb start』を実行し、各リソースを起動します。

PHPの動作確認

上記の『git aws.push master』を実行すると、実行環境へのデプロイが始まります。 それが完了すると『eb status』コマンドの結果が”Ready”と”Green”になるので 確認後URLにアクセスしてみましょう。

自動音声応答スクリプトの作成

それでは、Twilioにしゃべらせる為のプログラムを作成しましょう。 先程の『index.php』を以下のとおり書き換えてください。

この様に、TwilioのコードはXML形式で記載します。 これを『TwiML』と呼ぶそうです。(言及を避けます) 『Say』以外の要素については、こちらを確認ください。 これをデプロイし、ステータスが”Ready/Greenになるまで待ちます。

 

Twilioの設定

Twilioにサインアップし、上部メニューから【電話番号】→【+81 50-xxxx-xxxx】を開き 『Voice Request URL』に、“スクリプトのURI”を入力、メソッドを“GET”とし保存します。

twilio-capture-1 twilio-capture-1

しゃべらせる

これだけで設定は完了です、それでは『050-xxxx-xxxx』へ電話をしてみましょう。

日本語でしゃべらせる

つぎに、日本語化してみたいと思います。 以下のとおり、『Say』要素に『language=”ja-jp”』属性を追記します。

コミット → デプロイ

ダイヤル操作を受け取る

最後に、IVRらしくダイヤル操作を受け取る処理を試したいと思います。 まず、以下のとおり『index.php』を編集してください。

次に、入力した値を受け取り処理する『gather.php』を作成します。

コミット → デプロイ

ちなみに、以下の2点を試すと、だいぶ愉快なことになります。 ぜひぜひ – 4桁以上の数字を読ませる – 『シャープ』ではなく『#』を読ませる

まとめ

まず、XML形式のTwiMLを書くだけなのでメチャクチャ簡単です。 通話料に関しては、安いとは言えませんが 自前でAsteriskを複数台運用することと比較して考えれば、全然アリだと思います。 そして、Beanstalkを使えばインスタンスを起動して ssh接続し実行環境を構築する、この煩わしい作業が不要となります。 プログラマが、実ロジックを書くことだけに集中できる仕組みってのはステキですね! 便利な世の中になったものです。

AWS運用自動化サービス「Cloud Automator」