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

フリーフォームテキスト

   

グラマは、ユーザーによる入力をコントロールし、発信者の応答に正確な意味付けをおこなう便利なツールです。 ただし、ユーザーが言葉にするのにどの言葉をタイプしているか、それを知るためにテキスト入力情報を収集することもあります。 Tropoのシンプルグラマ表記法は、 [ANY]グラマを標準装備し、これに対応しています。 これはステータスアップデートと結果のログを要求するテキストメッセージの受信の例です。 この例では、2つのaskメソッドがあり、 そのうちの1つは空白になっていることに注意してください。 [ANY]グラマを使用しているので、 どのようなメッセージを送信してもグラマの要求を満たすことができます。 ただし、最初のテキストメッセージは、 問いかけへの返答というよりはアプリケーションを起動させる役割をもっているため(アプリケーションをオンにする触媒のようなものです)、 無視しなければなりません。 空白になっている askがその働きをします。

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

post '/index.json' do
  
  t = Tropo::Generator.new
  
  t.ask :name => 'catch', 
        :say => {:value => ""},
        :timeout => 60,
        :choices => {:value => "[ANY]"}
        
  t.on :event => 'continue', :next => '/continue.json'  
    
  t.response
  
end

post '/continue.json' do
  
  t = Tropo::Generator.new
    
  t.ask :name => 'status', 
        :say => {:value => "What's your status?"},
        :timeout => 60,
        :choices => {:value => "[ANY]"}        
  
  t.response
  
  t.on :event => 'continue', :next => '/finish.json' 
  
end

post '/finish.json' do
  
  v = Tropo::Generator.parse request.env["rack.input"].read
  
  t = Tropo::Generator.new
  
  value = v[:result][:actions][:status][:value]
  
  t.say(:value => "Status returned: " + 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(null, null, "[ANY]");

    var say2 = new Say("What's your status?");
    var choices2 = new Choices(null, null, "[ANY]");

    tropo.ask(choices, null, null, null, "the_ask", null, null, say, 60, null);
    tropo.ask(choices2, null, null, null, "the_ask2", null, null, say2, 60, null);

    tropo.on("continue", null, "/continue", true);

    res.send(TropoJSON(tropo));

});

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

    var value = req.body['result']['actions'][1]['value'];
    
    tropo.say("Status returned: " + value);
        
    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();

    // Set up options for input.
    $options = array("choices" => "[ANY]", "name" => "catch", "timeout" => 60);
    $tropo->ask("", $options);
    
    $tropo->on(array("event" => "continue", "next" => "hello_world?uri=continue"));

    $tropo->RenderJson();
}

dispatch_post('/continue', 'app_continue');
function app_continue() {
    
    $tropo = new Tropo();
    
    $options2 = array("choices" => "[ANY]", "name" => "status", "timeout" => 60);
    $tropo->ask("What's your status?", $options2);
    
    $tropo->on(array("event" => "continue", "next" => "hello_world?uri=finish"));

    $tropo->RenderJson();
}

dispatch_post('/finish', 'app_finish');
function app_finish() {

    $tropo = new Tropo();
    @$result = new Result();
    $value = $result->getValue();
    
    $tropo->say("You said " . $value);
    $tropo->RenderJson();
}

run();

?>

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

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

    t = Tropo()

    t.ask(choices = "[ANY]", timeout = 60, name = "catch", say = "")

    t.on(event = "continue", next ="/continue")

    return t.RenderJson()

@post('/continue')
def index(request):

    t = Tropo()

    t.ask(choices = "[ANY]", timeout = 60, name = "status", say = "What's your status?")
    t.on(event = "continue", next ="/finish")

    return t.RenderJson()

@post("/finish")
def index(request):

    r = Result(request.body)        

    t = Tropo()

    value = r.getValue()

    t.say("Status returned: " + value)

    return t.RenderJson()

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

 

注意すべきなのは、[ANY]グラマは音声アプリケーションでは絶対に作動し ない ということです。テキストチャネルでのみ作動します。

注意

PHPを使用する場合、Limonadeフレームワーク等の例として、http://www.example.com/test.php?uri=startのようにURLの最後尾にリソース名を含める必要があります。

 

クイックスタートについてよくわかりましたか? アプリケーションの具体的な話に進んでもよろしいでしょうか。 次はチュートリアルについてご説明します。

 

補足資料

 

更に詳しいaskメソッドの情報については こちらをご覧ください。