# Использование данных из ответа вебхука в Journey

## Обзор

Когда вы [сопоставляете значения из ответа вебхука](/ru/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables), Pushwoosh сохраняет их как переменные, которые вы можете использовать позже в Journey везде, где вы могли бы использовать [атрибут Event](/ru/product/audience-data-and-segmentation/events/#2-set-attributes).

<Aside type="note">
Чтобы добавить элемент **Webhook** и настроить **Сопоставление ответа**, см. [Webhook](/ru/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables).
</Aside>

## Сохранение значения из вебхука в качестве Tag с помощью элемента «Обновить профиль пользователя»

[**Webhook**](/ru/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables) может возвращать данные из внешней системы, например, ID пользователя в CRM или статус подписки, которые Pushwoosh еще не хранит в профиле пользователя. Элемент [**Обновить профиль пользователя**](/ru/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response) сохраняет сопоставленные значения как [Tags](/ru/product/audience-data-and-segmentation/user-data-tags/tags/), чтобы вы могли использовать их в [сегментах](/ru/product/audience-data-and-segmentation/segmentation/), [динамическом контенте](/ru/product/personalization/dynamic-content/) и на последующих шагах Journey.

### Пример: сохранение ID пользователя из CRM в качестве Tag

Новый пользователь регистрируется в вашем приложении, и Journey создает соответствующую запись в вашей CRM. Сохранение возвращенного ID пользователя из CRM в качестве Tag позволяет вам ссылаться на ту же запись в CRM или обновлять ее позже, например, из другого Journey или при последующем вызове Webhook, вместо того чтобы каждый раз создавать дубликат записи, когда пользователь снова входит в Journey.

**Схема Journey:** Вход по триггеру → Webhook → Обновить профиль пользователя → Выход

1.  Создайте Journey с **входом по триггеру** по событию `SignUp`.
2.  Добавьте элемент **Webhook** после шага входа. Назовите его (например, `Create user in CRM`) и установите URL запроса на эндпоинт создания пользователя в вашей CRM.
3.  В разделе **Сопоставление ответа** установите **Path** на поле ID в ответе (например, `data.user.id`) и **Attribute** на `crm_user_id`.

<img src="/journey-elements-webhook-response-data-1.webp" alt="Сопоставление ответа вебхука с Path data.user.id и Attribute crm_user_id" />

4.  Добавьте элемент **Обновить профиль пользователя** после шага **Webhook**.

5.  В разделе **Динамическое значение Tag** нажмите **+ Динамическое значение**. В поле **Tag** выберите Tag, в котором хранится CRM ID (при необходимости создайте его заранее). В поле **Event** выберите шаг вебхука по заданному вами имени (`Create user in CRM`). В поле **Динамическое значение** выберите `crm_user_id`.
    <img src="/journey-elements-webhook-response-data-2.webp" alt="Динамическое значение Tag с Tag для CRM ID, шагом Webhook и Dynamic Value crm_user_id" />
6.  Добавьте **Выход** в конце ветки.
    <img src="/journey-elements-webhook-response-data-3.webp" alt="Ветка Journey, заканчивающаяся шагом Exit после шага «Обновить профиль пользователя»" />

<Aside type="caution">
Если значение из вебхука отсутствует для пользователя (ответ не был в формате JSON, **Path** не был найден или вызов не удался), Pushwoosh пропустит обновление этого Tag. Tag сохранит свое предыдущее значение или останется неустановленным, и Journey продолжится без ошибки на этом шаге. Запустите [**Тестировать вебхук**](/ru/product/customer-journey/journey-elements/channels/webhook/#test-the-webhook) перед запуском, чтобы подтвердить правильность сопоставления. [Узнать больше](/ru/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response).
</Aside>

## Планирование задержки на основе значения из вебхука с помощью элемента «Задержка по времени»

Даты визитов, сроки продления и окна доставки часто хранятся во внешней системе бронирования или биллинга. После того как [**Webhook**](/ru/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables) сопоставит дату из ответа API, элемент [**Задержка по времени**](/ru/product/customer-journey/journey-elements/flow-controls/time-delay/#use-a-date-from-a-webhook-response) может приостановить Journey до этого момента, например, за 2 дня до встречи, чтобы следующее сообщение было отправлено вовремя.

### Пример: планирование напоминания на основе даты из ответа

Пользователь записывается на прием в вашем приложении. Journey получает дату визита из вашей системы бронирования и отправляет push-напоминание за 2 дня до визита.

1.  Создайте Journey с **входом по триггеру** по событию `AppointmentBooked`.
2.  Добавьте элемент **Webhook** после шага входа. Назовите его (например, `Get appointment details`) и установите URL запроса на API вашей системы бронирования.
3.  В разделе **Сопоставление ответа** установите **Path** на поле даты в ответе (например, `appointment.date`) и **Attribute** на `visit_date`.
    <img src="/journey-elements-webhook-response-data-4.webp" alt="Шаг Webhook с сопоставлением ответа для appointment.date в visit_date" />
4.  Добавьте элемент **Задержка по времени** после шага **Webhook**. Выберите **На основе данных пользователя/события**, установите **Получить дату из** в **Event**, установите **Event** на шаг вебхука по заданному вами имени (`Get appointment details`), установите **Значение Event** на `visit_date` и установите задержку на **За** `2` **дня**.
    <img src="/journey-elements-webhook-response-data-5.webp" alt="Элемент «Задержка по времени», настроенный на основе visit_date из вебхука со смещением «За 2 дня»" />
5.  Если пользователи могут записаться менее чем за 2 дня до визита, включите опцию **Разделить на ветки, если дата в прошлом или пуста** в элементе **Задержка по времени**. Это создаст две ветки: **В прошлом** и **В будущем**. См. [Разделение на ветки, если дата в прошлом или пуста](/ru/product/customer-journey/journey-elements/flow-controls/time-delay/#split-branches-when-the-date-is-in-the-past-or-empty).
6.  Добавьте шаг **Push** с вашим сообщением-напоминанием. Если разделение включено, добавьте этот **Push** в обе ветки: **В прошлом** (отправить немедленно) и **В будущем** (после **Задержки по времени**).
7.  Добавьте **Выход** в конце каждой ветки.
    <img src="/journey-elements-webhook-response-data-6.webp" alt="«Задержка по времени», разделенная на ветки «В прошлом» и «В будущем», каждая с шагами Push и Exit" />

<Aside type="caution">
Если сопоставленное значение отсутствует или не является допустимой датой, пользователь выходит из Journey с ошибкой на этом шаге.

Если до визита осталось менее 2 дней, целевая дата **За** `2` **дня** уже находится в прошлом, когда пользователь достигает элемента **Задержка по времени**, и пользователь покидает Journey без ошибки и без напоминания, если вы не включите опцию **Разделить на ветки, если дата в прошлом или пуста**.

В отличие от элемента [**Обновить профиль пользователя**](/ru/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response), который оставляет Tag без изменений и продолжает выполнение, **Задержка по времени** останавливает пользователя, если дата отсутствует, недействительна или находится в прошлом (без разделения на ветки).
Убедитесь, что ваш вебхук надежно возвращает дату в [поддерживаемом формате](/ru/product/customer-journey/journey-elements/flow-controls/time-delay/#delay-based-on-user-or-event-data). Запустите [**Тестировать вебхук**](/ru/product/customer-journey/journey-elements/channels/webhook/#test-the-webhook) перед запуском. [Узнать больше](/ru/product/customer-journey/journey-elements/flow-controls/time-delay/#use-a-date-from-a-webhook-response).
</Aside>

## Что нужно учесть

*   **Синтаксис Path:** используйте путь, разделенный точками (например, `data.user.id`). Подстановочные знаки и фильтры не поддерживаются. Подробнее см. в разделе [Сопоставление ответа вебхука](/ru/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables).
*   **Размер ответа:** ответы размером более 64 КБ не обрабатываются для сопоставления.
*   **Тестирование:** запустите [**Тестировать вебхук**](/ru/product/customer-journey/journey-elements/channels/webhook/#test-the-webhook) в элементе **Webhook** перед тем, как использовать сопоставленные значения в активном Journey.