【问题标题】:Using Festival from an Asterisk AGI script从 Asterisk AGI 脚本中使用 Festival
【发布时间】:2012-10-23 02:01:16
【问题描述】:

这感觉像是一个非常愚蠢的问题,但我就是想不通。我正在使用Asterisk::AGI 在 Perl 中编写一个 AGI 脚本,它需要调用 Festival 来向调用者读取一些文本。我知道在拨号方案中我可以说

Festival('Hello caller','any')

它会说'Hello caller'并允许任何键中断。诀窍是从 AGI 脚本中做到这一点。如果我这样做:

$agi->exec('Festival', '"Hello caller"')

它会说'Hello caller'。没问题。但我无法处理关键中断的可能性。它看起来有点像第二个参数,但也有点不像一个。我试过了

$agi->exec('Festival', '"Hello caller"', 'any')

而且它似乎完全忽略了它(没有发生键中断)。我也试过了

$agi->exec('Festival', q{"Hello caller",'any'})

它说的是“任何”位,这让我对引用感到非常困惑(我传递的字符串中的双引号是我可以让它做的不仅仅是说第一个词的唯一方法)。

$agi->exec('Festival', q{"Hello caller", 'any'})

完全忽略“任何”位。

唯一提到使用 AGI 脚本中的 Festival 的在线资源都谈到在外部调用它,将它保存到一个临时文件然后播放它。我真的必须走那条路吗?我不应该能够使用我喜欢的 AGI 中的任何参数运行任何拨号方案应用程序吗?

【问题讨论】:

    标签: perl asterisk festival agi


    【解决方案1】:

    是的,您可以使用AGI exec 执行拨号计划中的应用程序。 您必须使用管道 (|) 字符分隔参数。

    示例exec 使用选项拨号 (examples/agi-enum.agi)

    if ($option) {
        $option .= '|' . $DEFAULTTIMEOUT if ($DEFAULTTIMEOUT);
        $AGI->verbose("Executing Dial $option\n",3);
        $res = $AGI->exec('Dial', $option);
    }
    

    对于节日,它应该像这样工作:

    $agi->exec('Festival', '"Hello caller"|"any"');
    

    $agi->exec('FESTIVAL "Hello caller"|"any"');
    

    【讨论】:

    • 太棒了,谢谢。我在任何地方都没有看到任何解释该语法的东西,并且使用 AGI 模块意味着我以前不必关心。调用$agi->exec('Festival', '"Hello caller"|any') 允许中断并像往常一样返回按键的ASCII 码。完美。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多