make voiceXML读取服务器返回的结果

时间:2015-11-28 18:47:34

标签: javascript xml node.js express voicexml

我是voiceXML的新手,我想知道如何在发布后读取服务器的值。我希望voiceXML能够读取服务器的响应。 According to voiceXML documentation,我知道结果应该是XML格式。

这是我的node.js / express.js代码,它接收结果:

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>');
});

以下屏幕截图显示我已成功收到发布的内容:

enter image description here

以下屏幕截图显示我已成功发送XML结果: enter image description here

这是我的voiceXML文件:

<?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>

2 个答案:

答案 0 :(得分:7)

有两种方法: 首先,在收集您的输入后提交表单,响应应该是一个新的VoiceXML文档,用于播放您的数据。

其次,如果您的浏览器支持它(大部分都支持),您可以使用Data元素在VoiceXML表单中发出请求。响应需要是XML。 VoiceXML提供了一种遍历生成的DOM以获取数据的方法。

至于说出数据,大多数浏览器在提示中支持SSML的say-as元素。对于大多数专业应用程序,通常的方法是构建一个javascript库来组合和播放一组录音来播放时间。

答案 1 :(得分:0)

在文件中添加php代码,添加xml脚本并在任何地方回显服务器响应。通过这种方式,语音服务器实际获得的最终XML也具有php代码,但它确实无关紧要,因为它将忽略php只接受你将回显结果的xml标签。例如:

<?php
$appointmentTime = $_REQUEST['appointment_time'];
?>
<Response>
    <Play> <?php echo $appointmentTime ?> </Play>
</Response>