我有vxml文件,我从中调用perl脚本,perl脚本非常简单,它只是在文本文件上写。 我在星号中使用voximal来调用下面的vxml文件是我的vxml文件。
<?xml version="1.0"?>
<vxml version="2.1" xmlns="http://www.w3.org/2001/vxml">
<form>
<block>
<audio src="./audio/welcome.wav"/>
</block>
<record name="message" maxtime="30s" finalsilence="2s" dtmfterm="true">
</record>
<block>
<submit next="test.perl" enctype="multipart/form-data" method="post"/>
</block>
</form>
perl文件
#! /usr/bin/perl
use strict;
use warnings;
open(my $fh, '>', 'report.txt');
print $fh "My first report generated by perl\n";
close $fh;
print "done\n";
拨号方案
[from-twilio]
exten => _+1NXXXXXXXXX,1,Answer(200)
exten => _+1NXXXXXXXXX,n,Wait(1)
exten => _+1NXXXXXXXXX,n,Voximal(file:///home/ubuntu/voximal/test.vxml)
exten => _+1NXXXXXXXXX,n,Hangup()
当我拨打一个号码后,我能够听到perl文件未调用后的欢迎音频,我检查了/var/log/voximal/debug.log&amp;中的日志。 vxml.log
它说 :
Aug 14 09:50:21.56|0x7f37cca62700||0|EVENT|0|2|content=Error: error.badfetch ,test.perl
我尝试了所有东西,脚本,子对话,用perl,python,php提交标签。 我不知道发生了什么任何帮助,请详细说明,因为我是voximal&amp; amp;星号。
`
答案 0 :(得分:2)
虽然我从未使用过与VXML相关的任何内容,但在我看来,您使用<submit>
的方式不正确:
<submit
&gt; element用于向原始Web服务器提交信息,然后 转换为在响应中发回的文档 。 (强调我的)
我认为"done\n"
不是有效的VXML文档。
另见this example:
我们的第二个示例要求用户选择饮料,然后将其提交到服务器脚本:
<?xml version="1.0" encoding="UTF-8"?> <vxml xmlns="http://www.w3.org/2001/vxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/vxml http://www.w3.org/TR/voicexml20/vxml.xsd" version="2.0"> <form> <field name="drink"> <prompt>Would you like coffee, tea, milk, or nothing?</prompt> <grammar src="drink.grxml" type="application/srgs+xml"/> </field> <block> <submit next="http://www.drink.example.com/drink2.asp"/> </block> </form> </vxml>
字段是输入字段。在继续执行表单中的下一个元素之前,用户必须为该字段提供值。示例交互是:
C (computer): Would you like coffee, tea, milk, or nothing? H (human): Orange juice. C: I did not understand what you said. (a platform-specific default message.) C: Would you like coffee, tea, milk, or nothing? H: Tea C: (continues in document drink2.asp) ^^^^^^^^
也就是说,调用drink2.asp
应该返回一个有效的VXML文档。在我看来,response like:
<?xml version="1.0" encoding="UTF-8"?>
<vxml version = "2.1" xmlns="http://www.w3.org/2001/vxml">
<form>
<block>
<prompt>
Thank you for calling. Goodbye.
</prompt>
</block>
<exit/>
</form>
</vxml>
可能是您需要输出Perl脚本的内容。
例如,查看this example,服务器端脚本以发送VXML文档结束:
的ReadFile(&#34; goodbye.vxml&#34);
由于完全不熟悉VXML,Asterisk或Voximal,我99%肯定您的问题与Perl无关,但这是因为您的脚本没有输出有效的VXML文档。
答案 1 :(得分:0)
您需要捕获脚本返回的内容。
您可以设置选项以启用解释器调试。 您将在/ var / log / voximal / content / files中找到每个文件的内容。
看一下/var/log/voximal/debug.log,你会发现你的drink2.asp的解析错误
启用解释器日志:
CLI&GT; voximal调试解释器
或
在/etc/asterisk/voximal.conf中设置debug = interpreter(启用文件日志记录,需要重新启动Asterisk)