Message Box |
---|
icon | none |
---|
title | На этой странице |
---|
type | generic |
---|
|
|
Примечание |
---|
|
Для тестирования сценариев, содержащих BPL-операции, необходимо использовать веб-виджет или интеграцию с каким-либо мессенджером, так как данные операции не работают в тестовом чате внутри редактора. Как создать тестовый виджет: Создание тестового виджета |
Вместо использования блока запроса к серверу, можно оформить запрос с помощью BPL-операций в блоке арифметики. Это позволяет использовать расширенный список HTTP-методов запроса, и более гибко работать с ответом сервера, используя другие BPL-операции.
Описание метода
http.sendRequest(url string, method string, params Collection, headers Map) Response
Назначение: отправляет HTTP запрос на указанный URL. Аргументы:
1. url - URL адрес на который будет оправлен запрос.
2. method - HTTP метод. Допустимые значения: GET, POST, PUT, DELETE, PATCH, HEAD и OPTIONS.
3. params - параметры запроса. Могут быть представлены как списком так и ассоциативным массивом.
4. headers - HTTP заголовки запроса. По умолчанию устанавливается заголовок Content-Type: application/json.
Возвращаемое значение: объект HTTP ответа на запрос в виде ассоциативного массива со следующими ключами: statusCode - HTTP код ответа, body - тело ответа (преобразованное в соответствии с заголовком Content-Type), headers - HTTP заголовки ответа в виде ассоциативного массива, exception - текст ошибки или nil если запрос прошёл без ошибок.
Примеры использования
Пример запроса с использованием переменной в url
Если запрос требует передачу аргументов внутри url, в таком случае при использовании переменных в качестве аргументов необходимо соединить части url со значениями передаваемых переменных.
В качестве примера приведен запрос к API Росреестра, выводящий информацию о номере телефона, переданном в запросе: http://rosreestr.subnets.ru/?get=num&format=json&num=НОМЕР_ТЕЛЕФОНА_С_СЕМЕРКОЙ
Блок кода |
---|
|
$url = str.join(["http://rosreestr.subnets.ru/?get=num&format=json&num=", $phone_number], ""); //соединяем url запроса и значение переменной через пустой символ
$response = http.sendRequest($url, GET) |
В данном примере в методе http.request передается только два параметра, которые являются обязательными в любом запросе - url и метод запроса, так как у данного запроса нет тела и дополнительных заголовков.
Пример отправки json-файла в качестве тела запроса
Для того чтобы отправить json-файл в качестве тела запроса, необходимо присвоить новой переменной (в данном примере это переменная $json) содержимое нужного файла, а затем отправить созданную переменную в качестве тела запроса:
Блок кода |
---|
|
$json = {"instances":[{"text": "Режим нерабочих дней, по заключениям экспертов, может прервать цепочку заражений коронавирусом, заявил пресс-секретарь президента России Дмитрий Песков."}]};
$response = http.sendRequest("https://api.aicloud.sbercloud.ru/public/v2/rewriter/predict",
"POST",
$json,
{"accept": "application/json", "Content-Type": "application/json"}) |
Пример запроса с авторизацией с телом запроса
В качестве примера приведен запрос к API Twin на получение списка пользователей, зарегистрированных в одном в личном кабинете.
Блок кода |
---|
|
$response = http.sendRequest("https://iam.twin24.ai/api/v1/users",
"GET",
{"limit": 1, "offset": 3},
{"Authorization": "Bearer ВАШ_ТОКЕН"}) |
В качестве первого аргумента метода передаем ссылку на запрос;
Второго аргумента - тип запроса, в данном случае GET;
Третьего аргумента - передаем json тело запроса;
Четвертого аргумента - дополнительные заголовки запроса, в данном случае заголовок Authorization, значением которого является тип авторизации (Bearer) и ключ авторизации (ВАШ_ТОКЕН).
Вместо ВАШ_ТОКЕН в данном запросе необходимо подставить токен идентификации из личного кабинета, для того чтобы запрос был работоспособным.
Пример запроса с авторизацией без тела запроса
В качестве примера приведен запрос к API Twin на получение списка пользователей, зарегистрированных в одном в личном кабинете.
Блок кода |
---|
|
$response = http.sendRequest("https://iam.twin24.ai/api/v1/users",
"GET",
{},
{"Authorization": "Bearer ВАШ_ТОКЕН"}) |
В данном примере мы пропускаем аргумент тело запроса, используя пустое значение {}.
Получение ответов сервера
После отправки запроса весь ответ сервера будет записан в переменную, через которую вызывался данный запрос - в данном случае $response. Получение конкретных полей из ответа сервера производится также через BPL-операции - их можно вызвать как в том же блоке, где отправляется запрос, так и в любом другом последующем блоке арифметики, так как ответ сервера сохранен в переменную. Разберем получение полей на примере ответа на запрос iam.twin24.ai/api/v1/users
:
Блок кода |
---|
language | powershell |
---|
theme | DJango |
---|
|
{
"count": 1,
"items": [
{
"id": 0000,
"companyId": 0000,
"firstName": "Иван",
"lastName": "Иванов",
"middleName": "",
"email": "example@twin24.ai",
"phone": null,
"roles": [
{
"name": "COMPANY_ADMIN",
"company_id": 0000
}
],
"settings": [],
"companyName": "Пример компании",
"blockedAt": null,
"online": false,
"resellerId": null,
"resellerName": null
}
]
} |
Получение элемента ответа
Для получения не вложенного элемента потребуется использовать BPL-операцию .get()
Получение поля count из примера ответа сервера, приведенного выше, и сохранение полученного значения в переменную {count}:
Блок кода |
---|
|
$body = $response.body // Получаем тело ответа сервера
$count = $body.get("count") // Получаем значение конкретного поля из тела ответа сервера |
Для получения вложенного элемента потребуется использовать цепочку операций .get() Получение поля email из примера ответа сервера, и сохранение в переменную {email_address}:
Блок кода |
---|
|
$body = $response.body
$email_address = $body.get("items").get("0").get("email") |
Получение поля name массива roles, и сохранение в переменную {role_name}:
Блок кода |
---|
|
$body = $response.body
$role_name = $body.get("items").get("0").get("roles").get("0").get("name") |
Таким образом вы можете отправить HTTP-запрос, используя BPL-операции, и получить необходимые поля из ответа сервера.