14
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

登録されている電話番号の順番で自動発信。便利かも?

Posted at

今回はTwilioを使って登録されている電話番号に順番に電話を発信してみたいと思います。

さてさて、どこに使うんだ?
例えば、障害が発生した際に、障害の処理によって登録されている担当に優先順位で順番に電話をかけることが可能です。
この場合は、担当A、担当B、担当C、ある場合は、担当D、担当E、担当F など。
いろんなパターンを事前に決めといたら残りはTwilioが順次電話をかけてくれます。

担当Aに電話をかけたが、応答しなかった場合、担当Bに自動的に電話をかけるを繰り返して、誰かが電話に応答するまで、繰り返します。全員でなかったらまた戻って最初から発信して行くのも可能。

ではでは、見て行きたいと思います。

ソースコードから。

callscreen.php
<?php
  $numbers = array("<number to call 1>", "<number to call 2>", "<number to call n>");
 $number_index = isset($_REQUEST['number_index']) ? $_REQUEST['number_index'] : "0";
 $DialCallStatus = isset($_POST['CallStatus']) ? $_POST['CallStatus'] : "";
 
  header("content-type: text/xml");

 if($DialCallStatus!="completed" && $number_index<count($numbers)){
?>
   <Response>
     <Dial callerId="+8150xxxxxxxx" timeout="10" action="callscreen.php?number_index=<?php echo $number_index+1 ?>">
       <Number url="screen_for_machine.php">
         <?php echo $numbers[$number_index] ?>
       </Number>
     </Dial>
   </Response>
<?php
  } else {
?>
    <Response>
      <Hangup/>
    </Response>
<?php
  }
?>

「$numbers」に複数の電話番号を設定します。 このファイルがTwilioから呼ばれると分岐条件に満たす場合、配列に設定されている電話番号の順番で電話をかけます。 Twilioはコールに対するステータスを「POST」で渡しますので、呼ばれたスクリプトからPOSTでステータスを取得できます。
そのステータスが「completed」ではない場合、通話が成立されていないことを意味しますので、次の電話番号へ電話をかけるようになっています。

・Dail動詞にactionを指定することでDial動詞実行後設定されているurlに処理を渡します。
・Number動詞にurlを指定すると発信先に電話をかけた際の処理をそのurlに渡すことが可能です。

screen_for_machine.php
<?php
  header("content-type: text/xml");
?>
<Response>
<?PHP if (empty($_POST["Digits"])): ?>
  <Say language="ja-jp">〇〇で障害発生。〇〇の場合は1を〇〇の場合は2を押してください。</Say>
  <Gather numDigits="1" timeout="30" />
<?PHP elseif ($_POST["Digits"] == "1"): ?>
  <Say language="ja-jp">オペレーターに繋ぎます。</Say>
  <Dial callerId="+8150xxxxxxxx">+813xxxxxxxx</Dial>
  <Gather numDigits="1" timeout="30" />
<?PHP elseif ($_POST["Digits"] == "2"): ?>
  <Say language="ja-jp">サーバーを再起動します。</Say>
  <Hangup/>
<?PHP endif ?>
</Response>

このファイルは「callscreen.php」の「Number url」から呼ばれます。
つまり「Number」に設定された発信先の電話番号に電話を掛けた際に実装する処理を書いておきます。
Twilioはこのように一つのファイルだけではなくいろんなどころえのファイル分岐が可能です。
※ このファイルでは単なるメッセージを再生していますが、分岐処理の実行文として各コマンドを設定すればコマンドを実行することが可能です。

まとめ?!

このサンプルコードはInbound(着信)用で作成されていますので、Twilio電話番号(050)のRequest URLに「callscreen.php」のURLを設定し、二つのスクリプトをウェブサーバーに配置することで動きます。試す際には、電話番号のところを自分のものに書き換えてください。

今回はサーバーの障害を例にしましたが、他に面白いところでも使われますし、これ以上便利なものも開発可能かと思います!

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?