Skip to content

Latest commit

 

History

History
90 lines (65 loc) · 3.71 KB

File metadata and controls

90 lines (65 loc) · 3.71 KB

Эксплуатация

Перед запуском

  1. Создайте config.json из примера.
  2. Проверьте доступ сервера к ats.url.
  3. Убедитесь, что heartbeat_ip:heartbeat_port доступен со стороны АТС.
  4. Убедитесь, что external_domain_or_ip:external_port доступен со стороны CRM.
  5. Создайте постоянный каталог records/ и проверьте свободное место.

Запуск Docker

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.

Публикация за NAT

Внешний 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 автоматически.

  1. Сохраните config.json и каталог records/.
  2. Зафиксируйте текущий image/tag и compose-конфигурацию для отката.
  3. Соберите новый image отдельно.
  4. Выполните тесты и локальный health-check.
  5. Перезапустите сервис в согласованное окно.
  6. Проверьте один новый звонок от события до воспроизведения записи.

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