⚠️ Способ воспроизведения: Ломаем токен amoCRM в БД.
Перед тем как ломать — убедись, что действие «Создавать сделку» в ИИ-агенте полностью настроено (выбран этап, тоггл включён). С битым токеном этапы не подтягиваются.
1. Сохрани оригинал:
SELECT id, fields FROM company_integrations
WHERE id = '019e886e-a62c-73f0-8b40-a4cbba13b594';
2. Скачай результат через JSON/CSV — это бэкап для отката
3. Ломаем токен:
UPDATE company_integrations
SET fields = $val$"{"accessToken":"BROKEN_TOKEN_FOR_TESTING","refreshToken":"BROKEN_REFRESH","accessTokenExpireAt":1780491870,"domain":"ilyachatplaceio.amocrm.ru","chatplaceIdContactFieldId":null,"emailContactFieldId":null,"phoneContactFieldId":null,"usernameContactFieldId":null,"lastRefreshAt":1780405470}"$val$
WHERE id = '019e886e-a62c-73f0-8b40-a4cbba13b594';
4. Триггерим ошибку: в тест-чате ИИ-агента отправить «Хочу оставить заявку, мой телефон +79001234567, email test@test.com» — повторить 3–5 раз
5. Восстановить: UPDATE с оригинальным fields из шага 1. После отката проверить, что индикаторы погасли
BACK-1 DS-1100 — Детектор ошибок и инцидент-менеджер
Считает повторяющиеся ошибки по каждой интеграции, открывает/закрывает инцидент, стреляет событием integration.incident.opened
Единичная ошибка интеграции НЕ открывает инцидент
Повторяющиеся ошибки (X за Y минут) открывают инцидент
Инцидент закрывается, когда ошибки прекращаются
Антиспам: повторный инцидент по той же интеграции — не раньше чем через 24ч
Событие integration.incident.opened стреляет при открытии инцидента
BACK-2 DS-1101 — Рассыльщик (Telegram + Email) + API
По событию integration.incident.opened шлёт TG + email, отдаёт GET /integrations/incidents/active и per-action флаги
Telegram: приходит уведомление с названием сервиса (service_name)
Telegram: кнопка-ссылка ведёт на правильный сервис
Email RU: приходит письмо на русском, service_name подставлен во все слоты (subject, body, CTA)
Email EN: приходит письмо на английском (по локале юзера)
API: GET /integrations/incidents/active отдаёт список активных инцидентов
API: has_integration_error = true для действий с активным инцидентом
FRONT-1 DS-1102 — Модалка «Сервис {service_name} возвращает ошибки»
Показывает модалку при активном инциденте. White card 400px, radius 20, иконка Exclamation Round #FF3B30, кнопка #1E5CFB
Модалка появляется при логине / на ключевых страницах при активном инциденте
service_name подставлен в заголовок, body и CTA
CTA «Перейти в {service_name}» → открывает новую вкладку, правильный deep_link
Закрытие по ✕ → модалка не показывается повторно для этого incident_id
Стэкинг: модалка отключения аккаунта имеет приоритет (первая), потом наша
Несколько инцидентов → модалки наслаиваются корректно
Дизайн: white card 400px, radius 20, иконка Exclamation Round красный #FF3B30
Дизайн: кнопка CTA цвета #1E5CFB, текст и отступы по Figma
FRONT-2 DS-1103 — Индикаторы в разделе «Действия»
Красный кружок 🔴! в сайдбаре + на карточках проблемных действий. 16×16, #FF3B30, белый !
Сайдбар: индикатор на пункте «Действия» горит, если хотя бы одно действие с ошибкой
Карточка: индикатор inline после заголовка только на проблемных карточках
Индикаторы гаснут при закрытии инцидента без перезагрузки страницы
Дизайн: 16×16, #FF3B30, белый «!» — соответствует Figma
На карточках без ошибок индикатор НЕ отображается
⚠️ Результат первой попытки (02.06.2026)
Блокировка — ждём ответа Марата и Рустама
• Моки (localStorage) — фронт не поддерживает
• Реальный сценарий с битым токеном — детектор не сработал, модалки/TG/email не появились
• Агент в тест-чате зависает при попытке обратиться к amoCRM
• Статус: заблокировано, ждём ответа Марата и Рустама (комментарий в DS-1080)