Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

ARI_WEBSOCKET_DISCONNECTED IP-Телефония и СКУД

Управление вызовами через Asterisk REST Interface (ARI): настройка Stasis и WebSockets

Обновлено: 24.08.2026 · Официальная документация ↗
  • Ошибка 401 Unauthorized / 403 Forbidden при отправке REST-запросов к /ari/channels.
  • WebSocket соединение для получения событий Stasis внезапно разрывается.
  • Вызовы зависают в бесконечном ожидании в приложении Stasis(my_app) без реакции бэкенда.
  • Утечки каналов и медиа-мостов (Bridges) при некорректном завершении сессии.

1. Конфигурация доступа к ARI в ari.conf

Файл /etc/asterisk/ari.conf:

[general]
enabled=yes
pretty=yes
allowed_origins=*

; Пользователь для внешнего бэкенд-сервиса
[ari_user]
type=user
read_only=no
password=SuperSecureAriPassword123
password_format=plain

2. Активация HTTP/WebSocket сервера в http.conf

Убедитесь, что в /etc/asterisk/http.conf включен сервер:

[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088

3. Маршрутизация вызова в приложение Stasis (extensions.conf)

[from-internal]
exten => 8000,1,NoOp(Send call to Custom ARI Application)
 same => n,Answer()
 same => n,Stasis(smart_queue_app)
 same => n,Hangup()

4. Пример взаимодействия на Node.js (WebSocket Client)

const WebSocket = require('ws');
const axios = require('axios');

const ARI_URL = 'http://127.0.0.1:8088/ari';
const AUTH = { username: 'ari_user', password: 'SuperSecureAriPassword123' };

const ws = new WebSocket(`ws://127.0.0.1:8088/ari/events?api_key=ari_user:SuperSecureAriPassword123&app=smart_queue_app`);

ws.on('message', async (data) => {
    const event = JSON.parse(data);
    console.log('Received ARI Event:', event.type);

    if (event.type === 'StasisStart') {
        const channelId = event.channel.id;
        // Воспроизведение звука звонящему
        await axios.post(`${ARI_URL}/channels/${channelId}/play?media=sound:hello-world`, {}, { auth: AUTH });
    }
});

5. Проверка состояния ARI в CLI

asterisk -rx "ari show status"
asterisk -rx "ari show apps"
💡 Практика специалистов: Никогда не используйте ARI для стандартных офисных АТС (где достаточно базового диалплана и очередей). ARI предназначен для кастомных платформ контакт-центров, систем предиктивного автодозвона и облачных коммуникационных платформ (CPaaS).

Частые вопросы (FAQ)

В чем принципиальная разница между AMI, AGI и ARI?

AMI — протокол асинхронного мониторинга и отправки управляющих команд. AGI — синхронный запуск внешних скриптов на определенных шагах диалплана. ARI (Asterisk REST Interface) — полнофункциональный низкоуровневый веб-фреймворк для полного создания логики управления звонками, каналами и медиамостами из внешнего кода.

Что происходит с вызовом при входе в Stasis()?

Asterisk передает полный контроль над каналом внешнему приложению по ARI, замораживая дальнейшее выполнение диалплана. Если внешний WebSocket-сервис упадет, канал останется в подвешенном состоянии до истечения таймаута.

Как объединить двух абонентов в разговор через ARI?

Создайте мост командой POST /bridges (type=mixing), создайте исходящий канал POST /channels/create, а затем добавьте оба канала (ID входящего и ID исходящего) в созданный мост через POST /bridges/{id}/addChannel.

Как обеспечить отказоустойчивость ARI бэкенда?

Используйте менеджеры процессов (PM2 / systemd) с автоперезапуском, отслеживайте события StasisEnd для гарантированного удаления висячих каналов и мостов, а также настраивайте аварийный выход из Stasis в диалплане.

Полезные материалы
Рекомендуем