Обзор
Эта инструкция разворачивает Asterisk 23.4.1 из официального исходного кода в Docker. Такая сборка содержитchan_websocket, res_websocket_client и
параметр transport_data, которые Агентика использует для двусторонней передачи
аудио и аутентификации медиапотока.
Контейнер работает в host network. Это убирает дополнительный NAT для SIP и RTP:
Asterisk напрямую слушает порты сервера, а RTP использует исходный адрес сервера.
Предварительные требования
Перед началом подготовьте:- сервер Ubuntu 24.04 с
rootилиsudo; - публичное DNS-имя сервера Asterisk;
- SIP-транк или PJSIP endpoint;
- пароль для ARI-пользователя;
- URL вашей Агентики.
Ограничьте TCP 8088 известными адресами Агентики или приватной сетью. Не
публикуйте ARI в интернет без сетевого ограничения и сильного пароля.
Удалите пакетный Asterisk
Если Asterisk ещё не установлен, пропустите этот раздел. Сначала убедитесь, что активных звонков нет:Установите Docker
Создайте каталог развертывания
Dockerfile
Создайте/opt/asterisk-docker/Dockerfile:
Compose
Создайте/opt/asterisk-docker/compose.yaml:
NET_ADMIN нужен Asterisk, чтобы сохранить требуемую capability после перехода
с root на пользователя asterisk.
Соберите образ и подготовьте тома
Второй шаг обязателен: 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:
uri адресом вашего API:
ws:// и tls_enabled = no.
Создайте config/chan_websocket.conf:
agentika в websocket_client.conf — это WebSocket Client Name
в настройках телефонии Агентики.
SIP и RTP
Добавьте UDP-транспорт вconfig/pjsip.conf:
config/rtp.conf:
Входящий dialplan
Добавьте вconfig/extensions.conf контекст, из которого оператор направляет
входящие звонки:
Stasis(agentika) должно совпадать с секцией ARI-пользователя.
Запустите Asterisk
healthy.
Проверьте версию и обязательные модули:
Running.
Проверьте ARI, SIP и активные каналы:
Подключите Агентику
- Откройте Telephony configurations и нажмите Add configuration.
- Выберите Asterisk ARI.
- Заполните поля:
- Сохраните конфигурацию.
- Добавьте входящее расширение как номер телефона и назначьте ему workflow.
- Выполните исходящий и входящий тестовые звонки.
Stasis(agentika), а это же расширение должно существовать среди номеров
телефонии Агентики.
Управление контейнером
Обновление 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.ARI недоступен
ARI недоступен
Проверьте
docker exec asterisk asterisk -rx "http show status", порт 8088,
enabled = yes в http.conf и сетевые правила между Агентикой и Asterisk.Media WebSocket не подключается
Media WebSocket не подключается
Проверьте
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.