Как я могу воспроизвести несколько файлов в сценарии AGI? - PullRequest
1 голос
/ 24 августа 2009

Я могу передавать несколько файлов одновременно, используя:

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

Однако, это не возвращает клавишу, нажатую пользователем во время воспроизведения файлов. Итак, я использовал $AGI->stream_file, который возвращает нажатую клавишу, но воспроизводит только один файл.

Мне нужно иметь возможность воспроизводить несколько файлов одновременно, воспроизведение должно быть остановлено в тот момент, когда пользователь нажимает клавишу, и я должен знать, какая клавиша была нажата.

Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 24 августа 2009

Это должно работать:

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), но этот способ довольно читабелен.

0 голосов
/ 27 августа 2009

Фоновая команда ожидает, когда пользователь введет расширение, и автоматически отправит его туда, или на расширение i, если оно не существует.

Вместо этого используйте команду Read; Read сохранит все пользовательские ключи в переменную:

Чтение (SomeVar, file1,10); Читайте до 10 цифр в SomeVar SayDigits ($ {SomeVar})

Я думаю, что Asterisk теперь поддерживает файлы file1 & file2 в команде Read, но я не знаю, с какой версии это работает таким образом.

...