---
title: FAQ - Perguntas frequentes
slug: faq-perguntas-frequentes
description: Learn about various topics related to the Fluid platform in this informative document. Discover when requests are made during communication with other systems and understand that not all flow steps require external communication. Find out about the origin
icon: {"faIcon":"fa-solid fa-question"}
docTags: 
createdAt: 2023-07-26T20:12:42.520Z
---

## Requisições

:::ExpandableHeading
### Todos os passos de um fluxo geram [Requisições](docId\:jLrDDTxqIkVohd769F5bo)?

-> A requisição ocorre somente quando existe uma comunicação com outro sistema e, dependendo do fluxo que se deseja construir, nem todos os passos exigem uma comunicação externa com outro sistema. Podem haver passos com conectores de [Espera](docId\:yyDIulj5osg2m99ZRDRCy), ou conectores condicionais como o [Conditional - IF](docId\:N_6BKLyFc-LkSldXsl3D8), que não geram requisição. Ou seja, as requisições vão depender dos conectores que forem selecionados em cada passo.
:::

:::ExpandableHeading
### Quando a requisição de um passo é executada, qual é o IP de origem?

-> Os IP's que realizam as requisições serão sempre da Fluid, através dos nossos servidores em nuvem.
:::

:::ExpandableHeading
### Como faço para configurar a retentativa em casos onde não obtenho uma resposta da API?

Quando obtemos a resposta da API de uma requisição, é intuitivo configurar o *HTTP Status Code* para a retentativa, ex: `400`Porém, para casos onde a API não retorna uma resposta (API indisponível, um timeout, etc), digite o código de erro `0` (zero). Para saber mais, acesse [Tratamento de Erros](docId\:Iew9ungeTwQfRPtgELulq)
:::

## Fluxos

:::ExpandableHeading
### Qual a diferença dos status "Falha" e "Divergência", no gráfico de Execuções de Fluxos?

-> O status "Falha" é considerado quando ***todos*** passos de um fluxo executados retornaram falha. E o status "Divergência" é considerado quando ***pelo menos um*** passo executado retornou falha, porém o *fluxo não foi abortado*.
:::

:::ExpandableHeading
### Quais são as formas possíveis para disparar um fluxo?

-> Para disparar um fluxo é necessário que haja um [Scheduler](docId\:Td0JcaHzszcq92yMEbGqt) parametrizado realizando a chamada inicial, [Eventos](docId\:UmtR8dLi6rNL8Us2V8O1A) disparados ou manualmente ao testar um fluxo pelo canvas.
:::

:::ExpandableHeading
### Preciso criar uma API Key mesmo se todos os meus fluxos iniciarem com Schedulers?

-> Sim, essa chave é obrigatória para todos os clientes dentro da Fluid. É necessário configurar as [API Keys](docId\:U9RzUlsUP_oXxCqF5Mu_8) tanto para executar fluxos via [Schedulers (old)](docId\:W4UkR-pw4uWDK3ZJAH4Uh), como fluxos que iniciam por [Eventos](docId\:UmtR8dLi6rNL8Us2V8O1A).
:::

:::ExpandableHeading
### Quando um scheduler finaliza com falha/divergência, o que fazer?

-> É preciso analisar caso a caso, alguns schedulers precisam limpar os dados da execução (baseado no ID da execução) que teve falha/divergência antes de executá-lo novamente, outros basta executá-lo novamente.
:::

:::ExpandableHeading
### Por que um dos meus fluxos não está aparecendo na tela de eventos?

