如何在AGI脚本中播放多个文件?

时间:2009-08-24 15:58:03

标签: perl asterisk telephony

我可以使用以下方法将多个文件一起流式传输:

$AGI->exec('Background',"file1&file2&file3&file4")

但是,这不会返回用户在播放文件时按下的键。所以,我使用$AGI->stream_file,它返回按下的键,但只播放一个文件。

我需要能够一起播放多个文件,播放应该在用户按下某个键时停止,我应该知道按下了哪个键。

我如何实现这一目标?

2 个答案:

答案 0 :(得分:3)

这应该有效:

my $keyPress;
# fill in your filenames as appropriate...
foreach my $file (qw(file1 file2 file3))
{
    $keyPress = $AGI->stream_file($file);
    last if $keyPress;
}

# by this point, $keyPress will contain what key was pressed,
# 0 if all files played to completion, or -1 if a hangup occurred
# (as per the documentation).

您可以稍微缩短代码(例如将循环收紧到do / while),但这种方式非常易读。

答案 1 :(得分:0)

Background命令等待用户输入扩展名并自动将其发送到那里,如果不存在则延伸到i扩展名。

改用Read命令; Read会将用户密钥存储到变量中:

读取(SomeVar,file1,10);将最多10位数字读入SomeVar SayDigits($ {SomeVar})

我认为Asterisk现在支持Read命令中的file1& file2,但我不知道它的版本是什么版本。