Что делать, если…

Страница собрана по симптому, а не по подсистеме: вы видите на экране что-то непонятное — находите это здесь, читаете причину и уходите на подробную страницу. Диагноз почти всегда даёт одно из трёх мест, и стоит знать их заранее:

Где смотретьЧто там видноКогда полезно
Панель проверки в редактореОшибки и предупреждения схемы с кодамиДо запуска: форма графа
Вкладка «Тест», панель DebugОтрендеренные шаблоны, вход и выход каждой нодыСразу после запуска: что именно ушло в ноду
Раздел «Запуски»Статус, причина пропуска, ошибка, кредитыПостфактум, в том числе по чужим ходам

Названия кнопок и вкладок дальше приведены так, как они выглядят в интерфейсе.

Правка ничего не изменила

Видно: вы поменяли промпт или условие, отправили сообщение на вкладке Тест — и поведение прежнее.

Почему: канвас показывает текущий холст, включая несохранённые правки, а запуск исполняет последнюю сохранённую версию. Граф для запуска берётся из версии воркфлоу, а не из того, что нарисовано на экране, — иначе один и тот же запуск означал бы разное у двух вкладок браузера, открытых на одном воркфлоу.

Что делать: нажмите Сохранить и повторите. Если в тесте всё верно, а живой чат отвечает по-старому — это второй слой того же: публичный чат, виджет и остальные каналы обслуживают опубликованную версию, а не последнюю сохранённую. Нужна публикация.

Кнопка публикации серая и написано «Актуально»

Видно: на вкладке Публикация кнопка не нажимается, на ней Актуально вместо Опубликовать версию 7.

Почему: публиковать нечего — опубликованная версия совпадает с текущей, и настройки каналов тоже не менялись. Кнопка гаснет и по второй причине: выбранный набор каналов неполон, и публикация была бы бессмысленной.

СостояниеЧто делать
Надпись «Актуально»Изменений нет. Сохраните правку графа или измените настройку канала — надпись сменится на номер версии.
Не выбран ни один каналВключите переключатель хотя бы одного канала в списке слева.
Включён Telegram, бот не выбранВыберите бота в детали канала — без него публиковать некуда.
Включено расписание, выражение пустоеЗадайте расписание; пустое поле блокирует публикацию молча.

Подробнее — вкладка «Публикация».

Публикация отклонена

Видно: внизу вкладки Публикация появилась красная плашка с текстом ошибки.

Почему: причин три, и они из разных слоёв.

① Валидация на публикации строже редакторской. Пять кодов проверки в редакторе — предупреждения, а на публикации и запуске — ошибки: exec.multi_exit_race, exec.no_execution_edges, node.config_invalid, wire.required_port_not_wired, wire.resource_no_source. Так сделано намеренно: черновик имеет право быть недоделанным, а граф, уходящий в движок, — нет. Полный список — коды валидации.

② Канал не разрешён тарифом. На бесплатном тарифе публикация возможна только в публичный чат и виджет; Telegram, вебхук и расписание — платные. Текст ошибки называет отклонённые каналы.

③ Превышен лимит опубликованных воркфлоу. На бесплатном тарифе одновременно опубликован может быть один воркфлоу. Снимите публикацию с другого — или переходите на платный тариф.

Проверить, какой воркфлоу занимает слот, можно в списке воркфлоу: номер версии стоит у каждого, а занятый слот выдаёт бейдж Активен — у остальных там Черновик.

Запуск отклонён — «Недостаточно кредитов»

Видно: сообщение не отправляется, приходит ошибка о кредитах или о бюджете рабочего пространства.

Почему: баланс кредитов на нуле. На бесплатном тарифе работа сверх баланса запрещена, поэтому запуск отбивается до первой ноды, а не посреди хода: платформа не начинает работу, за которую нечем заплатить.

Отдельно от баланса существует бюджет рабочего пространства — самоограничение владельца на период. Его сообщение говорит, сколько кредитов из бюджета израсходовано. Баланс при этом может быть не пуст: это два независимых потолка.

Что делать: дождаться начисления в новом периоде, поднять бюджет рабочего пространства (это делает владелец) или перейти на тариф с большим включённым объёмом.

Куда уходят кредиты — кредиты и стоимость и лимиты тарифа.

Нода помечена пропущенной

Видно: в запуске на вкладке Выполнение нод (12) нода серая. Кликните по ней, вкладка Инфо, строка Почему пропущен.

