Яндекс.Метрика

Курс Zabbix: мониторинг Asterisk и VoIP

Курс Zabbix: мониторинг Asterisk и VoIP с 8 сентября по 12 сентября

Количество
свободных мест

8 Записаться

Дистанционные курсы по Asterisk

Дистанционные курсы по Asterisk с 18 августа по 24 августа

Количество
свободных мест

2 Записаться

Курсы по Mikrotik MTCRE

Курсы по Mikrotik MTCRE с 8 декабря по 11 декабря

Количество
свободных мест

6 Записаться
Как сделать автодозвон в Asterisk
12
Доклад
Олег Штейнлихт
Как сделать автодозвон в Asterisk
скачать презентацию

Как сделать автодозвон в Asterisk

Автоматический дозвон — одна из часто востребованных задач при использовании Asterisk. Он применяется в самых разных сценариях: от обработки пропущенных вызовов и организации конференций до построения голосовых роботов, реализации функции «обратный звонок» и вызовов по щелчку. Каждый из этих сценариев требует от системы умения инициировать вызовы автоматически, без участия человека.

Примеры применения автоматического дозвона

  1. Обратные вызовы по пропущенным звонкам.
  2. Автоматический сбор конференций: система инициирует вызовы участникам в назначенное время.
  3. Голосовые роботы: подтверждение записи или заказа.
  4. Функция «обратный звонок»: система перезванивает пользователю и соединяет его с нужной стороной.
  5. Click-to-call: вызов инициируется системой по внешнему запросу.

Для реализации подобных сценариев Asterisk предоставляет четыре базовых механизма автоматического вызова

Вызов из CLI

Наиболее простой способ — использование команды originate из командной строки:

bash
originate SIP/100 extension 89101234567@outgoing

В этом примере вызов сначала поступает на внутренний номер SIP/100. После снятия трубки система инициирует звонок на внешний номер через указанный контекст.

Возможен и другой режим — вызов непосредственно в приложение:

bash
originate SIP/100 application MusicOnHold default

В данном случае после подъема трубки вызывающему абоненту будет проигрываться музыка из указанного класса.

Важно понимать, как инициируется канал: при выполнении команды originate сначала создается канал и отправляется SIP INVITE. После ответа вызывается вторая «нога» — либо extension, либо приложение.
Также возможно использование специального extension в диалплане для отладки ошибок — например, с доступом к переменной REASON, отражающей причину завершения звонка. Однако при параллельной отправке нескольких автоматических вызовов идентифицировать источник ошибки становится затруднительно, так как отсутствует контекст каждого вызова.

Вызов через AMI (Asterisk Manager Interface)

AMI позволяет более гибко управлять вызовами. Для этого:

  • Создаётся пользователь в manager.conf.
  • Назначается право originate.
  • Устанавливается соединение с AMI.
  • Отправляется команда Action: Originate.

Пример команды:

vbnet
Action: Originate
Channel: SIP/100
Exten: 89101234567
Context: outgoing
Priority: 1
CallerID: "Callback" <100>
Async: true
Variable: CUSTOM_VAR=some_value

Здесь async=true позволяет выполнять вызовы асинхронно, что критично при массовом обзвоне. Также AMI позволяет передавать переменные, которые потом доступны в диалплане, что даёт гибкость в обработке вызова.
Дополнительно рекомендуется указывать ActionID — уникальный идентификатор, позволяющий отслеживать события, относящиеся к конкретному вызову.

Вызов через Call Files

Call-файлы — это один из старейших, но по-прежнему актуальных способов организации автоматических вызовов. Суть заключается в создании файла с определённым форматом и сохранении его в папку, указанную в astserisk.conf (например, /var/spool/asterisk/outgoing).

Пример call-файла:

makefile

Channel: SIP/100
MaxRetries: 3
RetryTime: 60
WaitTime: 30
Context: outgoing
Extension: 89101234567
Priority: 1
Set: CUSTOM_VAR=some_value

Asterisk проверяет наличие новых файлов в директории outgoing каждую секунду. Для реализации отложенного вызова можно использовать команду touch -t и указать время модификации файла в будущем. Вызов будет инициирован в момент, когда текущее время превысит указанное в mtime.
Важно: если канал не поднят, попытка считается неудачной, но не засчитывается как использованная. Повторные попытки будут выполняться согласно параметрам RetryTime и MaxRetries.

Вызов из диалплана (экзотический способ)

В Asterisk существует встроенное приложение Originate, которое можно вызвать прямо из диалплана:

ini
exten => 100,1,Originate(SIP/101,exten,callback,200,1,a)

Подобный вызов может использоваться, например, в голосовом роботе, который по голосовой команде пользователя инициирует параллельный звонок, получает данные и возвращает ответ.

Внутреннее устройство

Все механизмы автоматического вызова используют общий программный интерфейс внутри Asterisk, реализованный в файле pbx.c. Функции с префиксами pbx_exec вызываются как из CLI, так и из AMI, call-файлов и диалплана. Это объясняет схожесть в поведении различных методов.

Безопасность

Если злоумышленник получает доступ к файловой системе сервера, он может массово генерировать call-файлы и инициировать огромное количество звонков — вплоть до тысяч в секунду. Это может привести к серьёзным финансовым потерям.

Для ограничения таких атак предлагается реализовать простой патч в коде pbx_spool.c, который анализирует направление первой ноги вызова. Если звонок уходит на международное направление (например, через 8-10), его можно прервать на этапе формирования:

if (strstr(chan->name, "SIP/") && strncmp(number, "810", 3) == 0)
    return -1;

Такой подход усложнит работу атакующему и даст системному администратору дополнительное время на обнаружение и устранение взлома.

Историческая справка

Первая реализация автоматического дозвона в Asterisk появилась ещё в версии 0.2 (1999 год). Уже тогда в коде manager.c и pbx.c присутствовали базовые функции для инициации вызова.

Архитектура системы автодозвона

Хотя перечисленные механизмы и позволяют выполнять автоматические вызовы, полноценная система автодозвона требует надстройки — логического уровня, который отвечает за:

  • Планирование и отслеживание звонков.
  • Повторные вызовы по гибкому алгоритму.
  • Интеграцию с API и внешними системами.
  • Учёт исключений и расписаний.
  • Проверку доступности операторов.

Для этого вводятся четыре ключевых сущности:

  1. Список задач (Job list): содержит номера, время, количество попыток, статус и результат.
  2. Планировщик (Scheduler): определяет, когда нужно инициировать вызовы.
  3. Скрипт дозвона: взаимодействует со списком, фильтрует и вызывает нужные контакты.
  4. Интерфейс управления задачами: позволяет включать, отключать, настраивать задачи.

Задачи могут быть разных типов: перезвоны, сбор конференций, подтверждения заказов и др. Каждый тип задачи использует одни и те же механизмы автодозвона, но с разной бизнес-логикой.

Заключение

Таким образом, Asterisk предоставляет мощные и гибкие средства для реализации автоматических звонков. Однако для построения надёжной и функциональной системы автодозвона необходим логический слой управления, обеспечивающий планирование, контроль и гибкую настройку. Такой подход позволяет создавать профессиональные решения для самых разных бизнес-задач — от уведомлений и подтверждений до интеграции с CRM и интеллектуальными голосовыми системами.

Ежегодная конференция по Asterisk 2025!

Билеты уже в продаже!

Остались вопросы?

Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

Наши
клиенты

Посмотреть все