无法使用voximal在vxml中调用perl脚本

时间:2017-08-14 10:07:22

标签: perl asterisk vxml

我有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;星号。

`

2 个答案:

答案 0 :(得分:2)

虽然我从未使用过与VXML相关的任何内容,但在我看来,您使用<submit>的方式不正确:

  

5.3.8 submit element

     

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