Почему: пропуск — не ошибка. Нода исполняется, только если её активировало входящее ребро; всё остальное честно помечается пропущенным, и причин ровно шесть. В интерфейсе показывается фраза, а в API и MCP (get_execution) — короткий код. Ниже они рядом, потому что это одно и то же значение:

Фраза в интерфейсеКодЧто это значит и что делать
Условие выше выбрало другую веткуbranch_not_takenШтатная работа: условная нода пошла второй ногой, переключатель совпал с другим случаем. Ничего чинить не надо.
Все пути сюда оборвались из-за ошибки вышеupstream_failedНода выше упала, и ошибку никто не перехватил. Смотрите её ошибку; если падение допустимо — нарисуйте ветку on_error.
Не дождался входов: Nunmet_in_degree:NЧасть входов сработала, N остались неразрешёнными. Это дефект схемы: обычно два независимых пути сходятся в ноду без барьера.
Ни один предшественник не выполнялсяupstream_not_runВся ветка выше не запускалась. Ищите причину у её головы — она тоже будет пропущена.
Тело цикла ни разу не выполнялосьloop_body_not_enteredНода лежит внутри тела цикла или итерационной ноды, а тело не выполнилось ни разу: пустой список, условие цикла ложно с самого начала.
Нечем запустить: нет входящей связиno_exec_triggerУ ноды нет ни одной зависимости планировщика и её никто не посеял: положили на холст, но не подключили ребром.

Седьмое значение — unknown («Причина неизвестна») — встречается крайне редко и означает состояние, которое классификатор не смог объяснить; сохраните ссылку на запуск.

Механика активации разобрана в как исполняется граф, список статусов — в статусах.

Запуск «завершён», а ответа нет

Видно: статус зелёный, но чат молчит или результат пуст.

Почему: завершён (completed) означает «ни одна нода не упала необработанной ошибкой» — и не означает «граф прошёл целиком». Пустой ответ в чат не отправляется вовсе: платформа не шлёт пустое сообщение и не пишет его в историю, поэтому «успешный запуск без ответа» выглядит именно так.

Две типичные причины:

  • Взятая ветка не дошла до exit. Найдите exit в списке нод запуска: он будет пропущен, с причиной из таблицы выше. Обычно виноват if, у которого одна нога никуда не ведёт.
  • exit отработал, но вернул пусто. Значение на его вход не пришло — смотрите вкладку выходов предыдущей ноды.

Форму «exit недостижим из входа» валидатор ловит до запуска и отбивает как ошибку exec.exit_no_exec_trigger; недостижимые ноды без exit — предупреждение node.not_activated. Если запуск дошёл до движка с такой формой, значит граф сохранён раньше, чем правило появилось: прогоните Проверить ещё раз. Подробности — вход и выход.

Поле шаблона пустое

Видно: в промпт ушёл текст с дырой, HTTP-нода отправила пустой параметр.

Почему: неизвестное имя в шаблоне не роняет ноду — оно рендерится пустой строкой. Это защита от падения всего хода из-за одного опечатанного идентификатора, но платят за неё тем, что опечатка не видна.

Где увидеть:

  • В редакторе — панель проверки: ref.unknown_node (ссылка на несуществующую ноду) и ref.undefined_var (неизвестная переменная). Оба — предупреждения, они не блокируют сохранение.
  • После запуска — вкладка Тест, панель Debug, секция Rendered templates: там видно, что реально ушло в ноду, а ключ __undefined_refs__ перечисляет все пути, которые не разрешились. Это единственный точный след опечатки.

Частая ловушка: | default(0) подставляет запасное значение только вместо отсутствующего имени — зато на любой глубине, включая variables.review.score. Пустую строку, которая реально пришла, он не заменяет: для этого нужна форма | default(0, true). Разбор — шаблоны.

Ответ приходит целиком, а не по словам

Видно: в чате долгая пауза, потом весь ответ разом.

Почему: стрим — отдельный презентационный канал, и он есть не на каждом ребре.

ПричинаЧто делать
Ребро не стримящееКликните по ребру от модели к exit: у ребра типа «исполнение + данные + стрим» есть переключатель, отключающий стрим-канал. Если он снят — ответ придёт целиком.
Между моделью и exit есть обычная нодаОна переписывает значение, и токены перестали бы совпадать с ответом. Стрим до конца доходит только по цепочке прозрачных для него звеньев.
Ответ заведён в барьер wait_allВход барьера не стрим-порт, поэтому по умолчанию не стримится вовсе. Валидатор скажет об этом кодом wire.stream_swallowed_by_barrier; проброс включается опцией барьера и работает, когда за барьером сразу exit.
Стримов два одновременноДва потока попадают в один пузырь и перемешиваются — предупреждение wire.concurrent_stream_merge. Мультиплекса нет: оставьте один первичный поток.

