HttpRequest
Действие HttpRequest позволяет боту выполнять HTTP-запросы,
чтобы получать данные от внешних ресурсов и сохранять их в переменные.
$http.Параметры
| Параметр | Тип | Описание | Обязательный |
|---|---|---|---|
url | Строка | URL запроса. | Да |
method | Строка | Метод запроса. Возможные значения: • GET • POST • PUT • DELETE | Да |
dataType | Строка | Тип передаваемых данных. Значение этого параметра определяет значение HTTP-заголовка Content-Type: • json (значение по умолчанию) — application/json. • xml — application/xml. • text — text/plain. Вы также можете напрямую указать заголовок Content-Type в параметре headers: он будет иметь приоритет над dataType. | Нет |
body | Строка | Тело запроса. Можно указать данные в любом формате (JSON, XML, произвольный текст), а также использовать переменные. | Нет |
timeout | Число | Время ожидания ответа в миллисекундах. Если время ожидания будет превышено, диалог перейдет в стейт, указанный в параметре errorState, а если errorState не указан — в корень сценария /. | Нет |
headers | Массив объектов | Заголовки запроса. Укажите значение в формате: | Нет |
vars | Массив объектов | Переменные, в которые будут сохранены данные из ответа. | Нет |
okState | Строка | Стейт, в который перейдет диалог, если сервер вернет код успешного ответа (в промежутке 200–300). Код ответа сохраняется в переменную $session.httpStatus. | Нет |
errorState | Строка | Стейт, в который перейдет диалог, если сервер вернет код неудачного ответа (не в промежутке 200–300). | Нет |
Сохранение данных в переменные
С помощью параметра vars вы можете сохранить данные из ответа на успешный HTTP-запрос.
JAICP сохраняет ответ от сервера в локальную переменную
$httpResponse. К этой переменной можно обращаться только внутри тегаHttpRequest.подсказкаОтвет также сохраняется в сессионные данные как$session.httpResponse. Обращайтесь к этому полю, если хотите использовать данные из ответа в другом стейте. При каждом вызове тегаHttpRequestзначение поля перезаписывается.В значении параметра
varsукажите массив объектов с полямиnameиvalue, где:name— имя переменной. Вычисленное значениеvalueбудет сохранено в$session.<name>.value— выражение с использованием переменной$httpResponseдля доступа к нужным полям ответа.предупреждениеВ значенииnameиспользуйте символы Aa–Zz, _, 0–9. Первым символом в имени должна быть буква. Нельзя использовать зарезервированные слова JavaScript.
- Пример копирования данных из ответа
- Пример с предобработкой ответа
Сервер возвращает в ответе текст случайной цитаты и имя ее автора:
{
"quoteText": "И все-таки она вертится!",
"quoteAuthor": "Галилео Галилей"
}
Чтобы сохранить их в переменные $session.quoteText и $session.quoteAuthor, укажите такое значение параметра vars:
vars =
[
{
"name": "quoteText",
"value": "$httpResponse.quoteText"
},
{
"name": "quoteAuthor",
"value": "$httpResponse.quoteAuthor"
}
]
Сервер возвращает в ответе набор продуктов:
[
{
"name": "апельсины",
"price": 150
},
{
"name": "мандарины",
"price": 200
}
]
Вы можете использовать в value любое допустимое JavaScript-выражение — например, чтобы сохранить только нужный продукт:
vars =
[
{
"name": "product",
"value": "_.findWhere($httpResponse, {name: 'мандарины'})"
}
]
Использование в сценарии
- Имитация подбрасывания монетки через обращение к API random.org:
state: HeadsOrTails
q!: * {орел * решка} *
HttpRequest:
url = https://www.random.org/integers/?num=1&min=0&max=1&col=1&base=2&format=plain
method = GET
vars = [{"name": "bit", "value": "parseInt($httpResponse)"}]
okState = /HeadsOrTails/Answer
state: Answer
if: $session.bit
a: Орел!
else:
a: Решка!
- Получение случайной цитаты от API forismatic.com.
state: RandomQuote
intent!: /Случайная цитата
HttpRequest:
url = https://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang={{$request.language}}
method = GET
vars =
[
{
"name": "quoteText",
"value": "$httpResponse.quoteText"
},
{
"name": "quoteAuthor",
"value": "$httpResponse.quoteAuthor"
}
]
okState = /RandomQuote/Answer
state: Answer
a: {{$session.quoteAuthor}} однажды сказал: «{{$session.quoteText}}»
HttpRequestвыполняет HTTP-запросы синхронно. Обработка запроса пользователя приостанавливается до тех пор, пока HTTP-запрос не вернет ответ.Во время обработки одного запроса можно выполнить не более 15 действий
HttpRequest. При превышении этого лимита метод возвращает ответ с ошибкой.