Comment on page
HTTP Request
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
[
{
"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"
}
]
- name: http_request
- 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:
​- url: url da chamada
HTTP
- 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
{
"statusCode": 200,
"headers": "<headers do retorno da requisição>",
"body": "<body do retorno da requisição>"
}
Exemplo 1
Exemplo 2
[
{
"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:{
"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:<? $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.[
{
"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"
}
]
​
​
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).
[
{
"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"
}
]
- name: http_request
- 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:
​- url: url da chamada
HTTP
- 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
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
.png?alt=media&token=17ab9801-89b2-4ec5-beb7-d9ca988edd6f)
{
"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
.png?alt=media&token=bdb9669c-881c-44ea-a495-8766f1bbe198)
{
"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
.png?alt=media&token=c7f3c9d0-7f07-4a77-8b00-6a833c35132d)
{
"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"
}
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.
.png?alt=media&token=13945b52-0b40-4ad7-9b3e-ac03604c92ce)
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:[
{
"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"
}
]
- name: http_request
- 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:
​- url: url da chamada
HTTP
- 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
^
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:
@['...']
/?@['...']
Caracteres | Descrição |
$ | Raiz do objeto ou elemento |
@ | Objeto ou elemento atual |
. | Operador para filhos do objeto |
.. | Operador descendente recursivo |
* | Caractere coringa correspondendo a todos os objetos ou elementos, independentemente de seus nomes |
[] | Operador subscrito |
[, ] | Operador de união para nomes alternativos ou Ãndices de matriz como um conjunto |
[start:end:step] | Operador para dividir o array |
?() | Aplica uma lógica de comparação (script) |
Caracteres | Descrição |
$.. | 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 |
$..nome | Retorna os valores encontrados para a variável nome dentro da resposta da API |
$..[nome, cidade] | Retorna os valores encontrados para as variáveis nome e cidade dentro da resposta da API |
$..nome[1] | Retorna o segundo nome dentro da resposta da API |
$..nome[-1:] | Retorna o ultimo nome da resposta da API |
$..book.*[?(@property !== "category")] | Retorna todos os campos dos livros, tirando o campo 'category' |
"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]
"body": [
"37500-242",
"Rua Comendador Antônio Rodrigues de Oliveira",
"",
"Cruzeiro",
"Itajubá",
"MG",
"3132404",
"",
"35",
"4647"
]
"body": [
"cep",
"logradouro",
"complemento",
"bairro",
"localidade",
"uf",
"ibge",
"gia",
"ddd",
"siafi"
]
"body": [
"Cruzeiro"
]
"body": [
"Cruzeiro",
"3132404"
]
{
"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()
"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
}
]
]
"body": [
"Nigel Rees",
"Evelyn Waugh",
"Herman Melville",
"J. R. R. Tolkien"
]
"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
}
]
"body": [
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
]
"body": [
{
"category": "fiction",
"author": "J. R. R. Tolkien",
"title": "The Lord of the Rings",
"isbn": "0-395-19395-8",
"price": 22.99
}
]
"body": [
{
"category": "fiction",
"author": "Herman Melville",
"title": "Moby Dick",
"isbn": "0-553-21311-3",
"price": 8.99
}
]
"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
}
]
"body": [
"Evelyn Waugh",
"Sword of Honour",
12.99
]
"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
}
]
"body": [
8.95,
12.99,
8.99,
22.99
]
Last modified 1yr ago