БФЛ КонтентДокументация проекта
Разделы документации
Для разработчика

Ошибки и восстановление

Обновлено 16 сентября 2026БФЛ Контент
На этой странице
  1. Три разных способа продолжить
  2. Почему бот молчал 16 сентября
  3. Новый обработчик технических отказов
  4. Защита от дублей
  5. Точечный откат

Первый вопрос при сбое: успел ли внешний сервис выполнить запрос? От ответа зависит, можно ли продолжать без повторной генерации или отправки.

Три разных способа продолжить

СпособКогда применяетсяЧто сохраняется
/retry ID V [замечания]Подходящая последняя версия с известной ошибкой текста и нужным контекстомСоздаётся следующая версия; прежняя остаётся в истории
/resume ID VРазрешённая ошибка импорта, рендера или подготовки превьюПродолжается та же версия; новая платная генерация не разрешается автоматически
Служебное восстановление execution 339Только доказанный локальный сбой до внешнего запроса, с серверным доказательством и одноразовым захватомВосстановлена прежняя v1; эта процедура уже использована

Для первого собственного поста /retry может быть неприменим из-за отсутствия подходящего родителя правки. Следуйте конкретному сообщению бота. Служебный мост не является универсальной кнопкой Retry.

Почему бот молчал 16 сентября

Проверка роли и разбор /post прошли. Строка материала уже существовала. Затем выражение HTTP-узла «Допуск → OpenAI — написать текст» не разобралось в n8n 2.38.7: ExpressionExtensionError: invalid syntax. Дочерний workflow статуса остановился по той же причине до Telegram-запроса.

Исправлены 37 выражений. Все 53 актуальных выражения внутреннего сервиса проверены установленным движком n8n. Обычная проверка JavaScript не выявляла этот конфликт шаблона. Отказ доступа редактору не был причиной.

Ошибка статуса сначала была записана как notification_outcome_unknown. Для этого конкретного события журнал доказал отсутствие сетевого запроса. Такая проверка не даёт общего разрешения сбрасывать все состояния unknown.

Новый обработчик технических отказов

Дочерние выполнения связываются с участником в audit. Error Workflow передаёт сервису только код выполнения, workflow, имя узла и класс ошибки. Сервис определяет адресата, пытается уведомить инициатора и владельца и сохраняет отдельный результат доставки. Текст исключения, ключи и тела запросов пользователю не пересылаются.

При невозможности связать участника уведомление адресуется владельцу. Общий отказ Telegram, внутреннего сервиса или аварийная остановка процесса не гарантируют доставку сообщения. Новый запрос к модели автоматически не запускается.

Защита от дублей

СитуацияПоведение
Оба участника нажали публикациюОбщий атомарный переход состояния допускает одну отправку
Один адресат заблокировал ботаПодтверждённая доставка другому не повторяется и не отменяется
Ответ API не получен, исход неизвестенСлепой повтор блокируется до сверки
Старое сообщение или версияПроверяется актуальность и принадлежность доставленной копии
У редактора отозвали доступПовторная проверка active блокирует ещё не начатый внешний запрос

Конкурентные действия и аварийные случаи проверены изолированно. Реальная публикация редактором подтверждена отдельно. Границы проверки.

Точечный откат

План: python3 /opt/bfl-content/editor-post-fix/rollback-extension.py. Применение с --apply возвращает прежнее расширение и collaboration 1.0.0, сохраняя исправление выражений. Старый дамп БД поверх новых публикаций не восстанавливается. Применение отката в этом исправлении не выполнялось. Полный возврат исходных схем вернул бы синтаксическую ошибку.