Перейти к содержимому
falang.ruEN

Задачи для людей

Узел «Задача для человека» ставит сценарий на паузу и ждёт, пока человек примет решение — одобрить или отклонить счёт, подтвердить возврат средств, выбрать один из нескольких вариантов, — а затем продолжает по ветке, соответствующей выбору, с собственным ответом резолвера доступным внутри этой ветки как типизированное значение. Это тот же приём, что и вопрос в Telegram (отправить, подождать, разветвиться по нажатой кнопке), только без мессенджера — «сообщением» становится строка на странице внутри самого продукта.

  • Заголовок и Описание — короткая сводка, показываемая в списке задач, и более длинное, оформленное в Markdown объяснение (что нужно решить, ссылки, суммы), показываемое на самой задаче.

  • Контекст — необязательное выражение, вычисляющее любое структурированное значение (заказ, который согласовывается, запись, которую проверяют), показывается на задаче как блок только для чтения — никогда не редактируется тем, кто её решает.

  • Вложения — необязательный список файлов, показывается как ссылки для скачивания.

  • Таймаут — необязательная длительность (48h, 3d). Оставьте пустым — сценарий будет ждать вечно; задайте — и узел возьмёт фиксированную автоматическую ветку «Таймаут», если никто не решит задачу вовремя (см. ниже).

Каждая опция — это кнопка, которую видит человек на задаче — по умолчанию «Одобрить»/«Отклонить», свободно переименовываемые или дополняемые, точно как кнопки вопроса в Telegram. Что делает опции задачи для человека отличными от обычной ветки — то, что каждая может ещё и собрать типизированное значение от того, кто её решает:

  • Void — обычная кнопка, заполнять больше нечего.

  • Текст — текстовое поле (причина отказа, исправленное значение).

  • Число — числовое поле ввода.

  • Булево — чекбокс/переключатель.

Отдельного поля «комментарий» нет: опция «Отклонить» с ответом типа Текст и подсказкой «Причина» — и есть поле для комментария. Внутри ветки каждой опции доступны две переменные: task (кто и когда решил задачу) и, для любой опции кроме Void, data — типизированная точно так, как задан тип ответа этой опции.

Заданный Таймаут автоматически добавляет к узлу ещё одну ветку — фиксированную, всегда последнюю, её нельзя удалить или переименовать. Если никто не решит задачу за отведённое время, сценарий пойдёт по этой ветке (сама задача при этом помечается на странице Tasks как «Истекла») — удобно для сценариев вида «эскалировать, если никто не ответил за день». Сценарий, остановленный или пересобранный, пока задача ещё открыта, тоже закрывает её (как «Отменена») — задача никогда не остаётся висеть открытой, указывая на запуск, которого уже не существует. Если очистить Таймаут, ветка пропадёт — кроме случая, когда в ней уже есть иконки: тогда она остаётся на схеме (молча не удаляется), но больше не компилируется.

Все открытые (и прошлые) задачи живут на странице Tasks — рядом со страницей Runs, доступной из списка проектов, а также, отфильтрованной под конкретный сценарий, из вкладки Tasks внутри редактора. Задача видна только владельцу проекта, который её создал, — в этой версии нет ни списка исполнителей, ни внешней ссылки, ни доступа администратора: владелец проекта — тот, кто строит и тестирует сценарий, поэтому именно он решает и то, чего сценарий ждёт. Открытие задачи показывает описание, контекст, вложения и по одной кнопке на каждую опцию — с типизированным полем ввода рядом, если опция собирает значение.

Задача, созданная во время разработки сценария (dev-запуск), — тоже настоящая строка, решаемая с той же страницы Tasks: именно так тестируется сценарий с согласованием — соберите его, запустите и одобрите/отклоните сами со вкладки Tasks рабочего пространства. Production-задача переживает повторное развёртывание, поскольку опубликованный запуск продолжает выполняться на своей закреплённой версии независимо от того, что публикуется дальше; решение задачи достигает именно этого запуска.

Узел вопроса Telegram в этом же проходе получил такое же поле «Таймаут» — задайте его, и вопрос с inline-клавиатурой, оставшийся без ответа, пойдёт по собственной автоматической ветке таймаута: кнопки убираются, и вместо бесконечного ожидания отправляется короткое сообщение «этот вопрос устарел».