Phone Tree
After the caller enters digits on the keypad, Plivo sends them as a request to the action
URL. We also add a nested Speak>
element. This means that input can be gathered at any time during <Speak>
.
If the caller enters a digit during the speaking of the text, the <Speak>
element will stop speaking and wait for digits, #
sign, or a timeout
.
If <GetDigits>
tag times out without input, the <Speak>
element will complete and the <GetDigits>
element will exit without submitting. Plivo will then process the next element in the document, which in this case is a <Speak>
element which informs the caller that no input was received.
For a nested phone tree, you should return a GetDigits XML from the action
URL. In the above case, when the caller enters the 4 digit pin number, Plivo will POST the Digits
to the action
URL, your application should return the second XML to play another message and accept inputs.
Response
<Response>
<GetDigits action="http://www.foo.com/gather_pin/" method="POST">
<Speak>Enter your 4-digit pin number, followed by the hash key</Speak>
</GetDigits>
<Speak>Input not received. Thank you</Speak>
</Response>
Return the following XML to gather department:
<Response>
<GetDigits action="http://www.foo.com/gather_department/" method="POST">
<Speak>Enter 1 for support and 2 for sales</Speak>
</GetDigits>
</Response>
Example Request
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from plivo import plivoxml
response = plivoxml.ResponseElement()
response.add(
plivoxml.GetDigitsElement(
action='http://www.foo.com/gather_pin/', method='POST').add(
plivoxml.SpeakElement(
'Enter your 4-digit pin number, followed by the hash key')))
response.add(plivoxml.SpeakElement('Input not received. Thank you'))
print(response.to_string())
# XML to gather department
get_dept_digits_response = plivoxml.ResponseElement()
get_dept_digits_response.add(
plivoxml.GetDigitsElement(
action='http://www.foo.com/gather_department/', method='POST').add(
plivoxml.SpeakElement('Enter 1 for support and 2 for sales')))
print(get_dept_digits_response.to_string())
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
require 'rubygems'
require 'plivo'
include Plivo::XML
include Plivo::Exceptions
begin
response = Response.new
params = {
action: 'https://www.foo.com/gather_pin/',
method: 'POST'
}
get_digits = response.addGetDigits(params)
input_received_speak = 'Enter the 4-digit pin number, followed by the hash key'
get_digits.addSpeak(input_received_speak)
input_not_received_speak = 'Input not received. Thank you'
response.addSpeak(input_not_received_speak)
xml = PlivoXML.new(response)
puts xml.to_xml
rescue PlivoXMLError => e
puts 'Exception: ' + e.message
end
begin
response = Response.new
params = {
action: 'https://www.foo.com/gather_department/',
method: 'POST'
}
get_digits = response.addGetDigits(params)
speak_body = 'Enter 1 for support and 2 for sales'
get_digits.addSpeak(speak_body)
xml = PlivoXML.new(response)
puts xml.to_xml
rescue PlivoXMLError => e
puts 'Exception: ' + e.message
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var plivo = require('plivo');
var response = plivo.Response();
var params = {
'action': "https://www.foo.com/gather_pin/",
'method': "POST"
};
var get_digits = response.addGetDigits(params);
var input_received_speak = "Enter your 4-digit pin number, followed by the hash key";
get_digits.addSpeak(input_received_speak);
var input_not_received_speak = "Input not received. Thank you";
response.addSpeak(input_not_received_speak);
console.log(response.toXML());
/*
Sample Output
<Response>
<GetDigits action="https://www.foo.com/gather_pin/" method="POST">
<Speak>Enter your 4-digit pin number, followed by the hash key</Speak>
</GetDigits>
<Speak>Input not received. Thank you</Speak>
</Response>
*/
/* Code to generate XML to be returned from url at action */
var plivo = require('plivo');
var response = plivo.Response();
var params = {
'action': "https://www.foo.com/gather_department/",
'method': "POST"
};
var get_digits = response.addGetDigits(params);
var speak_body = "Enter 1 for support and 2 for sales";
get_digits.addSpeak(speak_body);
console.log(response.toXML());
/*
Sample Output
<Response>
<GetDigits action="https://www.foo.com/gather_department/" method="POST">
<Speak>Enter 1 for support and 2 for sales</Speak>
</GetDigits>
</Response>
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
require '../vendor/autoload.php';
use Plivo\XML\Response;
$response = new Response();
$params = array(
'action' => "https://www.foo.com/gather_pin/",
'method' => "POST"
);
$get_digits = $response->addGetDigits($params);
$input_received_speak = "Enter your 4-digit pin number, followed by the hash key";
$get_digits->addSpeak($input_received_speak);
$input_not_received_speak = "Input not received. Thank you";
$response->addSpeak($input_not_received_speak);
Header('Content-type: text/xml');
echo($response->toXML());
/*
Sample Output
<Response>
<GetDigits action="https://www.foo.com/gather_pin/" method="POST">
<Speak>Enter your 4-digit pin number, followed by the hash key</Speak>
</GetDigits>
<Speak>Input not received. Thank you</Speak>
</Response>
*/
?>
<?php
/* XML to be returned by the redirect URL */
require '../vendor/autoload.php';
use Plivo\XML\Response;
$response = new Response();
$params = array(
'action' => "https://www.foo.com/gather_department/",
'method' => "POST"
);
$get_digits = $response->addGetDigits($params);
$speak_body = "Enter 1 for support and 2 for sales";
$get_digits->addSpeak($speak_body);
Header('Content-type: text/xml');
echo($response->toXML());
/*
Sample Output
<Response>
<GetDigits action="https://www.foo.com/gather_department/" method="POST">
<Speak>Enter 1 for support and 2 for sales</Speak>
</GetDigits>
</Response>
*/
?>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Example for getdigits - phone tree
package com.plivo.api.xml.samples.getdigits;
import com.plivo.api.exceptions.PlivoXmlException;
import com.plivo.api.xml.GetDigits;
import com.plivo.api.xml.Response;
import com.plivo.api.xml.Speak;
class PhoneTree {
public static void main(String[] args) throws PlivoXmlException {
Response response = new Response()
.children(
new GetDigits()
.action("http://www.foo.com/gather_pin/")
.method("POST")
.children(
new Speak("Enter pin number followed by hash key")
),
new Speak("Input not received. Thank you.")
);
System.out.println(response.toXmlString());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Collections.Generic;
using Plivo.XML;
namespace Plivo
{
class MainClass
{
public static void Main(string[] args)
{
Plivo.XML.Response resp = new Plivo.XML.Response();
Plivo.XML.GetDigits get_digits = new
Plivo.XML.GetDigits("",
new Dictionary<string, string>()
{
{"action", "http://www.foo.com/gather_pin/"},
{ "method", "POST" }
});
resp.Add(get_digits);
get_digits.AddSpeak("Enter PIN number.",
new Dictionary<string, string>() { });
resp.AddSpeak("Input not recieved.",
new Dictionary<string, string>() { });
var output = resp.ToString();
Console.WriteLine(output);
}
}
}
//<Response>
// <GetDigits action = "http://www.foo.com/gather_pin/"
// method="POST">
// <Speak>Enter PIN number.</Speak>
// </GetDigits>
// <Speak>Input not recieved.</Speak>
//</Response>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Example for getdigits - phone tree
package main
import "github.com/plivo/plivo-go/xml"
func main() {
response := xml.ResponseElement{
Contents: []interface{}{
new(xml.GetDigitsElement).
SetAction("http://www.foo.com/gather_pin/").
SetMethod("POST").
SetContents([]interface{}{
new(xml.SpeakElement).
SetContents("\tEnter pin number followed by hash key"),
}),
new(xml.SpeakElement).
SetContents("Input not received. Thank you."),
},
}
print(response.String())
}