Как собирать сценарий
Сценарий - это цепочка узлов на холсте. Вы добавляете узлы, соединяете их линиями, и данные проходят слева направо от узла к узлу. Эта страница объясняет механику: как соединять узлы, как они передают данные друг другу и как выстроить рабочий процесс сборки.
Добавление и соединение узлов
Чтобы добавить первый узел - нажмите Добавить узел в центре пустого холста или кнопку + на панели.
Чтобы добавить следующий узел и сразу соединить его с предыдущим - нажмите на коннектор (стрелка на правой стороне узла). Список узлов откроется уже с готовой связью: выбранный узел добавится и сразу подключится.
Или нажмите кнопку Добавить узел в нижней панели - тогда узел добавится на холст без соединения с другими узлами.
Узлы со свободными коннекторами магнитятся друг к другу: потяните один к другому - связь создастся автоматически.
Связь можно протянуть вручную от одного узла к другому. Если связь уже есть - не нужно удалять и создавать заново: потяните её начало или конец к другому узлу, и она переподключится.
Чтобы удалить связь - кликните на ней правой кнопкой мыши и выберите Удалить.

Как получить первые данные в сценарий
Если в сценарии стоит триггер приложения (Gmail, Telegram, Slack и т.д.), нужно получить от него данные, прежде чем настраивать следующие узлы. Есть два способа.
Способ 1: запустить только триггер. Наведите на узел-триггер, нажмите на него правой кнопкой мыши и выберите Запустить узел один раз. Узел попытается получить последнее событие из подключённой системы. В некоторых случаях API вернёт тестовое (sample) сообщение - этого достаточно, чтобы увидеть структуру данных и начать настройку следующих узлов.
Способ 2: запустить весь сценарий. Нажмите Запустить один раз в нижнем левом меню - сценарий запустится полностью и будет ожидать реального события в триггере подключённой системы. Как только вы вручную создадите это событие (отправите письмо, сообщение и т.д.), триггер его поймает и данные пройдут по всей цепочке.
Вы также можете в любой момент запустить вручную любой экшн в цепочке и получить от него данные - независимо от триггера.
Мы рекомендуем начинать тестирование с первого способа: запускайте узлы по одному и проверяйте данные на каждом шаге.
Как посмотреть данные выполнения узла
После того как узел запустился, рядом с ним появляется зелёный кружок. Кликните на него - откроется панель с вкладками Input, Output, Log и Error.
Самая ценная вкладка - Output: здесь собраны все данные, которые вернул сервис на ваш запрос. Именно их вы будете использовать в следующих узлах. Например, для триггера Telegram там уже есть ID отправителя, ID чата, текст сообщения и другие поля.

Как подставить данные дальше по сценарию
Предположим, триггер получил сообщение из Telegram и мы хотим передать его текст в ChatGPT. Кликните в нужное поле узла - откроется окно с вкладкой «Данные», где доступны переменные из всех предыдущих узлов цепочки. Напишите текст запроса, раскройте нужный узел и кликните на переменную - она вставится прямо в то место, где стоит курсор.
На вкладке «Данные» видны переменные из всех предыдущих узлов цепочки, не только из ближайшего. Можно взять данные из любого узла левее по цепочке.
Чтобы переменная появилась в «Данных», предыдущий узел должен быть запущен хотя бы один раз. Если вкладка «Данные» пустая - сначала запустите нужный узел через Run Node Once.
Если запустить узел, в полях которого стоят переменные из незапущенных предыдущих узлов, на месте этих переменных придёт null. Это может привести к ошибке или к неправильному результату. Всегда запускайте узлы по порядку: сначала тот, из которого берёте данные, потом тот, который их использует.
В примере ниже: добавляем узел Telegram для отправки ответа, передаём в поле Chat ID переменную из триггера, а в поле с текстом - ответ ChatGPT.
Поля, помеченные красной звёздочкой, обязательны для заполнения. Без них узел выдаст ошибку. Заполняйте их в первую очередь.
Названия полей обычно совпадают с названиями нужных данных. Если поле называется Chat ID - туда нужно подставить значение chat_id из предыдущего узла. Так работает с большинством стандартных идентификаторов: chat_id, user_id, request_id и другими. Ищите в «Данных» переменную с таким же именем.
Подход к сборке
- Спланируйте сценарий: определите, какие узлы нужны и в каком порядке.
- Добавьте нужные узлы на холст.
- Начните настройку с первого узла: заполните поля и запустите его - ПКМ → Запустить узел один раз.
- Кликните на кружок рядом с выполненным узлом и проверьте выходные данные: вернул ли узел то, что ожидалось. Если нет - измените настройки и запустите снова.
- Настройте следующий узел: подставьте нужные данные из предыдущих узлов через вкладку «Данные» и запустите его.
- Проверьте его Output так же, как в шаге 4.
- Повторяйте шаги 5-6 до конца цепочки.
Если при настройке узла нужных данных в «Данных» нет - скорее всего, не хватает промежуточного шага. Например, дополнительного запроса к API, который получит или создаст нужные данные. Добавьте его в цепочку, запустите - и нужные переменные появятся в «Данных».
Операторы
Иногда данные нужно не просто передать дальше, а преобразовать: привести дату к нужному формату, собрать строку из нескольких переменных, посчитать длину текста. Для этого используются операторы.
Кликните в любое поле узла и перейдите на вкладку Operators - она находится рядом с «Данными». Там собраны все операторы по группам: сравнения, математика, работа со строками, датами и массивами.

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

Значения now, today и timestamp доступны в любом поле без предварительного запуска узлов.
Ветвление: фильтры и условия
Операторы также используются для фильтрации и маршрутизации: условие на связи между узлами - это оператор сравнения, который решает, пойдут ли данные по этой ветке.
В Nodul нет отдельных узлов для фильтрации и маршрутизации - таких как if, filter, split, merge и подобных. Всё это настраивается прямо на связях между узлами.
Один узел может иметь несколько исходящих связей. На каждой задаётся условие - ветка сработает только если оно выполнилось. Если условие не выполнилось, данные по этой ветке не пройдут.
Нажмите на связь между узлами - откроется панель, где задаётся условие. В примере ниже две ветки: одна срабатывает если amount больше 100, другая - если меньше.

Вот как это работает в действии: при значении 150 срабатывает первая ветка, при 50 - вторая.
Если на связи не задано условия - данные пройдут по ней всегда. Если у узла несколько связей без условий - выполнятся все ветки одновременно.
Полный список операторов и примеры работы с ними - в разделе Основы операторов.
Резервная связь. Если ни одно условие на исходящих связях не выполнилось, сработает резервная связь - ветка «для всех остальных случаев». Включается переключателем Fallback router в настройках связи.

Что дальше?
Как планировать сценарий
Что нужно знать перед созданием автоматизации
Если нет интеграции или нужного действия
Как подключить любой сервис через HTTP Request или JavaScript, даже если готовой интеграции или нужного действия пока нет
Нужна помощь? Спросите сообщество
Если на странице не хватает деталей или что-то непонятно, напишите на форуме сообщества Nodul: команда и другие пользователи обычно отвечают быстро.
Программное обеспечение распространяется в виде интернет-сервиса, специальные действия по его установке на стороне пользователя не требуются.