# Functions

Com a Functions você consegue processar os dados mais pesados do seu bot, como uma lista de endereços, e exibi-lo no seu chatbot sem a necessidade de utilizar uma API externa.

Ao criar uma ação ou nó no Builder, é possível personalizar uma lista dinâmica e tratar o seu retorno, diminuindo o tempo de programação e melhorando a agilidade no fluxo.

## Acesso

Para acessar a Functions, clique em BUILD no menu lateral da esquerda e, em seguida, em **Functions**.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2Feogz4YJkozaLUYq6yUIs%2F04.png?alt=media&#x26;token=e21eb4e1-0d19-48f5-a1bf-40f836e9ef6b" alt=""><figcaption></figcaption></figure>

### Estrutura

A partir de agora, conheça toda a estrutura da Functions que possibilitará você realizar as integrações que deseja.

#### Criar Function

Para criar uma nova function, basta localizar o sinal de **+** e criar um **Novo arquivo**. O nome que você escolher **não pode conter caracteres especiais nem números**.

Feito isso, clique em **Criar novo arquivo** e a function estará na lista lateral à esquerda.

Veja o gif de exemplo:

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FqnyJOND1p8SrS5EfdolV%2F05.gif?alt=media&#x26;token=e2f3cd76-9b35-4d30-8803-eb0156bed156" alt=""><figcaption></figcaption></figure>

#### Inserir logs na Function

Para inserir logs nas functions e consultá-los posteriormente, basta configurar um *console.log()* na sua function. Por exemplo:

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2F5hj1X2ydjRkh85g76yG0%2FInserirLogs.png?alt=media&#x26;token=023af827-8579-46bb-99f6-9c3aeb4b1abb" alt=""><figcaption></figcaption></figure>

#### **Visualizar Function**

No menu lateral à esquerda, selecione uma function para visualizá-la e, em seguida, a tela de edição será exibida.&#x20;

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FkFnQW0aPYwpWo9QAiXQr%2FVisualizarFunction.gif?alt=media&#x26;token=0a357a55-98a2-46a6-8fed-7561ce58b371" alt=""><figcaption></figcaption></figure>

Se você clicar em mais de uma Functions na edição, elas ficarão separadas **por abas,** como mostra a imagem abaixo:

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FTsHuNlIAgEmpMwVVXWc8%2FVisualizarFunction_img.png?alt=media&#x26;token=a915f448-bb55-4226-ba38-589e7c09e966" alt=""><figcaption></figcaption></figure>

#### **Salvar ou Desfazer Function**

Para salvar a sua edição, basta clicar na opção **Salvar alterações.** Caso queira desfazê-la, clique na opção **Desfazer:**

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FTDTYsFHwKAoe2J75UqY0%2FSalvar_Desfazer.png?alt=media&#x26;token=fc9be4d0-faf4-4014-9626-5283d58873fd" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Lembre-se sempre de salvar, pois as alterações não serão salvas automaticamente.
{% endhint %}

#### **Testar Function**

Os parâmetros setados para o teste poderão ser utilizados pela função através da variável "**params**". Essa opção ficará disponível na aba *Código.*

* **Parâmetros de teste:** editor onde os parâmetros devem ser setados no formato JSO&#x4E;**;**
* **Resultado do teste:** campo de leitura contendo o resultado da ação programada utilizando os parâmetros de teste.

A área de teste fica logo ao lado da opção **Publicar.** Para utilizá-la, clique no botão **Exibir Área de Testes** e, em seguida, em **Testar.**  Para retirar a visualização, clique em **Ocultar Área de Testes.**

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FrLZIZIGfiTa5v58zKkW9%2FTestarFunction.gif?alt=media&#x26;token=738f387a-f3d3-4afb-b87b-680b25d44a3c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Caso você visualize, no momento da sua edição, que existe outro usuário também editando, você não poderá fazer nada além de visualizar.
{% endhint %}

### Atributos <a href="#id-33aeab09-9f1d-43ff-bd90-0f3342d0dda6" id="id-33aeab09-9f1d-43ff-bd90-0f3342d0dda6"></a>

