Asterisk

Asterisk: сообщение о занятой линии

Уведомление о занятости при настройке Call Waiting в Asterisk

Вступление

Функция Call Waiting при настройке в Asterisk или через FreePBX позволяет внутреннему номеру принимать второй параллельный вызов во время текущего разговора. Основной проблемой Call Waiting является то, что звонящий занятому абоненту слышит стандартный КПВ (Контроль посылки вызова, или просто гудок) в телефонной трубке, что создает ложное ощущение игнорирования. Звонящий думает, что вызываемый абонент не взял трубку по причине обеда, перекура, невнимательности или похищения пришельцами.

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

Настройка extensions_custom.conf

Как можно понять по названию заголовка, настройку мы будем производить в одноименном файле extensions_custom.conf, который находится в директории /etc/asterisk/. Открываем его для редактирования:

nano /etc/asterisk/extensions_custom.conf

После чего, добавляем в файл следующую конфигурацию:

[from-internal-custom]
include => macro-dialout-one-predial-hook
[macro-dialout-one-predial-hook]
exten => s,1,Noop(HINT STATUS - ${EXTENSION_STATE(${DEXTEN})}) exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "INUSE"]?Playback(/var/lib/asterisk/sounds/ru/custom/abonent_zanyat_ogidayte)) exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "INUSE"]?Set(D_OPTIONS=Ttm)) exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "RINGINUSE"]?Playback(/var/lib/asterisk/sounds/ru/custom/abonent_zanyat_ogidayte)) exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "RINGINUSE"]?Set(D_OPTIONS=Ttm)) 

Разберемся с каждой строчкой контекста macro-dialout-one-predial-hook:

exten => s,1,Noop(HINT STATUS - ${EXTENSION_STATE(${DEXTEN})})

выводим в консоль сервера состояние хинта. Здесь может быть : UNKNOWN, NOT_INUSE, INUSE, BUSY, UNAVAILABLE, RINGING, RINGINUSE, HOLDINUSE, ONHOLD

exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "INUSE"]?Playback(/var/lib/asterisk/sounds/ru/custom/abonent_zanyat_ogidayte))

проверяем статус хинта: если он равен INUSE (находится в разговоре), то проигрываем для него заранее записанный файл (/var/lib/asterisk/sounds/ru/custom/abonent_zanyat_ogidayte, где сообщаем звонящему о занятости и просим подождать;

exten => s,n,ExecIf($["${EXTENSION_STATE(${DEXTEN})}" = "INUSE"]?Set(D_OPTIONS=Ttm))

сразу после озвучивания нашего аудио, играем MoH (Music On Hold) звонящему; Аналогичным способом, как показано выше, мы проводим проверку для состояния хинта равному RINGINUSE. Готово. Перегружаем диалплан командой:

asterisk -rx "dialplan reload"

Если не работает с Follow me

Если вы столкнулись с проблемой того, что данный функционал не работает на внутренних номерах, в настройках которых включена опция Follow Me, то сделайте следующие действия:

  1. Откройте графический интерфейс FreePBX. Перейдите в раздел Settings → Advanced Settings;
  2. Найдите опцию Default Follow Me Ring Strategy в разделе Follow Me Module и выставьте ее как ringallv2;
  3. Повторите подобную итерацию для каждого экстеншена в разделе Follow Me;
  4. Дайте команду в консоль вашего сервера на перезапуск диалплана:
asterisk -rx "dialplan reload"

Статья взята с сайта wiki.merionet.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *