> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Ferramentas Nativas

> Ferramentas nativas disponíveis no nó de Agente de IA para consultar produtos, manipular datas, enviar mensagens interativas e transferir conversas

As ferramentas nativas são ferramentas predefinidas integradas à plataforma que permitem ao modelo de IA executar ações específicas durante uma conversa. Essas ferramentas expandem as capacidades do agente de IA além da geração de texto, permitindo que ele interaja com o sistema, consulte informações, manipule dados e execute ações concretas.

As ferramentas nativas são encontradas e configuradas no nó de **Agente de IA**. Para acessá-las:

1. Selecione o nó de Agente de IA no seu fluxo
2. Abra a seção **TOOLS** na configuração do nó
3. Clique no botão **"+ Adicionar ferramentas"**
4. No campo "Selecionar uma Ferramenta", você verá a lista de todas as ferramentas disponíveis, incluindo as nativas (marcadas com o texto "(Native)")

<Frame>
  <img src="https://mintcdn.com/jelouai/-o-kKrN0OQnomzAi/assets/images/agentes-ia/tools-nativas.png?fit=max&auto=format&n=-o-kKrN0OQnomzAi&q=85&s=8dc07a07712d7fc645578604c7d9267b" alt="Configuração de ferramentas nativas no nó de Agente de IA" width="708" height="489" data-path="assets/images/agentes-ia/tools-nativas.png" />
</Frame>

A seguir estão as descrições de todas as ferramentas nativas disponíveis no nó de Agente de IA:

## Busca de produtos

Busca produtos no catálogo disponível para recomendar ao usuário. Usa um motor de busca para encontrar correspondências com base no nome do produto ou termos relacionados.

**Parâmetros:**

| Nome                  |   Tipo   | Obrigatório | Descrição                                                                            |
| :-------------------- | :------: | :---------: | :----------------------------------------------------------------------------------- |
| `product`             | `string` |   **Sim**   | Termo de busca ou nome do produto.                                                   |
| `top_k`               | `number` |     Não     | Número máximo de resultados a retornar.                                              |
| `score_threshold`     | `number` |     Não     | Pontuação mínima de similaridade (0.0 a 1.0) para considerar um resultado relevante. |
| `client_reference_id` | `string` |     Não     | ID de referência do cliente para buscas personalizadas.                              |

**Exemplo de Prompt:**

> "Se o usuário perguntar sobre a disponibilidade de um item ou modelo específico, você DEVE usar a ferramenta `search_products` para consultar o catálogo antes de responder."

**Exemplo de Argumentos:**

```json theme={null}
{
  "product": "iPhone 15 Pro",
  "top_k": 5,
  "score_threshold": 0.85
}
```

**Resposta:**
Retorna uma lista de produtos encontrados ou uma mensagem indicando que nenhum resultado foi encontrado. Em caso de erro, retorna uma mensagem descritiva do sistema.

**Notas:**

* Requer que o bot tenha um catálogo de produtos configurado e acessível.

***

## Transferir para agente

Transfere a conversa atual do usuário para um agente humano ou uma fila de atendimento. Permite especificar estratégias de roteamento e prioridades.

**Parâmetros:**

| Nome              |   Tipo   |       Obrigatório       | Descrição                                                                         |
| :---------------- | :------: | :---------------------: | :-------------------------------------------------------------------------------- |
| `assignment_type` |  `enum`  |  Não (Padrão: `direct`) | Método de atribuição: `direct` (imediato) ou `queue` (fila de tickets).           |
| `assignment_by`   |  `enum`  | Não (Padrão: `shuffle`) | Estratégia de roteamento: `shuffle` (automático), `team`, `operators`, `general`. |
| `teamId`          | `number` |          Não\*          | ID da equipe. \*Obrigatório apenas se `assignment_by` for 'team'.                 |
| `operatorId`      | `number` |          Não\*          | ID do operador. \*Obrigatório apenas se `assignment_by` for 'operators'.          |
| `priority`        | `number` |     Não (Padrão: 0)     | Prioridade na fila (0-10), relevante apenas para `assignment_type='queue'`.       |

**Exemplo de Prompt:**

> "Quando o usuário expressar frustração ou solicitar explicitamente falar com uma pessoa real, execute a função `transfer_to_agent` imediatamente."

**Exemplo de Argumentos:**

*Caso: Transferência direta automática (mais comum)*

```json theme={null}
{
  "assignment_type": "direct",
  "assignment_by": "shuffle"
}
```