A estrutura do retorno de uma ação é a seguinte:

```
{
	"code":"200/404/500",
	"result":"retorno programado da ação"
}
```

**Atributos de um evento:**

|  Atributo  | descrição                                                                                                                                                                                                                                                                                             |
| :--------: | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|  **code**  | <p>Código de execução da ação: </p><ul><li><strong>200</strong> - Em caso de sucesso</li><li><strong>404</strong> - Caso a ação não seja encontrada (por erro de escrita ou por não estar publicada, por exemplo)</li><li><strong>500</strong> - Caso ocorra erros inesperados de execução.</li></ul> |
| **result** | Retorno da função criada. retornará exatamente o que foi programado pelo ser criador no altu                                                                                                                                                                                                          |

Para uso no builder, acessar através da `result_variable` da ação (**result\_variable.code** ou **result\_variable.result**), como no exemplo abaixo:

![](https://776911411-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MBjaNm5lB1Yqgih1JCA%2F-MG3E6sVIxRz3-Mb9ZmK%2F-MG3GDRoG0xyhA77lgTR%2Fimage.png?alt=media\&token=6fa743fe-230f-4b0c-a257-66c0984e416f)

### Modelo de homologação e produção

Todas as alterações feitas nas Functions só terão reflexos em versões de produção  caso a respectiva function seja publicada.&#x20;

Dessa forma, temos um ambiente de homologação melhor definido para testar bastante as suas functions.

No ambiente de desenvolvimento, as Functions serão executadas com todas as mudanças feitas antes mesmo de publicar.

Caso deseje publicar a sua Function, clique na opção **Publicar**.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FIMVXEp4bMqnWUijSjPPB%2FPublicarFunction.png?alt=media&#x26;token=8895921a-2d06-4ada-a42b-cb3d1b15e554" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Ao publicar uma versão no builder, as functions não serão também publicadas. Isso deve ser feito separadamente.
{% endhint %}

### Aplicar no Assistente

Para aplicar a Function no seu assistente, siga as instruções abaixo dentro da plataforma do Zenvia NLU:

1. Clique no nó que deseja adicionar a functions ou crie um novo;
2. Escolha o componente de **Ações \</>**;
3. Acesse o **Helper**;
4. Busque por **Functions**;
5. Mantenha o prefixo "*custom*" e a partir dele haverá um *autocomplete* para selecionar a function que deseja utilizar.

### Versões

Na aba de **Versões**, é possível visualizar todas as versões existentes com suas respectivas datas e responsáveis pela criação.&#x20;

Na tela principal, você verá todas as versões presentes e diferentes da Function, separadas por linhas.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FmjidCMLH0RcvSYRql4Du%2FVers%C3%B5es.png?alt=media&#x26;token=9edc63bc-de3e-4836-87e1-e8762407baaf" alt=""><figcaption></figcaption></figure>

Perceba que, em cada linha, há dois botões:

* **Comparar**: ao clicar nessa opção, você poderá comparar um código com o outro. A ferramenta exibirá, lado a lado, as versões.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FGW9vgDGs1dYOLBhDM1Go%2Fcomparar.gif?alt=media&#x26;token=40aec39f-91e8-461e-bb38-de18ff792682" alt=""><figcaption></figcaption></figure>

* **Enviar para desenvolvimento:** ao clicar nessa opção, a versão selecionada da Functions será enviada para a tela de edição, ou seja, para aba de código. Assim, é possível que você crie uma nova versão editada da que acabou de restaurar. Essa funcionalidade é como um backup de versões, por onde poderá recuperá-lo e editá-lo.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FJuDRShNrSR4SPGtcS8NL%2FComparar_Desenvolvimento.gif?alt=media&#x26;token=bc8f099d-6a05-43db-bded-fae25671a9c1" alt=""><figcaption></figcaption></figure>

Para salvar uma nova versão, basta preencher com um nome no campo **Digite um título para a versão** e, em seguida, clicar em **+ Salvar nova versão**.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FysaNTJbrYdtVZ40bcNAN%2FSalvarVers%C3%A3o.png?alt=media&#x26;token=ef508342-b67b-4b81-8a1f-18cd783af3ac" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Só é possível manter 20 versões. Logo, a partir da vigésima primeira, apaga-se, automaticamente, a mais antiga.
{% endhint %}

### Logs

Na aba de **Logs**, é possível rastrear todos os registros e informações diversas das requisições de uma API.

Nela, você poderá pesquisar por palavras-chaves no conteúdo dos logs e seu respectivo período.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FD2HOnAqH5RvDKU4N3EA7%2FLogs.gif?alt=media&#x26;token=e5e3e35e-b530-443b-b154-02b1e935bacd" alt=""><figcaption></figcaption></figure>

#### Estrutura

* **Componentes**: neste filtro, você poderá buscar por duas opções que melhor atenda sua necessidade. São elas:

1. **Http\_request:** opção mais utilizada para chamar API's diretamente pelo builder, essa busca trará os logs que são gerados a partir das ações http\_resquest.
2. **Functions:** filtre por uma ou todas as Functions criadas. Mas atenção: é preciso configurar um console.log na Function para gerar logs.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FTYOxlmtHw29858w6Eqy8%2FComponentes.png?alt=media&#x26;token=d4b24879-857d-430e-90a3-6793796c92c4" alt=""><figcaption></figcaption></figure>

* **Período:** você poderá filtrar **até 7 dias**, podendo personalizar o período desejado através do calendário exibido nesta opção.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2Fu0uKnMlJ5PwltIzR6ySh%2Fper%C3%ADodo.JPG?alt=media&#x26;token=24e10537-c95a-421f-89c6-1188581e9acb" alt=""><figcaption></figcaption></figure>

* **Assistente**: nesse filtro, você poderá buscar por um ou todos os assistentes.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2F1EBJY7gqtktXsENUYp0L%2FAssistente.JPG?alt=media&#x26;token=16b41048-7aa7-46b0-a193-e7284782ae0f" alt=""><figcaption></figcaption></figure>

* **Atendimento**: utilize o ID do atendimento para filtrar.
* **Conteúdo do log**: nesse filtro, busque dentro do conteúdo do log um termo existente para filtrar mais rápido.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FzobbPlzcOJUAootkgZSb%2FAtendiment_Conte%C3%BAdo.png?alt=media&#x26;token=637c00f4-099e-48e4-8398-9a82b880b058" alt=""><figcaption></figcaption></figure>

#### Lista de Logs

Após realizar os filtros conforme desejado, uma lista de logs será exibida com as seguintes informações:

* **Atendimento:** link para o atendimento que ocorreu a execução da function;

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2Fc6nbv9Wy2uHu7FvTsFHu%2FLogs_Atendimento.gif?alt=media&#x26;token=625a3bbf-0c82-469f-bb69-5734d56a51c5" alt=""><figcaption></figcaption></figure>

* **Timestamp:** data de execução da function/log;

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FLgsPxHIiQRM82lYx4bDD%2Flogs_time.gif?alt=media&#x26;token=da5603f3-9007-4144-a78a-0de79713e189" alt=""><figcaption></figcaption></figure>

* **Assistente:** link para o assistente que ocorreu a execução da function.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FUT30GSh912Z57Sh7mV8x%2FlogsAssistente.gif?alt=media&#x26;token=22aafa22-97ed-44f5-a941-e9740e4ad167" alt=""><figcaption></figcaption></figure>

Com isso, sempre que clicar no item escolhido da lista, uma barra lateral à direita será exibida contendo todo o conteúdo do log.

<figure><img src="https://776911411-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MBjaNm5lB1Yqgih1JCA%2Fuploads%2FF7KNUUOc59MoG5V1dYTJ%2FlistaLogs.gif?alt=media&#x26;token=10ea7fd3-55b1-4835-a810-5396dfa0a941" alt=""><figcaption></figcaption></figure>
