name: sales-call-center x-app-env: &app_env CC_DATA_DIR: /app/.data_local DATABASE_URL: postgresql+psycopg://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB} SCHEMA_MANAGEMENT_MODE: migrations AUTH_SERVICE_URL: http://auth-service:8000 AUDIT_SERVICE_URL: http://audit-service:8000 CUSTOMER_SERVICE_URL: http://customer-service:8000 INTERACTION_SERVICE_URL: http://interaction-service:8000 ROUTING_SERVICE_URL: http://routing-service:8000 VOICE_ADAPTER_SERVICE_URL: http://voice-adapter-service:8000 RECORDING_SERVICE_URL: http://recording-service:8000 IVR_SERVICE_URL: http://ivr-service:8000 EVENT_BUS_SERVICE_URL: http://event-bus-service:8000 ASTERISK_BRIDGE_SERVICE_URL: http://asterisk-bridge-service:8000 TELEGRAM_ADAPTER_SERVICE_URL: http://telegram-adapter-service:8000 WHATSAPP_ADAPTER_SERVICE_URL: http://whatsapp-adapter-service:8000 AI_ORCHESTRATOR_SERVICE_URL: http://ai-orchestrator-service:8000 AI_VOICE_RUNTIME_SERVICE_URL: http://ai-voice-runtime-service:8000 WEBCHAT_ADAPTER_SERVICE_URL: http://webchat-adapter-service:8000 EMAIL_ADAPTER_SERVICE_URL: http://email-adapter-service:8000 KB_SERVICE_URL: http://kb-service:8000 REPORTING_SERVICE_URL: http://reporting-service:8000 SUPERVISOR_SERVICE_URL: http://supervisor-service:8000 SALES_SERVICE_URL: http://sales-service:8000 LOCAL_STACK_PUBLIC_BASE_URL: https://sales.konturai.kz ASTERISK_WEBRTC_WS_URL: wss://sales.konturai.kz/asterisk-ws ASTERISK_BRIDGE_ENABLED: "0" ASTERISK_CALLCONTROL_ENABLED: "0" ASTERISK_IVR_FASTAGI_ENABLED: "0" ASTERISK_WEBRTC_ENABLED: "0" TELEGRAM_BOT_ENABLED: "0" AI_TELEGRAM_ENABLED: "0" WHATSAPP_OUTBOUND_ENABLED: "0" AI_WHATSAPP_ENABLED: "0" SALES_TELEGRAM_BRIDGE_ENABLED: "0" SALES_VOICE_RUNTIME_ENABLED: "0" AI_VOICE_ENABLED: "0" AI_VOICE_AUDIOSOCKET_ENABLED: "0" ERROR_TELEGRAM_ALERTS: "0" EVENT_BUS_ENABLED: "0" EVENT_BUS_CONSUMER_ENABLED: "0" AI_VOICE_ASR_PROVIDER: ${AI_VOICE_ASR_PROVIDER:-elevenlabs} AI_VOICE_TTS_PROVIDER: ${AI_VOICE_TTS_PROVIDER:-elevenlabs} AI_VOICE_V2_STREAMING_ASR_BACKEND: ${AI_VOICE_V2_STREAMING_ASR_BACKEND:-elevenlabs_realtime} AI_VOICE_V2_STREAMING_ASR_BASE_URL: http://streaming-asr-sidecar:8021 AI_VOICE_V2_STREAMING_ASR_TIMEOUT_SECONDS: "4" AI_VOICE_V2_STREAMING_ASR_PARTIAL_POLL_ENABLED: "1" x-service-defaults: &service_defaults image: ${CALL_CENTER_IMAGE:-call-center-app:active-sales} restart: unless-stopped env_file: - ./.env.production environment: <<: *app_env volumes: - ./.data_local:/app/.data_local extra_hosts: - host.docker.internal:host-gateway healthcheck: test: - CMD - python - -c - | from urllib.request import urlopen import sys sys.exit(0 if urlopen("http://127.0.0.1:8000/health", timeout=2).getcode() == 200 else 1) interval: 15s timeout: 5s retries: 10 start_period: 10s services: postgres: image: postgres:16-alpine container_name: sales-call-center-postgres restart: unless-stopped env_file: - ./.env volumes: - ./.data_pg:/var/lib/postgresql/data healthcheck: test: - CMD-SHELL - pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB" interval: 10s timeout: 5s retries: 12 start_period: 15s migrate: <<: *service_defaults restart: "no" depends_on: postgres: condition: service_healthy command: ["python", "scripts/migrate_core_db.py"] healthcheck: disable: true auth-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.auth_service.app:app audit-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.audit_service.app:app customer-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.customer_service.app:app interaction-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.interaction_service.app:app routing-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.routing_service.app:app voice-adapter-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.voice_adapter_service.app:app recording-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.recording_service.app:app CC_RECORDINGS_DIR: /app/.data_local/recordings RECORDING_MAX_BYTES: 26214400 ivr-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.ivr_service.app:app telegram-adapter-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.telegram_adapter_service.app:app whatsapp-adapter-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.whatsapp_adapter_service.app:app ai-orchestrator-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.ai_orchestrator_service.app:app streaming-asr-sidecar: <<: *service_defaults depends_on: postgres: condition: service_healthy command: ["sh", "-c", "uvicorn $${APP_MODULE} --host 0.0.0.0 --port 8021"] environment: <<: *app_env APP_MODULE: services.streaming_asr_sidecar_service.app:app AI_VOICE_V2_STREAMING_ASR_MODEL: base AI_VOICE_V2_STREAMING_ASR_COMPUTE_TYPE: int8 AI_VOICE_V2_STREAMING_ASR_DEVICE: cpu AI_VOICE_V2_STREAMING_ASR_CACHE_DIR: /models/faster_whisper AI_VOICE_V2_STREAMING_ASR_SUPPORTED_LANGUAGES: ru volumes: - ./.data_local:/app/.data_local - ./.models/faster_whisper:/models/faster_whisper healthcheck: test: - CMD - python - -c - | from urllib.request import urlopen import sys sys.exit(0 if urlopen("http://127.0.0.1:8021/health", timeout=2).getcode() == 200 else 1) interval: 15s timeout: 5s retries: 10 start_period: 10s ai-voice-runtime-service: <<: *service_defaults depends_on: postgres: condition: service_healthy streaming-asr-sidecar: condition: service_healthy environment: <<: *app_env APP_MODULE: services.ai_voice_runtime_service.app:app AI_VOICE_ENABLED: "1" AI_VOICE_AUDIOSOCKET_ENABLED: "1" SALES_VOICE_RUNTIME_ENABLED: "1" ports: - "9021:9019" webchat-adapter-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.webchat_adapter_service.app:app email-adapter-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.email_adapter_service.app:app kb-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.kb_service.app:app reporting-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.reporting_service.app:app supervisor-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.supervisor_service.app:app sales-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.sales_service.app:app SALES_TELEGRAM_BRIDGE_ENABLED: "0" SALES_VOICE_RUNTIME_ENABLED: "1" event-bus-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.event_bus_service.app:app asterisk-bridge-service: <<: *service_defaults depends_on: postgres: condition: service_healthy environment: <<: *app_env APP_MODULE: services.asterisk_bridge_service.app:app ASTERISK_IVR_FASTAGI_HOST: 0.0.0.0 ASTERISK_IVR_FASTAGI_PORT: 4573 ASTERISK_BRIDGE_ENABLED: "1" AI_VOICE_ENABLED: "1" ASTERISK_BRIDGE_FAILED_RETRY_ENABLED: "0" api-gateway: <<: *service_defaults container_name: sales-call-center-app depends_on: auth-service: condition: service_healthy audit-service: condition: service_healthy customer-service: condition: service_healthy interaction-service: condition: service_healthy routing-service: condition: service_healthy voice-adapter-service: condition: service_healthy recording-service: condition: service_healthy ivr-service: condition: service_healthy telegram-adapter-service: condition: service_healthy whatsapp-adapter-service: condition: service_healthy ai-orchestrator-service: condition: service_healthy ai-voice-runtime-service: condition: service_healthy webchat-adapter-service: condition: service_healthy email-adapter-service: condition: service_healthy kb-service: condition: service_healthy reporting-service: condition: service_healthy supervisor-service: condition: service_healthy sales-service: condition: service_healthy event-bus-service: condition: service_healthy asterisk-bridge-service: condition: service_healthy environment: <<: *app_env APP_MODULE: gateway.app:app frontend: image: ${CALL_CENTER_FRONTEND_IMAGE:-omnichannel-contact-center:active-sales} container_name: sales-call-center-frontend restart: unless-stopped depends_on: api-gateway: condition: service_healthy ports: - "127.0.0.1:3081:80" volumes: - ./frontend.nginx.conf:/etc/nginx/conf.d/default.conf:ro networks: - default - common_network networks: default: name: sales-call-center_default common_network: external: true