Реализация IVR-систем и очередей вызовов
Мы переходим к одной из самых важных тем в построении корпоративной телефонии. Если до этого мы учились маршрутизировать вызовы по внутренним номерам и внешним базам данных, то сегодня мы создадим «лицо» компании — интерактивное голосовое меню и интеллектуальную систему распределения вызовов.
Анатомия IVR: логика под капотом
IVR (Interactive Voice Response) — это способ общения АТС с человеком через тональный набор (DTMF). Во FreePBX вы привыкли видеть IVR как отдельный модуль, но в «чистом» Asterisk это просто последовательность команд в диалплане.
Чтобы меню работало корректно, нужны три функции:
- Answer() — снимает трубку. Это критично: пока канал не «отвечен», многие операторы не передадут DTMF-сигналы от клиента в вашу систему.
- Background() — включает аудиозапись и одновременно слушает нажатия клавиш. В отличие от Playback(), эта функция не заставляет пользователя дослушивать фразу до конца.
- WaitExten() — ставит диалплан на паузу после записи, чтобы дать человеку время нажать кнопку.
Процесс обработки вызова показан на Схеме 1.
Пишем IVR вручную в extensions_custom.conf
Работа в конфигах напрямую избавляет от ограничений GUI. Разберем пример надежного меню. Обратите внимание на экстеншены i (invalid) и t (timeout) — без них звонок оборвется при первой же ошибке пользователя.
[custom-main-menu]
exten => s,1,Answer()
same => n,Background(custom/welcome-message) ; "Нажмите 1 для техподдержки..."
same => n,WaitExten(5) ; Ждем ввода 5 секунд
; Обработка выбора
exten => 1,1,Goto(sub-support,s,1)
exten => 2,1,Goto(sub-sales,s,1)
; Обработка ошибок
exten => i,1,Playback(custom/invalid-choice) ; Сообщаем о неверном вводе
same => n,Goto(s,1)
exten => t,1,Playback(custom/timeout-notice) ; Сообщаем об истечении времени
same => n,Goto(s,1)
🎙 Качество звука: В 2026 году используйте кодек Opus или формат SLN16 (16 кГц). Это обеспечит чистое звучание приветствия без «телефонного» дребезжания.
Очереди вызовов (Queue): управление потоком
Если IVR — это указатель, то Queue (очередь) — это диспетчерская. В отличие от групп вызова, очереди умеют удерживать клиентов, проигрывать музыку (MoH) и распределять нагрузку на операторов по алгоритмам.
Приложение Queue — блокирующее. Пока клиент в очереди, выполнение диалплана «замирает» на этой строке, пока оператор не ответит или не выйдет время.
Настройка параметров в queues.conf
Синтаксис вызова: Queue(queuename,[options],...). Основная логика задается параметрами:
- Strategy: Как выбирать оператора?
ringall— звонят все одновременно.leastrecent— вызов идет тому, кто дольше всех не разговаривал.random— случайный выбор.
- Joinempty: Пускать ли клиента в очередь, если все операторы оффлайн?
- Musicclass: Какую музыку крутить в ожидании.
Практикум: связываем IVR и Queue
Объединим компоненты: выбор в меню будет отправлять звонок в нужную очередь.
[ivr-with-queue]
exten => s,1,Answer()
same => n,Background(custom/select-dept)
same => n,WaitExten(5)
; Очередь техподдержки
exten => 1,1,Log(NOTICE, "User selected Support")
same => n,Queue(support_q,t) ; Опция 't' позволяет оператору перевести звонок
same => n,Hangup()
; Очередь продаж
exten => 2,1,Queue(sales_q,t)
same => n,Hangup()
💡 Совет эксперта: Всегда готовьте «план Б». Если за 60 секунд в очереди никто не ответил, пропишите в диалплане следующей строкой перевод на мобильный дежурного или голосовую почту.
IVR работает как фильтр, направляющий трафик в «бассейны» — очереди. Это экономит время сотрудников и нервы клиентов.
Теперь, когда мы научились строить логику и удерживать вызовы, пора сделать АТС еще умнее. Должно ли меню работать одинаково в полдень и в три часа ночи? В следующей теме мы внедрим маршрутизацию на основе времени и CallerID.
Понравился урок?
Сохраните прогресс и получите персональный курс по любой теме — без форм и паролей
Продолжить в Telegram