Примеры динамической маршрутизации
Мы связали Asterisk с базой данных через ODBC и подготовили SQL-запросы. Теперь перейдем от статической маршрутизации, где пути звонков жестко прописаны в конфигах, к динамической маршрутизации.
Динамическая маршрутизация — это метод управления вызовами, при котором Asterisk принимает решение о направлении звонка в реальном времени, запрашивая данные из внешних источников: БД, API или кэш-серверов. Это позволяет реализовать маршрутизацию по БД, адаптируя логику АТС под задачи бизнеса без правки файлов конфигурации.
Кейс 1: Соединение с персональным менеджером
Типичная задача для корпоративной АТС — соединить клиента с его менеджером напрямую, минуя секретаря или IVR. Это пример того, как работает гибкая обработка вызовов.
Как показано в Схеме 1, процесс начинается с получения CallerID звонящего и поиска привязанного к нему сотрудника в CRM.
Допустим, в таблице clients сопоставлены номера клиентов и внутренние номера (extensions) менеджеров. В файле extensions_custom.conf создаем контекст:
[from-pstn-custom]
exten => _X., 1, NoOp(--- Поиск менеджера для ${CALLERID(num)} ---)
; Вызываем функцию ODBC из прошлого урока
same => n, Set(MANAGER_EXT=${ODBC_GET_MANAGER(${CALLERID(num)})})
; Проверяем, найден ли номер (обработка пустого значения)
same => n, GotoIf($["${MANAGER_EXT}" != ""]?found:notfound)
same => n(found), NoOp(--- Менеджер найден: ${MANAGER_EXT} ---)
same => n, Dial(PJSIP/${MANAGER_EXT}, 20)
same => n, Hangup()
same => n(notfound), NoOp(--- Менеджер не найден, звоним секретарю ---)
same => n, Dial(PJSIP/100, 20)
same => n, Hangup()Кейс 2: Динамический черный список (Anti-Spam)
Вместо ручного добавления номеров в модули FreePBX, можно проверять входящие по базе «нежелательных» контактов, которую наполняют сотрудники через веб-интерфейс.
Проверка по черному списку перед обработкой звонка:
[from-pstn-custom]
exten => _X., 1, Set(IS_SPAM=${ODBC_CHECK_BLACKLIST(${CALLERID(num)})})
same => n, ExecIf($["${IS_SPAM}" = "1"]?Hangup())
; Если не спам, возвращаем вызов в стандартный диалплан FreePBX
same => n, Goto(from-trunk,${EXTEN},1)Диагностика и отладка
Когда логика зависит от внешней базы, стандартных отчетов GUI недостаточно. Используйте инструменты CLI:
- Консоль Asterisk: Команда
asterisk -rvvvпокажет пошаговое выполнение диалплана. - Отладка переменными: Приложение
NoOp()выводит значения из БД в консоль. Это основной способ понять, что именно пришло из SQL. - Ручная проверка: В CLI можно протестировать функцию без совершения звонка:
odbc read ODBC_GET_MANAGER 79001234567 exec
Практическое задание
Создайте в extensions_custom.conf логику для VIP-клиентов:
- Используйте
ODBC_READдля получения статуса клиента. - Если клиент VIP — проиграйте файл
Playback(custom/vip-welcome)и направьте в очередь. - Если обычный — сразу направьте в очередь.
- Проверьте отработку условий в консоли Asterisk.
Мы научили диалплан принимать решения на основе внешних данных. В следующей теме мы используем этот фундамент для построения сложных IVR-систем и очередей, где голосовое меню меняется динамически под каждого звонящего.
Понравился урок?
Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей
Продолжить в Telegram