> For the complete documentation index, see [llms.txt](https://docs.altu.d1.cx/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.altu.d1.cx/build/assistentes/builder/componentes/actions/functions.md).

# Functions

Nessa sessão você pode desenvolver ações personalizadas em javascript.&#x20;

Para aplicá-la no seu assistente vá em > **configuração do nó** > componente de **ações** `ƒ` > acesse o **helper** `?`  > busque por **ação personalizada**.&#x20;

![](/files/MBGyGq5dAFyYUvLQqSHX)

\
Mas antes, você precisa:

* Desenvolver a ação
* Testar&#x20;
* Salvar&#x20;
* Publicar&#x20;

{% hint style="success" %}
Visite nossa área de [configuração das functions](/build/acoes.md) para mais detalhes.
{% endhint %}

## Async function

O recurso Async funciona como uma função assíncrona, isto é, uma comunicação que não ocorre de forma simultânea.&#x20;

Quando essa função é chamada, ela evita pausas no sistema simplificando o uso das Functions.

### Como funciona

De maneira geral, os dados externos recebidos através de um endpoint de uma API, por exemplo, levam um tempo para que chegue ao sistema.&#x20;

Ainda que seja necessário aguardar a resposta da API, há formas de não bloquear o funcionamento do programa. Nesse sentido, **a comunicação assíncrona entra como uma opção em "segundo plano", onde o sistema pode continuar rodando enquanto executa uma tarefa**.&#x20;

### Funções assíncronas

As funções assíncronas podem ser acionadas pelas palavras-chave **async** e **await**. Ambas permitem que o comportamento assíncrono, baseado em promessas, seja escrito sem necessidade de configurar códigos de promessas extensamente.

#### Async

Para começar, inicie a escrita do código considerando a **palavra-chave** **async**.

O Async é definido no **builder**, como mostra o exemplo abaixo. Ao ser inserido, o sistema já entenderá que ele deve retornar uma ação ou promessa.

<figure><img src="/files/nr7hLIYAlb6DeEGQkVVs" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
O tempo máximo de execução de uma functions async será de 30 segundos.&#x20;
{% endhint %}

#### Return

A seguir, você deverá inserir o **return**, que **é a promessa esperada pela async acionada**. O retorno é caracterizado por dois valores:

* **True:** significa que o fluxo continuará e o `result_variable` é preenchido com o status *Pending*, indicando que a requisição está em andamento. Ao final da chamada da API, será enviada uma nova mensagem atualizando o resultado como *Done*, ou seja, concluída com sucesso.
* **False:** significa que **a função não possui um retorno explícito** e que a conversa iniciada ficará aguardando um retorno da function, sem seguir o fluxo configurado.

{% hint style="warning" %}
**Um valor não especificado será classificado automaticamente como false** e seguirá o mesmo padrão do `http_request`. Clique [aqui](https://docs.altu.d1.cx/build/assistentes/builder/componentes/actions/http_request) para ler mais.
{% endhint %}

#### WaitTime

O objetivo desta palavra é **aguardar a resolução de uma função assíncrona**. Ela deve ser utilizada quando há a necessidade de esperar por alguma resposta que possa demorar mais do que o tempo normal da execução do código.

Para utilizá-la, é preciso **definir a função com async** **e utilizar o WaitTime na função**, como mostra o exemplo abaixo:

<figure><img src="/files/WbhTIS8ebU2sVE4qDmxU" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Os valores a serem utilizados devem ser em **segundos** e estar entre **0 e 900**, o que **equivale a 15 minutos**.
{% endhint %}

### Mais informações

* Quando o builder é executado em modo de **desenvolvimento**, será usada a versão de desenvolvimento da function.
* Quando o builder é executado em **homologação**, será usada a versão de homologação da function. Caso não haja uma versão de homologação, será usada a versão de desenvolvimento.
* Quando o builder é executado em **produção**, será usada a versão publicada da function. Caso a function não tenha uma versão publicada, a action vai retornar como response um JSON como esse:

```json
{
  code: 404,
  message: "Function not found or published"
}
```

{% hint style="success" %}
A execução de functions no Builder gera entradas de logs que podem ser vistas na área específica para isto da function.
{% endhint %}
