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
Estrutura
[
{
"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
axiosdo NodeJS). Abaixo segue exemplo:
url: url da chamada
HTTPdata: parâmetros da chamada
HTTPmethod: método da chamada
HTTPheaders: cabeçalho da chamada
HTTPAuthorization: token de autenticação da chamada
flavor: biblioteca que será usada para realizar o request, neste caso,
axiosbefore_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>"
}[
{
"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"
}
]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
[
{
"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
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
axiosdo NodeJS). Abaixo segue exemplo:
url: url da chamada
HTTPdata: parâmetros da chamada
HTTPmethod: método da chamada
HTTPflavor: biblioteca que será usada para realizar o request, neste caso,
axioswaitTime: 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.
Informa que a requisição está em andamento

{
"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

{
"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

{
"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
[
{
"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
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
axiosdo NodeJS). Abaixo segue exemplo:
url: url da chamada
HTTPflavor: biblioteca que será usada para realizar o request, neste caso,
axiosresponseFilter: 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
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)
Tabela de expressões
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'
Exemplos:
1 - Assumindo uma resposta de API sendo:
"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"
}"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"
]2 - Respostas com composição mais complexa
{
"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
}
}
}"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": [
{
"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 updated
Was this helpful?