- Создайте
config.jsonиз примера. - Проверьте доступ сервера к
ats.url. - Убедитесь, что
heartbeat_ip:heartbeat_portдоступен со стороны АТС. - Убедитесь, что
external_domain_or_ip:external_portдоступен со стороны CRM. - Создайте постоянный каталог
records/и проверьте свободное место.
docker compose up -d --build
docker compose ps
docker compose logs --tail=100
curl -fsS http://127.0.0.1:9001/healthНормальный health-response содержит status: ok и ats_connected: true после
успешного входа в API.
Количество, объём и последние файлы:
find records -maxdepth 1 -type f -name '*.wav' | wc -l
du -sh records
find records -maxdepth 1 -type f -name '*.wav' -printf '%TY-%Tm-%Td %TH:%TM %s %f\n' | sort | tailПроверка выдачи без загрузки аудиосодержимого:
curl -I http://127.0.0.1:9001/download/example.wavОжидаются HTTP 200, аудио Content-Type и ненулевой Content-Length.
Внешний record_link должен вести на ATS Proxy, а не на веб-интерфейс АТС.
Пример маршрута:
CRM -> public.example:9001 -> proxy-host:9001 -> container:9001
Доступ лучше разрешать только известным адресам CRM. Пример RouterOS с условными значениями:
/ip firewall address-list
add list=crm-recordings address=203.0.113.10 comment="CRM 1"
add list=crm-recordings address=203.0.113.11 comment="CRM 2"
/ip firewall nat
add chain=dstnat action=dst-nat protocol=tcp dst-port=9001 \
in-interface-list=WAN src-address-list=crm-recordings \
to-addresses=192.0.2.20 to-ports=9001 comment="ATS Proxy recordings"
Не публикуйте config.json, административный интерфейс АТС или /calls для
всего интернета.
docker compose logs --since=1h | grep -Ei 'webhook|cdr|recording|crm|error|failed'На уровне INFO логируются этапы обработки без секретов. Полные входящие
события включаются logging.show_full_events, но чувствительные поля всё равно
маскируются. Не публикуйте production-логи без проверки: номера телефонов и имена
файлов могут являться персональными данными.
Push в GitHub не обновляет production автоматически.
- Сохраните
config.jsonи каталогrecords/. - Зафиксируйте текущий image/tag и compose-конфигурацию для отката.
- Соберите новый image отдельно.
- Выполните тесты и локальный health-check.
- Перезапустите сервис в согласованное окно.
- Проверьте один новый звонок от события до воспроизведения записи.
Если текущая версия исправно принимает новые звонки и записи, обновление следует проводить как плановое улучшение, а не как аварийное исправление.