VoiceXML <submit> 标记在 php 上引发编译错误

VoiceXML <submit> tag throwing a compilation error on php

长期潜伏者,第一次提问。此任务似乎相对简单:创建一个 VoiceXML 文档,该文档将触发一个脚本以通过口头命令将文本文档更改为 运行 游戏。

相关语音 XML:

<!--Encoding details-->
<?xml version="1.0" encoding="UTF-8" ?>
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml"> 

<if cond="command =='t1 go'">
   <submit next="tank.php?command=t1%20go" method="get" namelist="command"/>
</if>

if/else 标签中的第一个条件总共有 5 个条件。当 phone # 被调用时,它要求您发出命令,它正确地转到条件分支,然后声明 tank.php 文档 "can't be compiled" 并断开连接。 技巧是文本文件确实被这个口头命令改变了,phpcompiles/runs没问题。当我取出 'submit' 标签时,文档没有抛出任何错误。无论出于何种原因,来自 php 的 'compilation error' 似乎导致 voiceXML 表单过早断开连接。

完成php文档:

<?php
    $myfile = fopen("gismoCommand.txt", "w") or die("Unable to open file!");
    $command = $_GET["command"];
    fwrite($myfile, $command);
    fclose($myfile);
?>

我已经在这个特定问题上工作了 5 个小时。你的建议可以挽救我的理智。

决议!

Voxeo(我正在使用的服务)提供了比语音命令更彻底的调试器。感谢上帝。

它给我扔了这样的东西(具体内容不重要)

TTS: Sorry, that content has an internal error.
RTSP MESSAGE(o): ANNOUNCE rtsp://localhost:9974/synthesizer/ RTSP/1.0 Cseq: 11 Session: b5bdeff3d79236676847995d294d3445-9468 Content-Type: application/mrcp Content-Length: 649 SPEAK 946796007 MRCP/1.0 Kill-On-Barge-In: true Voice-Name: Allison-EnglishUS Speech-Language: en-us Vendor-Specific-Parameters: Voxeo-Resource="en-us.TTS.fc808afe12384bcb90415baee30fc0d7.Staging-Loquendo;plugin=vxttsloq7;speechLanguage=en-us;voiceName=Allison-EnglishUS;type=loquendo";Voxeo-Playback-Mode=VXML;Voxeo-Community-ID=f25af74e6f994e15ae7214ca83a2fcd9;Voxeo-Virtual-Platform=Staging-Loquendo;Voxeo-Site-ID=fc808afe12384bcb90415baee30fc0d7 Content-Type: application/synthesis+ssml Content-Length: 129 <?xml version="1.0" encoding="UTF-8"?> <speak version="1.0" xml:lang="en-us"> Sorry, that content has an internal error. </speak>

重要的是 this 错误没有出现在 Postman 中或通过 PHP 错误,因为正如我所料,php 本身是问题在于 vxml 解释它的方式。在 php 脚本周围添加 'vxml' 标签(保留 .php 结尾),程序 100% 满意,我花了将近 9 个小时才找到两行更改。

希望这对其他人有帮助,干杯!

新PHP:

<vxml version="2.0">
<?php
    $myfile = fopen("gismoCommand.txt", "w") or die("Unable to open file!");
    $command = $_GET["command"];
    fwrite($myfile, $command);
    fclose($myfile);
?>
</vxml>

"submit" 是对有效语音 XML 文档的请求;参见 the official specification。通过在文档周围放置 "vxml" 标签,您创建了一个足够合法的 VoiceXML 脚本,解释器可以阅读和解释。

就个人而言,对于这种情况,我会使用 "data" tag available in VoiceXML 2.1 并由 Voxeo 提供支持。 Return 一个最小的 XML 文档;忽略它;继续处理您的 VoiceXML 并使用漂亮、干净、定义明确的退出。