Как использовать ответы вебхуков в сценариях
В сценариях можно не только вызывать вебхук, но и принимать ответ на запрос и продвигать клиента по цепочке в зависимости от полученного результата.
Можно использовать как сам факт успешной доставки вебхука, так и конкретные значения из ответа.
Сценарий по статусу вызова
Пример задачи: клиент должен подтвердить учетную запись с помощью Flash Call, который вызывается через вебхук. Если вебхук успешно отправлен и сервис ответил 2хх (код успеха), то сценарий завершается. Если же сервис ответил ошибкой, то нужно отправить email с ссылкой подтверждения.
Настройка вебхука
Для создания вебхука следуйте инструкции.
Чтобы он мог принимать ответы, обязательны следующие шаги:
- Добавьте параметр ${WebhookRequest.TransactionalId}в адрес, заголовок или тело запроса.

- Добавьте заголовок Accept:application/json
Заголовок можно указать в точке интеграции или задать в конкретном вебхуке.

- Включите обработку ответа с помощью настройки «Принимать ответы в формате JSON»:

Настройка сценария
Чтобы использовать ответ вебхука, в сценарии должны быть:
- Блок «Группа шагов» с отправкой корректно настроенного вебхука:

При выборе подходящей механики появляется уведомление о возможности проверить ответ.
- Блок «Условие» с проверкой по «Ответу вебхука»:

- Если сервис ответит на вызов HTTP-кодом 2xx, событие уйдет в ветку «Да».
        - В вебхуках с переменными также обязательно должны быть получены значения для всех переменных, даже если стоит проверка только на статус ответа.
 
- Если ответ не будет получен в течение 30 секунд или в ответе придет код 5xx или 429, вебхук попробует отправиться ещё 3 раза с промежутком в 6 минут. После трех неудачных попыток отправки событие уйдет в ветку «Нет».
- Если вернется ответ с кодами 4xx (кроме 429), либо вебхук не удастся сформировать из-за ошибок в шаблонизаторе, событие также уйдет в ветку «Нет».
- Продолжения для веток по успешному и неуспешному вызову.

Сценарий по данным из ответа
Пример задачи: сервис генерирует для клиентов уникальные промокоды. Нужно отправить телефон пользователя в данный сервис с помощью вебхука, получить для него промокод из ответа и записать его в карточку клиента.
Настройка вебхука
Для создания вебхука следуйте инструкции.
Чтобы он мог принимать ответы, обязательны следующие шаги:
- Добавьте параметр ${WebhookRequest.TransactionalId}в адрес, заголовок или тело запроса.

- Добавьте заголовок Accept:application/json
Заголовок можно указать в точке интеграции или задать в конкретном вебхуке.

- Включите обработку ответа с помощью настройки «Принимать ответы в формате JSON»:

3.1. Нажмите «Добавить переменную».
- Название — придумайте имя переменной, в которую будет записано значение из ответа вебхука.
- Полное название — автоматически составляется из префикса Webhooks, системного имени вебхука и заданного названия переменной. Именно полное название будет использоваться в сценарях для записи в карточку клиента и в рассылках для подстановки значения. Например, для переменной codeполное название будетWebhooks.WebWebhookW.code
- Путь в теле ответа — откуда брать значение для переменной.
Как заполнить путь в теле ответа
Для этого нужно знать, как выглядит ответ от сервиса.
Например, возвращается следующий код:
{
            "firstName": "Павел",
            "promocode": {
                "promocodeValue": "QWERTY",
                "promocodeId": "1"
            },
            "subjects": [
                "Art",
                "History"
            ],
            "subscriptions": [
                {
                    "pointOfContact": "Email",
                    "isSubscribed": "true"
                },
                {
                    "pointOfContact": "SMS",
                    "isSubscribed": "false"
                }
            ]
        }
        Путь к разным данным:
- невложенный параметр ("Павел") — просто ключ (firstName);
- параметр в объекте ("QWERTY") — верхнеуровневые объекты и название ключа через точку (promocode.promocodeValue);
- параметр в массиве ("Art") — название массива и индекс элемента в квадратных скобках (subjects[0]);
- параметр в объекте массива ("true") — название массива и индекс элемента в квадратных скобках, название ключа через точку (subscriptions[0].isSubscribed).
Получается, для обращения к промокоду в ответе путь — promocode.promocodeValue

Корректность выражений можно проверить с помощью онлайн-сервисов, например https://jsonpath.com
Настройка сценария
Чтобы использовать ответ вебхука, в сценарии должны быть:
- Блок «Группа шагов» с отправкой корректно настроенного вебхука:

При выборе подходящей механики появляется уведомление о возможности проверить ответ.
- Блок «Условие» с проверкой по «Ответу вебхука».
В условиях автоматически ставится проверка по успешной отправке:
- Если сервис ответит на вызов вебхука HTTP-кодом 2xx и переменная из ответа пройдет проверку, событие уйдет в ветку «Да».
        - При наличии других переменных в вебхуке для них также обязательно должны быть получены значения, даже если они не проверяются в сценарии
 
- Если в ответе придет код 5xx или 429, вебхук попробует отправиться ещё 3 раза с промежутком в 5 минут. После трех неудачных попыток отправки событие уйдет в ветку «Нет».
- Если вернется ответ с кодами 4xx (кроме 429), либо вебхук не удастся сформировать из-за ошибок в шаблонизаторе, событие также уйдет в ветку «Нет».
2.1. Добавьте условие по переменной.
Опции проверки:
- Есть значение — передано ли значение для переменной в ответе;
- Равна / Содержит / Начинается с / Не равна / Не содержит — проверки на содержимое значения переменной.

- Добавьте блок «Группа шагов». Переменную можно записать клиенту в карточку, выдать ее в виде промокода или вывести в рассылке без сохранения в системе. Данные опции доступны только в ветке «Да» после проверки ответа.
- Чтобы создать промокод по значению переменной и выдать его клиенту, выберите шаг «Выдать промокод» и задайте:
        - получение — «Из ответа вебхука»;
- переменную вебхука, из которой нужно забирать промокод;
- пул, в котором будут храниться получаемые промокоды (доступны пулы со способом пополнения по файлу или вручную).
 

- Чтобы записать значение клиенту выберите редактирование данными из вебхука:

При необходимости создайте дополнительное поле для сохранения данных. Запись ответа доступна только для полей типа «Строка».
- Чтобы вывести значение в рассылке, используйте параметр вебхука в виде WebhookVariables.GetValue("Полное название параметра вебхука")или скопируйте его в сценарии:

Используйте в верстке рассылки как любой другой параметр шаблонизатора:
