Realiza uma chamada HTTP e retorna o resultado em uma variĂ¡vel de contexto.
AtenĂ§Ă£o: A biblioteca request
estĂ¡ deprecated, portanto opte por utilizar flavor como axios
Estrutura
Copy [
{
"name": "http_request",
"parameters": {
"config": {
"url": "https://api.altu.com.br/teste",
"data": {
"param1": "value1",
"param2": "value2",
"param3": "<? $var_contexto ?>",
},
"method": "POST",
"headers": {
"Authorization": "meu_token"
}
},
"flavor": "axios",
"before_action_messages": [
"Mensagem 1",
"Mensagem 2"
]
},
"result_variable": "api_response"
}
]
parameters:
config: configuraĂ§Ă£o da chamada https que serĂ¡ feita. Deve conter a opĂ§Ă£o da biblioteca indicada no atributo flavor (biblioteca axios
do NodeJS). Abaixo segue exemplo:
Lista de opções da biblioteca axios
data: parĂ¢metros da chamada HTTP
method: método da chamada HTTP
headers: cabeçalho da chamada HTTP
Authorization: token de autenticaĂ§Ă£o da chamada
flavor: biblioteca que serĂ¡ usada para realizar o request, neste caso, axios
before_action_messages: mensagens para serem enviadas ao usuĂ¡rio antes da execuĂ§Ă£o da aĂ§Ă£o
result_variable: variĂ¡vel de contexto que receberĂ¡ a resposta da chamada HTTP
Copy {
"statusCode": 200,
"headers": "<headers do retorno da requisiĂ§Ă£o>",
"body": "<body do retorno da requisiĂ§Ă£o>"
}
Exemplo 1 Exemplo 2
Copy [
{
"name": "http_request",
"parameters": {
"config": {
"url": "https://viacep.com.br/ws/<?$cep?>/json",
},
"flavor": "axios",
"before_action_messages": [
"Estamos solicitando a consulta",
"Aguarde por favor"
]
},
"result_variable": "api_consulta"
}
]
No exemplo acima, nĂ£o sĂ£o necessĂ¡rios os parĂ¢metros body
e headers
. É realizada uma consulta ao webservice ViaCEP. Foi passada uma variĂ¡vel de contexto $cep
na URL e o retorno Ă© o JSON abaixo:
Copy {
"body": {
"uf": "SP",
"cep": "01243-001",
"gia": "1004",
"ibge": "3550308",
"bairro": "ConsolaĂ§Ă£o",
"unidade": "",
"localidade": "SĂ£o Paulo",
"logradouro": "Rua Sergipe",
"complemento": "lado Ămpar"
},
"code": 200,
"headers": {
"date": "Fri, 08 Nov 2019 17:09:10 GMT",
"pragma": "public",
"server": "nginx/1.16.1",
"expires": "Fri, 08 Nov 2019 18:09:10 GMT",
"connection": "close",
"content-type": "application/json; charset=utf-8",
"cache-control": "max-age=3600, public",
"transfer-encoding": "chunked",
"access-control-max-age": "86400",
"access-control-allow-origin": "*",
"access-control-allow-headers": "Content-Type, X-Request-With, X-Requested-By",
"access-control-allow-methods": "GET, OPTIONS",
"access-control-allow-credentials": "true"
}
}
Supondo que deseja manipular essas informações, bastaria acessĂ¡-las percorrendo a variĂ¡vel de contexto que, no parĂ¢metro result_variable
, armazenou o JSON de resposta. Por exemplo:
Copy <? $api_consulta.body.logradouro ?>
<? $api_consulta.body.bairro ?>
<? $api_consulta.body.localidade ?>
Uma chamada que possui um body
e headers
para autenticaĂ§Ă£o de acesso.
Copy [
{
"name": "http_request",
"parameters": {
"config": {
"url": "https://api.altu.com.br/teste/consultapessoa",
"data": {
"codigo": "1",
"nome_pessoa": "<? $nome_pessoa ?>"
},
"method": "POST",
"headers": {
"Authorization": "AuZk16BNCHDvzcObTaUiVUnh6F0KJtuD"
}
},
"flavor": "axios",
"before_action_messages": [
"Estamos solicitando a consulta",
"Aguarde por favor"
]
},
"result_variable": "api_consulta"
}
]
HTTP_Request Async
O Http Request async Ă© uma opĂ§Ă£o para as ações de requisiĂ§Ă£o assĂncrona, ou seja, uma comunicaĂ§Ă£o que nĂ£o ocorre simultaneamente evitando falhas ou pausa no sistema. Por meio dele Ă© possĂvel utilizar duas flags: async e waitTime, que podem ser adicionadas dentro dos parĂ¢metros do cĂ³digo.
A flag waitTime sĂ³ pode ser utilizada juntamente com async e permite definir um tempo para realizar a chamada, ou seja, caso classifiquem "waitTime": 60 teremos um tempo de espera de 1 minuto antes que a chamada HTTP seja realizada.
No caso do async sĂ£o aceitos os valores de true e false , caso nĂ£o seja especificado serĂ¡ classificado como false por padrĂ£o e seguirĂ¡ o mesmo padrĂ£o do http_request. JĂ¡ no waitTime devem ser utilizados valores em segundos entre 0 e 900 (equivalente a 15 minutos).
Estrutura
Copy [
{
"name": "http_request",
"parameters": {
"async": true,
"config": {
"url": "http://httpstat.us/500?sleep=500",
"data": {
"param1": "value1"
},
"method": "POST"
},
"flavor": "axios",
"waitTime": 30
},
"result_variable": "api_response"
}
]
Atributos
parameters:
async: default false. true or false
config: configuraĂ§Ă£o da chamada https que serĂ¡ feita. Deve conter a opĂ§Ă£o da biblioteca indicada no atributo flavor (biblioteca axios
do NodeJS). Abaixo segue exemplo:
Lista de opções da biblioteca axios
data: parĂ¢metros da chamada HTTP
method: método da chamada HTTP
flavor: biblioteca que serĂ¡ usada para realizar o request, neste caso, axios
waitTime: valores de 0 a 900 (em segundos), quando "async": true.
result_variable: variĂ¡vel de contexto que receberĂ¡ a resposta da chamada HTTP
Responses
Quando async for true o fluxo continua e o result_variable Ă© preenchido com o status Pending, indicando que a requisiĂ§Ă£o estĂ¡ em andamento, ao final da chamada da API Ă© enviada uma nova mensagem atualizando o resultado como Done, ou seja, concluĂda com sucesso.
Pending Done Error
Informa que a requisiĂ§Ă£o estĂ¡ em andamento
Copy {
"flags": {
"saveContactEnabled": false
},
"system": {
"current_node": null
},
"timezone": "America/Sao_Paulo",
"persistent": {},
"url_params": {
"channel": "widget",
"assistant_id": "29"
},
"lastUserInteractionDate": "2020-12-23 15:40:53",
"api_response": {
"status": "pending"
}
}
Indica que a chamada foi concluĂda com sucesso
Copy {
"flags": {
"saveContactEnabled": false
},
"system": {
"current_node": null
},
"timezone": "America/Sao_Paulo",
"persistent": {},
"url_params": {
"channel": "widget",
"assistant_id": "29"
},
"api_response": {
"code": 200,
"headers": {
"date": "Wed, 23 Dec 2020 18:55:19 GMT",
"content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked",
"connection": "close",
"set-cookie": [
"__cfduid=d14a667e80388165322084722;Path=/;hfsehshkdfxjjfkdjhjkdstat.us"
],
"cache-control": "private",
"vary": "Accept-Encoding",
"x-aspnetmvc-version": "5.1",
"access-control-allow-origin": "*",
"access-control-expose-headers": "Link, Content-Range, Location, WWW-Authenticate, Proxy-Authenticate, Retry-After, Request-Context",
"x-aspnet-version": "4.0.30319",
"request-context": "appId=00000000000000000000000000000000a9",
"x-powered-by": "ASP.NET",
"cf-cache-status": "DYNAMIC",
"cf-request-id": "0000000000000000000000000000000001",
"report-to": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.00000000mpEjHj9kqDA%2FUg48Gq8b%2000000004800}",
"nel": "{\"report_to\":\"cf-nel\",\"max_age\":604800}",
"server": "cloudflare",
"cf-ray": "60644bd41e084b40-GRU"
},
"body": {
"code": 200,
"description": "OK"
},
"status": "done"
},
"lastUserInteractionDate": "2020-12-23 16:55:19"
}
Indica que algo de errado aconteceu no processo
Copy {
"flags": {
"saveContactEnabled": false
},
"system": {
"current_node": null
},
"timezone": "America/Sao_Paulo",
"persistent": {},
"url_params": {
"channel": "widget",
"assistant_id": "29"
},
"api_response": {
"code": 500,
"status": "error"
},
"lastUserInteractionDate": "2020-12-23 17:02:23"
}
Exemplos
ApĂ³s a conclusĂ£o da chamada HTTP um input.text Ă© enviado ao assistente com a mensagem "ALTU_ASYNC_HTTP_RESPONSE", possibilitando o envio da resposta da API.
Filtro de resposta
Utilize filtros para obter respostas de APIs no Builder utilizando o JSONPATH-PLUS , basta adicionar o campo responseFilter
com a expressĂ£o do que vocĂª gostaria de filtrar, como no exemplo:
Estrutura
Copy [
{
"name": "http_request",
"parameters": {
"config": {
"url": "https://viacep.com.br/ws/37500242/json"
},
"flavor": "axios",
"responseFilter": "$..",
"before_action_messages": [
"Estamos solicitando a consulta",
"Aguarde por favor"
]
},
"result_variable": "api_consulta"
}
]
Atributos
parameters:
config: configuraĂ§Ă£o da chamada https que serĂ¡ feita. Deve conter a opĂ§Ă£o da biblioteca indicada no atributo flavor (biblioteca axios
do NodeJS). Abaixo segue exemplo:
Lista de opções da biblioteca axios
flavor: biblioteca que serĂ¡ usada para realizar o request, neste caso, axios
responseFilter: expressĂ£o no formato JSONpath para filtrar a resposta da API
before_action_messages(opcional): Mensagem enviada para o usuĂ¡rio antes da execuĂ§Ă£o a aĂ§Ă£o.
result_variable: variĂ¡vel de contexto que receberĂ¡ a resposta da chamada HTTP
Funcionalidades
^
Busca por elemento igual da expressĂ£o
~
Seleciona o nome das propriedades (as array)
Seletores possĂveis
@null()
, @boolean()
, @number()
, @string()
, @array()
, @object()
, @integer( )
Seletores para facilitar acesso a estruturas @path
/@parent
/@property
/@parentProperty
/@root
Escaping
`
: para utilizar caracteres reservados. ex: `$
Em casos mais complexos tambĂ©m Ă© possĂvel utilizar:
Tabela de sintaxe
Raiz do objeto ou elemento
Operador para filhos do objeto
Operador descendente recursivo
Caractere coringa correspondendo a todos os objetos ou elementos, independentemente de seus nomes
Operador de uniĂ£o para nomes alternativos ou Ăndices de matriz como um conjunto
Operador para dividir o array
Aplica uma lĂ³gica de comparaĂ§Ă£o (script)
Tabela de expressões
Retorna todos os dados de forma recursiva
Retorna todos os valores do primeiro nĂvel da resposta da API
Retorna todos os nomes dos campos do primeiro nĂvel da resposta da API
Retorna os valores encontrados para a variĂ¡vel nome dentro da resposta da API
Retorna os valores encontrados para as variĂ¡veis nome e cidade dentro da resposta da API
Retorna o segundo nome dentro da resposta da API
Retorna o ultimo nome da resposta da API
$..book.*[?(@property !== "category")]
Retorna todos os campos dos livros, tirando o campo 'category'
Exemplos:
1 - Assumindo uma resposta de API sendo:
Copy "body": {
"cep": "37500-242",
"logradouro": "Rua Comendador AntĂ´nio Rodrigues de Oliveira",
"complemento": "",
"bairro": "Cruzeiro",
"localidade": "ItajubĂ¡",
"uf": "MG",
"ibge": "3132404",
"gia": "",
"ddd": "35",
"siafi": "4647"
}
$..* $..*~ $..bairro $..[bairro, ibge]
Copy "body": [
"37500-242",
"Rua Comendador AntĂ´nio Rodrigues de Oliveira",
"",
"Cruzeiro",
"ItajubĂ¡",
"MG",
"3132404",
"",
"35",
"4647"
]
Copy "body": [
"cep",
"logradouro",
"complemento",
"bairro",
"localidade",
"uf",
"ibge",
"gia",
"ddd",
"siafi"
]
Copy "body": [
"Cruzeiro"
]
Copy "body": [
"Cruzeiro",
"3132404"
]
2 - Respostas com composiĂ§Ă£o mais complexa
Copy {
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
$..book $..author $..isbn^ $..book[1] $..book[-1:] $..book[?(@.price ===8.99)] $..book[?(@.price>9)] $..book[1][?(@property !== "category")] $.store.book[?(@path !== "$['store']['book'][0]")] $..book..*@number()
Copy "body": [
[
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
]
]
Copy "body": [
"Nigel Rees",
"Evelyn Waugh",
"Herman Melville",
"J. R. R. Tolkien"
]
Copy "body": [
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
]
Copy "body": [
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
]
Copy "body": [
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
]
Copy "body": [
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
}
]
Copy "body": [
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
]
Copy "body": [
"Evelyn Waugh",
"Sword of Honour",
12.99
]
Copy "body": [
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
},
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
},
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
]
Copy "body": [
8.95,
12.99,
8.99,
22.99
]