*Caso: Transferência direta para uma equipe*

```json theme={null}
{
  "assignment_type": "direct",
  "assignment_by": "team",
  "teamId": 4501
}
```

*Caso: Criar ticket na fila geral*

```json theme={null}
{
  "assignment_type": "queue",
  "assignment_by": "general",
  "priority": 5
}
```

**Resposta:**
Retorna um objeto JSON com o resultado da operação indicando se a transferência foi iniciada com sucesso.

**Notas:**

* Pode encerrar o fluxo de IA imediatamente.
* Ao usar `assignment_type: "queue"` com `assignment_by: "general"`, um ticket é criado na fila geral de atendimento.
* **Importante:** IDs de equipe ou operador não devem ser inventados; use apenas os explicitamente configurados.

***

## Enviar mensagens interativas

Envia uma mensagem estruturada ou interativa ao usuário. O formato exato depende do canal (WhatsApp, Web, etc.), mas geralmente inclui botões ou listas de opções.

**Parâmetros:**

| Nome      |   Tipo   | Obrigatório | Descrição                                                                                                                                 |
| :-------- | :------: | :---------: | :---------------------------------------------------------------------------------------------------------------------------------------- |
| `text`    | `string` |   **Sim**   | Conteúdo principal da mensagem. Máximo de 1024 caracteres.                                                                                |
| `title`   | `string` |     Não     | Cabeçalho/título da mensagem. Máximo de 60 caracteres.                                                                                    |
| `caption` | `string` |     Não     | Subtítulo ou descrição complementar. Máximo de 60 caracteres. No WhatsApp com 4+ opções, usado como o texto do botão que expande a lista. |
| `options` |  `array` |   **Sim**   | Lista de opções/botões. Veja a estrutura abaixo.                                                                                          |

*Estrutura de `options` (Array de objetos):*

* `title` (string, obrigatório): Texto da opção/botão. Máximo de 20 caracteres. Títulos duplicados não são permitidos.
* `description` (string, opcional): Descrição adicional da opção. Máximo de 72 caracteres.

**Exemplo de Prompt:**

> "Se o usuário perguntar quais serviços oferecemos, você DEVE usar `send_interactive_message` para exibir um menu com as opções disponíveis."

**Exemplo de Argumentos (Botões - 3 ou menos opções):**

```json theme={null}
{
  "text": "Como você gostaria de continuar com sua consulta?",
  "title": "Opções de Atendimento",
  "caption": "Selecione uma opção",
  "options": [
    {
      "title": "Falar com Agente",
      "description": "Transferir para suporte humano"
    },
    {
      "title": "Ver Catálogo",
      "description": "Navegar pelos produtos disponíveis"
    }
  ]
}
```

**Exemplo de Argumentos (Lista WhatsApp - 4+ opções):**

```json theme={null}
{
  "text": "Temos vários departamentos disponíveis para atendê-lo.",
  "title": "Departamentos",
  "caption": "Ver opções",
  "options": [
    { "title": "Vendas", "description": "Consultas sobre produtos e preços" },
    { "title": "Suporte Técnico", "description": "Ajuda com problemas técnicos" },
    { "title": "Faturamento", "description": "Consultas sobre pagamentos" },
    { "title": "Devoluções", "description": "Gerenciar devoluções" }
  ]
}
```

<Note>
  No WhatsApp, quando você envia 4 ou mais opções, a mensagem é exibida como uma lista suspensa. O valor de `caption` é usado como o texto do botão que abre a lista (no exemplo acima, "Ver opções").
</Note>

**Resposta:**
Retorna `"Message sent successfully."` se o envio foi bem-sucedido ou uma mensagem de erro caso contrário.

**Notas:**

* Envia uma mensagem real ao usuário.
* O tipo de mensagem se adapta automaticamente de acordo com o canal e o número de opções.

***

## Enviar Call to Action (CTA)

Envia um botão de call-to-action que abre uma URL externa. Pode ser configurado como WebView para formulários ou pagamentos que requerem aguardar uma resposta do usuário.

**Parâmetros:**

