snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,167 @@
---
title: Отправка писем через рабочие процессы
description: Отправляйте персонализированные письма автоматически с помощью действий рабочего процесса.
---
Автоматически отправляйте письма при наступлении определённых событий в вашей CRM — приветствуйте новых контактов, делайте последующие касания по возможностям или уведомляйте членов команды.
## Требования
Прежде чем отправлять письма из рабочих процессов:
1. Подключите учетную запись электронной почты в разделе **Настройки → Учетные записи**
2. Убедитесь, что для учетной записи включены разрешения на отправку
## Базовый рабочий процесс электронной почты
### Пример: приветственное письмо для новых контактов
**Цель**: отправлять приветственное письмо, когда в CRM добавляется новый контакт.
**Настройка**:
1. **Создайте рабочий процесс**: перейдите в **Настройки → Рабочие процессы** и нажмите **+ Новый рабочий процесс**
2. **Добавьте триггер**: выберите **Запись создана** → **Люди**
3. **Добавьте действие Отправить письмо**:
* Нажмите **+**, чтобы добавить действие
* Выберите **Отправить письмо**
* Настройте письмо:
| Поле | Значение |
| -------------- | ------------------------------------------ |
| **Кому** | `{{trigger.object.email}}` |
| **Тема** | `Добро пожаловать в {{Your Company Name}}` |
| **Содержимое** | `Hi {{trigger.object.firstName}}, ...` |
4. **Протестируйте и активируйте**: протестируйте на тестовой записи, затем активируйте
## Использование переменных в письмах
Ссылайтесь на данные из предыдущих шагов, используя синтаксис `{{variable}}`:
```text
Hi {{trigger.object.firstName}},
Thank you for connecting with us!
Your company, {{trigger.object.company.name}}, is now in our system.
Best regards,
The Team
```
### Доступные переменные из триггеров
| Тип триггера | Общие переменные |
| ---------------------------- | -------------------------------------- |
| **Запись создана/обновлена** | `{{trigger.object.fieldName}}` |
| **Вручную** | `{{trigger.selectedRecord.fieldName}}` |
| **Вебхук** | `{{trigger.body.fieldName}}` |
## Продвинутое: условные письма
### Пример: разные письма в зависимости от источника лида
**Цель**: отправлять разные приветственные письма в зависимости от того, откуда пришёл лид.
**Настройка**:
1. **Триггер**: запись создана (Люди)
2. **Добавьте действие Фильтр**:
* Условие: `{{trigger.object.source}}` равно `"Website"`
* Если верно → перейти к приветственному письму для сайта
3. **Ветка для других источников**:
* Создайте параллельные ветки для разных источников
* В каждой ветке есть собственное действие Отправить письмо
## Отправка писем нескольким получателям
### Пример: уведомление команды при закрытии сделки
**Цель**: отправить письмо менеджеру по продажам и его руководителю, когда возможность помечена как выигранная.
**Настройка**:
1. **Триггер**: запись обновлена (Возможности, стадия = "Закрыта выиграна")
2. **Поиск записей**: найдите руководителя владельца возможности
3. **Отправить письмо №1**: владельцу возможности
* Кому: `{{trigger.object.owner.email}}`
* Тема: `Congratulations on closing {{trigger.object.name}}!`
4. **Отправить письмо №2**: руководителю
* Кому: `{{searchRecords.manager.email}}`
* Тема: `Deal Won: {{trigger.object.name}}`
## Запланированные последующие письма
### Пример: последующее письмо через 3 дня после встречи
**Цель**: отправить последующее письмо через 3 дня после регистрации встречи.
**Настройка**:
1. **Триггер**: запись создана (Активности, тип = "Встреча")
2. **Действие Задержка**: подождите 3 дня
3. **Отправить письмо**:
* Кому: участнику встречи
* Тема: Продолжение нашего разговора
* Содержимое: укажите детали встречи из триггера
## Вложения к электронным письмам
Вы можете прикреплять файлы к электронным письмам, отправляемым из рабочих процессов. Вложение — это статический файл, который вы загружаете при настройке рабочего процесса.
### Как добавить вложение
1. В действии **Отправить письмо** нажмите кнопку **Вложения**
2. Нажмите, чтобы загрузить файл со своего компьютера
3. Файл будет прикреплен ко всем электронным письмам, отправляемым этим действием
### Типичные случаи использования
| Сценарий использования | Пример файла |
| ---------------------------------------- | -------------------------------------- |
| **Приветственные письма** | Брошюра компании (PDF) |
| **Последовательности внедрения** | Руководство по началу работы |
| **Контроль за продажами** | Каталог товаров или прайс-лист |
| **Подтверждения участия в мероприятиях** | Информация о мероприятии или программа |
<Note>
Вложения статичны — один и тот же файл отправляется всем получателям. Для динамических документов (например, персонализированных коммерческих предложений) генерируйте и прикрепляйте файлы с помощью [Logic Function](/l/ru/user-guide/workflows/how-tos/connect-to-other-tools/generate-pdf-from-twenty).
</Note>
## Лучшие практики
### Содержимое письма
* Делайте темы писем краткими и по существу
* Персонализируйте, используя имя получателя
* Добавляйте чёткий призыв к действию
* Тестируйте письма перед активацией
### Доставляемость
* Не отправляйте слишком много писем за короткое время
* Используйте профессиональные подписи в письмах
* Избегайте слов, которые запускают спам-фильтры
* Обеспечьте наличие опции отписки для маркетинговых писем
### Устранение неполадок
* Убедитесь, что учетная запись электронной почты подключена и активна
* Проверьте, что адрес электронной почты получателя действителен
* Проверьте запуски рабочего процесса на наличие сообщений об ошибках
* Сначала протестируйте на собственном адресе электронной почты
## Связанные материалы
* [Триггеры рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
* [Действия рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-actions)

View File

@@ -0,0 +1,88 @@
---
title: Использование веток в рабочих процессах
description: Разберитесь, как работают ветки и как управлять тем, какой путь выполняется.
---
## Как работают ветки
В редакторе рабочего процесса вы можете создавать несколько путей (веток), выходящих из одного узла. Это позволяет строить сложные автоматизации с разными результатами.
**Важно**: при запуске рабочего процесса **все ветки по умолчанию выполняются параллельно**. Нет встроенной логики "if/else" для выбора одной ветки вместо другой — каждый путь будет запускаться одновременно.
## Управление тем, какая ветка запускается
Чтобы выполнять только одну ветку на основании определённых условий, **добавьте узел Filter в начале каждой ветки**.
### Пример настройки
1. Создайте рабочий процесс с несколькими ветками от одного узла
2. Добавьте узел **Filter** в качестве первого шага в каждой ветке
3. Задайте условия на каждом узле Filter, чтобы определить, когда эта ветка должна продолжить выполнение
4. Продолжат выполнение только те ветки, для которых выполнены условия узла Filter
### Как работают фильтры
* Если условие Filter выполнено: ветка продолжает выполнение
* Если условие Filter не выполнено: ветка останавливается на узле Filter
Это фактически создаёт условную логику, при которой на основе ваших данных выполняется только соответствующая ветка.
## Пример: маршрутизация по размеру сделки
**Сценарий**: когда сделка закрывается, отправляйте разные уведомления в зависимости от её размера.
1. **Триггер**: сделка обновлена (стадия = «Закрыта — выиграна»)
2. **Ветка 1**: фильтр по сумме > $10,000 → отправить сообщение в Slack в #big-deals
3. **Ветка 2**: фильтр по сумме ≤ $10,000 → отправить письмо менеджеру по продажам
Обе ветки запускаются, но продолжит выполнение после своего Filter только та, что соответствует сумме сделки.
## Создание веток
<Note>
Чтобы создать новую ветку из существующего шага, нажмите кнопку **+** на этом шаге и добавьте действие. Вы можете добавить несколько веток, нажав **+** несколько раз.
</Note>
1. В редакторе рабочего процесса выберите шаг, от которого вы хотите создать ветку
2. Нажмите **+**, чтобы добавить действие
3. Будет создана одна ветка
4. Нажмите **+** ещё раз на том же шаге, чтобы создать дополнительные ветки
5. Каждая ветка может иметь собственную последовательность действий
## Объединение веток
После того как параллельные ветки завершат работу, вы можете объединить их обратно в один путь:
1. Завершите действия в ветках
2. Добавьте новый шаг, который должен выполняться после всех веток
3. Перетащите соединение с последнего шага каждой ветки к этому новому шагу
4. Объединенный шаг ожидает завершения всех подключенных веток перед выполнением
### Пример: обработка, затем уведомление
```
Trigger
│
├── Branch A: Update Customer Record
│
└── Branch B: Create Support Ticket
↘ ↙
Merged Step: Send Confirmation Email
```
Письмо с подтверждением отправляется только после завершения обновления и создания заявки.
## Лучшие практики
* Всегда используйте **узлы Filter** в начале веток, когда требуется условное выполнение
* Делайте условия веток **взаимно исключающимися**, чтобы избежать дублирования действий
* Тестируйте рабочие процессы с разными данными, чтобы убедиться, что запускаются правильные ветки
* **Переименовывайте шаги веток** так, чтобы было ясно, что делает каждая ветка
* **Объединяйте ветки**, когда нужно финальное действие после параллельной обработки
## Связанные материалы
* [FAQ по рабочим процессам](/l/ru/user-guide/workflows/how-tos/need-more-help/workflows-faq) — ответы о параллельном выполнении
* [Действия рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-actions) — доступные действия для веток

View File

@@ -0,0 +1,183 @@
---
title: Использование итератора
description: Перебирайте массивы записей и выполняйте действия для каждого элемента.
---
Итератор позволяет перебирать массив записей и выполнять действия для каждой из них. Он необходим для рабочих процессов, которым нужно обрабатывать несколько записей, возвращённых действием Search Records или полученных через вебхуки.
## Когда использовать итератор
| Сценарий | Пример |
| -------------------------------- | ----------------------------------------------------- |
| **Обработка результатов поиска** | Отправить письмо каждому найденному человеку |
| **Обработка массивов вебхуков** | Создать записи для каждого элемента по порядку |
| **Массовые обновления** | Обновить несколько записей с рассчитанными значениями |
| **Уведомления** | Оповестить нескольких людей о событии |
## Понимание итератора
Итератор ожидает на входе **массив**. Затем он:
1. Берёт первый элемент массива
2. Выполняет все действия внутри итератора с этим элементом
3. Переходит к следующему элементу
4. Повторяет, пока все элементы не будут обработаны
### Выбор массива для перебора
Большинство источников массивов (Search Records, поле массива вебхука, ручной триггер Bulk) можно выбрать непосредственно в селекторе переменных.
Когда шаг **Code** или **Logic Function** возвращает *массив верхнего уровня*, его вывод отображается в селекторе переменных как индексированные элементы (`0`, `1`, `2`, …). Чтобы перебирать массив целиком, выберите для этого шага параметр **Whole list** — тогда Iterator автоматически определит структуру каждого элемента списка.
## Базовая настройка
### Пример: отправка письма всем из результатов поиска
**Цель**: найти всех контактов в определённой компании и отправить каждому персонализированное письмо.
### Шаг 1: Поиск записей
1. Добавьте действие **Search Records**
2. Объект: **Люди**
3. Фильтр: Company равно "Acme Inc"
4. Это возвращает массив людей
### Шаг 2: Проверка наличия результатов
1. Добавьте действие **Фильтр**
2. Условие: `{{searchRecords.length}}` больше 0
3. Это предотвращает ошибки итератора при пустых результатах
### Шаг 3: Добавьте итератор
1. Добавьте действие **Iterator**
2. Входной массив: выберите `{{searchRecords}}`
3. Это создаёт цикл
### Шаг 4: Добавьте действия внутри итератора
Действия, добавленные после итератора, выполняются для каждого элемента:
1. Добавьте действие **Send Email** (внутри итератора)
2. Кому: `{{iterator.currentItem.email}}`
3. Тема: Привет, `{{iterator.currentItem.firstName}}`!
4. Текст письма: персонализированное сообщение с использованием полей текущего элемента
### Результат
Если Search Records возвращает 5 человек, то итератор:
* Отправляет письмо первому человеку
* Отправляет письмо второму человеку
* ... и так для всех 5
## Доступ к данным текущего элемента
Внутри итератора используйте `{{iterator.currentItem}}`, чтобы обратиться к текущей записи:
| Переменная | Описание |
| --------------------------------------- | ---------------------------------- |
| `{{iterator.currentItem}}` | Весь объект текущей записи |
| `{{iterator.currentItem.id}}` | ID записи |
| `{{iterator.currentItem.email}}` | Поле электронной почты |
| `{{iterator.currentItem.company.name}}` | Название связанной компании |
| `{{iterator.index}}` | Текущая позиция в массиве (с нуля) |
В селекторе переменных вы можете либо перейти к конкретному полю текущего элемента, либо выбрать **Use the whole item**, чтобы сослаться на весь текущий элемент (`{{iterator.currentItem}}`). Выбор всего элемента удобен, когда вы хотите передать полную запись непосредственно в следующий шаг по цепочке, вместо того чтобы заново собирать ее по полям.
## Типовые шаблоны
### Обновление нескольких записей
**Цель**: пометить все просроченные задачи как "Late"
```
1. Search Records (Tasks, Due Date < Today, Status ≠ Completed)
2. Filter (length > 0)
3. Iterator (searchRecords)
└── Update Record
- Object: Tasks
- Record: {{iterator.currentItem.id}}
- Status: Late
```
### Создание записей из массива
**Цель**: вебхук получает заказ с несколькими позициями; создайте запись для каждой
```
1. Webhook Trigger (receives items array)
2. Filter (items.length > 0)
3. Iterator (trigger.body.items)
└── Create Record
- Object: Order Items
- Name: {{iterator.currentItem.name}}
- Quantity: {{iterator.currentItem.qty}}
- Related Order: {{trigger.body.orderId}}
```
### Условная обработка внутри цикла
**Цель**: отправлять письма только контактам с действительными адресами электронной почты
```
1. Search Records (People)
2. Iterator (searchRecords)
└── Filter (currentItem.email is not empty)
└── Send Email
- To: {{iterator.currentItem.email}}
```
## Устранение неполадок
### "Iterator expects an array"
**Причина**: вы передали одну запись вместо массива.
**Решение**: убедитесь, что вы передаёте результат действия Search Records или поле-массив, а не одну запись.
```
✅ Correct: {{searchRecords}}
❌ Wrong: {{searchRecords[0]}}
```
### Итератор не запускается
**Причина**: массив пуст.
**Решение**: добавьте фильтр перед итератором, чтобы проверить длину массива:
```
Filter: {{searchRecords.length}} > 0
```
### Действия выполняются слишком много раз
**Причина**: действие Search Records вернуло больше записей, чем ожидалось.
**Решение**:
* Добавьте более точные фильтры в Search Records
* Установите ограничение в Search Records (макс. 200)
* Добавьте фильтр внутри итератора для дополнительных условий
## Особенности производительности
* **Расход кредитов**: каждая итерация потребляет кредиты на свои действия
* **Время**: обработка больших массивов занимает больше времени
* **Ограничения**: рассмотрите пакетную обработку очень больших операций
* **Лимиты скорости**: при большом числе итераций внешние вызовы API могут упираться в лимиты скорости
## Лучшие практики
1. **Всегда проверяйте длину массива** перед итератором, чтобы избежать ошибок
2. **Добавляйте фильтры внутри циклов**, если обрабатывать нужно не все элементы
3. **Переименуйте шаг Iterator**, чтобы он описывал, что именно перебирается
4. **Тестируйте на небольших массивах** перед обработкой больших наборов данных
5. Отслеживайте выполнения рабочих процессов, чтобы убедиться, что итерации завершаются как ожидается
## Связанные материалы
* [Действия рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-actions)
* [Как использовать ветвления](/l/ru/user-guide/workflows/capabilities/use-branches-in-workflows)
* [Частые вопросы о рабочих процессах](/l/ru/user-guide/workflows/how-tos/need-more-help/workflows-faq)

View File

@@ -0,0 +1,332 @@
---
title: Действия рабочего процесса
description: Узнайте о действиях, доступных в рабочих процессах Twenty.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## О действиях
Действия определяют, что произойдет после срабатывания триггера. Вы можете связывать несколько действий вместе, чтобы создавать сложные автоматизации.
<Tip>
* Используйте средство выбора переменных (нажмите значок `(x+)`), чтобы просматривать доступные данные из предыдущих шагов
* Наведите курсор на любое поле ввода, чтобы увидеть, из какого шага поступает переменная — это полезно, когда одно и то же поле (например, ID) существует в нескольких предыдущих шагах
* Присваивайте каждому действию описательное имя для упрощения сопровождения
</Tip>
## Действия с записями
<img src="/images/user-guide/workflows/workflow_actions.png" style={{width:'100%'}} />
### Создать запись
Добавляет новую запись в выбранный объект.
**Настройка**:
* Выберите целевой объект
* Заполните обязательные и необязательные поля
* Используйте данные из предыдущих шагов или введите значения вручную, чтобы заполнить поля
**Вывод**: Данные вновь созданной записи доступны для использования на последующих шагах.
### Обновление записи
Изменяет существующую запись в выбранном объекте.
<img src="/images/user-guide/workflows/update_record.png" style={{width:'100%'}} />
**Настройка**:
* Выберите целевой объект
* Выберите конкретную запись для обновления.
* Вы можете либо выбрать конкретную запись, используя раскрывающееся меню, где показаны все доступные записи.
* Либо можно выбрать запись динамически, указав запись, найденную на предыдущем шаге, с помощью `(x+)`. На этом этапе вы не можете искать запись по различным критериям. Если вы ещё не определили запись, добавьте шаг `Search Record` перед шагом `Update Record`.
* Выберите поля для изменения и введите новые значения
**Вывод**: Данные обновленной записи доступны для использования в последующих шагах.
### Удаление записи
Удаляет запись из выбранного объекта.
**Настройка**:
* Выберите целевой объект
* Выберите конкретную запись для удаления
**Вывод**: Данные удаленной записи остаются доступными для использования в последующих шагах.
### Поиск записей
Находит записи в выбранном объекте, используя условия фильтрации.
**Настройка**:
* Выберите объект для поиска
* Установите критерии фильтра для сужения результатов
* Настройте сортировку и ограничения
**Вывод**: Возвращает записи, которые могут быть использованы в последующих шагах.
<Note>
**Ограничение**: Search Records возвращает максимум **200 записей**. Если нужно обработать больше, добавьте точные фильтры, чтобы сократить результаты, или используйте запланированные рабочие процессы для пакетной обработки.
</Note>
**Рекомендация**: Используйте [ветвления](/l/ru/user-guide/workflows/capabilities/workflow-branches) после Search Records для обработки сценариев "найдено" и "не найдено".
### Добавить или обновить запись
Создаёт новую запись или обновляет существующую на основе критериев сопоставления. Это полезно, если вы не уверены, существует ли уже запись.
<img src="/images/user-guide/workflows/upsert_double_identifier.png" style={{width:'100%'}} />
**Настройка**:
* Выберите целевой объект
* Обратите внимание, какие поля можно использовать для сопоставления: email — для People, домен — для Companies, ID — для любого объекта или любое поле, помеченное как Unique. Ниже нужно заполнить как минимум одно из них.
* Заполните значения полей. Не забудьте указать как минимум один уникальный идентификатор.
<Note>
**Сопоставление обычно работает даже лучше, если указывать только один уникальный идентификатор.** Например, на скриншоте ниже компании сопоставляются по их домену. Указывать ID не обязательно.
</Note>
<img src="/images/user-guide/workflows/upsert_simple_identifier.png" style={{width:'100%'}} />
* Используйте данные из предыдущих шагов для заполнения полей
**Как это работает**:
1. Ищет запись, соответствующую вашим критериям
2. Если найдена → обновляет существующую запись
3. Если не найдена → создает новую запись
**Вывод**: Данные созданной или обновленной записи доступны для использования в последующих шагах.
## Действия потока
### Итератор
**Перебирает массив записей**, возвращенный на предыдущем этапе, позволяя выполнять действия для каждой записи по отдельности.
**Настройка**:
* Выберите массив записей из предыдущего шага (например, результаты поиска записей, из ручного триггера с массовым доступом, из узла кода). Когда шаг Code или «Логическая функция» возвращает массив верхнего уровня, выберите параметр **Whole list**, чтобы выполнить цикл по всему результату.
* Определите действия, которые нужно выполнить для каждой записи в цикле.
<Note>
- Вы можете добавить несколько действий в Итератор.
- При использовании ветвей внутри Итератора убедитесь, что последний шаг каждой ветви соединяется с Итератором для закрытия цикла.
</Note>
* Доступ к полям `Current Item`: чтобы использовать поля записи, которая обрабатывается в данный момент, нажмите на шаг **Iterator**, затем выберите **Current item**. Будет отображен список доступных полей этой записи, и их можно выбрать для использования в последующих действиях. Вы также можете выбрать **Use the whole item**, чтобы передать весь текущий элемент на следующий шаг.
<VimeoEmbed videoId="1146577247" title="Видеодемонстрация" />
### Фильтр
Фильтрует записи на основе указанных условий, пропуская только записи, соответствующие критериям.
**Настройка**:
* Выберите запись для фильтрации
* Определите условия фильтрации и критерии
* Настройте, какие записи должны пройти через последующие шаги
<Note>
1. **Вывод**: Узлы фильтра не возвращают данные — они работают как шлюзы. Если условия выполнены, рабочий процесс продолжается. Если нет, рабочий процесс останавливается на этой ветке.
2. Оператор `IS` можно использовать с числовыми полями. Он работает как `EQUAL`.
</Note>
### Задержка
Приостанавливает выполнение рабочего процесса на указанное время или до определенной даты/времени.
**Типы задержек**:
| Тип | Описание |
| ------------------------ | ---------------------------------------------------------------- |
| **Длительность** | Ожидать заданный промежуток времени (дни, часы, минуты, секунды) |
| **Запланированная дата** | Ждать до определенной даты и времени |
**Настройка длительности**:
* Укажите дни, часы, минуты и/или секунды
* Объединяйте несколько единиц (например, 2 дня и 4 часа)
**Настройка запланированной даты**:
* Выберите дату и время
* Можно ссылаться на поле даты с предыдущего шага (например, связаться повторно через 3 дня после встречи)
**Сценарии использования**:
* Подождать 24 часа перед отправкой повторного письма
* Пауза до даты закрытия сделки
* Запланировать действия на рабочие часы
<Note>
Запланированная дата не может быть в прошлом. Если используется поле даты с предыдущего шага и эта дата уже прошла, рабочий процесс завершится с ошибкой.
</Note>
**Ограничения и кредиты**:
* **Нет максимального ограничения по длительности** — вы можете задавать задержки в минутах, днях, неделях или больше
* **Списывается 1 кредит** при выполнении узла Задержка, независимо от длительности
* **Кредиты не списываются** во время ожидания — задержка на 5 минут стоит столько же, сколько задержка на 5 дней
## Коммуникационные действия
### Отправить письмо
Отправляет email из вашего рабочего процесса. Подходит для шаблонных групповых писем. Письма будут выглядеть так же, как те, что вы отправляете из своего почтового ящика.
Это не подходит для рассылок (которые требуют более насыщенного форматирования) или автоматических последовательностей писем.
**Предварительные условия**: добавьте учетную запись электронной почты в Настройки → Учетные записи
**Настройка**:
* Выберите учетную запись электронной почты отправителя
<Note>
Вы можете отправлять письма только из почтовых ящиков, синхронизированных с вашей собственной учетной записью Twenty. Отправка из почтовых ящиков других участников команды (например, из электронной почты владельца учетной записи) запланирована.
</Note>
Для всех следующих шагов вы можете использовать переменные из предыдущих шагов для персонализации.
* Введите email-адрес получателя.
<Note>
На данный момент возможен только один получатель.
</Note>
* Установите строку темы.
* Составьте текст сообщения. Вы можете форматировать ссылки, создавать нумерованные списки, списки точек и добавлять вложения.
<Note>
Добавление HTML-подписей пока невозможно.
</Note>
### Форма
Выводит форму во время выполнения рабочего процесса для сбора информации от пользователя. Ответы затем можно использовать на последующих шагах для создания записей, отправки писем или выполнения любых других действий на основе введенных данных.
<Warning>
**Формы предназначены только для ручных триггеров**. Для рабочих процессов с другими триггерами (запись создана, обновлена и т. д.) формы доступны только через интерфейс запуска рабочего процесса, и это не ожидаемый пользователем опыт. В 2026 году будет открыт центр уведомлений, который будет надлежащим образом поддерживать формы в автоматизированных рабочих процессах.
</Warning>
**Настройка**:
* Настройте поля, которые пользователям предложат заполнить. Для каждого поля выберите
* тип: текст, число, дата, заданная запись, поле выбора. Поля из всех объектов доступны для выбора.
* метку
* значение по умолчанию в `Placeholder` (необязательно)
* Отредактируйте заголовок формы
**Вывод**: ответы формы доступны для использования в последующих шагах.
**Пример**: Рабочий процесс «Quick Lead» доступен по умолчанию во всех рабочих областях, доступных в любом месте в меню командного меню «Cmd+K».
**Как заполнить форму**:
* Запустите ручной рабочий процесс из командного меню `Cmd+K`
* Заполните форму, отображаемую в боковой панели, и нажмите `Submit`.
<Note>
Поля нельзя сделать обязательными.
</Note>
<VimeoEmbed videoId="1147277989" title="Видеодемонстрация" />
## Интеграционные действия
### Код
Выполняет кастомный JavaScript в вашем рабочем процессе.
Под капотом каждое действие Code поддерживается собственной **логической функцией** — серверной функцией на TypeScript, которая выполняется на платформе Twenty. Когда вы добавляете действие Code, Twenty создает для этого шага отдельную логическую функцию и открывает ее редактор прямо в интерфейсе, поэтому написанный вами код хранится вместе с рабочим процессом.
**Настройка**:
* Получайте доступ к переменным из предыдущих шагов. Вы можете динамически редактировать имена переменных.
<VimeoEmbed videoId="1147281795" title="Видеодемонстрация" />
* Напишите код JavaScript в редакторе
* Возвращайте переменные для использования в последующих шагах
* Проверяйте код непосредственно в шаге
<Note>
Если вам нужно использовать внешние ключи API в вашем коде, их необходимо вводить прямо в тело функции. Нельзя настроить ключи API в другом месте и ссылаться на них в логической функции.
</Note>
<Tip>
**Работаете с массивами?** Массивы из внешних систем или с предыдущих шагов могут приходить как строки. См. [Как обрабатывать массивы в действиях Code](/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions) для решения.
</Tip>
<Tip>
Нажмите квадратный значок в правом верхнем углу редактора кода, чтобы отобразить его на весь экран — это полезно, поскольку ширина редактора по умолчанию ограничена.
</Tip>
#### Повторное использование логической функции в рабочих процессах
Встроенное действие Code отлично подходит для разовой логики, но код, который оно содержит, принадлежит только этому одному шагу. Когда вы хотите использовать одну и ту же логику в нескольких рабочих процессах — или вести ее как версионируемый исходный код в приложении — определите **повторно используемую логическую функцию** вместо копирования и вставки кода в каждое действие Code.
Логическая функция определяется один раз в приложении (с помощью SDK-функции `defineLogicFunction`) и становится доступной в конструкторе рабочих процессов при добавлении `workflowActionTriggerSettings`. После установки вашего приложения эта функция появляется как отдельное действие в конструкторе рабочих процессов, наряду со встроенными действиями. При выборе этого действия отображаются объявленные вами поля ввода (с селекторами переменных, как и в других действиях) и выполняется ваш общий код — встроенный JavaScript не требуется.
| | Действие Code | Повторно используемая логическая функция |
| ---------------------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------- |
| **Где «живет» код** | Встроенный редактор, привязанный к одному шагу рабочего процесса | Определена в приложении, версионируется в системе контроля версий |
| **Повторное использование** | Копируется и вставляется для каждого шага | Добавляется как действие в любой рабочий процесс |
| **Вводы** | Переменные, подключенные в редакторе | Поля, отображаемые из объявленной вами схемы ввода |
| **Лучше всего подходит для** | Быстрая логика, специфичная для рабочего процесса | Общая логика, используемая в нескольких рабочих процессах |
Оба варианта работают в одной и той же среде выполнения логических функций, поэтому действие Code, которое вы прототипировали во встроенном режиме, позже можно с минимальными изменениями превратить в повторно используемую логическую функцию.
<Tip>
Разработчикам, которым нужна документация по определению логических функций и их публикации в конструкторе рабочих процессов, следует обратиться к разделу [Logic Functions](/l/ru/developers/extend/apps/logic/logic-functions) — в частности, к разделу **Exposing a function as an AI tool or workflow action** и настройкам `workflowActionTriggerSettings`.
</Tip>
### HTTP-запрос
Отправляет запрос внешнему API в рамках вашего рабочего процесса.
<img src="/images/user-guide/workflows/http_action.png" style={{width:'100%'}} />
**Настройка**:
* Введите URL конечной точки API. Можно использовать параметры из предыдущих шагов.
* Выберите метод HTTP (GET, POST, PUT, PATCH, DELETE)
* Добавьте необходимые заголовки и значения
* Предоставьте пример ответа для предварительного просмотра структуры
## Действия ИИ
### ИИ-агент — скоро
Запускает ИИ-агента внутри вашего рабочего процесса для выполнения интеллектуальных задач.
**Настройка**:
* **Агент**: Выберите существующего ИИ-агента или используйте агента по умолчанию
* **Промпт**: Напишите инструкцию для ИИ-агента
* Ссылайтесь на переменные из предыдущих шагов в промпте
**Что могут делать ИИ-агенты**:
* Анализировать и резюмировать данные
* Классифицировать или категоризировать записи
* Генерировать текстовый контент
* Принимать решения на основе данных
* Взаимодействовать с данными вашей CRM с помощью инструментов
**Вывод**: Ответ ИИ-агента доступен для использования в последующих шагах. Если у агента есть схема структурированного вывода, ответ будет соответствовать этому формату.
<Note>
Действия ИИ-агента потребляют кредиты рабочего процесса в зависимости от используемой модели ИИ. См. [Кредиты рабочих процессов](/l/ru/user-guide/workflows/capabilities/workflow-credits) для подробностей.
</Note>
<Note>
ИИ-агенты соблюдают права доступа на основе ролей. Вы можете назначать агентам конкретные роли в разделе **Настройки → Участники → Роли**, чтобы контролировать, к каким данным у них есть доступ. См. [Разрешения](/l/ru/user-guide/permissions-access/capabilities/permissions) для подробностей.
</Note>

View File

@@ -0,0 +1,66 @@
---
title: Ветки рабочего процесса
description: Создавайте параллельные пути и условную логику в ваших рабочих процессах.
---
Ветви позволяют разделить рабочий процесс на несколько путей, которые могут выполняться одновременно или условно, в зависимости от ваших данных.
<img src="/images/user-guide/workflows/branches.png" style={{width:'100%'}} />
## Как работают ветви
Когда вы создаёте несколько соединений от одного узла, каждый путь становится ветвью. По умолчанию **все ветви выполняются параллельно** — они не ждут друг друга.
## Создание ветвей
### Добавить новую ветвь
1. **Щёлкните правой кнопкой мыши по основному полотну** рабочего процесса (не по существующему узлу)
2. Нажмите **Добавить узел**
3. Выберите тип узла для новой ветви
4. Перетащите стрелку от нижней части предыдущего шага к верхней части этого нового действия
5. Повторите, чтобы добавить больше ветвей от того же узла
<Note>
Каждая ветвь независима. Добавление ветви не влияет на другие существующие пути от этого узла.
</Note>
### Визуальный макет
В редакторе рабочего процесса ветви отображаются как параллельные пути. Вы можете перетаскивать узлы, чтобы изменить визуальный макет, не влияя на выполнение.
## Условные ветви
Поскольку по умолчанию все ветви выполняются, используйте узлы **Фильтр**, чтобы контролировать, какие пути фактически выполняются:
| Ветвь | Условие фильтра | Действие |
| ----- | ------------------- | -------------------------------------------- |
| A | Этап = "Выиграно" | Отправить поздравительное электронное письмо |
| B | Этап = "Проиграно" | Создать задачу последующих действий |
| С | Этап = "Переговоры" | Уведомить менеджера |
1. Создавайте ветви от вашего триггера или действия
2. Добавьте узел **Фильтр** как первый шаг каждой ветви
3. Настройте каждый фильтр с взаимоисключающими условиями
4. Добавьте свои действия после каждого фильтра
Продолжит выполняться только та ветвь (ветви), где условие фильтра выполнено.
## Объединение ветвей
**Ветви не объединяются автоматически.** Каждая ветвь выполняется независимо, пока не завершится. У вас полная свобода в том, как с этим поступать:
* **Вариант 1: Оставить ветви раздельно**
Каждая ветвь самостоятельно обрабатывает свои последующие действия. Это самый простой подход, когда ветвям не нужно сходиться.
* **Вариант 2: Объединить ветви вручную**
При создании рабочего процесса вы можете вручную подключить несколько ветвей к одному последующему действию. Просто перетащите стрелки от конца каждой ветви к общему узлу.
<Note>
Хотя вы можете использовать узел [Задержка](/l/ru/user-guide/workflows/capabilities/workflow-actions#delay) для приостановки выполнения, его пока нельзя настроить на ожидание "пока не завершится другая ветвь".
</Note>
## Связанные материалы
* [Как использовать ветви в рабочих процессах](/l/ru/user-guide/workflows/capabilities/use-branches-in-workflows) - Пошаговое руководство
* [Действия рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-actions) - Доступные действия, включая Фильтр

View File

@@ -0,0 +1,75 @@
---
title: Кредиты рабочих процессов
description: Разберитесь с потреблением и управлением кредитами рабочих процессов.
---
Кредиты рабочих процессов обеспечивают работу ваших автоматизаций в Twenty. Понимание принципов их работы помогает оптимизировать затраты и эффективно управлять бюджетом автоматизации.
## Распределение кредитов
Кредиты рабочих процессов начисляются по вашему платёжному циклу, а не по уровню плана:
| Платёжный цикл | Кредиты |
| ------------------------ | ------------------ |
| **Ежемесячная подписка** | 5 кредитов в месяц |
| **Годовая подписка** | 50 кредитов в год |
<Note>
5 кредитов в месяц — щедрый лимит для стандартных автоматизаций. Большинство команд не превысят этот лимит при типичном использовании рабочих процессов. Дополнительные кредиты в основном нужны для продвинутых действий Code и рабочих процессов на базе ИИ.
</Note>
## Как работает потребление кредитов
Кредиты расходуются при выполнении рабочих процессов, а не при их создании. Каждое действие рабочего процесса потребляет кредиты в зависимости от своей сложности:
### Потребление кредитов по типу действия
* **Основные внутренние операции**: Очень низкое потребление кредитов
* Поиск записей
* Создать запись
* Обновление записи
* Удаление записи
* Действия с формой
* **Сложные операции**: Более высокое потребление кредитов
* Действия с кодом (выполнение JavaScript)
* HTTP-запросы к внешним сервисам
* **Функции ИИ**: Более высокое потребление кредитов
* Действия ИИ-агента потребляют кредиты в зависимости от используемой модели ИИ
* Более сложные запросы и более длинные ответы расходуют больше кредитов
* **Действия Delay**: Минимальное потребление кредитов
* Узел Delay потребляет **1 кредит** при выполнении
* **Во время ожидания кредиты не потребляются**
* Задержка на 5 минут стоит столько же, сколько задержка на 5 дней
### Списание в реальном времени
Кредиты списываются в режиме реального времени при выполнении рабочих процессов. Это означает, что:
* Черновые рабочие процессы не потребляют кредиты
* Только активные, выполняемые рабочие процессы используют ваш кредитный лимит
* Неудавшиеся рабочие процессы все равно потребляют кредиты за выполненные шаги
## Управление кредитами
### Проверить использование кредитов
1. Перейдите в **Настройки → Оплата**
2. Просмотрите текущее потребление кредитов и оставшийся баланс
3. Отслеживайте шаблоны использования, чтобы оптимизировать ваши рабочие процессы
### Приобретение дополнительных кредитов
Если вам нужно больше кредитов, чем в вашем лимите плана:
1. Перейдите в **Настройки → Оплата**
2. Нажмите на опцию, чтобы приобрести дополнительные кредиты. Доступны пакеты разного размера.
3. Кредиты добавляются к вашему текущему балансу
## Лучшие практики
* **Пакетная обработка**: Используйте массовые операции и действия с Итератором эффективно, чтобы сократить количество отдельных вызовов действий
* **Оптимизация ручного запуска**: Для ручных триггеров выберите вариант `Bulk`, чтобы обработать несколько записей за один запуск рабочего процесса
* Оптимизируйте действия с кодом для повышения эффективности

View File

@@ -0,0 +1,93 @@
---
title: Запуски рабочего процесса
description: Отслеживайте и управляйте запусками рабочих процессов.
---
## О запусках
**Запуск** — это запись выполнения рабочего процесса. Каждый раз, когда срабатывает триггер рабочего процесса — будь то событие записи, расписание, ручное действие или вебхук — создаётся новый запуск.
## Просмотр запусков
### В редакторе рабочего процесса
1. Откройте рабочий процесс, который хотите отслеживать
2. Нажмите на панель **Запуски** справа
3. Посмотрите список последних запусков со статусами
### В разделе «Запуски рабочего процесса»
1. Перейдите в **Запуски рабочего процесса** в боковой панели
2. Просматривайте запуски по всем рабочим процессам
3. Фильтруйте по статусу, рабочему процессу или дате
## Статусы запусков
| Статус | Описание |
| --------------- | ---------------------------------------------------------------------------------------- |
| **Выполняется** | Рабочий процесс выполняется |
| **Завершено** | Рабочий процесс успешно завершён |
| **Не удалось** | Рабочий процесс столкнулся с ошибкой и остановился |
| **Ожидание** | Рабочий процесс приостановлен (например, ожидает действия «Задержка» или отправки формы) |
## Сведения о запуске
Нажмите на любой запуск, чтобы просмотреть:
* **Статус**: текущее состояние запуска
* **Начато**: время начала запуска
* **Длительность**: сколько времени занял запуск
* **Данные триггера**: входные данные, запустившие рабочий процесс
* **Результаты шагов**: данные, возвращённые каждым шагом
* **Сообщения об ошибках**: если запуск не удался, что пошло не так
## Пошаговое выполнение
Каждый запуск показывает прохождение по вашему рабочему процессу:
1. Смотрите, какие шаги завершились успешно
2. Определите, где произошли сбои
3. Просматривайте данные, передаваемые между шагами
4. Отлаживайте проблемы, изучая входные и выходные данные шагов
## Обработка ошибок
Если запуск не удался:
1. Откройте запуск со сбоем
2. Найдите шаг, вызвавший сбой
3. Посмотрите подробности в сообщении об ошибке
Распространённые проблемы:
* Отсутствуют обязательные поля
* Недопустимый формат данных
* Ошибки внешнего API
* Проблемы с правами доступа
## Повторный запуск рабочих процессов
Если запуск не удался, вы можете:
* Исправьте основную проблему и дождитесь следующего срабатывания триггера
* Для ручных рабочих процессов запустите снова с теми же или обновлёнными данными
* Проверьте логику рабочего процесса, чтобы предотвратить будущие сбои
## Рекомендации по производительности
### Управление историей запусков
* Запуски сохраняются для истории
* Очень старые запуски могут архивироваться автоматически
* Экспортируйте данные запусков, если нужно сохранить их для учёта
### Лучшие практики мониторинга
* Регулярно проверяйте запуски после активации новых рабочих процессов
* Анализируйте неудавшиеся запуски, чтобы выявить закономерности
## Связанные материалы
* [Триггеры рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
* [Действия рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-actions)
* [Устранение неполадок рабочего процесса](/l/ru/user-guide/workflows/how-tos/need-more-help/workflow-troubleshooting)

View File

@@ -0,0 +1,136 @@
---
title: Триггеры рабочего процесса
description: Узнайте о различных триггерах, которые запускают ваши рабочие процессы.
---
## О триггерах
Рабочие процессы всегда начинаются с единственного триггера, который определяет, когда должна выполняться автоматизация.
<img src="/images/user-guide/workflows/workflow_triggers.png" style={{width:'100%'}} />
<Tip>
**Поддерживаются расширенные объекты!** Помимо стандартных объектов CRM (люди, компании, сделки), вы также можете запускать рабочие процессы и выполнять действия с:
* Участники рабочего пространства
* События календаря
* Сообщения (электронные письма)
* Задачи, заметки и многие другие системные объекты
Это открывает возможности мощной автоматизации, например уведомление участников команды при создании событий календаря или автоматическую обработку входящих писем.
</Tip>
## Запись создана
Запускает рабочий процесс, когда новая запись создается в выбранном объекте (Люди, Компании, Возможности или любой пользовательский объект).
**Настройка**: Выберите тип объекта для отслеживания новых записей.
<Note>
* Этот триггер отлично подходит для записей, созданных CSV, почтового ящика и синхронизации календаря или API.
* **Не рекомендуется для записей, создаваемых вручную**: с этим триггером рабочие процессы запускаются сразу после создания записи. Поскольку двадцать пользовательский интерфейс предлагает автосохранение на лету (нет режима редактирования, а затем проверка для сохранения записей), рабочий процесс будет срабатывать перед вводом пользователем всех полей.
Чтобы запускать этот рабочий процесс для записей, создаваемых вручную, рекомендуется вместо этого использовать триггер `Record is created or updated`.
</Note>
## Запись обновлена
Запускает рабочий процесс, когда в существующую запись вносятся изменения.
**Настройка**:
* Выберите тип объекта
* При необходимости укажите, какие поля отслеживать на предмет изменений
## Запись обновлена или создана
Запускает рабочий процесс, когда запись либо создается, либо обновляется в выбранном объекте.
**Почему это важно**: Этот триггер особенно полезен, потому что записи, созданные разными методами, ведут себя по-разному:
* **Импорт через API/CSV**: Записи создаются сразу со всеми заполненными полями
* **Ручное создание**: Записи создаются сначала, затем поля добавляются в последующих обновлениях
**Настройка**:
* Выберите тип объекта для отслеживания
* При необходимости укажите, какие поля отслеживать на предмет изменений
* Рабочий процесс будет запускаться как при первоначальном создании, так и при последующих обновлениях
## Запись удалена
Запускает рабочий процесс при удалении записи из объекта.
**Настройка**: Выберите тип объекта для отслеживания удалений.
## Ручной триггер
Запускает рабочий процесс, когда он инициируется пользователем. Доступ к этому триггеру можно получить через меню `Cmd+K` или с помощью настраиваемой кнопки, которая будет отображаться на верхней панели навигации после выбора записей.
<img src="/images/user-guide/workflows/add_to_newsletter_button.png" style={{width:'100%'}} />
**Настройка доступности**: Выберите, как рабочий процесс должен обрабатывать выбор записи:
* **Глобально**: Для запуска этого рабочего процесса запись не требуется. Рабочий процесс запускается из командного меню «Cmd+K» где угодно (из любого объекта) и не использует запись(и) в качестве входа.
Для доступности **сингл** и **Bulk**, выбранная запись (ы) будет передана вашему рабочему процессу. Это настроено для данного объекта, и можно выбрать несколько записей перед запуском рабочего процесса.
* **Сингл**: Рабочий процесс будет работать от начала до конца столько раз, сколько будут выбраны записи.
<Note>
**Мягкий лимит: 100 запусков в минуту**. При превышении этого значения рабочие процессы остаются в статусе "Not Started" и обрабатываются постепенно — либо фоновой задачей, либо когда другой рабочий процесс попадает в очередь. Это означает, что вы можете выбрать более 100 записей с помощью одного триггера; выполнение просто будет медленнее.
</Note>
* **Bulk**: Рабочий процесс будет работать один раз, представляя весь список записей в качестве входных данных. Это означает, что рабочий процесс должен содержать [действие Iterator](/l/ru/user-guide/workflows/capabilities/workflow-actions#iterator).
<Note>
Это более продвинутый вариант и лучше всего подходит для тех, кто хочет оптимизировать количество запусков рабочего процесса.
</Note>
<img src="/images/user-guide/workflows/manual_trigger.png" style={{width:'100%'}} />
**Дополнительная настройка**:
* Выберите целевой объект (для одиночной и групповой доступности)
* Выберите значок команды для запуска рабочего процесса
* Настройте размещение в навигационной панели (Закреплено или Не закреплено)
**Методы доступа**:
* Меню `Cmd+K` для поиска и запуска ручных рабочих процессов
* Пользовательская кнопка в верхней навигационной панели (если настроено)
## Триггер по времени: по расписанию
Запускает рабочий процесс на регулярной основе, которую вы определяете.
**Настройка**:
* Выберите единицу времени (минуты, часы, дни)
* Введите значение или используйте пользовательские cron-выражения для сложного планирования
<Note>
**Часовой пояс**: Запланированные рабочие процессы выполняются в **UTC**. При указании часов для ежедневных расписаний переводите ваше местное время в UTC.
</Note>
## Внешний триггер: вебхук
Запускает рабочий процесс при получении GET или POST-запроса от внешнего сервиса.
<img src="/images/user-guide/workflows/webhook_trigger.png" style={{width:'100%'}} />
**Настройка**:
* Рабочий процесс предоставляет уникальный URL вебхука — скопируйте его и добавьте в вашу внешнюю систему в качестве вызываемой конечной точки.
* Для запросов POST определите ожидаемую структуру тела, чтобы система Twenty понимала, какие данные ожидать. Добавьте здесь поля, которые вы получите и которые понадобятся ниже в вашем рабочем процессе.
* Настройте аутентификацию (скоро будет).
## Выбор подходящего триггера
| Сценарий использования | Рекомендуемый триггер |
| -------------------------------------- | ---------------------------- |
| Новые лиды требуют обработки | Запись создана |
| Изменения данных требуют синхронизации | Запись обновлена |
| Импорт/ручная обработка данных | Запись обновлена или создана |
| Очистка после удаления | Запись удалена |
| Действие, инициированное пользователем | Запуск вручную |
| Регулярные отчеты | По расписанию |
| Внешняя интеграция | Вебхук или по расписанию |

View File

@@ -0,0 +1,84 @@
---
title: Версии рабочего процесса
description: Управление версиями и черновиками рабочего процесса.
---
## О версиях
Каждый раз, когда вы активируете рабочий процесс, создается новая версия. Это позволяет отслеживать изменения со временем и при необходимости возвращаться к предыдущим конфигурациям.
## Статусы версий
| Статус | Описание |
| ----------------- | ---------------------------------------- |
| **Черновик** | Редактируется, еще не опубликован |
| **Активный** | Активная версия, реагирующая на триггеры |
| **Деактивирован** | Ранее активная, но остановлена вручную |
| **Архивирован** | Прошлые версии, сохраненные для истории |
## Работа с черновиками
Когда вы редактируете активный рабочий процесс, ваши изменения сохраняются как **черновик**. Активная версия продолжает работать, пока вы работаете над обновлениями.
По завершении редактирования вы можете:
* **Активировать**: опубликовать черновик как новую активную версию (предыдущая версия будет архивирована)
* **Удалить**: удалить черновик и сохранить текущую активную версию
## История версий
### Просмотр прошлых версий
1. Откройте рабочий процесс
2. Нажмите вкладку **Версии**
3. Просмотрите все предыдущие версии с временными метками
### Восстановление версии
1. Найдите версию, которую хотите восстановить
2. Нажмите **Использовать как черновик**
3. Версия копируется в новый черновик
4. Внесите все необходимые изменения
5. Активируйте, когда будете готовы
## Лучшие практики
### Управление версиями
* Активируйте только когда готовы к использованию в продакшене
* Вносите между версиями только значимые изменения
* Документируйте существенные изменения в названиях или описаниях рабочих процессов
* Тестируйте в режиме черновика перед активацией
### Откат изменений
* Если новая версия вызывает проблемы, восстановите предыдущую версию
* Используйте историю версий, чтобы отслеживать, что изменилось
* Всегда тестируйте восстановленные версии перед активацией
## Распространенные рабочие процессы
### Быстрое редактирование
1. Внесите небольшие изменения в активный рабочий процесс
2. Протестируйте в режиме черновика
3. Активируйте новую версию
### Существенная переработка
1. Используйте предыдущую версию в качестве отправной точки
2. Вносите существенные изменения в черновике
3. Тщательно протестируйте все сценарии
4. Активируйте, когда будете уверены
### Откат
1. Определите проблему в текущей версии
2. Найдите последнюю рабочую версию в истории
3. Нажмите **Использовать как черновик**
4. Активируйте, чтобы восстановить прежнее поведение
## Связанные материалы
* [Начало работы с рабочими процессами](/l/ru/user-guide/workflows/overview)
* [Запуски рабочих процессов](/l/ru/user-guide/workflows/capabilities/workflow-runs)