Ошибки и восстановление
На этой странице
Первый вопрос при сбое: успел ли внешний сервис выполнить запрос? От ответа зависит, можно ли продолжать без повторной генерации или отправки.
Три разных способа продолжить
| Способ | Когда применяется | Что сохраняется |
|---|---|---|
/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, сохраняя исправление выражений. Старый дамп БД поверх новых публикаций не восстанавливается. Применение отката в этом исправлении не выполнялось. Полный возврат исходных схем вернул бы синтаксическую ошибку.