Архитектура AMI, команды и события

Мы уже научились защищать сервер с помощью TLS и SRTP. Теперь перейдем от безопасности к управлению. Раньше вы работали с системой через GUI FreePBX или консоль (CLI). Но чтобы связать Asterisk с внешним миром — CRM-системой, панелью мониторинга или веб-интерфейсом — нужен специальный «мостик». Для этого создали AMI (Asterisk Manager Interface).

AMI — это программный интерфейс управления. Если CLI удобен для человека, то AMI — это язык для программ. Он позволяет внешним приложениям подключаться к серверу по TCP, отдавать команды и мгновенно узнавать о событиях в системе.

Как устроен AMI

В основе AMI лежит событийная модель. Интерфейс не просто отвечает на ваши запросы, а постоянно транслирует всё, что происходит внутри Asterisk.

Взаимодействие строится на трех типах сообщений:

  1. Action (Действие) — ваш запрос к серверу (например, «позвони на этот номер»).
  2. Response (Ответ) — мгновенное подтверждение («принято» или «ошибка в синтаксисе»).
  3. Event (Событие) — уведомление о смене состояния («абонент поднял трубку», «канал закрыт»).

Важно не путать Response и Event. Когда вы просите Asterisk инициировать вызов, Response придет сразу. А вот события о том, что телефон зазвонил или разговор начался, поступят позже, по мере их возникновения. Логика этого процесса показана на Схеме 1.

Настройка доступа в manager.conf

Чтобы подключиться к интерфейсу, нужно создать учетную запись Manager User. Все права прописываются в файле /etc/asterisk/manager.conf.

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

[admin_crm]
secret = v3ry_str0ng_p4ssw0rd
deny = 0.0.0.0/0.0.0.0
permit = 192.168.1.50/255.255.255.255 ; Доступ только для IP вашей CRM
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,config,originate,reporting

🛡️ Принцип минимальных привилегий Никогда не используйте permit = 0.0.0.0/0. Даже если сервер за файрволом, ограничивайте доступ на уровне конфига Asterisk. Открытый AMI — это прямой доступ к управлению вашими звонками.

Команды AMI (Actions)

Обмен данными идет в текстовом формате. Каждое сообщение состоит из заголовков Key: Value и обязательно заканчивается двумя пустыми строками.

Основные команды AMI для работы:

  • PJSIPShowEndpoints: современная замена SIPpeers. Показывает список всех эндпоинтов и их статусы.
  • Originate: «тяжелая артиллерия». Создает новый канал и соединяет его с номером или контекстом. Так работает функция Click-to-Call.

Пример команды для звонка:

Action: Originate
Channel: PJSIP/101
Exten: 89001234567
Context: from-internal
Priority: 1
CallerID: "Manager" <101>

События AMI (Events)

После авторизации вы увидите поток данных — это и есть события AMI. Для администратора важнее всего:

  • Newchannel: кто-то поднял трубку или пришел входящий вызов.
  • Hangup: разговор завершен, канал закрыт.
  • FullyBooted: Asterisk загрузил модули и готов к работе.

Анализ событий точнее, чем чтение CDR, так как вы видите жизнь звонка в динамике, а не только итоговую запись. 📡

Проверка через Telnet

Проверить доступ можно вручную через стандартный порт 5038. Это быстрее, чем писать код на Python или PHP.

  1. Подключитесь: telnet localhost 5038.
  2. Авторизуйтесь (обязательно нажмите Enter дважды в конце):
Action: Login
Username: admin_crm
Events: on
Secret: v3ry_str0ng_p4ssw0rd

  1. Ответ Response: Success означает, что вы внутри.

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

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

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

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