Обзор

Эта инструкция разворачивает Asterisk 23.4.1 из официального исходного кода в Docker. Такая сборка содержит chan_websocket, res_websocket_client и параметр transport_data, которые Агентика использует для двусторонней передачи аудио и аутентификации медиапотока. Контейнер работает в host network. Это убирает дополнительный NAT для SIP и RTP: Asterisk напрямую слушает порты сервера, а RTP использует исходный адрес сервера.
Не используйте Asterisk 20.6 из Ubuntu 24.04. В этой версии нет необходимых WebSocket-модулей.

Предварительные требования

Перед началом подготовьте:
  • сервер Ubuntu 24.04 с root или sudo;
  • публичное DNS-имя сервера Asterisk;
  • SIP-транк или PJSIP endpoint;
  • пароль для ARI-пользователя;
  • URL вашей Агентики.
Разрешите в сетевом экране: Ограничьте TCP 8088 известными адресами Агентики или приватной сетью. Не публикуйте ARI в интернет без сетевого ограничения и сильного пароля.

Удалите пакетный Asterisk

Если Asterisk ещё не установлен, пропустите этот раздел. Сначала убедитесь, что активных звонков нет:
Сохраните конфигурацию и рабочие данные:
Остановите службу и удалите пакетную установку:

Установите Docker

Проверьте установку:

Создайте каталог развертывания

Dockerfile

Создайте /opt/asterisk-docker/Dockerfile:
Сборка завершается ошибкой, если один из обязательных WebSocket-модулей не был создан.

Compose

Создайте /opt/asterisk-docker/compose.yaml:
NET_ADMIN нужен Asterisk, чтобы сохранить требуемую capability после перехода с root на пользователя asterisk.

Соберите образ и подготовьте тома

Скопируйте исходные конфигурационные и служебные файлы из образа в bind mounts:
Второй шаг обязателен: Asterisk 23 читает XML-документацию из /var/lib/asterisk. Пустой bind mount перекроет файлы внутри образа, и запуск завершится ошибкой Stasis initialization failed.

Настройте Asterisk

Все конфигурационные файлы находятся в /opt/asterisk-docker/config.

ARI

Замените содержимое config/ari.conf:
Имя секции agentika и пароль потребуются при создании конфигурации телефонии в Агентике.

HTTP-сервер

Замените содержимое config/http.conf:

Media WebSocket

Для Агентики Cloud замените содержимое config/websocket_client.conf:
Для self-hosted установки замените uri адресом вашего API:
Если Asterisk и Агентика находятся в одной доверенной сети без TLS, используйте ws:// и tls_enabled = no. Создайте config/chan_websocket.conf:
Имя секции agentika в websocket_client.conf — это WebSocket Client Name в настройках телефонии Агентики.

SIP и RTP

Добавьте UDP-транспорт в config/pjsip.conf:
Настройте endpoint, authentication и registration по данным вашего SIP-оператора. На endpoint и транке разрешите G.711 μ-law:
Проверьте диапазон в config/rtp.conf:

Входящий dialplan

Добавьте в config/extensions.conf контекст, из которого оператор направляет входящие звонки:
Имя в Stasis(agentika) должно совпадать с секцией ARI-пользователя.

Запустите Asterisk

Статус контейнера должен измениться на healthy. Проверьте версию и обязательные модули:
Оба модуля должны иметь статус Running. Проверьте ARI, SIP и активные каналы:

Подключите Агентику

  1. Откройте Telephony configurations и нажмите Add configuration.
  2. Выберите Asterisk ARI.
  3. Заполните поля:
  1. Сохраните конфигурацию.
  2. Добавьте входящее расширение как номер телефона и назначьте ему workflow.
  3. Выполните исходящий и входящий тестовые звонки.
Для входящего звонка dialplan Asterisk должен направить набранное расширение в Stasis(agentika), а это же расширение должно существовать среди номеров телефонии Агентики.

Управление контейнером

После изменения конфигурации примените её без пересборки образа:
Для диагностики откройте CLI:

Обновление Asterisk

Измените ASTERISK_VERSION одновременно в Dockerfile и compose.yaml, затем пересоберите образ:
Перед обновлением сохраните каталоги config, data и spool. Не удаляйте старый образ, пока не завершили тестовые звонки.

Устранение неполадок

Выполните docker compose logs --tail=200. Для ошибки Stasis initialization failed повторно скопируйте /var/lib/asterisk из образа в каталог data и восстановите владельца командой chown -R 1000:1000 data.
Проверьте docker exec asterisk asterisk -rx "http show status", порт 8088, enabled = yes в http.conf и сетевые правила между Агентикой и Asterisk.
Проверьте websocket_client.conf, совпадение WebSocket Client Name и статус res_websocket_client. Для wss:// нужны tls_enabled = yes и доверенный CA.
Проверьте статус chan_websocket, разрешение ulaw на SIP endpoint и транке, а также доступность UDP 10000–20000.
Проверьте, что dialplan вызывает Stasis(agentika), набранное расширение добавлено как номер телефона в Агентике и этому номеру назначен входящий workflow.

Дополнительные материалы