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

Подтверждённый путь: от ошибки до публикации

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

Задача выполнена. Реальный запрос редактора восстановлен в существующую версию d720000003 / v1; превью доставлено обоим. Пока выполнялась итоговая проверка, редактор сам нажал «Опубликовать»: Telegram webhook подтверждает успешную публикацию. Оператор не нажимал кнопки и не имитировал callback.

Последовательность по Москве

Время / выполнениеЧто подтверждено
14:33:25 · 339Настоящая команда редактора; допуск пройден, v1 создана, локальная ошибка до платного запроса
340Статус не отправлен: выражение упало до Telegram HTTP
15:20:08 · 348 → 349Операторское продолжение той же v1 по доказанному исходному событию
15:20:10.547 · сообщение 62Инициатор получил подтверждённый статус до запроса к модели
349 и 350–355Один текст, одна иллюстрация, два одинаковых превью: сообщения 63 и 64
15:22:26 · 356Редактор сам нажал публикацию; Telegram подтвердил одно сообщение в канале
357–358Итоговые уведомления и снятие старых кнопок

Это восстановление ранее отправленной команды, а не отдельный новый /post после исправления. Идентификаторы материала и пользователя в примерах обезличены. Результаты и границы проверок.

Причина

Исходное событие 720000003, message 59, execution 339: 14:33:25 МСК / 11:33:25 UTC. VPS и PostgreSQL используют UTC. Права редактора и /post прошли проверку, создана строка версии 49.

В HTTP-выражениях внутреннего сервиса соседние закрывающие фигурные скобки конфликтовали с разбором шаблона n8n 2.38.7. Узел «Допуск → OpenAI — написать текст» завершился ExpressionExtensionError: invalid syntax. Перед этим дочерний статус 340 получил такую же локальную ошибку; обработчик ошибочно записал notification_outcome_unknown. Telegram-запроса статуса не было. Платные запросы не начинались. Ограничение только на владельца не было причиной.

Исправлены 37 выражений; проверены все 53 актуальных HTTP-выражения внутреннего сервиса установленным движком n8n, с сопоставлением результата обычному JavaScript. Добавлены привязка дочернего execution к участнику и Error Workflow с безопасным уведомлением/кодом выполнения. Техническая ошибка не запускает автоматическую повторную генерацию.

Основной workflow опубликован как 78e2d42b-ab57-4ed2-b22f-c6e54ecd62a3. Сохранённые nodes/connections/settings и опубликованные nodes/connections сверены с внедрёнными файлами. Сервис collaboration — 1.0.1. Активно 10 workflow / 422 узла; отдельный неактивный одноразовый мост — 3 узла.

Подтверждённый результат

  • Операторский мост 348 → основной execution 349; статусы 350–355, все success. Возобновлена прежняя v1 с прежним событием. Новый материал не создавался.
  • Редактор получил статус 62: ответ Telegram подтверждён 15:20:10.547 МСК, до первого OpenAI-запроса в 15:20:11.925. От входа в основной workflow — 2,208 с, от старта CLI-моста — 9,959 с. Это измерение восстановления, не обещание такой же задержки обычного нового webhook. Цель 1–2 с не объявляется достигнутой. Исходная задержка из-за неисправности была около 46 минут 46 секунд.
  • 1 запрос текста + 1 генерация изображения, оба HTTP 200. Повторов/сокращений не потребовалось. Подпись — 630 символов, заголовок — 37, подзаголовок — 65.
  • Одно общее фото и одинаковая подпись: владелец — message 63, редактор — 64. Обе отправки подтверждены, по одной попытке; кнопки p|d720000003|1, r|d720000003|1, x|d720000003|1.
  • Статусы подготовки получает инициатор; отдельного статуса подготовки владельцу не отправляли. Оба получили превью.
  • 15:22:26 МСК: настоящий webhook execution 356 — редактор нажал «Опубликовать» на своей копии 64. Проверены numeric from.id, private chat, совпадение sender/chat, is_bot=false, callback и связь с публикацией. В канал отправлено одно сообщение 9, без новых запросов к модели. Статусы 357–358 success. Уведомления о решении: владельцу 66, редактору 67.
  • Сейчас версия published. После публикации обе старые клавиатуры сняты штатным обработчиком; старый v1 не предназначен для новой правки. Новый материал можно создавать обычным /post тема.

Проверки и границы

Реально проверены подготовка текста, иллюстрации, renderer, статусы, две доставки и настоящее нажатие «Опубликовать» редактором. 26 изолированных проверок охватывают владельца/редактора, неизвестного и отключённого участника, дубли, гонки, независимую доставку, неизвестный исход, привязку ForceReply, устаревшие кнопки и одноразовый захват восстановления. Изолированные Telegram-ответы не выдаются за реальные сообщения.

Не проверены новым реальным действием: доработка через ForceReply, отклонение, новый поиск /news, блокировка бота одним адресатом и реальные аварии внешних API. Ранее остановленные запросы владельца 342 и поиска 345/346 не перезапускались. Полный restore VPS из дампа не выполнялся. Сайт документации не публиковался.

Остальные 20 строк версий, 3 подборки, 6 карточек, 4 claims и обе роли сохранены. Credentials, секретные файлы и защищённая конфигурация сверены; DDL не менялся. Единственный Telegram trigger и webhook сохранены; расписаний не добавлено.

Backup и откат

Проверенный дамп и снимки: /opt/bfl-content/backups/20260916T120858Z-before-editor-post-fix.

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

Документация

bfl-multiuser-docs-export.zip — актуальные схемы, код, реестры, команды и результаты. Определения взяты из локальных внедрённых файлов, сверенных с VPS; UUID активных версий прочитаны отдельно. Хеш схемы БД совпал с сохранённым снимком.

Автоматическая проверка запретила перенос расширенной трассы и повторную полную выгрузку: она не сочла доказанным исключение чувствительных данных. В архив включены только минимальные подтверждённые факты выполнения; полные payload, тексты переписки, строки материалов и credentials не включались. Это не мешает проверке точности схем: их равенство на VPS проверено до формирования архива.