1

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

Festival('Hello caller','any')

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

$agi->exec('Festival', '"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 的任何参数来运行任何拨号方案应用程序吗?

4

1 回答 1

3

是的,您可以使用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);
}

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

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

或者

$agi->exec('FESTIVAL "Hello caller"|"any"');
于 2012-10-22T17:50:34.813 回答