Белый список

Skip to end of metadata
Go to start of metadata

Белый список

Бывает нужным ограничить входящие звонки только числом некоторых "избранных" абонентов. Для этого необходимо реализовать функционал, который можно назвать "белым списком". Как это реализуется на 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, смотря как нужно сделать.
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.