使用Asterisk AGI脚本中的Festival

时间:2012-10-22 15:11:15

标签: perl asterisk festival agi

这感觉就像一个非常愚蠢的问题,但我无法弄清楚。我正在使用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'})

它说'任意'位,这使我对引用感到非常困惑(我传递的字符串中的双引号是我能做到的唯一方法,而不是说第一个单词)。 / p>

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

完全忽略'any'位。

在AGI脚本中使用Festival提及的唯一在线资源都讨论从外部调用它,将其保存到临时文件然后再播放。我真的不得不走那条路吗?难道我不能使用AGI中的任何参数来运行任何拨号方案应用程序吗?

1 个答案:

答案 0 :(得分:3)

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

示例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"');