Tropo WebAPI Development Guide Home  |  Frameset Home

  Capturing Incoming Text  |  TOC  |  Asking for Digits  

Asking a Question


The most fundamental of needs - asking a question and processing the answer. A typical ask has three steps:


Here’s a basic example that asks the user their favorite color, repeats it back to him/her, and records the result in the log. Best part? It'll work on any channel - phone, text or IM - though it's optimized for voice:

Since JSON alone cannot be used to extract the reply from the result, all the following examples include a library. Note that if you use PHP, the following example includes the Limonade framework, so you would need to define the end of the start URL in Tropo to include the resource name, like http://www.example.com/test.php?uri=start:

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

post '/index.json' do
  
  t = Tropo::Generator.new
  
  t.ask :name => 'color', 
        :timeout => 60, 
        :say => {:value => "What's your favorite color?  Choose from red, blue or green."},
        :choices => {:value => "red, blue, green"}
  
  t.on :event => 'continue', :next => '/continue.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 => "You said " + answer)
  
  t.response
  
end

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

// Required to process the HTTP body.
// req.body has the Object while req.rawBody has the JSON string.

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

app.post('/', function(req, res){
	
    var tropo = new TropoWebAPI();
    
    var say = new Say("What's your favorite color?  Choose from red, blue or green.");
    var choices = new Choices("red, blue, green");

    // (choices, attempts, bargein, minConfidence, name, recognizer, required, say, timeout, voice);
	
    tropo.ask(choices, null, null, null, "color", null, null, say, 60, null);
	
    tropo.on("continue", null, "/continue", true);
	
    res.send(TropoJSON(tropo));
	
});

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

    var answer = req.body['result']['actions']['value'];
	
    tropo.say("You said " + answer);
		
    res.send(TropoJSON(tropo));

});

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

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

dispatch_post('/start', 'app_start');
function app_start() {

	$tropo = new Tropo();

	$options = array("choices" => "red, blue, green", "name" => "color", "timeout" => 60);
 
	$tropo->ask("What's your favorite color?  Choose from red, blue or green.", $options);

	$tropo->on(array("event" => "continue", "next" => "hello_world.php?uri=continue"));

	$tropo->RenderJson();
}

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

	$tropo = new Tropo();
	@$result = new Result();
	
	$answer = $result->getValue();
	
	$tropo->say("You said " . $answer);
	
	$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", timeout=60, name="color", say = "What's your favorite color?  Choose from red, blue or green.")	
	
	t.on(event = "continue", next ="/continue")
	
	return t.RenderJson()
	
@post("/continue")
def index(request):
	
	r = Result(request.body)
	t = Tropo()
	
	answer = r.getValue()
	
	t.say("You said " + answer)
	
	return t.RenderJson()
	
run_itty(server='wsgiref', host='0.0.0.0', port=8888)

Want to accept a specific number of digits instead of text - like a pin number or zip code?

Next Step: Asking for Digits



  ANNOTATIONS: EXISTING POSTS
0 posts - click the button below to add a note to this page

login
  Capturing Incoming Text  |  TOC  |  Asking for Digits  

© 2012 Voxeo Corporation  |  Voxeo IVR  |  VoiceXML & CCXML IVR Developer Site