Архитектура 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-запросы.
- Каналы (Channels): Базовый юнит связи (например, звонок PJSIP). Через ARI вы можете ответить на звонок, проиграть аудиофайл или перенаправить поток.
- Мосты (Bridges): Виртуальные площадки для смешивания медиа-потоков. Управление мостами — ключевое преимущество ARI. Вы можете создать мост, объединить в нем два канала, добавить третьего участника для конференции или включить запись, не разрывая соединение.
- Конечные точки (Endpoints): Объекты технологий связи (PJSIP, IAX2). Через них ARI получает данные о состоянии устройств.
- Устройства (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