Background()

Является одним из самых важных ключей к построению интерактивных диалпланов Asterisk. Как и Playback(), это приложение воспроизводит записанный звуковой файл. Однако, в отличие от Playback(), если пользователь нажимает кнопку (или последовательность кнопок) на клавиатуре телефона, оно прерывает воспроизведение и переходит к добавочному номеру соответственно нажатым цифрам. Например, если абонент нажмёт кнопку 5, Asterisk прекратит воспроизводить звуковое сообщение и передаст управление вызовом первому приоритету добавочного номера 5.

Нужно отметить следующее: некоторые люди ожидают, исходя из имени этого приложения, что Background() будет выполняться в диалплане до тех пор, пока воспроизводится звук, но это имя указывает на то, что данное приложение воспроизводит звук в фоновом режиме в процессе ожидания двухтонального многочастотного набора телефонного номера (Dual-Tone Multi-Friquency, DTMF).

Чаще всего, приложение Background() используется для создания голосовых меню (которые часто называют автоответчиками или интерактивными секретарями). Многие компании используют голосовые меню для направление абонентов на соответствующий добавочный номер, таким образом освобождая своих секретарей от необходимости отвечать на все звонки.

Синтаксис

Синтаксис Background() аналогичен синтаксису Playback():

exten => 123, 1, Answer() exten => 123, n, Background(main-menu)

В более ранних версиях Asterisk, если приложение Background() завершало воспроизведение звукового сообщения и в текущем добавочном номере больше не было приоритетов, Asterisk ничего не делал и ожидал ввода абонента. Такое поведение больше не является для Asterisk принятым по умолчанию. Если требуется, чтобы Asterisk ожидал ввода абонента после завершения воспроизведения звукового сообщения, можно вызвать приложение WaitExten() (ожидание добавочного номера).

И Background() и WaitExten() позволяют абоненту производить набор номера. После этого Asterisk пытается найти в текущем контексте добавочный номер, соответствующий введённым абонентом цифрам. Если Asterisk находит однозначное соответствие, она отправляет вызов на этот добавочный номер. Продемонстрируем это, добавив несколько строк в наш пример:

exten => 123, 1, Answer() exten => 123, n, Background(main-menu) exten => 123, n, WaitExten() exten => 2, 1, Playback(digits/2) exten => 3, 1, Playback(digits/3) exten => 4, 1, Playback(digits/4)

Если вызвать добавочный номер 123 на примере выше, он воспроизведёт звуковое сообщение с фразой main menu (главное меню) и после этого будет ожидать ввода цифр 2, 3 или 4. Если нажать одну из этих цифр, Asterisk воспроизведёт её для вас. Также вы обнаружите, что, если ввести другую цифру (например, 5), Asterisk не обеспечит ожидаемого результата.

Также возможна ситуация, когда Asterisk обнаружит неоднозначное соответствие. Это можно легко продемонстрировать, введя в предыдущий пример добавочный номер под именем 1:

exten => 123, 1, Answer() exten => 123, n, Background(main-menu) exten => 123, n, WaitExten() exten => 1, 1, Playback(digits/1) exten => 2, 1, Playback(digits/2) exten => 3, 1, Playback(digits/3) exten => 4, 1, Playback(digits/4)

Наберите добавочный номер 123 и затем по подсказке главного меню введите 1. Почему Asterisk сразу же не воспроизводит этот номер? Потому, что цифра 1 неоднозначна; Asterisk не понимает, какой добавочный номер вызывается, 1 или 123. Он ожидает несколько секунд ввода другой цифры (например, 2 для вызова добавочного номера 123). Если набора никаких других цифр не последовало, по завершении времени ожидания Asterisk направляет вызов на добавочный номер 1.

Прежде чем двигаться дальше, посмотрим, что было сделано на данный момент. Вызвав наш диалплан, абоненты услышат приветствие. Если они нажмут 1, то услышат номер 1, если 2 - то номер 2 и .д. Для начала это неплохо, но давайте это всё немного усовершенствуем. С помощью приложения Goto() (перейти к) заставим диалплан повторять приветствие после воспроизведения номера:

[incoming] exten => 123, 1, Answer() same => n, Background(main-menu) exten => 1, 1, Playback(digits/1) same => n, Goto(incoming,123,1) exten => 2, 1, Playback(digits/2) same => n, Goto(incoming,123,1)

Две новые строки обеспечат возвращение управления над вызовом добавочному номеру 123 после воспроизведения выбранного номера.

Поддержите проект, если он помог вам

Проект продвигается за счёт личных средств и времени авторского коллектива. Если вы нашли здесь то, что искали, то вы можете выразить свою благодарность финансово. Даже небольшой платёж помогает авторам в их труде, сохраняя их вовлечённость и высокую мотивацию чтобы строить открытый мир равных возможностей для всех неравнодушных людей вокруг.