Code-нода
Что делает
code выполняет data.code как тело уже созданной async-функции. Собственный async def добавлять нельзя. Для простого присваивания выбирай set_variable, для SQL — psql_query, для HTTP — http_request.
Формат и поля
{"type":"code","data":{"code":"answer = float(num1) + float(num2)","autoTransitionTo":"result_message"}}
| Поле | Тип | Значение | Поведение |
|---|---|---|---|
code | string | "" | тело Python-кода |
autoTransitionTo | string | "" | ID следующей ноды |
Присваивание на верхнем уровне сохраняется в пользовательском контексте и доступно как {answer}. Внутри функции оно локально; для явной записи используй _ns['answer'] = value.
Контекст выполнения
Доступны переменные пользователя по имени, user_data, all_user_data, set_user_var, user_id, client, userbot_client, bot, dp, callback_query, state, asyncio, json, re, math, datetime, logging, Button и events. num1, num2, last_input появляются только после явного сохранения предыдущей нодой. callback_query и state могут быть None.
try:
total = float(num1) + float(num2)
ok = True
except (TypeError, ValueError):
total = None
ok = False
Несколько результатов передаются несколькими присваиваниями верхнего уровня. None, строки, числа и JSON-совместимые списки/словари сохраняются как значения.
Ограничения и ошибки
Таймаут одного code-узла — 180 секунд. RestrictedPython не используется: не удаляй данные, не раскрывай токены и не запускай опасные процессы. При исключении обработка завершается ошибкой; причину ищи в логах code/runtime. Внешние API допустимы только через реально доступные клиенты.
Связка и проверка
input подаёт значения, message показывает {total}, condition выбирает ветку. Вызови get_node_schema(code), get_node_example(code), затем validate_node; после запуска проверь логи. Отдельный MCP-просмотр переменных пользователя не реализован.
Частые ошибки
- написан собственный
async def; - используется имя, которое предыдущая нода не сохраняла;
- результат присвоен только внутри функции;
- не обработаны деление на ноль или неверный тип.
Следующий шаг
Направь переход на message или condition и проверь сценарий тестовым пользователем.