| Nome                |         Tipo         | Obrigatório | Descrição                                                                                                   |
| :------------------ | :------------------: | :---------: | :---------------------------------------------------------------------------------------------------------- |
| `text`              |       `string`       |   **Sim**   | Conteúdo principal da mensagem.                                                                             |
| `url`               |       `string`       |   **Sim**   | URL que abre quando o botão é clicado.                                                                      |
| `display_text`      |       `string`       |   **Sim**   | Texto do botão CTA. Máximo de 20 caracteres.                                                                |
| `title`             |       `string`       |     Não     | Cabeçalho/título da mensagem.                                                                               |
| `caption`           |       `string`       |     Não     | Subtítulo para complementar a mensagem.                                                                     |
| `is_webview`        |       `boolean`      |     Não     | Se `true`, envia como WebView que pausa o fluxo e aguarda um callback. Padrão: `false`.                     |
| `expiration_time`   |       `number`       |     Não     | Segundos para aguardar o callback antes de expirar. Padrão: 300. Aplica-se apenas quando `is_webview=true`. |
| `pending_message`   |       `string`       |     Não     | Mensagem a exibir se o usuário enviar texto enquanto aguarda o callback do WebView.                         |
| `response_variable` |       `string`       |     Não     | Nome da variável onde a resposta do callback será salva.                                                    |
| `input`             | `string` \| `object` |     Não     | Dados a passar para o WebView como parâmetros de URL.                                                       |

**Exemplo de Prompt:**

> "Quando o usuário confirmar que deseja fazer o pagamento, use `send_call_to_action` com `is_webview=true` para enviar o link de pagamento e aguardar a confirmação."

**Exemplo de Argumentos (CTA simples):**

```json theme={null}
{
  "text": "Visite nossa loja online para ver todos os produtos disponíveis.",
  "url": "https://store.example.com/catalog",
  "display_text": "Ver Catálogo",
  "title": "Loja Online"
}
```

**Exemplo de Argumentos (WebView aguardando resposta):**

```json theme={null}
{
  "text": "Clique no botão para concluir seu pagamento com segurança.",
  "url": "https://payments.example.com/checkout",
  "display_text": "Pagar Agora",
  "title": "Concluir Pagamento",
  "is_webview": true,
  "expiration_time": 600,
  "pending_message": "Por favor, conclua o pagamento na janela aberta antes de continuar.",
  "response_variable": "payment_result",
  "input": {
    "order_id": "12345",
    "amount": 99.99
  }
}
```

**Resposta:**

* CTA normal: `"Call-to-action message sent successfully."`
* WebView: `"WebView message sent. Waiting for user action."`

**Notas:**

* Disponível apenas para provedores do WhatsApp que suportam esse tipo de mensagem.
* Quando `is_webview=true`, o fluxo é pausado até que o WebView retorne um callback ou o tempo expire.
* O valor de `input` é convertido em parâmetros de query string da URL.
* A resposta do callback é salva na variável especificada em `response_variable`.

***

## Data e hora atual

Obtém a data e hora atuais. Permite especificar um fuso horário para obter a hora local correta.

**Parâmetros:**

| Nome       |   Tipo   | Obrigatório | Descrição                                                                 |
| :--------- | :------: | :---------: | :------------------------------------------------------------------------ |
| `timezone` | `string` |     Não     | Fuso horário desejado em formato IANA (ex.: "America/Sao\_Paulo", "UTC"). |

**Exemplo de Prompt:**

> "Antes de processar qualquer solicitação dependente de horário (como 'bom dia' ou compromissos para 'hoje'), chame `get_current_date_time` para saber o horário exato."

**Exemplo de Argumentos:**

```json theme={null}
{
  "timezone": "America/Sao_Paulo"
}
```

**Resposta:**
Retorna uma string com a data e hora formatadas, por exemplo: `"Monday, December 08, 2025 10:30 AM"`.

**Notas:**

* Não tem efeitos colaterais visíveis para o usuário.
* É puramente informacional para o modelo.

***

## Dia da semana

Calcula e retorna o dia da semana correspondente a uma data específica fornecida.

**Parâmetros:**

| Nome   |   Tipo   | Obrigatório | Descrição                                                                    |
| :----- | :------: | :---------: | :--------------------------------------------------------------------------- |
| `date` | `string` |   **Sim**   | Data a consultar (formato ISO ou formato legível padrão, ex.: "2024-12-25"). |

**Exemplo de Prompt:**

> "Se o usuário quiser agendar para uma data específica, verifique primeiro qual dia da semana é usando `get_weekday_of_a_date` para garantir que seja um dia útil."

**Exemplo de Argumentos:**

```json theme={null}
{
  "date": "2025-12-10"
}
```

**Resposta:**
Retorna o nome do dia da semana, por exemplo: `"Wednesday"`.

**Notas:**

* Útil para validar compromissos ou agendas.
