Внутри воронки всегда можно сделать api-вызов внешней системы, если она поддерживает REST API (т.е. совершать HTTP-запрос для выполнения какого-либо действия).
Это можно сделать через блоки "Вызвать URL" либо "Пользовательский код".
В этой статье разберем первый вариант.
В первую очередь необходимо указать ссылку, которую должна вызвать воронка. В этой ссылке можно использовать переменные, оборачивая их в фигурные скобки. Например, если по воронке идет агент пользователь, в ссылку можно подставить его ID так:
https://my-service-url.com/api/any-method?userId={user.id}
В примере выше, вместо {user.id}
в ссылку будет подставлен идентификатор пользователя.
Это особенно полезно, когда система требует GET-вызова и нет возможности сформировать тело запроса.
На данный момент поддерживается 2 типа вызова: GET и POST. В случае с GET-запросом достаточно сформировать ссылку, используя переменные воронки и сохранить блок.
В случае с POST-запросом, скорее всего понадобится сформировать тело и заголовки запроса. Для этого в выражении необходимо вернуть JS-объект. В поле ввода вы можете написать любое JS-выражение. Главное, чтобы на выходе был возвращен объект, который будет использован при вызове ссылки.
Ниже пример сложного (в body) и простого (в head) формирования объекта.
Зачастую, в воронках вам достаточно будет простого формирования объекта, с использованием переменных. В этом случае можно сразу записать объект, не добавляя никаких внутренних переменных и не используя команду return
.
Например:
{
userId: user.id,
dealId: deal.id,
tgUsername: chat.username,
points: user.points - user.penaltyPoints
}
При этом оба поля являются не обязательными к заполнению.
В зависимости от того, как отвечает внешний сервис, можно выбрать тип ответа - json
или text
. Если выбрать json
, а сервис вернул строку, получится ошибка вызова и вы увидите это в отладке.
Как и во многих других блоках воронки, есть возможность сохранить ответ сервера в локальную переменную.
Для этого установите соответствующий чек-бокс (1), выберите тип агента (2) и укажите название переменной (3).
Ответ сервера полностью будет записан в указанную переменную:
Время вызова ограничено 10 секундами. Если сервер будет отвечать дольше 10 секунд, произойдет ошибка и вы увидите это в отладке.
Соответственно никакого значения в переменную записано не будет. Учитывайте это при построении следующих нод - если вызов "упал", переменная будет пустая.
Дополнительно вы можете сразу преобразовать агентов используя полученный ответ от сервера. Можно обновить или присвоить переменные для всех доступных в текущем контексте агентов.
Данные события доступны в объекте response
:
{
body: any
headers: Record<string, string>
statusCode: number
}
В примере ниже в пользовательскую переменную respValue
записывается значение, полученное в response.body.value
.
Обратите внимание! Преобразование агентов доступно вне зависимости от результата вызова. Даже если вызов "упал" с таймаутом, вы можете обработать этот кейс. В этом случае объект response
будет равен undefined
.
Добрый день, Ратмир! В данный момент в рамках заказа мы можем собрать вот эти значения id, title, value, currency, paymentLink Есть ли возможность реализовать сбор offers?
Через процессы выглядел так {object.offers}
– dmnmx@yandex.ru 3 месяца назадДобавили offers в данные заказа при вызове URL.
– Ратмир 3 месяца назад