# Common.Observability.Incident — Централизованный обработчик инцидентов

## Common.Observability.Incident

**Incident** — централизованный обработчик инцидентов в Metabot.
Предназначен для регистрации и уведомления о сбоях, ошибках и критических состояниях системы.

Класс **не содержит бизнес-логики** и не влияет на выполнение сценариев.
Он используется как реакция на события (например, из Tracer) или вызывается напрямую из сценариев.

---

### Назначение

Incident решает одну задачу:
**превратить техническое событие в уведомление для команды.**

Типичные случаи:

* сбой профилирования;
* ошибка отражения / навигации;
* неконсистентное состояние данных;
* критические ошибки AI / runtime.

---

### Уведомления

В текущей реализации Incident использует Telegram через плагин:

```
Common.Notifications.Telegram
```

Для работы требуются **два атрибута бота**:

* `SUPPORT_TELEGRAM_BOT_TOKEN` — токен Telegram-бота
* `SUPPORT_TELEGRAM_CHAT_ID` — ID группы или канала для уведомлений

Incident сам не хранит токены и не управляет доступами.

---

### Шаблоны сообщений

Тексты уведомлений настраиваются через атрибут бота
`INCIDENT_TEMPLATES` (JSON).

Пример:

```json
{
  "profiling_failed": {
    "ru": {
      "title": "🧭 ORION · Сбой профилирования",
      "body": [
        "Профиль не был корректно сформирован.",
        "",
        "Lead ID: {{lead_id}}",
        "{{error}}"
      ]
    }
  }
}
```

Поддерживаются:

* разные типы инцидентов;
* несколько языков;
* плейсхолдеры `{{variable}}`.

---

### Использование

Incident может вызываться:

* напрямую из сценариев;
* автоматически из `Common.Observability.Tracer` (при включённой конфигурации).

Это позволяет централизовать обработку ошибок **без дублирования кода уведомлений**.

---

**Incident — это точка ответственности за инциденты,
а не ещё один логгер или бизнес-модуль.**