# Контракты Событий (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-схем, описанных выше
  }
}
```
