> ## Documentation Index
> Fetch the complete documentation index at: https://docs.twenty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Настройка триггера вебхука

> Получайте данные из внешних сервисов, чтобы запускать рабочие процессы.

Триггеры вебхуков позволяют внешним сервисам запускать ваши рабочие процессы, отправляя данные на уникальный URL. Используйте их для подключения форм, сторонних приложений и пользовательских интеграций.

## Когда использовать вебхуки

| Сценарий использования          | Пример                                     |
| ------------------------------- | ------------------------------------------ |
| **Веб-формы**                   | Отправки формы обратной связи создают лиды |
| **Сторонние приложения**        | Платеж в Stripe → создать запись клиента   |
| **Пользовательские интеграции** | Ваше приложение → автоматизация Twenty     |
| **Инструменты без кода**        | Подключения Zapier, Make, n8n              |

## Пошаговая настройка

### Шаг 1: Создайте рабочий процесс

1. Перейдите в **Настройки → Рабочие процессы**
2. Нажмите **+ Новый рабочий процесс**
3. Дайте ему имя (например, "Отправка формы на сайте")

### Шаг 2: Настройте триггер вебхука

1. Нажмите на блок триггера
2. Выберите **Вебхук**
3. Вы получите уникальный URL вебхука, например:
   ```
   https://api.twenty.com/webhooks/workflow/abc123...
   ```
4. Скопируйте этот URL — он понадобится вашему внешнему сервису

### Шаг 3: Определите ожидаемую структуру данных

Для **POST**-запросов определите ожидаемую структуру тела:

1. Нажмите **Определить ожидаемое тело**
2. Введите пример JSON, который ваш сервис будет отправлять:

```json theme={null}
{
  "firstName": "John",
  "lastName": "Doe",
  "email": "john@example.com",
  "company": "Acme Inc",
  "message": "Interested in your product"
}
```

3. Нажмите **Сохранить** — это создаст переменные, которые можно использовать на следующих шагах

### Шаг 4: Добавьте действия

Теперь добавьте действия, которые используют данные вебхука:

**Пример: Создать запись Person**

1. Добавьте действие **Создать запись**
2. Выберите объект **People**
3. Сопоставьте поля:

| Поле              | Значение                                                  |
| ----------------- | --------------------------------------------------------- |
| Имя               | `{{trigger.body.firstName}}`                              |
| Фамилия           | `{{trigger.body.lastName}}`                               |
| Электронная почта | `{{trigger.body.email}}`                                  |
| Компания          | Найдите или создайте на основе `{{trigger.body.company}}` |

### Шаг 5: Протестируйте вебхук

Перед активацией протестируйте вебхук:

**С помощью cURL**:

```bash theme={null}
curl -X POST https://api.twenty.com/webhooks/workflow/abc123... \
  -H "Content-Type: application/json" \
  -d '{"firstName":"Test","lastName":"User","email":"test@example.com"}'
```

**С помощью Postman или аналогов**:

1. Создайте POST-запрос на URL вашего вебхука
2. Установите заголовок Content-Type в `application/json`
3. Добавьте тестовое тело JSON
4. Отправьте и проверьте запуски рабочего процесса

### Шаг 6: Активируйте

После тестирования нажмите **Активировать**, чтобы сделать рабочий процесс активным.

## Обработка разных структур данных

### Вложенные данные

Если ваш вебхук отправляет вложенные данные:

```json theme={null}
{
  "contact": {
    "name": "John Doe",
    "email": "john@example.com"
  },
  "source": "website"
}
```

Обращайтесь так: `{{trigger.body.contact.email}}`

### Массивы

Если данные включают массивы:

```json theme={null}
{
  "items": [
    {"name": "Product A", "qty": 2},
    {"name": "Product B", "qty": 1}
  ]
}
```

То, как обрабатывать массивы, зависит от сценария использования:

**Неизвестное количество элементов → Используйте Iterator**

Если нужно обработать каждый элемент массива (например, создать запись для каждого), добавьте действие **Code** для разбора массива, затем используйте **Iterator**:

```javascript theme={null}
export const main = async (params: { items: any }) => {
  const items = typeof params.items === "string"
    ? JSON.parse(params.items)
    : params.items;
  return { items };
};
```

Затем используйте Iterator для перебора: `{{code.items}}`

**Известные/конкретные поля → Извлеките в именованные поля**

Если массив содержит конкретные поля, к которым нужно обращаться по отдельности (например, ответы формы, где позиция 0 — всегда "имя", позиция 1 — всегда "фамилия"), добавьте действие **Code** для их извлечения:

```javascript theme={null}
export const main = async (params: { items: any }) => {
  const items = typeof params.items === "string"
    ? JSON.parse(params.items)
    : params.items;

  return {
    product: {
      name: items[0]?.name || "",
      qty: items[0]?.qty || 0
    }
  };
};
```

Теперь вы можете выбирать `product.name` и `product.qty` по отдельности на следующих шагах.

<Tip>
  Для получения подробностей об обработке массивов см. [Обработка массивов в действиях Code](/l/ru/user-guide/workflows/how-tos/advanced-configurations/handle-arrays-in-code-actions).
</Tip>

## Связанные материалы

* [Триггеры рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-triggers)
* [Действия рабочего процесса](/l/ru/user-guide/workflows/capabilities/workflow-actions)
