第22回 Twilioを使って電話の保留機能をつくってみる

スポンサーリンク

今回は、今まで使ってきた命令動詞やREST APIを組み合わせて保留機能を作成してみます。ちょっとした応用編です。

目的

twilioを使って保留機能を作成

【イメージ図】
twilio-flow.001

フローは、
①Userは、サポーターA(twilio番号)に電話をかける。
②REST APIで通話を別の処理にアップデート。アップデートの内容は、TwiMLEnqueue命令動詞で待機ルームを作成する内容。
※通話を別の制御にアップデートする方法は、「第12回 Twilioで通話の制御を別の制御に移す」をご参考に。
※待機ルームの作成方法は、「第9回 Twilioを使って通話待機の部屋を作成」をご参考に。
③アップデートが走って、Userは待機ルームに入る。
④サポーターBがtwilio番号に電話をかける。待機ルームへ TwiMLDial 命令動詞の名詞 Queue を使って待機ルームに接続する。
このような感じ。

詳しくは下記youtube動画に解説あり。
https://www.youtube.com/watch?v=NcF5wpVxvMg

開発

機能実装にあたり今回は下記ファイルを作ります。

  • call.php
  • updateStatus.php
  • enqueue.xml

call.php

<?php
header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<Response>
	<?php
	// ダイヤルの振り分け
	// サポーターBからである場合は queue で待機ルームへつなげる
        // +◯◯◯◯◯◯◯◯◯◯:発信者の電話番号
	if($_POST['From'] != '+◯◯◯◯◯◯◯◯◯◯'):?>
		<Say language="ja-jp">しばらくお待ち下さい。</Say>
		<Dial>
			<Queue>support-room</Queue>
		</Dial>
	<?php
        // それ以外はサポーターAへダイヤル
        // +△△△△△△△△△△:サポーターAの番号 
        else:
        ?>
		<Say language="ja-jp">サポーターに繋げます。</Say>
		<Dial>
			<Number>+△△△△△△△△△△</Number>
		</Dial>
	<?php endif;?>
</Response>

■オペレーターAに電話を繋げる。
■待機ルームへ電話を繋げる。
かかって来た番号を判定して条件分岐。
①と④のタイミングで使用する。

updateStatus.php

<?php
// ライブラリーまでのパス
require('Services/Twilio.php');
   
// 管理ページから AccountSID と AuthToken を確認して入力。
$sid = "your account sid"; 
$token = "your authtoken";
  
// インスタンスを作成
$client = new Services_Twilio($sid, $token);

// 表示開始位置
$startPage = 0;
// 各ページに何件表示するか
$perPageRows = 50;

// リアルタイム履歴の取得
// いま通話中のcall SIDを取得
// To:発信先(twilio番号)
// From:発信元番号
foreach ($client->account->calls->getIterator($startPage, $perPageRows, array(
    "To" => "+815031774415", 
    "From" => "+818027448385", 
    "Status" => "in-progress"
)) as $call) {
    // cal SID取得
	$sid = $call->sid;
}

// 通話処理を別の制御処理へアップデート
// hoge.xmlは待機ルームを作成するスクリプト
$call = $client->account->calls->get($sid);
$call->update(array(
	'Url' => 'http://example.com/enqueue.xml', 
	'Method' => 'POST'
));

■UserとオペレーターAとのリアルタイム情報をREST APIを使って取得
■call SIDを取得して処理を enqueue.xml に移す。
②のタイミングで使用する。

enqueue.xml

<?xml version="1.0" encoding="UTF-8"?>
<Response>
	<Enqueue>support-room</Enqueue>
</Response>

■TwiMLで記述されているファイル。処理内容は、Enqueue 命令動詞を使って待機ルームを作成する。
③のタイミングで使用する。

サポーターAさんのアップデート処理を黒い画面上からではなく、専用の管理画面などを作ってGUIで出来るようにしたら中々いいコールセンターができると思われる。

参考文献

・helperライブラリーの概要:https://jp.twilio.com/docs/libraries
・REST APIの概要:https://jp.twilio.com/docs/api/rest
・TwiMLの概要:https://jp.twilio.com/docs/api/twiml
・Twilioのいくつかの機能を組み合わせば、電話の保留機能も実装可能:https://www.youtube.com/watch?v=NcF5wpVxvMg

スポンサーリンク
スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク