シグナル送信|Tropo REST API

 
Tropo REST API - 実行中のTROPOアプリケーションにシグナルを送る
   

この章では、アクティブな通話のセッションIDを使用して、通話をコントロールする方法をご紹介します。
例えば、WEBページのボタンを通じて自分の通話を保留させたり、外部から通話をコントロールことができます。

シグナルは、以下のようなパラメータをGET/POSTすることで送信することができます。

https://tropo.acrossway.com/sessions/[セッションID]/signals?action=signal&value=[パラメータ]
[セッションID]には通話のセッションIDが。[パラメータ]には実行したいシグナルの名前が入ります。

スクリプティングAPIのケース


スクリプティングAPIでは、onSignalパラメータを使用してそれぞれのシグナルを受信した際の処理を追加します。
以下の例では、例としてexitroomと名づけたシグナルを送信して会議通話を中断させ、専用のメッセージを合成音声に喋らせます。

onSignalを設定した段階では、シグナルの内容を識別することができません。シグナルを受信した時点で、対応するセッションID を持つ通話のonSignalイベントが実行されます。特定のシグナルを識別したい場合は、以下のように記述します。

シグナル送信APIリクエスト:

https://tropo.acrossway.com/sessions/[セッションID]/signals?action=signal&value=exitroom

対応するTropoスクリプト:

call("0901234XXXX");
say("会議室にようこそ!");
conference("1234", {
  terminator: "3",
  playTones: false,
  onSignal: function(sigevent) {
    if(sigevent.value == "exitroom"){
      say("退室リクエストを受信しました。");
    }else{
      say("不明なシグナルです。");
    }
  }
});
say("ご利用ありがとうございます。"); 
call "0901234XXXX"
say "会議室にようこそ!"
conference "1234", {
  :terminator => "3",
  :playTones => false,
  :onSignal => lambda { |sigevent| 
    if sigevent.value == "exitroom"
      say "退室リクエストを受信しました。"
    else
      say "不明なシグナルです。"
    end
   }}
say "ご利用ありがとうございます。"
<?php

call("0901234XXXX");
say("会議室にようこそ!");
conference("1234", array(
  "terminator"=>"3",
  "playTones" => false,
  "onSignal" => "sigevent"
   )
);
function sigevent($event) {
  if($event->value == "exitroom"){
    say("退室リクエストを受信しました。");
  else{
    say("不明なシグナルです");
  }
}
say("ご利用ありがとうございます。");
 
?>
def SigFCN(name):
  if name == "exitrooms":
    say(u"退室リクエストを受信しました。")
  else:
    say(u"不明なシグナルです。")

call("0901234XXXX")
say(u"会議室にようこそ!")
conference("1234", {
  "terminator":"3",
  "playTones":False,
  "onSignal": lambda sigevent:SigFCN(sigevent.value)
})

call "0901234XXXX"
say "会議室にようこそ!"

conference("1235",[
    terminator: "3",
    playTones: false,
    onSignal:{exitroom ->
        if(exitroom.value == "exitrooms"){
            say "退室リクエストを受信しました。"
        }else{
            say "不明なシグナルです。"
        }
    }
])
say "ご利用ありがとうございます"

もちろん、サンプルで示したシグナル名exitroomは任意の名前をつけることができます。

WebAPIのケース


WebAPIをご利用の場合は、各メソッドのオプションパラメータallowSignalsでシグナルを探知し、
onメソッドで それぞれのシグナルをルーティングすることができます。
まず、以下のサンプルをご覧ください。

サンプル


conference.json
{
   "tropo":[
    {
    "on":{
      "event":"exitroom",
      "next":"exitroom.json"
    }
  },
  {
    "on":{
      "event":"non-attend",
      "next":"non-attend.json"
    }
  },
  {
    "say":{
      "value":"入室します",
      "allowSignals":"non-attend"
    }
  },
  {
    "conference":{
      "id":"myroom",
      "allowSignals":"exitroom"
    }
  }
  ]
}

non-attend.json
{
   "tropo":[
  {
    "say":{
      "value":"会議に出席しませんでした。"
    }
  }
  ]
}

exitroom.json
{
   "tropo":[
  {
    "say":{
      "value":"会議から退室しました。"
    }
  }
  ]
}

このサンプルは、Tropo番号に電話を掛けると「入室します」というガイダンスの後、会議室「myroom」に入室します。メソッド[say]にはnon-attendが、 メソッド[conference]にはexitroomが設定されています。
この場合、ガイダンスが放送されている間にnon-attendシグナルを受信すると、say を中断し、onメソッドに設定したイベントの[non-attend]に進みます。
ここでは、onメソッドのイベント[non-attend]にはnextとして[non-attend.json]が設定されていますので、 シグナルを受信するとすぐに処理は[non-attend.json]へと進みます。その結果、発信者は「会議に出席しませんでした。」というガイダンスを 聞くことができます。
ガイダンスを聞き終わり会議通話に進行した際も同様に、conferenceメソッドに設定されたexitroomを受信するとすぐに処理は exitroom.jsonへと進みます。その結果、発信者は「会議から退室しました。」というガイダンスを聞くことができます。

この仕組みを利用すると、WEB上でも通話上でも、それぞれの通話の操作をより自由に行えるようになります。