クイックスタート|Tropo Web API

通話失敗の処理

   

アウトバウンドコールが失敗したり、タイムアウトすることがあります。 タイムアウトは、コールが鳴っても回答がない場合(デフォルトの時間制限は30秒に設定されていることに注意してください)、 一方で、通話の失敗はコールが全く鳴らない場合に発生します。 呼び出した番号が接続されていない場合や、誤って電話番号ではなく何らかの文字を書いてしまった場合に発生することがあります。

 

WebAPIを使って、通話が成功した場合または、失敗やタイムアウトになった場合のイベントを処理することができます。 これは電話をかける で使われているのと全く同じ基本的なアプリです。ただ、イベントハンドリングが含まれている点だけが異なります。PHPをお使いの場合には、 下記の例がLimonadeフレームワークを使っていることに注意してください。つまり、TropoのURLのstartの終わりにリソース名を定義しなければなりません。例:

 

コールに応答し、何か言って、切断するために、実際のコードはたった1行しか必要ありません:

  サンプル
require 'tropo-webapi-ruby'
require 'sinatra'

post '/index.json' do
  
  t = Tropo::Generator.new
  
  t.call(:to => "Q")
  t.say(:value => "つかまえた!")
  
  t.on :event => 'incomplete', :next => '/incomplete.json'
  t.on :event => 'hangup', :next => '/hangup.json'
  t.on :event => 'error', :next => '/error.json'

  t.response
  
end

post '/incomplete.json' do
  puts "The call did not complete."
end

post '/hangup.json' do
  puts "The user hungup."
end

post '/error.json' do
  puts "A server error has occurred."
end

var sys = require('sys');
var express = require('express');
var app = express.createServer();
var tropo_webapi = require('tropo-webapi');

app.post('/', function(req, res){
   
   var tropo = new TropoWebAPI();
   
   tropo.call("Q");
   tropo.say("つかまえた!");

   tropo.on("incomplete", null, "/incomplete", true);
   tropo.on("hangup", null, "/hangup", true);
   tropo.on("error", null, "/error", true);
   
   res.send(TropoJSON(tropo));
});
   
app.post('/incomplete', function(req, res){
   console.log("The call did not complete.");
});	

app.post('/hangup', function(req, res){
   console.log("The user hungup.");
});

app.post('/error', function(req, res){
   console.log("A server error has occurred.");
});

app.listen(8000);
console.log('Server running on port :8000');

<?php
 
require 'tropo.class';
require 'lib/limonade';

dispatch_post('/start', 'app_start');
function app_start() {
        
   $tropo = new Tropo();
     
   $tropo->call("Q"); 
   $tropo->say("つかまえた!");
 
   $tropo->on(array("event" => "incomplete", "next" => "hello_world?uri=incomplete"));
   $tropo->on(array("event" => "hangup", "next" => "hello_world?uri=hangup"));
   $tropo->on(array("event" => "error", "next" => "hello_world?uri=error"));

   return $tropo->RenderJson();

}

dispatch_post('/incomplete', 'app_incomplete');
function app_incomplete() {
   error_log("The call did not complete.");
}

dispatch_post('/hangup', 'app_hangup');
function app_hangup() {
   error_log("The user hungup.");
}

dispatch_post('/error', 'app_error');
function app_error() {
   error_log("A server error has occurred.");
}

run();

?>
from itty import *
from tropo import Tropo

@post('/index.json')
def index(request):

   t = Tropo()

   t.call("Q")
   t.say("つかまえた!")
   
   t.on(event = "hangup", next = "/hangup.json")
   t.on(event = "incomplete", next ="/incomplete.json")
   t.on(event = "error", next ="/incomplete.json")
   
   return t.RenderJson()

@post("/hangup.json")
def index(request):
   
   print "The call did not complete."
   
@post("/incomplete.json")
def index(request):
   
   print "The user hungup."
   
@post("/error.json")
def index(request):
   
   print "A server error has occurred."

run_itty(server='wsgiref', host='0.0.0.0', port=8888)


{
   "tropo":[
      {
         "on":{
            "event":"error",
            "next":"/error.json"
         }
      },
     {
         "on":{
            "event":"hangup",
            "next":"/hangup.json"
         }
      },
      {
         "on":{
            "event":"incomplete",
            "next":"/incomplete.json"
         }
      },
      {"call":
            {"to":"Q"}
      },
      {"say":[
            {"value":"つかまえた!"}
      ]}
]}
 

incompleteは、タイムアウトした場合のように(着信拒否により発生することもあります)、通話に失敗した場合に発生します。 hangupは通話に応答がなされ、その後に切断された場合に発生します。errorは、サーバーレベルでの不具合 (たとえば、通話が全く発信されないなど)が起きた場合に発生します。 「on」の使い方の詳細については、APIリファレンスの「on」の項目をご覧ください。 JSONを使っている場合、このアプリは4つの別々のファイルが必要になります。最初のファイルには上記のJSONタブのコードが含まれています。それからerror.jsonhangup.jsonincomplete.jsonの各ファイルにイベントごとの別のコードを設定しておきます。 最も、ライブラリとフレームワークを使えば、全ての命令を1つのファイルにまとめることができます(Rubyの場合はSinatra、Node.jsの場合はexpress、PHPの場合はLimonade、といった具合に。)

 

次のページでは、質問をする方法について説明しています。