make voiceXML to read the result returned by the server
Asked Answered
M

2

8

I am new in voiceXML and I am wondering how to read a value return by the server after post. I want voiceXML to read the server's response. According to voiceXML documentation, I understand that the result should be in XML.

Here is my node.js/express.js code that receives the result:

app.post("/getData", function (req, res) {
    console.log(JSON.stringify(req.body));
    res.header('Content-Type','text/xml').send('<?xml version="1.0" ?> <vxml version="2.0"> <block> <prompt> The time in Milwaukee is 10 </prompt> </block> </vxml>');
});

Here is the screenshot showing that I am successfully receiving the posted content:

enter image description here

Here is the screenshot showing that I am successfully sending the XML result: enter image description here

Here is my voiceXML file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE vxml PUBLIC "-//BeVocal Inc//VoiceXML 2.0//EN" "http://cafe.bevocal.com/libraries/dtd/vxml2-0-bevocal.dtd">
<vxml xmlns="http://www.w3.org/2001/vxml" xmlns:bevocal="http://www.bevocal.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">
    <form scope="dialog">
        <field name="name" modal="false">
            <grammar src="grammars.grammar#Names"/>
            <prompt>Whats your name?</prompt>
            <filled>
                <prompt>Hello <value expr="name"/>
                </prompt>
            </filled>
        </field>

        <field name="city" modal="false">
            <grammar src="grammars.grammar#Cities"/>
            <prompt>What city are you from?</prompt>
            <filled>
                <prompt>You are from <value expr="city"/>
                </prompt>
            </filled>
        </field>

        <field name="country" modal="false">
            <grammar src="grammars.grammar#Countries"/>
            <prompt>What country are you from?</prompt>
            <filled>
                <prompt>You are from <value expr="country"/>
                </prompt>
            </filled>
        </field>

        <field name="cityTime">
            <prompt>
                What city would you like the time for?
            </prompt>
            <grammar type="application/x-nuance-gsl">
                [denver (san francisco) ]
            </grammar>
        </field>
        <field name="formatTime">
            <prompt>
                Twelve hour or twenty four hour clock?
            </prompt>
            <grammar type="application/x-nuance-gsl">
                [[twelve (twenty four)] ?hour]
            </grammar>
        </field>
        <block>
            <submit next="http://65.29.170.122/getData" method="post" namelist="name city country cityTime formatTime" />
        </block>
    </form>
</vxml>
Morrison answered 28/11, 2015 at 18:47 Comment(0)
B
7

Two approaches are available: First, after collecting your input submit the form and the response should be a new VoiceXML document that plays your data.

Second, if your browser supports it (most do), you can use the Data element to make a request from within the VoiceXML form. The response needs to be XML. VoiceXML provides a way to walk the resulting DOM to get your data.

As for speaking the data, most browsers support the say-as element of SSML within a prompt. For most professional applications, the typically approach is to build a javascript library to assemble and play a set of recordings to play the time.

Bypath answered 29/11, 2015 at 0:45 Comment(0)
D
0

add php code in a file, add xml script and echo the server response wherever you want. This way the final XML that the voice server gets actually has php code also but it does'nt matter as it will ignore the php only take the xml tags in between which you would have echoed the result. For eg:

<?php
$appointmentTime = $_REQUEST['appointment_time'];
?>
<Response>
    <Play> <?php echo $appointmentTime ?> </Play>
</Response>
December answered 3/12, 2015 at 11:21 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.