Примеры динамической маршрутизации

Мы связали 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:

  1. Консоль Asterisk: Команда asterisk -rvvv покажет пошаговое выполнение диалплана.
  2. Отладка переменными: Приложение NoOp() выводит значения из БД в консоль. Это основной способ понять, что именно пришло из SQL.
  3. Ручная проверка: В CLI можно протестировать функцию без совершения звонка: odbc read ODBC_GET_MANAGER 79001234567 exec

Практическое задание

Создайте в extensions_custom.conf логику для VIP-клиентов:

  1. Используйте ODBC_READ для получения статуса клиента.
  2. Если клиент VIP — проиграйте файл Playback(custom/vip-welcome) и направьте в очередь.
  3. Если обычный — сразу направьте в очередь.
  4. Проверьте отработку условий в консоли Asterisk.

Мы научили диалплан принимать решения на основе внешних данных. В следующей теме мы используем этот фундамент для построения сложных IVR-систем и очередей, где голосовое меню меняется динамически под каждого звонящего.

Понравился урок?

Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей

Продолжить в Telegram