-> Se você não está vendo um de seus fluxos na tela de eventos (não está conseguindo disparar o fluxo via evento/*webhook*), a causa mais comum é que apenas fluxos que foram **publicados** serão exibidos nessa área. Se o fluxo estiver em status de rascunho, ele não aparecerá na tela de eventos. Certifique-se de publicar o fluxo para que ele seja monitorado e gerencie os eventos relacionados a ele.
:::

:::ExpandableHeading
### Por que a última versão do meu fluxo não está rodando quando disparo via evento/webhook?

-> Se a última alteração que você fez no fluxo não está sendo refletida na execução, certifique-se que esta versão está **publicada** e não em **modo rascunho**. Versões de fluxos no **modo rascunho** são úteis para testes apenas, porém não são executadas quando disparadas por eventos.
:::

:::ExpandableHeading
### Como faço para enviar um XML no disparo do fluxo?

Para enviar um XML como payload para o disparo de um fluxo, configure o header *Content-Type* para `application/xml`.
:::

:::ExpandableHeading
### Preciso retornar um XML no response de um fluxo disparado sincronamente, como fazer?

Para retornar um XML no fluxo, ao dispará-lo informe o *query parameter* `hct=application/xml`. Acesse [aqui a documentação](https://docs.fluidapi.io/gateway-fluid#ju1BR) completa com exemplo acesse.
:::

## Conectores

:::ExpandableHeading
### Como acessar a resposta de um passo anterior no passo que estou configurando?

-> Para acessar valores da resposta de um passo anterior basta utilizar as seguintes sintaxes:&#x20;

- **Caso queira utilizar o valor de um passo anterior em um Template:**      `{{.steps.<passo a ser buscado o valor>.body.<caminho onde o valor se encontra>}}`
- **Caso queira utilizar o valor de um passo anterior em um Depara ou Rules:** Diferente do Template não precisa abrir e fechar chaves e nem informar o 'state'             `<passo a ser buscado o valor>.<caminho onde o valor de encontra>`
- **Caso queira utilizar o valor de um passo anterior em um campo Dinâmico:&#x20;**``{{get `steps.<passo a ser buscado o valor>.body.<caminho onte o valor se encontra>`}}``
:::

:::ExpandableHeading
### Como enviar um XML no FormData utilizando o conector HTTP ?

-> Para enviar um xml via formdata no conector HTTP é necessário chamar a função `escape` ao referênciar o xml a ser enviado, como no exemplo abaixo:

```go
{{.steps.<nome_do_passo>.body | escape}}
```

![](https://api.archbee.com/api/optimize/G1NTw6yAi4RDUYbsU8csp/GS8k3Nrb_zxp0qvSOgdku_image.png)
:::

:::ExpandableHeading
### Quando utilizar um conector [Conditional - IF](docId\:N_6BKLyFc-LkSldXsl3D8) e quando utilizar [Rules](docId\:lgqSmyrXokYm9hGjtOtKL) Mandatórias?

-> Ambos possuem o mesmo objetivo. Recomendamos que seja priorizado o conector IF, para facilitar o entendimento do fluxo na forma visual. Porém, caso as opções na lista de "Operador" deste conector não atenderem a regra desejada, é possível optar pela utilização da "Rule" mandatória.
:::

:::ExpandableHeading
### O conector [HTTP](docId:-IX6fj1xXMa6nvQnOl8Mx) se comunica com APIs REST?

-> Sim, este conector é genérico e atende tanto protocolos HTTP, como HTTPS. Basta inserir no campo da URL o protocolo desejado. Este conector é bastante versátil, podendo ser usado para APIs REST, SOAP ou qualquer outra que utilize o protocolo HTTP.
:::

:::ExpandableHeading
### Qual é a ordem de transformação de dados na execução de um conector, entre Rules, De/Para, Template e URL?

-> A montagem do passo inicia pelas informações preenchidas em [Rules](docId\:lgqSmyrXokYm9hGjtOtKL), depois as informações inseridas no [De/para](docId\:VOQdaUkjjknbSWVRHbzQW), posteriormente segue para as informações preenchidas no [Template](docId\:TReaJH8tvdyh6uKYEAQZP) e por último, monta a URL e executa a chamada.
:::

:::ExpandableHeading
### Posso utilizar caracteres especiais na nomenclatura dos passos?

-> A nomenclatura dos passos dentro de um fluxo **NÃO** pode conter o caractere *underline* `_`, os demais caracteres são permitidos.
:::

:::ExpandableHeading
### Como visualizar o payload recebido em Eventos&#xA; que disparam um fluxo?

-> Para visualizar o *payload* recebido no evento basta acessar o menu na lateral esquerda da tela e selecionar a opção [Eventos](docId\:UmtR8dLi6rNL8Us2V8O1A). Nessa página serão apresentados os logs de todos os eventos executados com informações de status, data e hora e o nome do fluxo. Ao selecionar e expandir um Evento, será possível visualizar o payload recebido:

![Tela de Eventos](https://api.archbee.com/api/optimize/G1NTw6yAi4RDUYbsU8csp/2o-1d_pt5mRmI0ERcgiZ8_image.png "Tela de Eventos")
:::

:::ExpandableHeading
### O que fazer caso eu não encontre um conector necessário ou um conector existente não atenda meus objetivos dentro da plataforma?

-> Quando houver a necessidade de um novo conector, o procedimento é solicitar ao time da Fluid, através da [abertura de um chamado](https://fluidapi.atlassian.net/servicedesk/customer/portals).

Para novas funcionalidades dentro de um conector existente, a solicitação pode ser via chamado também ou pelo canvas, no link abaixo:

::Image[]{src="https://api.archbee.com/api/optimize/G1NTw6yAi4RDUYbsU8csp/H6QPEpLBWiKWWa8h4tz4E_image.png" size="46" width="444" height="840" position="center" caption="Sugerir funcionalidade para um conector" alt="Sugerir funcionalidade para um conector" darkWidth="444" darkHeight="840" showCaption="true"}
:::

## Conexões

:::ExpandableHeading
### O que significa quando não tem o campo "Conexão" na configuração de um passo de um conector no canvas?

-> Alguns conectores não precisam realizar uma requisição em sistema externo, nestes casos não se faz necessária uma configuração de "conexão" e o campo não é apresentado em tela. Outros conectores que realizam a requisição vão apresentar o campo "Conexão", porém, de forma não obrigatória, porque essa informação vai depender de como a API foi construída.

::Image[]{src="https://api.archbee.com/api/optimize/G1NTw6yAi4RDUYbsU8csp/hd9lWae0viRkmlRjre4my_image.png" size="46" width="440" height="418" position="center" caption="Campo: Conexão" alt="Campo: Conexão" darkWidth="440" darkHeight="418" showCaption="true"}
:::

:::ExpandableHeading
### O campo "Conexão" é obrigatório?

-> Não. O preenchimento deste campo no conector vai depender de como a API do sistema externo foi construída, se exige alguma autenticação, ou não.
:::

:::ExpandableHeading
### É preciso fazer alguma liberação na minha rede?

-> Caso uma integração precise acessar uma API, servidor, banco de dados, VPN ou outro recurso protegido por regras de rede, é necessário liberar (via allowlist) os IPs públicos de saída da Fluid. Veja a lista completa de IPs e as recomendações de configuração em [Liberação de Acesso por Rede](docId\:tHNzshnHLP7Xx1Xte7nQD).
:::

## Golang Template

::::ExpandableHeading
### Como acessar entidades com hífen no nome em um Go template?

-> Para acessar entidades que contêm hífen no nome em um Go template , você pode usar a função `index` passando a variável que contém a estrutura de dados e o nome da entidade entre aspas duplas. Por exemplo, se você tem um passo com o nome `"envia-nota-fiscal"`, você pode fazer da seguinte maneira:

:::CodeblockTabs
Go

```go
{{ index .steps "envia-nota-fiscal" }}
```
:::

Isso retornará o valor associado à entidade "envia-nota-fiscal" nos passo Certifique-se de que a chave existe no mapa, caso contrário, isso resultará em uma string vazia ou zero, dependendo do tipo de valor armazenado.
::::

::::ExpandableHeading
### Como criar um ***Slug*** a partir de uma string?

-> Para converter uma string para o formato slug ([o que é slug?](https://pt.wikipedia.org/wiki/Slug_\(programa%C3%A7%C3%A3o\))), você pode fazer da seguinte maneira (exemplo gerando um JSON com um atributo chamado `msg`):

:::CodeblockTabs
Go

```go
{
    "exemplo_1": "{{toSlug "Cidade de Florianópolis"}}",
    "exemplo_2": "{{"Cidade de Florianópolis" | toSlug}}"
}
```
:::

Ou seja, é possível converter uma string em *slug* usando qualquer uma das duas sintaxes acima.
::::

:::ExpandableHeading
### Como acessar um *header* específico do payload de entrada de um fluxo?

Para acessar diretamente um *header* específico:

```go
{{index .input.headers "Content-Type"}}
```

Veja mais em [Parametrizações](docId\:VpiLZuEnyPyCbjPp4YAND).


:::

:::ExpandableHeading
### Como acessar um array utilizando Go template?

Para acessar um array no template é preciso utilizar o **index** e em seguida informar o **número do índice** a ser acessado, como por exemplo:

```go
{{$x := .steps.<nome_do_passo>.body -}}
{{index $x 0 | toJson}}
```
:::

::::ExpandableHeading
### Como lidar com datas em formato Unix Timestamp na Fluid API?&#x20;

Estou manipulando dados na Fluid API e me deparei com uma data em formato Unix Timestamp. Como posso convertê-la corretamente para manipulação?&#x20;

Quando você encontra um campo contendo uma data no formato Unix Timestamp, é necessário convertê-la para um formato utilizável. Para isso, você pode usar o filtro | int para garantir que o timestamp seja interpretado corretamente.

Se o campo que você está manipulando for similar ao exemplo abaixo:

:::CodeblockTabs
json

```json
{
  "dates": {
    "confirmed_at": 1730424941,
    "created_at": 1730424832
  }
}

```
:::

Para manipular o valor de `confirmed_at`corretamente, use:&#x20;

```go
{{ dates.confirmed_at | int }}
```

O que isso faz?

O filtro `| int` converte o valor do timestamp de string para inteiro, permitindo que você o utilize em operações, como formatação de data ou cálculos.
Por que isso é importante?


Sem o uso de `| int`, há o risco de o valor ser tratado como uma string, o que pode causar erros ao aplicar funções de data ou realizar comparações numéricas.

**Notas adicionais:**
Certifique-se de que o formato de saída desejado seja compatível com as necessidades do fluxo.
Considere ferramentas de manipulação de data, como filtros de formatação (`| date`) para ajustar o timestamp ao formato legível.

Se persistirem dúvidas ou problemas, entre em contato com o suporte da Fluid API.
::::

