ゼロからはじめるぜ! Twilio – シーズン2 第3回

20140121-01.jpgこんにちわ。ネットワークエンジニアのまさです。
さぁ、今週から実際にコードを書いていきますよ!
前回の復習としてもう一度この図を振り返っておきましょう。

 

今回は、下図の中でいうと上の青い部分、電話をかけたら暗証番号入力を促され、暗証番号があっていればメニューへ、ダメならその場でお帰りいただく、というパートを作ります。

20140121-02.jpg多数のユーザを登録して認証するような場合だと、こうした暗証番号管理もデータベースでやったほうがいいのですが、このシリーズで扱う題材では、Twilio 機能に簡単な方法で触れながら体験していただくことを目的にしていますので、シンプルに GATHER でボタン操作を収集し、合っているかダメかを判定するだけにしておきます。

 

さて、コーディングに入る前に、Twimllet Commander Z のアップロード環境を確認しておきましょう。
お使いの Web サーバがインターネットから URL でアクセスできるようセットアップされていますか?
PHP や Perl が動作するようになっていますか?
また、Twilio の PHP 用お助けライブラリも導入されているでしょうか?
お助けライブラリは、シーズン 1 の 第 3 回の記事に詳しく説明しています。

 

このシーズンの最後には、ドキュメントルート配下のファイルは以下のようになります。
Services というフォルダが PHP お助けライブラリ一式です。
私の場合は、/data/html/ がドキュメントルートで、Twimllet Commander Z は twimllet というフォルダに全て収めるようにしました。

 

つまり、URL でアクセスする場合には、
http://hogehoge/twimllet/なんとかかんとか
という URL になります。

 

20140121-03.jpg今回は、暗証番号入力と暗証番号チェックを行うロジックを作ります。このファイルは commander.php という名前にしました。上図の他の名前のファイルは、順次説明していきますので、まずはこの位置に commander.php を作って置くことになるんだなと思ってもらえれば OK です。

 

では、auth.php の中身を見ていきましょう。SAY 動詞の中身は英語にしてあります。米国でプレゼンを行ったものなので。もちろん、ご自身の練習のために、ここを日本語に置き換えていただいても OK です。

 

 

2 ~ 3 行目はいいですよね、これはシーズン 1 で勉強したように、PHP お助けライブラリを使いますよというおまじないです。

  • $gather=$response->gather( ~ )
  • $gather=$say->( ~ )

これも大丈夫ですね、シーズン 1 でやったのと同じ、GATHER の作り方と、その中に SAY をネストする書き方です。
ここでは GATHER 動詞で 4 桁のボタン操作を受付け、これを action URL で指定する auth.php に渡すというものです。この 4 桁が合っているか間違えているかは auth.php で処理します。この commander.php では、4 桁を受け付けるだけです。

そして最後の print$response; で一気にこの TwiML を出力しています。

 

では次に、auth.php を作りましょう。commander.php で収集したボタン操作 4 桁を拾い上げ、照合します。合っていれば、メニューへ、間違えて入れば一喝してお帰り頂く部分です。以下のようになります。

 

2 ~ 3 行目は例のおまじないです。

  • $input=$_REQUEST['Digits'];

ここは先ほど commander.php のGATHER 動詞で集めたプッシュ操作を拾ってくる部分です。これで押されたボタンが $input の中に代入されました。

  • switch($input){ ~ }

ここでアクセス認証を実現しています。もし $input が 7777 であれば $user に MASA を代入し、 8888 であれば TRENTON を代入し、この switch 文(シェルスクリプトでいう CASE 文と同じ)を抜けます。

そして、ここまでに書いた条件、つまり 7777 でも 8888 でもなければ default が処理されます。SAY 動詞で「認証失敗、出て行け!」と喋って終了します。

exit なのでこのスクリプト自体が終了、すなわち電話が切れることになります。

  • $gather=$response->gather( ~ )
  • $gather=$say->( ~ )

ここからがメニューです。すでに先ほどの switch 文で認証を行い、暗証番号が case に存在しない人の分のアクセスは排他できていますので、GATHER 動詞と SAY 動詞を使いメニューを提示します。

 

この例では、先ほどの case で暗証番号と人の名前を紐付け、$user に名前を代入して、メニューで呼びかけることにしました。7777 を入力していれば私の名前が代入され、以下のようにしゃべります。

 

"Hello, commander MASA, Push 1 for checking summaries of stations, Push 2 for modifying station mode, Push 3 for checking armed stations, Push 4 for activating fountains in armed, Push 5 for stop fountains at all the stations, Push 9 for exit."
「こんにちは、司令官 マサ 殿。各トイレのサマリーは 1 を、各トイレのモード変更は 2 を、武装モード中のトイレの一覧は 3 を、武装モード中のトイレに噴水発射命令は 4 を、噴水一斉停止は 5 を、終了する場合は 9 を押して下さい。」

 

そして、この部分の GATHER 動詞の通り、1 桁のボタン操作を待ち受け、これを menu.php へ渡します。

はい、ここまでで、冒頭の図で示した全体のフロー図のうち、上部にある青枠が完成しました。次回からは、分岐している各メニュー内容について処理を作っていきます。お楽しみに!

 

おまけのひとこと

そういえば、もうすぐソチオリンピックですね。冬のオリンピックは大体スケートしかみないです。私はスキーをやる人なので、スキーにも興味あるのですが、よしそろそろスキーを見ようかなと思った頃にはオリンピック終わっちゃってるんですよ。

 

昨晩のしゃべくり 007 で安藤美姫が出てきてビックリしました。あの破天荒な芸人集団でもさすがに核心の質問はしなかった。ちょっと期待してたんですけどね(笑)

前回のオリンピックでは、キム・ヨナが 007 のテーマでくるくるやって、最後に鉄砲バーンのポーズとって「うわあぁ、撃たれた、撃たれました、参りました!!」って赤面したもんですが、今年は誰が俺をキュンキュンさせてくれるんでしょう。

この記事をシェア

最新記事

すべての記事へ