Типы рёбер и переключатель — связи между нодами.

Telegram-бот молчит в группе

Видно: в личке бот отвечает, в группе — нет, или отвечает только на прямые обращения.

Почему: ограничения на стороне Telegram, а не платформы. Bot API по умолчанию отдаёт боту в группе только команды, ответы на его сообщения и упоминания.

Что проверить — по порядку:

  1. Режим приватности у @BotFather. Отключите privacy mode и перезаведите бота в группе (выйти и добавить заново) — иначе старое ограничение остаётся в силе.
  2. Права администратора. Часть возможностей (модерация, удаление сообщений) требует прав админа; без них вызовы отклоняет Telegram.
  3. Подписка на типы обновлений. Событий, не отмеченных в списке получаемых обновлений на вкладке Публикация, бот не получает вовсе — например, входы и выходы участников.
  4. Триггерные фразы. Если задан список фраз, всё остальное бот игнорирует осознанно.

В детали Telegram-канала есть кнопка Проверить бота: она спрашивает у Telegram, что бот видит на самом деле, и показывает несовпадения — включённый privacy mode, недостающие права, неподписанные типы обновлений, последнюю ошибку вебхука. Начинайте с неё. Подробности — Telegram.

Модель пропала из списка

Видно: модель, которой вы пользовались, отсутствует в поле выбора у ноды.

Почему: списки фильтруются строго, и фильтров два.

  • Назначение модели. У своей модели (интеграция OpenAI-совместимого провайдера) есть назначение — чат, эмбеддинги или rerank. Модель с назначением «эмбеддинги» не появится в поле модели LLM-ноды, а попытка использовать её как чат-модель завершится ошибкой «модель объявлена как embedding». Проверьте назначение в интеграции — свои модели и ключи.
  • Видимость. В разделе НастройкиМодели видимость каждой модели переключается отдельно; выключенная не попадает в выпадающие списки. Загруженные у провайдера модели по умолчанию выключеныкаталог моделей.

На бесплатном тарифе свои модели запрещены целиком — и не «создадутся, но не покажутся»: сама интеграция с ключом провайдера не сохранится, добавление вернёт отказ по тарифу.

Запуск висит в очереди

Видно: статус в очереди (queued) держится дольше, чем обычно занимает ход.

Почему: ходы одной сессии чата выполняются строго по одному. Пока предыдущий ход не завершился, следующий ждёт — иначе два хода одного разговора писали бы в общую память одновременно и перемешивали события в потоке. Это нормальное состояние, а не сбой.

Что делать:

  • Посмотрите на предыдущий ход той же сессии: если он выполняется, всё в порядке. Если он завис на медленной ноде — ограничения времени описаны в лимитах и бюджетах.
  • Слишком много накопившихся ходов в одной сессии отбиваются заранее — вы получите ошибку на отправке, а не бесконечное ожидание.
  • Отправка в разные сессии параллельна, но тариф ограничивает число одновременных запусков владельца: на бесплатном это один.

Разные разговоры — разные сессии; проверить, в какую попало сообщение, можно на странице запуска.

«Внутренняя ошибка. Код обращения: …»

Видно: ошибка без подробностей, с длинным идентификатором.

Почему так и задумано. Ответ стороннего сервиса, полученный на ключе платформы, наружу не показывается: он ничего не говорит о том, могли ли вы поступить иначе, и при этом умеет протаскивать в текст лишнее — адреса, фрагменты ключей, имена внутренних классов. Поэтому у сообщения два уровня: осмысленный текст там, где сервис ваш, и непрозрачная формулировка с кодом обращения там, где он не ваш.

Подробности видны, когда сервис принадлежит вам: ваш HTTP-запрос, ваша база, ваша интеграция рабочего пространства, ваша модель по своему ключу. Если модель платформенная, её ответ вы не увидите — назовите код обращения в поддержке, по нему находится запись в логе.

Что делать: попробуйте повторить, если ошибка похожа на временную; если повторяется — код обращения плюс ссылка на запуск. Классификация кодов ошибок и ветка on_errorошибки нод.

Что дальше