Загружается...
 
Команда Background

Команда Background()


Назначение

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

Описание

Background(filename)

Начинает проигрывать заданный звуковой файл и сразу же возвращает управление, проигрывая звуковой файл в фоновом режиме, пока исполняются следующие команды (если они есть). (Сравните с командой Playback, которая также проигрывает звуковой файл, но ожидает, пока не закончится проигрыш звукового файла, перед тем как возвратить управление.)

Если Вы повторно вызовете команду Background, пока проигрывается предыдущий звуковой файл, второй звуковой файл будет просто помещен в очередь и начнет проигрываться после окончания первого файла.

Если, после выполнения этой команды, нет больше команд, которые надо выполнить для данного вызова, но соединение все еще остается в установленном состоянии (абонент не хочет положить трубку), тогда Asterisk закончит проигрывание фонового звукового файла перед тем, как будет запущен таймер, установленный командой ResponseTimeout.

Одно из применений команды Background() - это проигрывание интерактивного выбора пунктов меню ("Нажмите 1, для соединения с отделом продаж, нажмите 2, для соединения с отделом поддержки, и т.д."), без дальнейших команд, определенных для данного екстеншена. Следовательно, Asterisk не имеет команд, которые нужно выполнить, и просто ждет любую DTMF последовательность, которые введет пользователь, пока проигрывается файл. Если пользователь набрал номер, который является правильным в данном контексте, проигрывание звукового файла заканчивается и Asterisk перейдет на номер набранного екстеншена. Если пользователь ничего не набрал, тогда Asterisk закончит проигрывание звукового файла, и в тишине будет ждать, определенное в ResponseTimeout время, ввода пользователя. Если и в течении этого времени пользователь ничего не набрал, управление будет передано на стандартный екстеншен "t" (если он определен в контексте, иначе соединение будет закончено). Если пользователь набрал номер, который является неправильным, в текущем контексте, управление будет передано на стандартный екстеншен "i" (если он определен в контексте, иначе соединение будет закончено).

Пример

[incoming]
exten => s,1,Answer
exten => s,2,ResponseTimeout(5)
exten => s,3,Background(mymenu)
exten => s,4,Background(chooseSomething)

exten => t,1,Goto(s,2)

exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(s,2)

exten => 1,1,DoSomething

exten => 2,1,DoSomethingElse

exten => 3,1,Dial(...)

В данном примере, вызов поступает в контекст incoming и сразу же соединение переводится Asterisk в установленное состояние (шаг s,1). Устанавливается таймер ожидания ввода пользователя (ResponseTimeout) в значение 10 секунд (шаг s,2). Потом мы начинаем проигрывать звук из файла "mymenu.gsm" (шаг s,3). Потом мы помещаем в очередь еще один звук (из файла "chooseSomething.gsm"), который будет проигрываться в фоне, когда первый файл закончится (шаг s,4). Так как у нас нет команды с приоритетом s,5, то Asterisk будет продолжать проигрывать файл "mymenu.gsm" пока он не закончиться, а потом и звуковой файл "chooseSomething.gsm" до его окончания, а потом будет ждать ввода пользователя еще 5 секунд. Если в течении всего этого времени (пока проигрываются эти звуковые файлы и в течении заданного времени ожидания) пользователь наберет номер екстеншена, тогда Asterisk прекратит проигрывать звуковые файлы и перейдет к обработке набранного екстеншена. Если пользователь набрал "1", "2" или "3", тогда Asterisk совершит переход на соответствующий екстеншен. А если пользователь наберет любой другой номер, тогда Asterisk перейдет на екстеншен "i" и будет проигран звуковой файл "pbx-invalid.gsm", и будет совершен переход на команду проигрывания первого файла. Если пользователь ничего не ввел, после 5 секунд ожидания ввода, тогда будет совершен переход на екстеншен "t", а уже оттуда вся операция повториться заново, т.к. отсюда совершается переход на проигрывание первого файла.
Обратите внимание, что если Вы используете команду Background в макроопределении, то она всегда будет вызывать набранный екстеншен, вне вызываемого контекста. Смотри описание команды Macro.

Ожидание DTMF ввода без проигрывания чего-либо

Если Вам нужно, чтобы Asterisk ждал ввода пользователя без проигрывания каких-либо звуковых файлов, можно применить трюк, где Asterisk будет проигрывать звуковой файл, содержащий тишину. Если Вы инсталлировали пакет с Дополнительными звуковыми файлами, то в директории /var/lib/asterisk/sounds/silence Вы найдете 10 фалов, содержащих от 1 до 10 секунд тишины. (Вы можете также скачать эти файлы отдельно с www.loligo.com.) Проигрывание тишины - это тоже самое для пользователя, что и результат команды Wait (он ничего не слышит), но это дает возможность набрать пользователю какой-либо номер.

exten => s,1,Background(silence/5) ; Ждем ввода в течении 5 секунд

Коды возврата

Всегда возвращает 0.

Ссылки по теме:


---
Asterisk | Файлы конфигурации | План набора: extensions.conf | Список команд
Создано admin. Последнее изменение: воскресенье 02 / октябрь, 2005 16:15:26 MSD автор admin.