Twilioで世界に通用する再配達自動応答システムを作る
この記事は、Twilio Advent Calendar 2015 の21日めの記事です。
といいつつ、Twilioはほとんど触ったことなかったので、練習として佐川急便の再配達受付みたいなものをつくってみました。
デモ電話番号: 050-3159-5616 (かけると再配達受付っぽいものが動きます)
Twilioに作成した電話番号にかかってくると、Twilioがこちらの指定したURLにリクエストを送ってくれるようで、
こちらでは、それにレスポンスするAPIを用意すれば良いようです。
こんな感じですね。
まずは、Twilioに設定する初期URLにあたるXMLを作ります。
これは、特に動的な部分はないので単なるXMLです。
File: index.xml
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather timeout="10" finishOnKey="#" action="twilio_2.php" numDigits="7" method="GET">
<Say language="ja-jp">7桁の伝票番号を入力してください。</Say>
</Gather>
</Response>
Say のタグに書いた内容を読み上げてくれるようです。language を指定すれば日本語も行ける。すごい。
あと、numDigits で桁数と、次のアクション(APIコール先)として twilio_2.php を指定しました。
7桁の番号が押された時に遷移する次のアクションの twilio_2.php はこんな感じです。
伝票番号の読み上げのところで、Playタグを使ってみました。
Playタグは、音声ファイルを再生してくれるタグのようです。
伝票番号の確認をし、良ければ1、修正する場合には 9 を押して貰うように促します。
File: twilio_2.php
<?php
$number = intval($_GET['Digits']);
$number_list = str_split($number);
header("content-type: text/xml");
?>
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather timeout="10" numDigits="1" action="twilio_3.php" method="GET">
<Say language="ja-jp">
伝票番号は
</Say>
<?php
foreach ($number_list as $n) {
printf("<Play>http://example.com/data/%d.mp3</Play>\n", $n);
}
?>
<Say language="ja-jp">
ですね? よろしければ1、修正する場合には
</Say>
<Play>http://example.com/data/9.mp3</Play>
<Say language="ja-jp">を入力してください</Say>
</Gather>
</Response>
入力された番号(1か9)によって条件分岐するのが、次のアクションの twilio_3.php です。
1 が入力されてたら、再配達希望日時を聞くフローへ、それ以外の場合には最初のフローへ戻すようにアクションを指定しました。
File: twilio_3.php
<?php
$number = intval($_GET['Digits']);
header("content-type: text/xml");
?>
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<?php if ($number == 1):?>
<Say language="ja-jp">
再配達希望日を数字4桁で入力してください。
</Say>
<?php else:?>
<Redirect method="GET">index.xml</Redirect>
<?php endif; ?>
</Response>
こんな感じで、ちょいちょいとXMLを返していくだけで、佐川の再配達受付システムができてしまいます。
初心者でしたが、3時間くらいで作ることができました。
ちゃんと作るには、DBとの連携とかいろいろやらなければならないですが、この時間でこれだけのものが作れるのはホント驚きです。
あ、タイトルで「世界に通用する」というのは、伝票番号の復唱のとき、3の倍数の時だけアホな感じで読み上げるからです。古いですね… すみません。
最後に
オフィスでアホな音声を発してくれた青柳さん、藤倉さんありがとうございました。