Перейти к основному содержимому

HttpRequest

Действие HttpRequest позволяет боту выполнять HTTP-запросы, чтобы получать данные от внешних ресурсов и сохранять их в переменные.

подсказка
Если вы хотите выполнять HTTP-запросы без тегов действий, но из вставок JavaScript-кода, используйте встроенный сервис $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Массив объектовЗаголовки запроса. Укажите значение в формате:
headers =
[
{
"name": "Имя заголовка 1",
"value": "Значение заголовка 1"
},
{
"name": "Имя заголовка 2",
"value": "Значение заголовка 2"
}
]
Нет
varsМассив объектовПеременные, в которые будут сохранены данные из ответа.Нет
okStateСтрокаСтейт, в который перейдет диалог, если сервер вернет код успешного ответа (в промежутке 200–300).
Код ответа сохраняется в переменную $session.httpStatus.
Нет
errorStateСтрокаСтейт, в который перейдет диалог, если сервер вернет код неудачного ответа (не в промежутке 200–300).Нет

Сохранение данных в переменные

С помощью параметра vars вы можете сохранить данные из ответа на успешный HTTP-запрос.

  1. JAICP сохраняет ответ от сервера в локальную переменную $httpResponse. К этой переменной можно обращаться только внутри тега HttpRequest.
подсказка
Ответ также сохраняется в сессионные данные как $session.httpResponse. Обращайтесь к этому полю, если хотите использовать данные из ответа в другом стейте. При каждом вызове тега HttpRequest значение поля перезаписывается.
  1. В значении параметра 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"
}
]

Использование в сценарии

  • Имитация подбрасывания монетки через обращение к 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}}»
Ограничения HTTP-клиента
  • HttpRequest выполняет HTTP-запросы синхронно. Обработка запроса пользователя приостанавливается до тех пор, пока HTTP-запрос не вернет ответ.

  • Во время обработки одного запроса можно выполнить не более 15 действий HttpRequest. При превышении этого лимита метод возвращает ответ с ошибкой.