Блок HTTP-запрос


Блок HTTP-запрос позволяет боту обмениваться данными со сторонними системами и сервисами, а также сохранять полученные данные в переменные.

Добавление блока

Чтобы добавить блок в сценарий, выберите HTTP-запрос в палитре блоков.

http request 1

Настройте обязательные параметры запроса:

  • Выберите один из типов запроса:
    • GET (по умолчанию)
    • POST
    • DELETE
    • PUT
  • Укажите URL, на который будет отправляться запрос.

Дополнительно вы можете заполнить вкладки RESPONSE, BODY и HEADERS.

Подробнее об HTTP

URL запроса

По указанному URL бот будет получать либо отправлять данные.

Вы можете добавлять переменные в URL запроса. Формат может быть разным, например:

  • https://example.com?query=${varname}
  • https://${varname}/endpoint
  • ${varname} (если в переменной хранится полный URL запроса)

Здесь varname — имя переменной.

Фигурные скобки необходимы при подставлении переменных в адрес. Если в вашем URL есть другие фигурные скобки, то их необходимо заменить на %7B и %7D соответственно для левой и правой скобки.

Чтобы передать в URL текст последнего ввода клиента, в качестве переменной в URL укажите queryText, например: https://example.com?query=${queryText}. Бот автоматически подставит его в URL перед выполнением запроса.

$queryText — это переменная, в которой хранится текст последнего запроса клиента.

При помощи переменных в URL, например, можно читать данные из разных Google Таблиц, не создавая несколько HTTP-запросов.

Заголовки

На вкладке HEADERS вы можете добавить заголовки запроса, заполнив поля Заголовок и Значение.

В заголовках вы также можете использовать переменные.

При добавлении переменных в значение заголовка указывайте их без фигурных скобок и добавляйте $ перед именем переменной.

http request 3

Тело запроса

Для всех методов вы можете передать тело запроса.

Тело запроса заполняется на вкладке BODY. Здесь можно указывать данные в любом формате (JSON, XML, произвольный текст), а также добавлять переменные.

http request 4

В примере тело запроса указано в формате JSON. Бот автоматически подставит в тело запроса значения переменных $age и $name.

При добавлении переменных в объект JSON необходимо учитывать, какой тип данных содержится в переменной.
В примере переменная $age указана без кавычек, потому что она содержит число, а переменная $name указана в кавычках, потому что содержит данные строкового типа.

Обработка ответа

В ответ на запрос сервер возвращает данные, которые можно обработать или вывести клиенту.

Для этого на вкладке RESPONSE вы можете указать, какие данные вы хотите получить из ответа на запрос, и сохранить их в новые переменные.

Например, по адресу https://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=ru сервер возвращает ответ в формате JSON:

{
    "quoteText": "Текст цитаты",
    "quoteAuthor": "Автор цитаты",
    "senderName": "Кто опубликовал цитату",
    "senderLink": "Ссылка на профиль",
    "quoteLink": "Ссылка на саму цитату на сайте"
}

Этот объект JSON сохраняется в системную переменную $httpResponse.

Чтобы сохранить данные из определенного поля объекта, укажите:

  • Имя переменной, в которую сохранятся данные.
  • Значение переменной через переменную $httpResponse.

http request 5

Если запрос будет выполнен успешно, бот создаст переменные $quoteText и $quoteAuthor и запишет в них значения из ответа сервера.

httpResponse

Aimylogic сохраняет ответ от сервера в системную переменную $httpResponse.

Если сервер вернул ответ в формате JSON или XML, то Aimylogic автоматически конвертирует его в JavaScript-объект, с которым можно производить различные операции с помощью JavaScript-функций.

Из ответа можно получить нужные данные, обратившись к соответствующим полям объекта.

Например, чтобы сохранить в новую переменную значение из поля quoteText, укажите $httpResponse.quoteText в качестве ее значения.

Здесь quoteText — поле из ответа, которое необходимо получить.

Если сервер вернет ответ не в формате JSON или XML, то в переменную $httpResponse сохранится вся строка без какой-либо обработки.

JavaScript

При создании переменных вы можете использовать любые JavaScript-выражения и функции, а также функции библиотеки Underscore, которая позволяет упростить работу с объектами и массивами.

Предположим, в результате запроса сервер вернул следующий объект JSON:

{
    "items": [
        {
            "name": "апельсины",
            "price": 150
        },
        {
            "name": "мандарины",
            "price": 200
        }
    ]
}

Также предположим, что до этого в сценарии бот спросил у клиента, какой фрукт ему нужен, и сохранил ответ в переменную $choice.

Чтобы записать в переменную объект из массива items, потребуется следующее JavaScript-выражение:

_.findWhere($httpResponse.items, {name: "$choice"})

Функция будет искать в ответе объект, у которого значение поля name совпадает со значением переменной $choice.

Переходы после запроса

Блок HTTP-запрос имеет два выхода:

  • Завершен успешно, если в ответ на запрос сервер вернул код ответа от 200 до 299 включительно.
  • Завершен с ошибкой, если сервер вернул любой другой ответ.

Код ответа автоматически сохраняется в системную переменную $httpStatus.