> For the complete documentation index, see [llms.txt](https://docs.fortics.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fortics.com.br/perguntas-frequentes/perguntas-frequentes-1/chat-center/componentes-do-fluxo/componente-fluxo-script.md).

# Componente fluxo: Script

O componente **Script** permite a manipulação de dados utilizando a linguagem **JavaScript** (**JS**). Ele é ideal para realizar cálculos, limpar textos (retirar caracteres especiais), isolar informações de um JSON ([como vimos no CTWA](/perguntas-frequentes/perguntas-frequentes-1/chat-center/integrando-anuncios-ctwa-ao-seu-fluxo.md)) ou formatar dados antes de enviá-los para o cliente ou para uma integração.

## Pré-requisitos

**Permissão** **necessária**: Adicionar, Editar e Remover Fluxos.\
Como o componente faz parte das configurações de fluxo, o usuário responsável por executar este tutorial [precisa ter ativa a permissão de gerenciamento de Fluxos](broken://pages/MDJR7yQfNu1A0WrbswcW). Caso essa opção não esteja disponível no seu perfil, solicite a liberação ao administrador da plataforma antes de prosseguir.

## Configurações do componente

<div align="left"><figure><img src="/files/jKOSzaLN9zH7cdD1q8xL" alt=""><figcaption></figcaption></figure></div>

**Horários**: Permite selecionar um Grupo de Horários (previamente criado em configurações) para definir quando este componente deve funcionar. Se o atendimento ocorrer dentro deste período, o componente é executado; caso contrário, ele é ignorado e o fluxo pula para a próxima etapa.

**Exceção**: Define períodos em que este componente não deve ser executado, sendo executado em qualquer horário fora desse intervalo. Quando um período é configurado aqui, o fluxo ignora este componente e segue para o próximo passo.

**Nome**: Define como o componente será identificado no mapa de fluxo. É utilizado apenas para organização da automação e não aparece para o cliente.

**Parâmetros** **do** **Script**: Ao adicionar um parâmetro clicando no botão "+", você verá dois campos principais:

1. **Parâmetro (O nome)**: Este campo deve ser preenchido com o nome exato que a função espera receber.\
   *Exemplo***:** Se você selecionou a função add(numberOne, numberTwo), você deve criar dois parâmetros com os nomes exatos: numberOne e numberTwo.
2. **Valor (A origem):** Aqui é onde você indica qual dado do sistema será processado. Geralmente, você usará uma variável entre chaves duplas. \
   *Exemplo*: Em valor, você insere {{VALOR\_PRODUTO\_1}}.

**Tipo de Função:** O Chat Center oferece três caminhos para facilitar sua vida:

* **Padrão**: Scripts prontos para ações básicas (ex.: somar valores ou limpar caracteres).
* **Modelos**: Estruturas mais robustas, focadas em integrações complexas.
* **Customizável**: Onde você escreve seu próprio código (como o extrator de source\_id que criamos).

**Retorno da função:** Este campo define **onde o resultado será salvo**. [Você deve escolher ou criar uma variável personalizada ](/perguntas-frequentes/perguntas-frequentes-1/chat-center/criando-variaveis-personalizadas.md)para guardar o que o script processou (ex.: {{resultado\_limpo}}).

## Exemplos de uso do componente Script

### Usando o tipo customizável

O modo **Customizável** do componente Script é destinado a situações onde as funções padrão do sistema não atendem à sua necessidade específica. Nele, você tem um editor de código aberto para escrever funções em **JS**, permitindo uma manipulação profunda e precisa de qualquer informação que trafegue pelo fluxo.

Vamos dizer que você chegou no fluxo com duas variáveis definidas para o cliente:

* {{**VALOR\_DA\_COMPRA**}}: Aqui você tem o valor total da compra do produto armazenado previamente no fluxo;
* {{**CLIENTE\_VIP**}}: Aqui você já consultou os dados do cliente e definiu “sim” se ele for VIP e “não” se ele não for.&#x20;

**Parâmetros**: Para utilizar essas informações no script, você pode definir dois parâmetros:

* **valor** → receberá o conteúdo de {{VALOR\_DA\_COMPRA}}
* **statusVip** → receberá o conteúdo de {{CLIENTE\_VIP}}

Esses parâmetros serão utilizados diretamente no campo customizável, permitindo que você construa regras mais inteligentes e alinhadas com a lógica do seu atendimento.

{% hint style="danger" %}
**Atenção**:&#x20;

A nomenclatura dos **parâmetros** no JS é **case** **sensitive**. Isso significa que o nome definido no parâmetro deve ser idêntico ao usado no código (ex.: valorCompra é diferente de valorcompra). Use apenas letras, números, hífens (-) e underscores (\_), **evitando** **sempre** o uso de espaços, acentos ou caracteres especiais para não comprometer o funcionamento do script.
{% endhint %}

**Tipo de função**: Selecione a opção **Customizável** para criar e utilizar um código em JavaScript no componente.&#x20;

**Customizável:** Este campo é exibido apenas quando o **Tipo de função** está definido como customizável. É aqui que você insere o código em JavaScript que será executado no fluxo.

No código abaixo, vamos avaliar se o cliente é VIP e aplicar um desconto de 5%. Caso ele seja VIP e o valor da compra seja superior a R$ 500,00, o desconto será ajustado para 15%.

```javascript
() => {
  // Lógica: Se for VIP E a compra for acima de 500, aplica 15%
  // Se for apenas VIP, ou apenas compra alta, poderíamos ter outras regras
  if (statusVip === "Sim" && valor > 500) {
    desconto = valor * 0.15;
  } else if (statusVip === "Sim") {
    desconto = valor * 0.05; // VIP padrão ganha 5%
  }
const valorFinal = valor - desconto;
// Retornamos o valor final formatado ou apenas o número para a variável de destino
  return valorFinal.toFixed(2); 
};
```

Note, nos destaques da imagem abaixo, que estamos utilizando no JavaScript as variáveis definidas no campo de parâmetros, conforme configurado anteriormente.

<div align="left"><figure><img src="/files/ovJv2MJpPmcdSRzv5eQU" alt=""><figcaption></figcaption></figure></div>

**Retorno da função:** Este campo define **onde o resultado será salvo.** Você deve [escolher ou criar uma variável personalizada ](/perguntas-frequentes/perguntas-frequentes-1/chat-center/criando-variaveis-personalizadas.md)para guardar o que o script processou (ex.: {{resultado\_limpo}}).

### Uso de textos fixos (Strings) no campo Valor

O campo **Valor** não aceita apenas variáveis do sistema (como {{nome}}). Você também pode inserir **textos fixos (strings)** diretamente, ampliando a flexibilidade das regras e aumentando a precisão das automações.

#### Exemplo prático: Substituindo informações

Imagine que você deseja alterar o local de uma entrega na variável {{endereco\_de\_retirada}}. Ao utilizar uma função de substituição (Replace), configure os parâmetros da seguinte forma:

* **text:** Informe a variável {{**endereco\_de\_retirada**}}, que contém o endereço completo.
* **oldText:** Em vez de uma variável, insira diretamente o texto fixo "**São Paulo**".
* **newText:** Em vez de uma variável, insira diretamente o texto fixo "**Rio de Janeiro**".

Com essa configuração, o script irá buscar, dentro do conteúdo de text, o valor definido em oldText e substituí-lo pelo valor definido em newText.

<div align="left"><figure><img src="/files/9847OPxlwQF5SVUaGoU5" alt=""><figcaption></figcaption></figure></div>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.fortics.com.br/perguntas-frequentes/perguntas-frequentes-1/chat-center/componentes-do-fluxo/componente-fluxo-script.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
