サンプルコード

IVRを解剖してみよう

TROPOはインバウンドで電話を受けるとCallerIDを取得することができます。
これは発信者の電話番号です。例えば、0901234XXXXがTROPO番号(050~)に掛けるとCallerIDは0901234XXXXになります。
つまりこのアプリではCallerIDを取得して、掛けてきた人物の電話番号宛にSMSメッセージを送り返しているのです。他に特殊なことはしていません。
加えて、非通知(Anonymous)や公衆電話(Coin)を識別することができます。
これを利用して、それぞれのステータスに応じてIVRガイダンスを振り分けます。

さて、ではSMS送信できない端末からかけてきた場合はどうでしょうか。 この場合は正規表現で振り分けを行います。つまり090、080、070※から始まる11桁の 番号がCallerIDであった場合に、SMSを送信するようにします。それ以外の番号であった場合は、専用のガイダンスを容易しておきましょう。
※残念ながら070を正確に識別する方法は今のところありません。
以上を考慮して作成したスクリプトサンプルは以下のようなものになります。

<?php
require_once 'tropo.class.php';//PHPでTROPO向けのJSONの生成とパースを行うオブジェクトを読み込む(githubで公開中)
require_once 'sms.class.php';//SMS APIを読み込む

$tropo 	= new Tropo();
$session 	= new Session();
$from 	= $session->getFrom();
$caller 	= $from['id'];//発信者の番号を取得
$tropo->say("お電話頂きありがとうございます");
	
switch($caller){//ステータスに応じてIVRガイダンスを振り分け

	//非通知の場合
	case "Anonymous":
	$tropo->wait(array("milliseconds" => 1000));
	$tropo->say("恐れ入りますが、電話番号を通知の上、再度お掛け直し下さい。");
	break;
    
    //公衆電話の場合
	case "Coin":
	$tropo->wait(array("milliseconds" => 1000));
$tropo->say("恐れ入りますが、公衆電話では当アプリご利用になることができません。一般の固定電話または携帯電話で再度お掛け直し下さい。");
	break;
	default:
	
if(preg_match("/^0[7-9]0[0-9]{8}/",$caller)){
/*-------------------SMS送信処理を記述------------------------*/
		$params = array(
			'userName' 	=> 	'ユーザー名',//TROPOのSMSサービスのユーザー名
			'password' 	=> 	'パスワード’,//TROPOのSMSサービスのパスワード
			'msgID' 		=> 	'00000002',
			'msgTag' 		=> 	'DeadHead',
			'phoneNumber'	=> 	$caller,//宛先(ここでは発信者番号を代入)
'message' 	=> 	TROPOはSMSも送れますhttp://tropo.acrossway.com'
		);
/*--------------------------------------------------------------*/
$tropo->say("{$caller}宛にSMSメッセージを送信しました。電話をお切りになり、そのままお待ちください。");//例えば、1280は通常一万2千八十となりますが、interpret-as='vxml:phoneによりイチ ニ ハチ ゼロと自動発話される。
		$sms = new Sms();
		$sms->sendSms($params);
	}else{
$tropo->say("申し訳ございませんが、お客様の端末ではSMSを受け取ることができません。SMSが受け取れる端末で、再度お掛け直しください");
	}
}
$tropo->RenderJson();
?>


このサンプルのフロー

お客様が電話でTropo番号に発信すると#ガイダンス「お電話頂きありがとうございます」は流れ、以下の条件ごとに振り分けられる。

1.非通知の場合

#ガイダンス「恐れ入りますが、電話番号を通知の上、再度お掛け直し下さい。」の後、電話が終了します。 終了

2.公衆電話の場合

#ガイダンス「恐れ入りますが、公衆電話では当アプリご利用になることができません。一般の固定電話または携帯電話で再度お掛け直し下さい。」の後、電話が終了します。

3.携帯電話(070~090で始まる11桁の番号でない)の場合

#ガイダンス「申し訳ございませんが、お客様の端末ではSMSを受け取ることができません。SMSが受け取れる端末で、再度お掛け直しください」の後、電話が終了します。

4.携帯電話で番号を通知してかけた場合

#ガイダンス「CallerID(電話番号)宛にSMSメッセージを送信しました。電話をお切りになり、そのままお待ちくだい。」と流れ、CallerID(電話番号)宛に「TROPOはSMSも送れます。http://tropo.acrossway.com」というメッセージのSMSを送信し、終了します。

もちろん、このフローの後に更に色々な処理を追加していくことができます。