Белый список
Администратор,
Бывает нужным ограничить входящие звонки только числом некоторых "избранных" абонентов. Для этого необходимо реализовать функционал, который можно назвать "белым списком". Как это реализуется на Asterisk.
Хранение и управление списком номеров
Самым простым способом является встроенная в Asterisk база данных - [AstDB]. В нашем примере мы будем использовать именно этот путь, но ничто не мешает использовать для этого любую другую DB или текстовый файл.
Итак, номера белого списка будут храниться в ветви white_list. При входящем звонке будем делать поиск в базе данных, по ветке white_list, где ключем выступает номер звонящего, а значением - номер внутреннего абонента, для которого это активно. Также добавим флаг активности режима "белый список".
Создадим несколько записей:
snowflake*CLI> database put white_list 2323956 700 Updated database successfully snowflake*CLI> database put white_list 701 700 Updated database successfully snowflake*CLI> database show /white_list/2323956 : 700 /white_list/701 : 700 snowflake*CLI> snowflake*CLI> database put white_list_active 700 1 Updated database successfully
Переходим к написанию плана набора
Диалплан
В контекст обработки входящего звонка надо добавить переход в проверку "белого режима": Gosub(check-white-list,${EXTEN},1), в котором реализовать следующую логику:
[check-white-list] exten => _X.,1,ExecIf($["${DB(white_list_active/${CALLERID(num)})}" != "1"]|Return) ; если ключа нет или он
равен 0 - просто вернемся. Иначе белый режим активен.
exten => _X.,2,ExecIf($["${DB(white_list/${EXTEN}}" = "${CALLERID(num)}"]|Return) ; Номер найден, можно
соединять! exten => _X.,3,Hangup ; Номера нет, вешаем трубку. Как вариан - Ringing и Wait(60) потом Hangup или
Voicemail, смотря как нужно сделать.