【问题标题】:not able to call perl script inside vxml using voximal无法使用 voximal 在 vxml 中调用 perl 脚本
【发布时间】:2017-08-16 18:46:17
【问题描述】:

我有一个 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 和 vxml.log 中的日志 它说 : Aug 14 09:50:21.56|0x7f37cca62700||0|EVENT|0|2|content=Error: error.badfetch ,test.perl

我尝试了一切,脚本,子对话框,用 perl、python、php 提交标签。 我不知道发生了什么任何帮助表示感谢请详细说明,因为我是voximal和星号的初学者。

`

【问题讨论】:

    标签: perl asterisk vxml


    【解决方案1】:

    虽然我从未使用过任何与 VXML 相关的东西,但在我看来,您使用 &lt;submit&gt; 不正确:

    5.3.8 submit element

    &lt;submit> 元素用于向源 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(电脑):你想要咖啡、茶、牛奶还是什么都没有?
    H(人类):橙汁。
    C:我没听懂你说的。 (特定于平台的默认消息。)
    C:你想要咖啡、茶、牛奶,还是什么都没有?
    H:茶
    C:(在文件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("goodbye.vxml");

    完全不熟悉 VXML、Asterisk 或 Voximal,我 99% 确定您的问题与 Perl 无关,但这是由于您的脚本没有输出有效的 VXML 文档。

    【讨论】:

    • 谢谢,但我尝试了一切,即使在 voximal 和其他网站上给出的相同演示示例没有任何效果。同样的错误 bad.fetch
    【解决方案2】:

    您需要捕获脚本返回的内容。

    您可以设置启用解释器调试的选项。 您将在 /var/log/voximal/content/files 中找到每个文件的内容。

    查看/var/log/voximal/debug.log,你会发现你的drink2.asp的解析错误

    启用解释器日志:

    CLI> 体态调试解释器

    在 /etc/asterisk/voximal.conf 中设置 debug=interpreter(要启用文件日志记录,您需要重新启动 Asterisk)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 1970-01-01
      • 2015-11-08
      • 2013-11-15
      • 2012-05-30
      相关资源
      最近更新 更多