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
. При превышении этого лимита метод возвращает ответ с ошибкой.