Архитектура ARI и его отличия от AMI

Мы уже научились использовать AMI (Asterisk Manager Interface) для мониторинга событий и простых действий вроде Originate. Но когда нужно создать динамическую очередь или сложный IVR, возможностей AMI не хватает. Он проектировался для управления станцией в целом, а не конкретными медиа-потоками.

Для глубокого управления вызовами в реальном времени создали ARI (Asterisk REST Interface). Этот API превращает Asterisk из классической АТС в гибкий медиа-сервер, подчиняющийся внешнему приложению.

Как работает ARI

В ARI внешнее приложение полностью берет на себя логику обработки звонка. В традиционном подходе мы описываем маршруты в диалплане (extensions.conf). В ARI диалплан выполняет лишь одну задачу: передает канал в управление внешнему приложению через функцию Stasis.

Как только канал попадает в Stasis, Asterisk замирает. Он перестает выполнять встроенные команды и ждет инструкций от вашего приложения по HTTP, сообщая о каждом изменении состояния через WebSocket.

Взаимодействие компонентов системы представлено на Схеме 1.

Ключевые понятия и ресурсы

В отличие от AMI, который работает с командами, ARI оперирует ресурсами. Вы манипулируете объектами через REST-запросы.

  1. Каналы (Channels): Базовый юнит связи (например, звонок PJSIP). Через ARI вы можете ответить на звонок, проиграть аудиофайл или перенаправить поток.
  2. Мосты (Bridges): Виртуальные площадки для смешивания медиа-потоков. Управление мостами — ключевое преимущество ARI. Вы можете создать мост, объединить в нем два канала, добавить третьего участника для конференции или включить запись, не разрывая соединение.
  3. Конечные точки (Endpoints): Объекты технологий связи (PJSIP, IAX2). Через них ARI получает данные о состоянии устройств.
  4. Устройства (Devices): Статусы физических или софтовых телефонов (занят, свободен, не в сети).

Сравнение AMI и ARI

Чтобы выбрать подходящий инструмент, изучите Сравнение 1.

ХарактеристикаAMI (Asterisk Manager Interface)ARI (Asterisk REST Interface)
ЦельМониторинг АТС, управление системой.Создание приложений, управление медиа.
СтильКомандный (Action/Response).Ресурсный (REST/CRUD).
Работа с вызовомКосвенная (Redirect, Hangup).Прямая (манипуляция каналами и мостами).
СобытияПоток данных о всей системе.Только события по выбранным ресурсам.
ПротоколTCP (текстовые строки).HTTP (REST) + WebSocket (JSON).

Механизм работы: REST и WebSocket

Работа с ARI строится на двух технологиях:

  • REST API: Для отправки команд. Чтобы создать мост, вы отправляете POST /bridges. Чтобы завершить вызов — DELETE /channels/{id}. Это синхронные запросы с мгновенным подтверждением.
  • WebSocket: Для получения асинхронных событий. Asterisk сообщает приложению в реальном времени: «Абонент нажал клавишу» или «Связь разорвана». Данные приходят в виде JSON-пакетов.

Пример JSON-события при нажатии кнопки (DTMF) в канале:

{
  "type": "ChannelDtmfReceived",
  "timestamp": "2026-05-20T14:30:05.123+0300",
  "digit": "5",
  "duration_ms": 160,
  "channel": {
    "id": "1621510205.12",
    "name": "PJSIP/101-0000000a",
    "state": "Up"
  },
  "application": "my-ivr-app"
}

Подготовка к работе

Настройки доступа к ARI хранятся в файле ari.conf.

Проверьте конфигурацию на вашем сервере. Откройте /etc/asterisk/ari.conf и убедитесь, что создан пользователь.

Пример рабочей настройки:

[general]
enabled = yes
pretty = yes

[admin]
password = your_strong_password
read_only = no

Примените изменения командой ari reload в консоли Asterisk.

Мы разобрали архитектуру ресурсов, мостов и событий. В следующей теме перейдем к практике: напишем приложение, которое перехватывает звонок и управляет им «на лету».

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

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

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