# Контракты Событий (Event Schemas) Платформа контакт-центра использует событийно-ориентированную (Event-Driven) архитектуру поверх брокера сообщений **RabbitMQ** (с использованием паттерна Transactional Outbox). Все события (сообщения) следуют подходу "Contract-First" и описаны JSON-схемами. Исходники всех актуальных JSON-схем хранятся в директории `contracts/events/`. ## Список доменных событий (Domain Events) ### Жизненный цикл звоноков (Telephony & Media Events) Шлюз телефонии (Asterisk Bridge Service) инфраструктура генерирует события о состоянии вызовов в реальном времени. - `call.connected.json` — Выстреливает, когда звонок успешно сопряжен между абонентом и конечной точкой (оператором или ИИ-помощником). - `call.transferred.json` — Срабатывает при физическом переключении звонка (например, слепой трансфер от оператора к оператору, или Handoff от ИИ к живой очереди). - `call.recording.ready.json` — Ивент о том, что аудиозапись звонка завершена, обработана и скопирована в хранилище (управляется `recording-service`). - `ivr.completed.json` — Генерируется сервисом `ivr-service`, когда абонент завершил обход голосового меню (нажал необходимые DTMF цифры) и готов к маршрутизации. ### Жизненный цикл обращений (Interaction Events) Отвечают за высокоуровневую бизнес-логику тикетов и многоканальных чатов. В основном генерируются в `interaction-service`. - `interaction.created.json` — В систему поступило новое обращение (клиент позвонил, написал в Telegram/Webchat или Email). Содержит метаданные канала. - `interaction.assigned.json` — Обращение захвачено живым агентом (или назначено routing-движком). - `interaction.escalated.json` — Агент или ИИ эскалировал тикет на уровень выше (например, на вторую линию поддержки - L2, или пометил тикет как критичный). - `interaction.closed.json` — Диалог или звонок успешно завершен, подведены итоги работы. ### Состояния операторов (Agent State Events) - `agent.state.changed.json` — Транслирует изменения статуса сотрудника ("Готов", "Перерыв", "В разговоре"). Используется в `supervisor-service` для отрисовки Dashboard в реальном времени, а также потребляется `routing-service` для распределения звонков по свободным операторам. ## Структура Конверта (Event Envelope) Любое доменное сообщение оборачивается в стандартизированный JSON-конверт для успешного трансфера через шину `event-bus-service`: ```json { "event_id": "8f39b1a0-54f3-...", "event_type": "call.connected", "timestamp": "2026-04-06T12:00:00Z", "source_service": "asterisk-bridge-service", "payload": { // Внутреннее содержимое строго по одной из JSON-схем, описанных выше } } ```