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

無入力や不正な入力の処理

   

ユーザーがあなたのaskに応答しない、指定した選択肢以外で応答、またはTropoが理解しない何かで応答をした場合、どうしますか。 おそらく、不正な選択を行ったユーザーにその事を伝えて、彼らが適切に応答できるよう情報を提供したいかと思います。 これを行うには、オプションのonイベントでimcompleteを指定するだけです。 他のaskと同様に、ライブラリが必要です。 PHPをご使用であれば、Limonadeフレームワークを含む場合は、 http://www.example.com/test?uri=startのようにリソース名を含める為に、URLの終わりに定義する必要があります。

require 'tropo-webapi-ruby'
require 'sinatra'

post '/index.json' do
  
  t = Tropo::Generator.new
  
  t.ask :name => 'color', 
        :timeout => 10,
        :attempts => 3, 
        :say => {:value => "好きな色は何ですか?レッド、ブルー、グリーンの中から選んでください。"},
        :choices => {:value => "red, blue, green"}
  
  t.on :event => 'continue', :next => '/continue.json'
  t.on :event => 'incomplete', :next => '/incomplete.json'
  
  t.response
  
end

post '/continue.json' do
  
  v = Tropo::Generator.parse request.env["rack.input"].read
  
  t = Tropo::Generator.new
  
  answer = v[:result][:actions][:color][:value]
  
  t.say(:value => "選んだ色は、 " + answer)
  
  t.response
  
end

post '/incomplete.json' do

  t = Tropo::Generator.new
  
  t.say(:value => "申し訳ありませんが、正確な解答を得られませんでした。")
  
  t.response
  
end



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


app.configure(function(){
    app.use(express.bodyParser());
});

app.post('/', function(req, res){
    
    var tropo = new TropoWebAPI();
    
    var say = new Say("好きな色は何ですか?レッド、ブルー、グリーンの中から選んでください。");
    var choices = new Choices("red, blue, green");
    
    tropo.ask(choices, 3, null, null, "color", null, null, say, 10, null);
    
    tropo.on("continue", null, "/continue", true);
    tropo.on("incomplete", null, "/incomplete", true);
    
    res.send(TropoJSON(tropo));
    
});

app.post('/continue', function(req, res){
    
    var tropo = new TropoWebAPI();

    var answer = req.body['result']['actions']['value'];
    
    tropo.say("選んだ色は、 " + answer);
        
    res.send(TropoJSON(tropo));

});

app.post('/incomplete', function(req, res){
    
    var tropo = new TropoWebAPI();
    
    tropo.say("申し訳ありませんが、正確な解答を得られませんでした。");
    
    res.send(TropoJSON(tropo));

});

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();

    $options = array("choices" => "red, blue, green", "name" => "color", "attempts" => 3, "timeout" => 60);
 
    $tropo->ask("好きな色は何ですか?レッド、ブルー、グリーンの中から選んでください。", $options);

    $tropo->on(array("event" => "continue", "next" => "test_app?uri=continue"));
    $tropo->on(array("event" => "incomplete", "next" => "test_app?uri=incomplete"));

    $tropo->RenderJson();
}

dispatch_post('/continue', 'app_continue');
function app_continue() {

    $tropo = new Tropo();
    @$result = new Result();
    
    $answer = $result->getValue();
    
    $tropo->say("選んだ色は、 " . $answer);
    
    $tropo->RenderJson();

}

dispatch_post('/incomplete', 'app_incomplete');
function app_incomplete() {
    
    $tropo = new Tropo();
    
    $tropo->say("申し訳ありませんが、正確な解答を得られませんでした。");
    
    $tropo->RenderJson();

}

run();

?>
from itty import *
from tropo import Tropo, Result

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

    t = Tropo()

    t.ask(choices = "red, blue, green", attempts=3, timeout=60, name="color", say = "好きな色は何ですか?レッド、ブルー、グリーンの中から選んでください。")	
    
    t.on(event = "continue", next ="/continue")
    t.on(event = "incomplete", next ="/incomplete")
    
    return t.RenderJson()
    
@post("/continue")
def index(request):
    
    r = Result(request.body)
    t = Tropo()
    
    answer = r.getValue()
    
    t.say("選んだ色は、 " + answer)
    
    return t.RenderJson()
    
@post("/incomplete")
def index(request):
    
    t = Tropo()
    
    t.say("申し訳ありませんが、正確な解答を得られませんでした。")
    
    return t.RenderJson()

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

 

質問には、もっと多くの用途とオプションがありますが、これで基本は説明しています。 次は、入力の録音について説明します。

 

補足資料

askについての基本情報の詳細は、APIリファレンスを参照して下さい。