# AstraCalls

# Instalação e Configurações AstraCalls docker

# AstraCalls no N8N e WhatsApp

Link vídeo Youtube: [https://www.youtube.com/watch?v=Hs-xV2V-i1g](https://www.youtube.com/watch?v=Hs-xV2V-i1g)   
Github: [https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos)

Neste tutorial você conecta o AstraCalls ao **n8n** e monta um robô que responde mensagens de WhatsApp. Leva uns 10 minutos e não precisa programar.

📦 Node: [`n8n-nodes-astracalls`](https://www.npmjs.com/package/n8n-nodes-astracalls). A documentação completa, com as 55 operações e os 15 eventos, está na página do npm.

---

## O que você precisa

<div class="markdown-heading" dir="auto" id="bkmrk--3">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#o-que-voc%C3%AA-precisa)</div>- Um AstraCalls rodando, com **pelo menos uma sessão conectada** (número pareado pelo QR Code no painel).
- A **API Key** do servidor, que é o valor de `WACALLS_API_KEY`.
- Um n8n onde você seja o dono (owner) da instância, porque só o owner instala community nodes.

---

## Passo 1: instalar o node

<div class="markdown-heading" dir="auto" id="bkmrk--6">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-1-instalar-o-node)</div>1. No n8n, abra **Configurações** (⚙️) → **Community Nodes** → **Install a community node**.
2. Digite `n8n-nodes-astracalls`, marque a ciência dos riscos e clique em **Install**.
3. Ao adicionar um node, procure **AstraCalls**. Aparecem dois: 
    - **AstraCalls**: faz ações, como enviar mensagem, ligar ou criar grupo.
    - **AstraCalls Trigger**: inicia o fluxo quando algo acontece, como uma mensagem recebida.

> **n8n em Docker:** se preferir, adicione `N8N_COMMUNITY_PACKAGES=n8n-nodes-astracalls` nas variáveis do serviço e reinicie.

## Passo 2: criar a credencial

<div class="markdown-heading" dir="auto" id="bkmrk--8">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-2-criar-a-credencial)</div>1. **Credentials** → **Add credential** → **AstraCalls API**.
2. Preencha os dois campos:
    
    <table><thead><tr><th>Campo</th><th>Exemplo</th></tr></thead><tbody><tr><td>**URL do Servidor**</td><td>`https://calls.seudominio.com`, o endereço do painel, sem `/api` no final</td></tr><tr><td>**API Key**</td><td>o valor de `WACALLS_API_KEY`</td></tr></tbody></table>
3. Clique em **Save**. Se aparecer ✅, está conectado.
    
    
    - **401**: a API Key está errada.
    - **Não conecta**: a URL está errada ou o servidor está fora do ar.

## Passo 3: enviar a primeira mensagem

<div class="markdown-heading" dir="auto" id="bkmrk--10">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-3-enviar-a-primeira-mensagem)</div>1. Crie um fluxo com um **Manual Trigger** e adicione o node **AstraCalls** depois dele.
2. Configure o node: 
    - **Recurso** `Mensagem` · **Operação** `Enviar Texto`
    - **Sessão**: escolha o número na lista
    - **Para**: `5511999999999`. Use DDI + DDD + número; com ou sem o 9º dígito funciona.
    - **Texto**: `Olá! Primeira mensagem pelo n8n 🚀`
3. Clique em **Test step**. A mensagem chega no WhatsApp, e a resposta do node traz o `id` dela.

## Passo 4: responder mensagens automaticamente

<div class="markdown-heading" dir="auto" id="bkmrk--12">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-4-responder-mensagens-automaticamente)</div>> ⚡ **Atalho:** baixe [`n8n/responder-mensagem.json`](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/responder-mensagem.json) e importe no n8n pelo menu **⋯ → Import from File**. Depois escolha a credencial e a sessão nos dois nodes.

Para montar na mão:

1. Adicione o **AstraCalls Trigger**: 
    - **Sessão**: o número que vai receber
    - **Eventos**: `Mensagem (Recebida ou Enviada)`
    - Deixe **Ignorar Mensagens Enviadas por Mim** ligado, para o fluxo não responder a si mesmo em loop.
2. Depois do gatilho, adicione o node **AstraCalls** (`Mensagem → Enviar Texto`): 
    - **Sessão**: `{{ $json.sessao }}`
    - **Para**: `{{ $json.responderPara }}`. Esse campo já traz o contato certo, ou o grupo quando a mensagem veio de um.
    - **Texto**: `Oi {{ $json.nome }}! Recebi: "{{ $json.texto }}"`
3. **Ative** o fluxo e mande uma mensagem para o número para testar.

Para responder conforme o conteúdo, coloque um **Switch** entre os dois nodes, olhando o campo `texto`. Por exemplo: se contém "preço", envia a tabela.

## Passo 5 (opcional): agente de IA

<div class="markdown-heading" dir="auto" id="bkmrk--14">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-5-opcional-agente-de-ia)</div>Para que uma IA atenda pelo WhatsApp:

1. Use o fluxo do passo 4, mas troque o envio por um node **AI Agent**, com o modelo de sua preferência e uma memória.
2. Ligue o **AstraCalls** como **ferramenta (Tool)** do agente, por exemplo com a operação "Enviar Texto". O agente decide sozinho quando enviar mensagens, consultar contatos etc.

> Outra opção é a ferramenta **MCP Client** do n8n apontando para o `/mcp` do AstraCalls, que dá ao agente acesso a todas as ferramentas, sem instalar o node. Veja a seção "MCP para agentes de IA" no [README](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/README.md#-mcp-para-agentes-de-ia).

---

## 📚 10 fluxos de exemplo prontos

<div class="markdown-heading" dir="auto" id="bkmrk--17">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos)</div>Baixe o `.json`, importe no n8n pelo menu **⋯ → Import from File**, escolha a credencial e a **Sessão** em cada node AstraCalls e troque os números de exemplo (`5511999999999`). Cada fluxo tem uma nota amarela explicando como funciona.

<table id="bkmrk-%23-fluxo-o-que-faz-01"><thead><tr><th>\#</th><th>Fluxo</th><th>O que faz</th></tr></thead><tbody><tr><td>01</td><td>[Resposta fora do horário](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-01-resposta-fora-do-horario.json)</td><td>Responde automaticamente a quem escreve fora do expediente</td></tr><tr><td>02</td><td>[Menu com botões](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-02-menu-com-botoes.json)</td><td>Envia um menu com botões e segue um caminho para cada opção (Switch)</td></tr><tr><td>03</td><td>[Lista de serviços e agendamento](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-03-lista-de-servicos-e-agendamento.json)</td><td>Envia uma lista interativa, confirma a opção escolhida e reage com ✅</td></tr><tr><td>04</td><td>[Atendente de IA com ferramentas](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-04-atendente-de-ia-com-ferramentas.json)</td><td>AI Agent com memória que usa o AstraCalls como ferramenta (requer credencial OpenAI)</td></tr><tr><td>05</td><td>[Pesquisa de satisfação (enquete)](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-05-pesquisa-de-satisfacao-enquete.json)</td><td>Envia uma enquete para os clientes, agradece cada voto e avisa o gestor se a nota for ruim</td></tr><tr><td>06</td><td>[Boas-vindas no grupo](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-06-boas-vindas-no-grupo.json)</td><td>Dá boas-vindas a quem entra no grupo, mencionando a pessoa</td></tr><tr><td>07</td><td>[Disparo de ligações com áudio](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-07-disparo-de-ligacoes-com-audio.json)</td><td>Liga para uma lista tocando um áudio gravado e acompanha o status</td></tr><tr><td>08</td><td>[Validar lista antes da campanha](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-08-validar-lista-antes-da-campanha.json)</td><td>Confere quais números têm WhatsApp e só envia para eles</td></tr><tr><td>09</td><td>[Lembrete diário com toque](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-09-lembrete-diario-com-toque.json)</td><td>Todo dia, no horário marcado, envia um lembrete e faz o telefone tocar</td></tr><tr><td>10</td><td>[Alerta de desconexão e restrição](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-10-alerta-de-desconexao-e-restricao.json)</td><td>Avisa quando a sessão cai ou recebe restrição do WhatsApp</td></tr></tbody></table>

> Os fluxos com **AstraCalls Trigger** (01 a 06 e 10) trocam o webhook da sessão quando ativados. Ative **um por sessão**, ou junte os caminhos num só fluxo (veja o aviso abaixo).

---

## ⚠️ Antes de usar em produção

<div class="markdown-heading" dir="auto" id="bkmrk--20">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#%EF%B8%8F-antes-de-usar-em-produ%C3%A7%C3%A3o)</div>- **Cada sessão tem um único webhook.** Ao ativar um fluxo com o AstraCalls Trigger, o node coloca o webhook do n8n no lugar do que estava configurado. Ao desativar, restaura o anterior. **Use um só gatilho por sessão** e separe os caminhos com o **Switch**. A integração nativa com o Chatwoot não é afetada.
- **Ligações e disparos em massa** só para quem autorizou o contato. Envio não solicitado bloqueia o número e viola a LGPD e as regras da Anatel.

## Problemas comuns

<div class="markdown-heading" dir="auto" id="bkmrk--22">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#problemas-comuns)</div><table id="bkmrk-sintoma-solu%C3%A7%C3%A3o-a-se"><thead><tr><th>Sintoma</th><th>Solução</th></tr></thead><tbody><tr><td>A sessão não aparece na lista</td><td>Confira a credencial e se a sessão está conectada no painel</td></tr><tr><td>A sessão aparece como *aguardando QR Code*</td><td>Abra o painel do AstraCalls e pareie o número</td></tr><tr><td>O gatilho não dispara</td><td>O fluxo precisa estar **ativo**, e o n8n precisa ser acessível pelo servidor do AstraCalls (URL pública ou mesma rede)</td></tr><tr><td>Outro fluxo parou de receber eventos</td><td>Dois gatilhos na mesma sessão: o último ativado vence (veja o aviso acima)</td></tr></tbody></table>

# Instalação AstraCalls padrão

Link: [https://github.com/AstraOnlineWeb/AstraCalls/tree/main](https://github.com/AstraOnlineWeb/AstraCalls/tree/main)

git clone [https://github.com/AstraOnlineWeb/AstraCalls.git](https://github.com/AstraOnlineWeb/AstraCalls.git)

# 📞 AstraCalls

<div align="center" dir="auto" id="bkmrk-" style="text-align: justify;"><div class="markdown-heading" dir="auto">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-astracalls)</div></div>**Chamadas de voz e vídeo do WhatsApp em Go puro, direto do navegador — prontas para produção SaaS.**

VoIP nativo (áudio + vídeo, 1:1 e em grupo), gateway **SIP/PBX**, suíte completa de **mensagens**, **disparos**, **webhooks** confiáveis, integração com **Chatwoot** e deploy em **Docker Swarm + Traefik**.

[![Go](https://camo.githubusercontent.com/7710c170a5882bd59254207b461cefd432cbe354f1fb606f0d05ba802da2f44e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f2d312e32362b2d3030414444383f6c6f676f3d676f266c6f676f436f6c6f723d7768697465)](https://go.dev) [![React](https://camo.githubusercontent.com/5db4de9dcd72e7b8e95fe25f33f5520c571e9c3f93522d691a10cff804fb795d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d3631444146423f6c6f676f3d7265616374266c6f676f436f6c6f723d626c61636b)](https://react.dev) [![whatsmeow](https://camo.githubusercontent.com/b160e70eb028ac43c1f683f9271c8c47222e2da93ec90f4ee68701ba94d5a37e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f77686174736d656f772d566f49502d3235443336363f6c6f676f3d7768617473617070266c6f676f436f6c6f723d7768697465)](https://github.com/tulir/whatsmeow) [![pion](https://camo.githubusercontent.com/82e947cc55c8d21234c4fcc783086b63b7caf192fa636d74cea1cd3cead911fa/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f70696f6e2d5765625254432d464636423642)](https://github.com/pion/webrtc) [![PostgreSQL](https://camo.githubusercontent.com/348c7c9ddb0f7c351756992d7d1c76b22ea265ad50284df24d9afd72069990b0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506f737467726553514c2d31362d3333363739313f6c6f676f3d706f737467726573716c266c6f676f436f6c6f723d7768697465)](https://www.postgresql.org) [![Docker](https://camo.githubusercontent.com/3dc69af93faed41389605a93c7ec3a222228c8ab1c7fdc678ce2bc88e0219f3a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d616d64363425323025324225323061726d36342d3234393645443f6c6f676f3d646f636b6572266c6f676f436f6c6f723d7768697465)](https://hub.docker.com/r/astraonline/astracalls) [![n8n](https://camo.githubusercontent.com/83d1d8227c6fdcae3f9651782e52be3195a388eb1cd20b307afdf047c6fa4d20/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f6e386e2d6e6f6465732d617374726163616c6c733f6c6162656c3d6e386e2532306e6f6465266c6f676f3d6e386e26636f6c6f723d454134423731)](https://www.npmjs.com/package/n8n-nodes-astracalls) [![License](https://camo.githubusercontent.com/0fb4f7634808706feb5d9bf669e078e2da524534575a39f2f08c74de3d8a1135/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4147504c2d2d332e302d626c75652e737667)](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-licen%C3%A7a)

[Visão Geral](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-vis%C3%A3o-geral) · [Funcionalidades](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-funcionalidades) · [Arquitetura](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-arquitetura) · [Início Rápido](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-in%C3%ADcio-r%C3%A1pido) · [Configuração](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-configura%C3%A7%C3%A3o) · [Deploy](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-deploy-em-produ%C3%A7%C3%A3o-docker-swarm--traefik) · [API](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-api) · [n8n](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-integra%C3%A7%C3%A3o-com-n8n) · [Suporte](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#%EF%B8%8F-suporte-profissional)

---

## 📋 Visão Geral

<div class="markdown-heading" dir="auto" id="bkmrk--4" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-vis%C3%A3o-geral)</div>> O AstraCalls pareia uma ou mais contas do WhatsApp (QR code, **código de pareamento** ou **passkey**) e permite **fazer e receber chamadas de voz e vídeo** de qualquer navegador, ligar para **tronco/ramal SIP**, e operar a conta como canal de **mensagens** (texto, mídia, botões, listas, carrossel, enquete, formulário, pix, produto, status…).
> 
> O microfone e a câmera do navegador chegam ao servidor Go por **WebRTC** (ou por **WebSocket**, com fallback automático quando o WebRTC não passa no firewall). O servidor transcodifica para os codecs do WhatsApp (**MLow** para voz, **H.264** para vídeo) e injeta a mídia na malha de **relay SRTP** do WhatsApp — e o caminho inverso traz o áudio e o vídeo do outro lado de volta ao navegador.
> 
> Toda a pilha VoIP roda **nativamente em Go**: codec MLow, RTP/SRTP/SRTCP, STUN, transporte SCTP/DTLS do relay, pipeline H.264 e a sinalização `<call>`, integrados ao [**whatsmeow**](https://github.com/tulir/whatsmeow) e servidos a um painel **React 19**. A única dependência em C é o codec `opus_mlow` (via cgo) — e é opcional: sem ela o servidor roda em modo **somente sinalização**.
> 
> Várias contas podem ser pareadas e operadas lado a lado, cada uma com QR, status, histórico e banco próprios. Uma conta mantém **várias chamadas 1:1 simultâneas** (uma por atendente), roteadas por call ID.

> **Status:** estável e em produção (última versão estável no [CHANGELOG](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/CHANGELOG.md)). Chamada em **grupo** é funcional (áudio + vídeo, 3+ participantes) mas segue marcada como experimental, atrás da flag `WACALLS_GROUP_CALLS`.

---

## 🚀 Funcionalidades

<div class="markdown-heading" dir="auto" id="bkmrk--7" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-funcionalidades)</div>### ☎️ Chamadas de voz

<div class="markdown-heading" dir="auto" id="bkmrk--9" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#%EF%B8%8F-chamadas-de-voz)</div>- **Saída e entrada 1:1** com áudio bidirecional, várias chamadas simultâneas por conta.
- **Espera (hold/resume) com música**, **atender em espera** e **transferência cega** entre atendentes (troca de dono + ponte, sem tocar a perna do WhatsApp).
- **Mudo / mão levantada** (`mute_v2`, `raise_hand`) nos dois sentidos.
- **Timeout de toque**, recusa que para o telefone de quem ligou, consent freshness (RFC 7675) — a chamada não cai sozinha aos ~20s.
- **Toque fantasma** (`POST /calls/fake`): liga e desliga antes de atender (aviso/alerta).
- **Transporte de áudio no navegador:** WebRTC com **fallback automático para WebSocket** (`WACALLS_DEFAULT_TRANSPORT=auto|webrtc|websocket`); WS de áudio **PCM16 full-duplex** (`GET /calls/{id}/ws`) pronto para agentes de voz/IA.
- **Gravação opt-in por sessão**: MP3 mono mixado dos dois lados, vira nota privada no Chatwoot e evento `recording` no webhook.

### 📹 Chamadas de vídeo

<div class="markdown-heading" dir="auto" id="bkmrk--11" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-chamadas-de-v%C3%ADdeo)</div>- **Vídeo 1:1** (câmera do atendente e do cliente), **upgrade/downgrade** no meio da chamada (áudio → vídeo e volta), religar a câmera, **MediaClock** (áudio e vídeo no mesmo relógio).
- **Orientação automática** (lê a rotação do celular no RTP e no stanza `<video>`) com **botão de girar** como ajuste manual, no painel e no widget.
- **Vídeo no widget do Chatwoot** (WebCodecs, data channel H.264).
- **Disparo de ligações de VÍDEO** com arquivo gravado (`POST /broadcast {video:true}`).

### 👥 Chamada em grupo *(experimental, `WACALLS_GROUP_CALLS=1`)*

<div class="markdown-heading" dir="auto" id="bkmrk--13" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-chamada-em-grupo-experimental-wacalls_group_calls1)</div>- Liga **para um grupo existente** (resolve os membros) com **áudio e vídeo**; o atendente ouve o **mix** de todos e fala para todos; vê a **câmera de cada participante** em tiles rotulados com número + nome.
- Protocolo completo do grupo: offer com `group_info`, chave de **epoch compartilhada com rotação** a cada entrada, relay de grupo (DTLS direto, SFU com HBH-FEC), **SRTCP** (Sender Reports + **PLI**/pedido de keyframe nos dois sentidos), anúncio `<video state>`, participante que sai some do painel.
- Endpoints `POST /calls/group`, `/calls/group/end`, WS `/calls/group/ws` (áudio PCM16) e `/calls/group/video-ws` (H.264), `GET /calls/group/roster`.

### ☎️ Gateway SIP / PBX

<div class="markdown-heading" dir="auto" id="bkmrk--15" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#%EF%B8%8F-gateway-sip--pbx)</div>- **Servidor SIP** (porta 5060 UDP/TCP) para o PBX/softphone do cliente **se registrar** no AstraCalls (credenciais por sessão, mostradas no painel) — tronco ↔ WhatsApp nos dois sentidos, áudio G.711 ↔ MLow.
- **Registro em PBX externo** (o AstraCalls vira um ramal do Asterisk/FreePBX/tronco hospedado), com **servidor, domínio e outbound proxy** separados, re-REGISTER automático e status no painel.
- RTP em **faixa fixa de portas** (`WACALLS_RTP_PORT_MIN/MAX`), publicável em `mode=host`.

### 📞 Conector SIP (PABX IP → AstraChat) — serviço separado

<div class="markdown-heading" dir="auto" id="bkmrk--17" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-conector-sip-pabx-ip--astrachat--servi%C3%A7o-separado)</div>- Binário `sipconnector` na mesma imagem: liga **qualquer PABX IP** ao AstraChat, sem WhatsApp.
- Linha por caixa (o PABX registra no conector **ou** o conector registra no PABX) e **um ramal por atendente** (e-mail → ramal).
- Expõe a **mesma API de chamadas do wacalls** (SSE, accept/reject/DELETE, `/webrtc` para o navegador em PCMU sem transcodificar, `/ws` pcm16 para o agente de voz por IA) e transferência para ramal por **SIP REFER**.
- Detalhes, variáveis e deploy: [`cmd/sipconnector/README.md`](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/cmd/sipconnector/README.md).

### 💬 Mensagens (API estilo WAHA, ~60 endpoints)

<div class="markdown-heading" dir="auto" id="bkmrk--19" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-mensagens-api-estilo-waha-60-endpoints)</div>- **Envio:** texto, imagem, áudio/nota de voz (com waveform), vídeo, **nota de vídeo (PTV)**, documento, sticker, contato, localização, link com preview, **enquete** (e voto), **evento** (e resposta), **pix (BR Code)**, **produto**, **status** (texto/imagem/vídeo/áudio).
- **Interativas que renderizam no número não-oficial:** `interactive` (CTA: abrir URL, copiar código, ligar, resposta rápida), `buttons`, `list`, `carousel` e **formulário (webview)** com respostas no Chatwoot + webhook `form_response`.
- **Mensagem que some após leitura** (`disappearing`), mensagens temporárias por chat.
- **Editar, reagir, encaminhar, marcar como lida, digitando/gravando, presença.**
- **Agendamento** (`/schedule`, persiste e sobrevive a restart), **envio idempotente** (`X-Message-ID`), **busca** no histórico, **download de mídia recebida**.
- **Contatos, grupos, canais, perfil, privacidade, bloqueio, proxy por sessão**.

### 📢 Disparos em massa

<div class="markdown-heading" dir="auto" id="bkmrk--21" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-disparos-em-massa)</div>- `POST /blast`: campanha de texto/imagem com **pacing anti-ban**, status e cancelamento.
- `POST /broadcast`: **disparo de ligações** (áudio ou vídeo) tocando um arquivo gravado.
- `GET /restriction-status`: detecta **restrição/shadow-ban** da conta (`reachout_timelock`).

### 🔔 Webhooks confiáveis

<div class="markdown-heading" dir="auto" id="bkmrk--23" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-webhooks-confi%C3%A1veis)</div>- Eventos por sessão (`message`, `receipt`, `call_*`, `recording`, `form_response`, `group_participants`, `restriction`…), **filtro de eventos**, **assinatura HMAC-SHA256** (`X-Webhook-Signature`), **retry com backoff**, **circuit breaker**, **DLQ** com replay.

### 🤝 Chatwoot

<div class="markdown-heading" dir="auto" id="bkmrk--25" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-chatwoot)</div>- Contato/conversa por telefone, mensagens **WhatsApp ↔ Chatwoot** (texto + mídia) com **1 QR só** por número; grupos e canais (opcionais); **assinatura do atendente**, **always online**, **marcar lidas**; **importar histórico sob demanda**; mensagem editada, origem de anúncio (Click to WhatsApp), nota privada da gravação.
- **Widget de chamada** (`widget.js`): botão de telefone na conversa, toca e abre sozinho na chamada recebida, áudio por WebRTC ou WebSocket, **vídeo**, token de widget por conta.
- Correção do **9º dígito BR / LID** em todos os envios; sem contato "lixo" com LID.

### 🔐 Pareamento e segurança

<div class="markdown-heading" dir="auto" id="bkmrk--27" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-pareamento-e-seguran%C3%A7a)</div>- Pareamento por **QR**, **código** (`/pair-code`) e **passkey** (`/pair-passkey`, com extensão de navegador própria em `passkey-extension/`).
- **API key** (`X-API-Key`), **tokens de widget** assinados, guarda **anti-SSRF** no download de mídia por URL, **escopo por conta** nos eventos SSE.

### 📊 Observabilidade e infra

<div class="markdown-heading" dir="auto" id="bkmrk--29" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-observabilidade-e-infra)</div>- `GET /livez`, `/readyz`, `/metrics` (Prometheus), versão/commit do build em `GET /api/config` e no painel.
- **PostgreSQL por sessão** (estilo WAHA), **imagem multi-arch** (amd64 + arm64) publicada pelo CI em [Docker Hub](https://hub.docker.com/r/astraonline/astracalls).

---

## 🏗️ Arquitetura

<div class="markdown-heading" dir="auto" id="bkmrk--32" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#%EF%B8%8F-arquitetura)</div>```
┌──────────────────────────────────────────────────────────────────────────────┐
│          NAVEGADOR (painel React)   +   Widget no Chatwoot   +   PBX/SIP      │
│   mic/câmera · WebRTC (Opus + H.264 DC) ou WebSocket (PCM16) · HTTP + SSE     │
└──────────────────────────────────┬───────────────────────────────┬───────────┘
                                   │ /api/sessions/{sid}/calls/…    │ SIP 5060 + RTP
                                   ▼                               ▼
┌──────────────────────────── GO SERVER (cmd/server) ──────────────────────────┐
│  SessionManager  contas (whatsmeow client + CallManager + GroupCallManager)  │
│  Broker          SSE escopado por conta (sessões, chamadas, vídeo, ações)    │
│  Bridge / WS     pion WebRTC ou WebSocket ⇄ PCM 16 kHz / H.264               │
│  SIP Gateway     sipgo (UAS + UAC), ponte RTP G.711 ⇄ PCM                    │
│  Messaging       ~60 endpoints de envio, agendamento, blast, broadcast       │
│  Webhook         retry/backoff, circuit breaker, DLQ, HMAC                   │
│  Chatwoot        integração bidirecional + widget + import de histórico      │
│  Recorder        MP3 por chamada (ffmpeg)                                    │
│                                                                              │
│  internal/wa     adaptador VoipSocket sobre o whatsmeow                      │
│  internal/voip   call (1:1 + grupo) · signaling · media (MLow, SRTP/SRTCP,   │
│                  cripto de grupo) · transport (relay SCTP/DTLS, STUN, H.264) │
└────────────────┬─────────────────────────────────────┬────────────────────────┘
                 │ sinalização <call>                   │ mídia SRTP / H.264
                 ▼                                      ▼
        ┌────────────────┐                  ┌───────────────────────────┐
        │  WhatsApp WS   │                  │  relay do WhatsApp (1:1)  │
        │  (whatsmeow)   │                  │  relay de GRUPO (SFU)     │
        └────────────────┘                  └───────────────────────────┘
                                                        │
                                             ┌─────────────────────────┐
                                             │  PostgreSQL 16          │
                                             │  wacalls_main + 1/sessão│
                                             └─────────────────────────┘

```

<div class="snippet-clipboard-content notranslate position-relative overflow-auto" id="bkmrk--34" style="text-align: justify;"><div>  
</div></div>### Estrutura

<div class="markdown-heading" dir="auto" id="bkmrk--35" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#estrutura)</div><table id="bkmrk-caminho-responsabili" style="width: 100%;"><thead><tr><th style="width: 24.075%;">Caminho</th><th style="width: 75.9403%;">Responsabilidade</th></tr></thead><tbody><tr><td style="width: 24.075%;">`cmd/server`</td><td style="width: 75.9403%;">HTTP/SSE, sessões + store (Postgres), ponte WebRTC/WS, auth, mensagens, agendamento, blast/broadcast, webhook, Chatwoot, gravação, **SIP** (`sip_gateway.go`, `sip_uac.go`, `sip_rtp.go`), **grupo** (`groupcall.go`)</td></tr><tr><td style="width: 24.075%;">`internal/wa`</td><td style="width: 75.9403%;">`VoipSocket` — envia/recebe stanzas `<call>` via whatsmeow</td></tr><tr><td style="width: 24.075%;">`internal/voip/core`</td><td style="width: 75.9403%;">Tipos de domínio, constantes, interface `VoipSocket`</td></tr><tr><td style="width: 24.075%;">`internal/voip/wanode`</td><td style="width: 75.9403%;">Helpers de node WhatsApp e JID</td></tr><tr><td style="width: 24.075%;">`internal/voip/media`</td><td style="width: 75.9403%;">Codec MLow, RTP, **SRTP/SRTCP**, SSRC, resampling, derivação de chaves (1:1 e **epoch de grupo**)</td></tr><tr><td style="width: 24.075%;">`internal/voip/transport`</td><td style="width: 75.9403%;">Relay SCTP (1:1), **relay de grupo** (DTLS direto + Allocate de grupo), STUN, empacotamento H.264</td></tr><tr><td style="width: 24.075%;">`internal/voip/signaling`</td><td style="width: 75.9403%;">Build/parse de `<call>` (offer/accept/vídeo/grupo/rekey), cripto da call-key</td></tr><tr><td style="width: 24.075%;">`internal/voip/call`</td><td style="width: 75.9403%;">`CallManager` (1:1) e `GroupCallManager` (grupo), pipeline de vídeo, mixer de áudio</td></tr><tr><td style="width: 24.075%;">`client/`</td><td style="width: 75.9403%;">Painel React 19 + Vite + Tailwind v4 + shadcn/ui (discador, chamadas, vídeo, grupo, sessões, SIP, Chatwoot, histórico, login)</td></tr><tr><td style="width: 24.075%;">`client/public/widget.js`</td><td style="width: 75.9403%;">Widget de chamada (áudio + vídeo) embutível no Chatwoot</td></tr><tr><td style="width: 24.075%;">`client/public/openapi.yaml` · `api-docs.html`</td><td style="width: 75.9403%;">Documentação OpenAPI/Swagger da API (`/api-docs.html` no servidor)</td></tr><tr><td style="width: 24.075%;">`passkey-extension/`</td><td style="width: 75.9403%;">Extensão Chrome para pareamento por passkey</td></tr></tbody></table>

---

## ⚙️ Início Rápido

<div class="markdown-heading" dir="auto" id="bkmrk--38" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#%EF%B8%8F-in%C3%ADcio-r%C3%A1pido)</div>```
git clone https://github.com/AstraOnlineWeb/AstraCalls.git
cd AstraCalls
git submodule update --init          # codec opus_mlow (necessário p/ áudio ao vivo)

go mod download                      # dependências Go
cd client && npm install && cd ..    # dependências do painel React
```

<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" id="bkmrk--40" style="text-align: justify;"><div>  
</div></div>É preciso um **PostgreSQL** (usuário com `CREATEDB`):

```
export WACALLS_PG_URL='postgres://wacalls:senha@127.0.0.1:5432/postgres?sslmode=disable'
```

<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" id="bkmrk--41" style="text-align: justify;"><div>  
</div></div>### Rodar (somente sinalização — sem compilador C; pareia e chama, sem áudio)

<div class="markdown-heading" dir="auto" id="bkmrk--42" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#rodar-somente-sinaliza%C3%A7%C3%A3o--sem-compilador-c-pareia-e-chama-sem-%C3%A1udio)</div>```
go run ./cmd/server -addr :8080          # adicione -debug para logs verbosos
```

<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" id="bkmrk--44" style="text-align: justify;"><div>  
</div></div>### Rodar (áudio ao vivo — codec MLow nativo via cgo)

<div class="markdown-heading" dir="auto" id="bkmrk--45" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#rodar-%C3%A1udio-ao-vivo--codec-mlow-nativo-via-cgo)</div>```
CGO_ENABLED=1 \
CGO_LDFLAGS="-L$PWD/native -Wl,-rpath,$PWD/native" \
go run -tags mlow ./cmd/server -addr :8080 -debug
```

<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" id="bkmrk--47" style="text-align: justify;"><div>  
</div></div>> O áudio real exige cgo + `native/libopus_mlow.so` (compilada de [opus\_mlow](https://github.com/edgardmessias/opus_mlow)). A imagem Docker já vem com tudo.

Abra `http://localhost:8080`, clique em **Nova sessão** e escaneie o QR em **WhatsApp → Aparelhos conectados** (ou use código de pareamento / passkey).

### Painel React em modo dev

<div class="markdown-heading" dir="auto" id="bkmrk--48" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#painel-react-em-modo-dev)</div>```
cd client
npm run dev      # Vite na :5173, faz proxy de /api → http://localhost:8080
```

<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" id="bkmrk--50" style="text-align: justify;"><div>  
</div></div>---

## 🔧 Configuração

<div class="markdown-heading" dir="auto" id="bkmrk--52" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-configura%C3%A7%C3%A3o)</div>### Flags

<div class="markdown-heading" dir="auto" id="bkmrk--54" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#flags)</div><table id="bkmrk-flag-padr%C3%A3o-signific"><thead><tr><th>Flag</th><th>Padrão</th><th>Significado</th></tr></thead><tbody><tr><td>`-addr`</td><td>`:8080`</td><td>Endereço HTTP</td></tr><tr><td>`-pg-url` / `-pg-namespace`</td><td>env</td><td>URL do Postgres e prefixo dos bancos por sessão</td></tr><tr><td>`-static`</td><td>`client/dist`</td><td>Diretório do painel estático</td></tr><tr><td>`-debug`</td><td>`false`</td><td>Logs verbosos (inclui o log interno do whatsmeow)</td></tr><tr><td>`-max-calls-per-session`</td><td>`8`</td><td>Chamadas simultâneas por sessão (`0` = ilimitado)</td></tr></tbody></table>

### Variáveis de ambiente

<div class="markdown-heading" dir="auto" id="bkmrk--56" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#vari%C3%A1veis-de-ambiente)</div><table id="bkmrk-env-padr%C3%A3o-significa" style="width: 100%;"><thead><tr><th style="width: 27.8908%;">Env</th><th style="width: 10.3749%;">Padrão</th><th style="width: 61.7496%;">Significado</th></tr></thead><tbody><tr><td style="width: 27.8908%;">`WACALLS_PG_URL`</td><td style="width: 10.3749%;">—</td><td style="width: 61.7496%;">URL de manutenção do Postgres (usuário com `CREATEDB`)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_PG_NAMESPACE`</td><td style="width: 10.3749%;">`wacalls`</td><td style="width: 61.7496%;">Prefixo dos bancos (`wacalls_main` + `wacalls_<id>`)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_API_KEY`</td><td style="width: 10.3749%;">—</td><td style="width: 61.7496%;">Se setada, exige `X-API-Key` em `/api/*` (**use em produção**)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_PUBLIC_IP`</td><td style="width: 10.3749%;">—</td><td style="width: 61.7496%;">IP público p/ NAT 1:1 / ICE-TCP / SDP do SIP. `auto` descobre o IP real mesmo dentro do Docker/NAT de nuvem (interface pública → STUN → HTTPS); o IP achado e a fonte aparecem em `GET /api/config` (`publicIp`, `publicIpSource`)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_UDP_PORT`</td><td style="width: 10.3749%;">—</td><td style="width: 61.7496%;">Porta de mídia WebRTC (UDP + ICE-TCP)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_DEFAULT_TRANSPORT`</td><td style="width: 10.3749%;">`auto`</td><td style="width: 61.7496%;">Transporte de áudio do navegador: `auto` (WebRTC → fallback WS), `webrtc`, `websocket`</td></tr><tr><td style="width: 27.8908%;">`WACALLS_MAX_CALLS`</td><td style="width: 10.3749%;">`8`</td><td style="width: 61.7496%;">Equivalente a `-max-calls-per-session`</td></tr><tr><td style="width: 27.8908%;">`WACALLS_RING_TIMEOUT_SECONDS`</td><td style="width: 10.3749%;">—</td><td style="width: 61.7496%;">Expira chamada recebida que nunca é encerrada</td></tr><tr><td style="width: 27.8908%;">`WACALLS_UNIFIED_SESSION_MINUTES`</td><td style="width: 10.3749%;">`5`</td><td style="width: 61.7496%;">Intervalo mínimo entre os sinais "unified session" enviados ao conectar, como faz o WhatsApp Web (`0` desliga)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_DEVICE_NAME`</td><td style="width: 10.3749%;">`Windows`</td><td style="width: 61.7496%;">Nome do aparelho em "Dispositivos conectados" (vale para pareamentos novos)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_DEVICE_BROWSER`</td><td style="width: 10.3749%;">`chrome`</td><td style="width: 61.7496%;">Ícone/plataforma do aparelho: `chrome`, `edge`, `firefox`, `safari` ou `desktop`</td></tr><tr><td style="width: 27.8908%;">`WACALLS_RECORDING_DIR`</td><td style="width: 10.3749%;">`$TMPDIR/wacalls-recordings`</td><td style="width: 61.7496%;">Onde ficam os MP3s (retenção ~48h)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_PUBLIC_BASE_URL`</td><td style="width: 10.3749%;">—</td><td style="width: 61.7496%;">Base pública p/ URLs de gravação, formulários e widget (ex.: `https://call.seudominio.com`)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_WIDGET_KEY`</td><td style="width: 10.3749%;">—</td><td style="width: 61.7496%;">Chave-mestra para emitir tokens de widget (`POST /api/widget-tokens`)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_WIDGET_SIGNING_SECRET`</td><td style="width: 10.3749%;">—</td><td style="width: 61.7496%;">Segredo de assinatura dos tokens de widget</td></tr><tr><td style="width: 27.8908%;">`WACALLS_SIP_ADDR`</td><td style="width: 10.3749%;">`0.0.0.0:5060`</td><td style="width: 61.7496%;">Endereço do servidor SIP (UDP + TCP)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_SIP_ADVERTISE_PORT`</td><td style="width: 10.3749%;">`5060`</td><td style="width: 61.7496%;">Porta SIP anunciada no `Contact` (registro em PBX externo)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_RTP_PORT_MIN` / `_MAX`</td><td style="width: 10.3749%;">`40000` / `40049`</td><td style="width: 61.7496%;">Faixa fixa de portas RTP do SIP (publique em `mode=host`)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_SIP_DEBUG`</td><td style="width: 10.3749%;">off</td><td style="width: 61.7496%;">Logs detalhados de mídia SIP/grupo (**só para diagnóstico** — gera muito log)</td></tr><tr><td style="width: 27.8908%;">`WACALLS_GROUP_CALLS`</td><td style="width: 10.3749%;">off</td><td style="width: 61.7496%;">`1` liga a chamada em grupo (experimental)</td></tr></tbody></table>

> **Gravação de chamada (opt-in por sessão).** Ligue em `PUT /api/sessions/{sid}/recording {"enabled":true}` (ou pelo toggle "Gravar" no painel). O áudio dos dois lados é mixado num MP3 mono 16 kHz que vira **nota privada** no Chatwoot e evento `recording` no webhook; o arquivo fica em `GET /recordings/{callId}.mp3`. Requer `ffmpeg` (já na imagem).

---

## 🐳 Deploy em produção (Docker Swarm + Traefik)

<div class="markdown-heading" dir="auto" id="bkmrk--59" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-deploy-em-produ%C3%A7%C3%A3o-docker-swarm--traefik)</div>A imagem oficial é **multi-arquitetura** (`linux/amd64` + `linux/arm64`) e é publicada pelo CI a cada push: `astraonline/astracalls:develop` (contínua) e `astraonline/astracalls:vX.Y.Z`

- `:latest` (releases).

```
# deploy da stack (Postgres + servidor em rede de host + proxy Traefik)
docker stack deploy -c sua-stack.yml astracalls

# atualizar para a imagem mais nova
docker service update --image astraonline/astracalls:develop --force astracalls_astracalls
```

<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" id="bkmrk--61" style="text-align: justify;"><div>  
</div></div>Notas de produção:

- O servidor roda em **rede de host** para a mídia WebRTC/SIP enxergar a interface real.
- Um serviço **socat** com labels do Traefik publica o HTTP em **HTTPS** (necessário porque `getUserMedia` só funciona em contexto seguro).
- O **PostgreSQL** dedicado escuta apenas em `127.0.0.1` (não exposto à internet).
- Defina `WACALLS_PUBLIC_IP` (ou `auto`), `WACALLS_UDP_PORT`, `WACALLS_PG_URL`, `WACALLS_PUBLIC_BASE_URL` e uma `WACALLS_API_KEY` forte.
- Para o **SIP**, publique `5060/udp`, `5060/tcp` e a faixa `WACALLS_RTP_PORT_MIN..MAX/udp` em `mode=host`, e aponte `WACALLS_PUBLIC_IP` para o IP real da máquina.
- Em nuvens que bloqueiam UDP de entrada, o **ICE-TCP** (WebRTC) e o transporte **WebSocket** (`WACALLS_DEFAULT_TRANSPORT=auto`) mantêm o áudio funcionando.
- Para buildar a própria imagem: `docker build -t astraonline/astracalls:develop .` (o Dockerfile compila o codec a partir do submódulo `opus_mlow`).

---

## 🔌 API

<div class="markdown-heading" dir="auto" id="bkmrk--63" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-api)</div>A documentação completa (OpenAPI 3, **179 rotas**) é servida pelo próprio servidor em **`/api-docs.html`** (Swagger UI) e está em [`client/public/openapi.yaml`](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/client/public/openapi.yaml).

Todas as rotas são escopadas por sessão (`/api/sessions/{sid}/…`). Os eventos chegam por um único canal SSE (`GET /api/events?clientId=…`), marcados com o `sessionId` de origem. Se `WACALLS_API_KEY` estiver setada, envie `X-API-Key` (ou `?apiKey=` no SSE/WS).

<table id="bkmrk-%C3%81rea-rotas-%28resumo%29-"><thead><tr><th>Área</th><th>Rotas (resumo)</th></tr></thead><tbody><tr><td>**Sessões**</td><td>`GET/POST /api/sessions`, `DELETE /{sid}`, `/logout`, `/pair`, `/pair-code`, `/pair-passkey`, `/proxy`, `/recording`, `/restriction-status`</td></tr><tr><td>**Chamadas**</td><td>`POST /calls` (`{phone, video?, record?}`), `/calls/{id}/webrtc` (SDP), `GET /calls/{id}/ws` (PCM16), `/accept`, `/reject`, `DELETE /calls/{id}`, `/hold`, `/resume`, `/pickup`, `/transfer`, `/mute`, `/hand`, `/video/{request|accept|reject|stop}`, `/spy` (espiar: WebRTC recvonly / `GET /spy/ws` PCM16), `/volume` (ganho 0..3), `/silence` (silenciar o toque só na tela), `POST /calls/fake`, `GET /calls`, `GET /history`</td></tr><tr><td>**Grupo**</td><td>`POST /calls/group`, `POST /calls/group/end`, `GET /calls/group/ws`, `GET /calls/group/video-ws`, `GET /calls/group/roster`</td></tr><tr><td>**Disparos**</td><td>`POST /broadcast` (ligações, áudio/vídeo), `POST /blast` + `GET /blasts`, `/blasts/{id}`, `/blasts/{id}/cancel`</td></tr><tr><td>**Mensagens**</td><td>`POST /messages/{text|image|audio|video|ptv|document|sticker|contact|location|link-preview|poll|poll-vote|event|event-response|pix|product|product-native|interactive|buttons|list|carousel|form|disappearing|seen|typing|forward}`, `PUT /messages/{edit|react}`, `GET /messages`, `/messages/search`, `/messages/{id}/media`, `/messages/new-message-id`, `DELETE /messages`, `/schedule`</td></tr><tr><td>**Status / presença**</td><td>`POST /status/{text|image|video|audio}`, `POST /presence`, `/presence/{jid}/subscribe`</td></tr><tr><td>**Contatos / grupos / canais**</td><td>`GET /contacts`, `/contacts/check`, `/contacts/{jid}`, `/picture`, `/business`, `/block`, `/unblock`, `GET /blocklist`; `GET/POST /groups`, `/groups/{gid}/…` (participantes, convite, pedidos, configurações, foto, assunto, descrição, sair; `POST /groups/{gid}/history/share` e `shareHistory` no add: compartilhar o histórico recente com quem entrou); `GET/POST /communities`, `/communities/{cid}` (+ grupos), `/communities/{cid}/groups` (listar/criar), `/groups/link`, `/groups/unlink`, `/participants` (+ `/participants/add`); `GET /channels`, `/channels/{id}/…` (seguir, mutar, mensagens)</td></tr><tr><td>**Chats / perfil / privacidade**</td><td>`GET /chats`, `/chats/{chatId}/messages`, `PUT /chats/{chatId}/disappearing`, `PUT /disappearing`; `GET /profile`, `/profile/qr`, `PUT /profile/status`; `GET/PUT /privacy`, `GET /privacy/status`</td></tr><tr><td>**Webhooks**</td><td>`GET/POST/DELETE /webhook` (eventos, `secret` HMAC), `GET /webhooks/status`, `/webhooks/dlq`, `POST /webhooks/dlq/{id}/replay`, `/webhooks/reenable`</td></tr><tr><td>**Chatwoot**</td><td>`GET/POST/DELETE /chatwoot`, `POST /chatwoot/webhook`, `/chatwoot/import-history`, `/chatwoot/groups/{gid}/open`, `/chatwoot/channels/{id}/open`, `GET /api/chatwoot/resolve`</td></tr><tr><td>**SIP**</td><td>`GET /api/sip/status`, `GET/POST /sip` (credenciais p/ o PBX registrar aqui), `GET/POST /sip-ext` (registrar num PBX externo: host, porta, usuário, senha, ramal, proxy)</td></tr><tr><td>**Widget / formulários**</td><td>`GET /api/widget-key`, `POST /api/widget-tokens`, `GET /forms/{token}`, `POST /forms/{token}/submit` (públicas, token como capability)</td></tr><tr><td>**Infra**</td><td>`GET /api/config` (flags, versão, commit), `GET /livez`, `/readyz`, `/metrics`, `GET /recordings/{id}`</td></tr></tbody></table>

---

## 🔗 Integração com n8n

<div class="markdown-heading" dir="auto" id="bkmrk--66" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-integra%C3%A7%C3%A3o-com-n8n)</div>Automatize o WhatsApp no **n8n sem escrever código**: o node oficial [`n8n-nodes-astracalls`](https://www.npmjs.com/package/n8n-nodes-astracalls) já está publicado no npm, todo em português.

**Instalação:** no n8n, abra **Configurações → Community Nodes → Install**, digite `n8n-nodes-astracalls` e clique em **Install**. No Docker, use `N8N_COMMUNITY_PACKAGES=n8n-nodes-astracalls`.

**Credencial:** a URL do seu AstraCalls e a API Key (`WACALLS_API_KEY`).

<table id="bkmrk-node-o-que-faz-astra"><thead><tr><th>Node</th><th>O que faz</th></tr></thead><tbody><tr><td>**AstraCalls**</td><td>55 operações em 8 recursos: **Mensagem** (texto, mídia, documento, enquete, botões, lista, formulário nativo, reagir, editar, apagar…), **Chamada** (ligar, ligação fantasma, disparo de ligações com áudio/vídeo), **Grupo**, **Comunidade**, **Contato**, **Sessão**, **Formulário** e **Requisição Personalizada** (qualquer uma das 179 rotas)</td></tr><tr><td>**AstraCalls Trigger**</td><td>Inicia o fluxo com 15 eventos: mensagem recebida, leitura, reação, voto em enquete, formulário respondido, entrada/saída de grupo, gravação de chamada, desconexão da sessão… Configura o webhook da sessão sozinho ao ativar</td></tr></tbody></table>

- **Fácil de usar:** a sessão é escolhida numa lista (nome + número), o destino aceita número com ou sem o 9º dígito e a mídia vem por URL ou de um arquivo de etapa anterior.
- **Pronto para responder:** o gatilho entrega `de`, `nome`, `texto` e `responderPara` prontos para usar no envio, e ignora as mensagens da própria conta (sem loop).
- **Agentes de IA:** o node pode ser usado como ferramenta pelos agentes de IA do n8n.

📘 **[Tutorial passo a passo](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md)**: instalar, criar a credencial, enviar a primeira mensagem e montar um robô que responde, com [fluxo pronto para importar](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/responder-mensagem.json) e [10 fluxos de exemplo](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos) (menu com botões, atendente de IA, enquete, disparo de ligações…).

## 🤖 MCP para agentes de IA

<div class="markdown-heading" dir="auto" id="bkmrk--68" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-mcp-para-agentes-de-ia)</div>O AstraCalls traz um **servidor MCP** (Model Context Protocol) embutido: Claude, ChatGPT, Cursor, VS Code, n8n e outros agentes de IA usam o WhatsApp direto, sem instalar nada.

**Chaves por sessão (recomendado):** no painel, botão **MCP** da sessão → **Nova chave**. A chave fica presa àquele número, pode ser **somente leitura** e é revogada a qualquer momento. Ela não permite parear, desconectar nem mexer em webhooks, Chatwoot, SIP ou proxy. O painel mostra, uma única vez, a URL e as configurações prontas para copiar. Pela API: `GET/POST /api/sessions/{sid}/mcp-keys` e `DELETE /api/sessions/{sid}/mcp-keys/{id}`.

<table id="bkmrk-cliente-como-conecta"><thead><tr><th>Cliente</th><th>Como conectar</th></tr></thead><tbody><tr><td>claude.ai, ChatGPT (conector personalizado)</td><td>URL `https://SEU-ASTRACALLS/mcp/<chave>`</td></tr><tr><td>Claude Code</td><td>`claude mcp add --transport http astracalls https://SEU-ASTRACALLS/mcp --header "Authorization: Bearer <chave>"`</td></tr><tr><td>Claude Desktop, Cursor, VS Code</td><td>`mcpServers` → `{"type":"http","url":"https://SEU-ASTRACALLS/mcp","headers":{"Authorization":"Bearer <chave>"}}`</td></tr><tr><td>n8n</td><td>Ferramenta **MCP Client** do agente de IA, endereço `/mcp` e autenticação *Bearer*</td></tr></tbody></table>

**Acesso de administrador:** `https://SEU-ASTRACALLS/api/mcp` com a API Key da instância (`WACALLS_API_KEY`) enxerga todas as sessões; o agente escolhe o número por nome, telefone ou ID.

**44 ferramentas:** enviar texto, mídia, documento, localização, contato, enquete, botões e lista; reagir, editar, apagar, marcar como lida e "digitando…"; **ler conversas e buscar mensagens**; ligar, encerrar, toque fantasma e disparo de ligações; contatos, grupos e comunidades; limite de conversas novas e restrição; e `api_request` para as demais rotas da sessão.

> Quem tem a chave usa o número: trate-a como senha e revogue as que não usa mais.

---

## 🧪 Testes

<div class="markdown-heading" dir="auto" id="bkmrk--71" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-testes)</div>```
go test ./...                 # mídia (SRTP/SRTCP, STUN, RTP, H.264, cripto de grupo), sinalização, servidor
cd client && npm run build    # type-check + build de produção do painel
```

<div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" id="bkmrk--73" style="text-align: justify;"><div>  
</div></div>---

## 🔒 Segurança

<div class="markdown-heading" dir="auto" id="bkmrk--75" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-seguran%C3%A7a)</div>- Em produção, **sempre** defina `WACALLS_API_KEY` — sem ela qualquer um com acesso HTTP pode criar contas, fazer chamadas, enviar mensagens e ler histórico.
- O banco de cada sessão guarda **credenciais do WhatsApp**. Mantenha o Postgres protegido e fora da internet.
- Exponha sempre por **HTTPS** (`getUserMedia` exige contexto seguro).
- Use `secret` no webhook e verifique `X-Webhook-Signature` no consumidor.
- O SIP na 5060 recebe varredura da internet o tempo todo: só sessões com credenciais válidas registram (Digest MD5); considere restringir a porta por firewall aos IPs dos PBXs.

---

## 🛠️ Suporte Profissional

<div class="markdown-heading" dir="auto" id="bkmrk--78" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#%EF%B8%8F-suporte-profissional)</div>Precisa de ajuda para melhorar, customizar ou implementar o projeto?

📱 **WhatsApp:** +55 61 9 9687-8959

💼 Temos uma equipe especializada para:

✅ Customizações e melhorias ✅ Implementação e deploy completo ✅ Configuração de arquitetura SaaS ✅ Integração com outras APIs ✅ Desenvolvimento de features específicas ✅ Suporte técnico dedicado ✅ Consultoria em automação WhatsApp ✅ Treinamento e documentação

---

## 📄 Licença

<div class="markdown-heading" dir="auto" id="bkmrk--81" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://github.com/AstraOnlineWeb/AstraCalls/tree/main#-licen%C3%A7a)</div>O AstraCalls é distribuído sob a licença **GNU AGPL-3.0** — veja [LICENSE](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/LICENSE).

Isso significa que qualquer uso em rede (inclusive SaaS) exige disponibilizar o código-fonte das modificações aos usuários do serviço.

O AstraCalls é um fork do [WaCalls](https://github.com/JotaDev66/WaCalls), que é licenciado sob **MIT**. Conforme exigido pela MIT, o aviso de copyright original (© 2026 jotadev66) é preservado em [LICENSE.WaCalls](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/LICENSE.WaCalls). As porções originais permanecem sob os termos MIT; o trabalho derivado, como um todo, é licenciado sob AGPL-3.0.

# Funcionalidades da AstraCalls

Lista de funcionalidades possíveis com a AstraCalls

# IA que atende e faz ligações no WhatsApp com AstraCalls

Link: [https://chatwoot.astraonline.com.br/blog/ia-atende-ligacao-whatsapp/](https://chatwoot.astraonline.com.br/blog/ia-atende-ligacao-whatsapp/)  
Vídeo Youtube: [https://www.youtube.com/watch?v=8tilgREKqv8](https://www.youtube.com/watch?v=8tilgREKqv8)  
Download dos códigos: [https://astraonline.com.br/wp-content/uploads/2026/10/Disparador-de-Ligacoes-e-Atendimento-com-IA.zip](https://astraonline.com.br/wp-content/uploads/2026/10/Disparador-de-Ligacoes-e-Atendimento-com-IA.zip)

<article id="bkmrk-por-raphael-popiolek"><div class="meta">Por [Raphael Popiolek](https://chatwoot.astraonline.com.br/autor/raphael-popiolek/) · <time datetime="2026-10-28">28 de outubro de 2026</time> · Atualizado em <time datetime="2026-11-03">03 de novembro de 2026</time></div>Uma IA que atende ligação no WhatsApp recebe a chamada, escuta o cliente e responde por voz, e também pode ligar sozinha para uma lista de números, deixando cada chamada gravada e transcrita num painel.

Muita empresa ainda perde ligação no WhatsApp porque ninguém está livre para atender, ou gasta horas de alguém ligando para cobrar e confirmar horário. Uma **IA que atende ligação no WhatsApp** resolve as duas pontas.

No vídeo eu monto esse sistema do zero, numa VPS limpa, usando o AstraCalls para a parte de chamadas e o Google Gemini com voz em tempo real para a conversa. Quem escreveu o código foi o Claude Code, rodando direto no servidor. Aqui eu explico o que foi feito, o que você precisa ter em mãos e os cuidados que ninguém deveria pular.

<div class="yt"><iframe allow="accelerometer; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" height="307" loading="lazy" src="https://www.youtube.com/embed/8tilgREKqv8?rel=0" style="width: 933px; height: 459px;" title="Como Fazer uma IA Ligar e Atender pelo WhatsApp" width="619"></iframe>

</div>## O que esse sistema faz na prática

O sistema montado no vídeo é um painel web com login e senha, rodando no seu próprio subdomínio. Dentro dele:

- **Conexões:** você conecta um ou mais números de WhatsApp lendo o QR Code;
- **Ligações:** a lista de chamadas recebidas e feitas, com a gravação para ouvir e a transcrição da conversa;
- **Disparador:** você cola uma lista de números e o sistema liga para cada um, podendo alternar entre as conexões;
- **Configurações:** o prompt do agente, a mensagem inicial, a chave da API do Gemini, o modelo e a voz, além das opções de atender automaticamente e gravar as chamadas.

No teste do vídeo eu liguei para o número conectado e pedi um agendamento. A IA atendeu, perguntou o assunto, pediu meu nome e empresa e confirmou o horário. Depois disso a chamada já apareceu no painel, gravada e transcrita.

## As peças por trás do painel

Vale entender o que cada parte faz, porque é isso que você vai ajustar depois:

<div class="tabela"><table style="width: 100%;"><thead><tr><th style="width: 43.2633%;">Peça</th><th style="width: 56.752%;">Função</th></tr></thead><tbody><tr><td style="width: 43.2633%;">AstraCalls</td><td style="width: 56.752%;">API de WhatsApp open source e não oficial que faz as chamadas de áudio (WebRTC)</td></tr><tr><td style="width: 43.2633%;">Google Gemini (modelo de voz em tempo real)</td><td style="width: 56.752%;">Escuta e responde durante a ligação</td></tr><tr><td style="width: 43.2633%;">SQLite</td><td style="width: 56.752%;">Banco simples para guardar conexões, ligações e configurações</td></tr><tr><td style="width: 43.2633%;">Docker, Docker Swarm, Traefik e Portainer</td><td style="width: 56.752%;">Sobem o projeto e cuidam do SSL e do subdomínio</td></tr><tr><td style="width: 43.2633%;">Claude Code</td><td style="width: 56.752%;">Escreve e publica o projeto a partir de um prompt</td></tr></tbody></table>

</div>Escolhi o SQLite de propósito. O projeto é para uso de uma empresa, não para revenda, então um banco leve deixa a VPS menor e mais barata. Se a ideia for vender como serviço para vários clientes, aí a conversa é outra.

Sobre o modelo de voz: eu uso o Gemini porque gosto da voz e o custo é bom. A OpenAI também flui muito bem, mas no meu uso sai mais caro. Se for trocar, confira se o modelo responde por voz em tempo real. Numa ligação não dá para converter texto em áudio com atraso, senão a conversa fica travada.

## O que você precisa antes de começar

1. Uma VPS com **2 a 4 GB de RAM** e Ubuntu 22. No vídeo usei uma de 4 GB na Hetzner, mas qualquer provedor serve.
2. Acesso SSH como root (IP, porta 22 e senha). Eu uso o Bitvise para conectar.
3. Uma conta paga do Claude. O projeto é pequeno, mas a conta gratuita provavelmente vai travar no meio pedindo upgrade.
4. Um domínio com acesso ao DNS (eu uso o Cloudflare) para criar um subdomínio apontando para o IP da VPS.
5. Uma chave de API do Gemini, criada no [Google AI Studio](https://aistudio.google.com/).
6. Um número de WhatsApp de teste para conectar.

O prompt completo e o tutorial com os comandos estão na página de apoio do vídeo, para baixar.

## Passo a passo resumido

1. Crie a VPS e acesse pelo SSH.
2. Instale o Claude Code com o comando do tutorial e faça a autenticação pelo navegador. Ao copiar o código, aperte Ctrl+C uma vez só; duas vezes fecha o programa.
3. Crie uma pasta para o projeto (eu chamei de `atendimento`) e entre nela.
4. Abra o Claude Code no modo que não pede confirmação a cada passo, para ele executar até o fim sem você ficar apertando enter.
5. No DNS, crie o subdomínio apontando para o IP da VPS.
6. Troque, dentro do prompt, o subdomínio de exemplo pelo seu. Se preferir acessar por IP e porta, peça isso no prompt.
7. Cole o prompt e espere. No vídeo levou por volta de **10 minutos**.
8. Entre no endereço com o e-mail e a senha que o Claude Code gerou.
9. Em Configurações, cole a chave do Gemini, escolha modelo e voz e salve.
10. Em Conexões, crie uma conexão e leia o QR Code com o número de teste.
11. Ligue para esse número de outro celular e veja a IA atender.

O prompt que deixo é a estrutura. O texto do agente vem com um padrão genérico ("você é um atendente virtual simpático e objetivo"), e é você quem escreve o que ele deve fazer na sua empresa.

## Por que rodar numa VPS e não no seu computador

Dá para rodar local, mas eu não recomendo. O AstraCalls é sensível a ambiente, e cada computador tem um sistema diferente, o que gera conflito. Na VPS o ambiente é padronizado e o sistema fica no ar 24 horas: se cair a luz ou a internet do escritório, as ligações continuam. E no mesmo servidor você ainda pode colocar outros projetos.

## Um erro que apareceu no teste: o nono dígito

Quando fui disparar uma ligação, a chamada não tocou. O problema era o nono dígito do celular. Tirei o 9 do número e a ligação saiu na hora. O painel marcou certinho uma chamada de saída (do disparador) e uma de entrada (a que eu fiz antes).

A lição: peça no prompt que o sistema trate o nono dígito e limpe os números antes de disparar. Eu já deixei esse ajuste no prompt salvo.

## Onde isso ajuda e onde exige cuidado

Os usos mais diretos são cobrança, confirmação e marcação de horário e prospecção ativa. A IA liga, conversa e deixa tudo gravado e transcrito para alguém conferir depois.

Agora o lado honesto:

- **Risco de bloqueio.** Disparo em massa sempre pode levar a banimento. Use números separados para isso, nunca o número principal da empresa, e não coloque em risco o número de um cliente seu. Os cuidados para ligar para uma lista estão no artigo sobre [disparo de ligações no WhatsApp com n8n](https://chatwoot.astraonline.com.br/blog/disparo-de-ligacoes-whatsapp-n8n/). A Meta costuma ficar mais rigorosa em ano de eleição.
- **API não oficial.** O AstraCalls não é a API oficial da Meta. Funciona bem, mas o risco de bloqueio do número existe.
- **O prompt é com você.** Sem um prompt bem escrito, a IA vai atender de forma genérica. Ela não sabe seus preços, horários ou regras se você não contar.
- **Infraestrutura.** Mesmo com o Claude Code fazendo o grosso, você precisa saber acessar uma VPS, mexer em DNS e conferir se o projeto subiu.

Se o que você precisa é que os atendentes da equipe façam e recebam ligações dentro do Chatwoot, sem IA no meio, veja o artigo sobre [ligações do WhatsApp no Chatwoot com o AstraCalls](https://chatwoot.astraonline.com.br/blog/ligacoes-whatsapp-chatwoot/). E se quiser um agente de IA que responda por texto, com memória e transferência para humano, o caminho é este: [chatbot com IA no WhatsApp](https://chatwoot.astraonline.com.br/blog/chatbot-ia-whatsapp/).

## Checklist antes de colocar em produção

- [ ]  Subdomínio apontado e com SSL funcionando
- [ ]  Prompt do agente escrito para o seu negócio, com o que ele pode e não pode prometer
- [ ]  Tratamento do nono dígito testado com um número real
- [ ]  Gravação e transcrição conferidas em algumas chamadas
- [ ]  Número usado no disparo separado do número principal
- [ ]  Backup da VPS configurado

## Perguntas frequentes

### Existe IA que atende ligação no WhatsApp?

Sim. O painel montado no vídeo usa o AstraCalls para as chamadas e o Google Gemini com voz em tempo real para a conversa. A IA atende, escuta o cliente, responde por voz e a chamada fica gravada e transcrita no painel.

### Como fazer uma IA ligar para clientes pelo WhatsApp?

No mesmo painel há um disparador: você cola uma lista de números e o sistema liga para cada um, podendo alternar entre as conexões. Os usos mais diretos são cobrança, confirmação de horário e prospecção ativa.

### Qual VPS usar para uma IA de voz no WhatsApp?

Uma VPS com 2 a 4 GB de RAM e Ubuntu 22, com acesso SSH como root. No vídeo foi usada uma de 4 GB, e o projeto usa SQLite justamente para manter o servidor menor e mais barato.

### Qual modelo de IA usar para atender ligações?

O vídeo usa o Gemini com voz em tempo real, pela voz e pelo custo. A OpenAI também flui bem, mas sai mais cara no uso mostrado. Se trocar, confira se o modelo responde por voz em tempo real, senão a conversa fica travada.

### Posso rodar a IA de ligação no meu computador?

Dá, mas não é recomendado. O AstraCalls é sensível a ambiente e cada computador tem um sistema diferente, enquanto a VPS tem ambiente padronizado e fica no ar 24 horas, mesmo se cair a luz ou a internet do escritório.

## Quer isso junto do seu atendimento?

Esse painel é um projeto à parte. Se você quer as ligações e a IA dentro do mesmo lugar onde a equipe atende, o **AstraChat**, a nossa versão do Chatwoot, já traz ligações pelo WhatsApp, agentes de IA, Kanban, disparador e flows, no seu servidor, com a sua marca e sem limite de atendentes.

Ele vem na Comunidade Astra Online, com código-fonte, atualizações, grupo VIP e a primeira instalação feita pelo especialista em Chatwoot Raphael Popiolek. Se quiser um projeto de voz sob medida, integrado ao seu sistema, chame a gente no WhatsApp e conte o que precisa automatizar.

<div class="acoes fim">[Falar com um especialista](https://api.whatsapp.com/send?phone=5561996878959&text=Ol%C3%A1!%20Li%20o%20artigo%20%22IA%20que%20atende%20liga%C3%A7%C3%A3o%20no%20WhatsApp%3A%20como%20montar%20a%20sua%20numa%20VPS%22%20no%20blog%20do%20AstraChat%20e%20quero%20falar%20com%20um%20especialista%20sobre%20o%20meu%20atendimento.)[Conhecer o AstraChat](https://chatwoot.astraonline.com.br/)</div></article>Mais artigos de [IA no atendimento](https://chatwoot.astraonline.com.br/blog/categoria/ia/) e o [Guia completo do Chatwoot](https://chatwoot.astraonline.com.br/blog/o-que-e-chatwoot/), com todos os assuntos organizados.

## Leia também

<div class="lista" id="bkmrk-28-de-outubro-de-202" style="text-align: justify;">[![](https://i.ytimg.com/vi/MY2xuPqgISQ/hqdefault.jpg)<div><small>28 de outubro de 2026</small></div>](https://chatwoot.astraonline.com.br/blog/disparo-de-ligacoes-whatsapp-n8n/)</div>### Disparo de ligações WhatsApp com n8n: áudio e vídeo gravados

Disparo de ligações WhatsApp com n8n e AstraCalls: o sistema liga, toca seu áudio ou vídeo gravado e marca quem atendeu. Veja o fluxo e os cuidados.

<div class="lista" id="bkmrk-28-de-outubro-de-202-1" style="text-align: justify;">[![](https://i.ytimg.com/vi/xdIayBw5x1s/hqdefault.jpg)<div><small>28 de outubro de 2026</small></div>](https://chatwoot.astraonline.com.br/blog/ligacoes-whatsapp-chatwoot/)</div>### Ligação WhatsApp no Chatwoot: o atendente liga e atende na tela

Ligação WhatsApp no Chatwoot com o AstraCalls: instale a API gratuita e ative um widget para o atendente ligar e receber chamadas sem sair da conversa.

<div class="lista" id="bkmrk-05-de-novembro-de-20" style="text-align: justify;">[![](https://i.ytimg.com/vi/Hs-xV2V-i1g/hqdefault.jpg)<div><small>05 de novembro de 2026</small></div>](https://chatwoot.astraonline.com.br/blog/n8n-whatsapp-node-astracalls/)</div>### n8n e WhatsApp: node grátis com botões, listas, ligações e IA

Conecte o WhatsApp ao n8n com o node do AstraCalls: instalação, credencial, gatilho, botões, listas, ligações, agente de IA e 10 fluxos prontos.

# N8N e WhatsApp: node grátis com botões, listas, ligações e IA no AstraCalls

Link: [https://chatwoot.astraonline.com.br/blog/n8n-whatsapp-node-astracalls/](https://chatwoot.astraonline.com.br/blog/n8n-whatsapp-node-astracalls/)  
Vídeo Youtube: [https://youtu.be/Hs-xV2V-i1g](https://youtu.be/Hs-xV2V-i1g)  
Fluxos download: [https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos)  
[Tutorial: AstraCalls n... | Portal de Conhecimento](https://capacita.multiautomacoes.com.br/books/astracalls/page/tutorial-astracalls-no-n8n-com-fluxos-para-botoes-listas-e-outros-recursos)

<main class="wrap" id="bkmrk-por-raphael-popiolek"><article><div class="meta">Por [Raphael Popiolek](https://chatwoot.astraonline.com.br/autor/raphael-popiolek/) · <time datetime="2026-11-05">05 de novembro de 2026</time></div>Para ligar o **WhatsApp no n8n** sem montar requisição HTTP, instale o community node `n8n-nodes-astracalls`, crie uma credencial com a URL e a API Key do seu AstraCalls e use os dois nodes que aparecem: o **AstraCalls Trigger**, que inicia o fluxo quando chega uma mensagem, e o **AstraCalls**, que envia texto, botões, listas, enquetes e faz ligações. O AstraCalls é a nossa API de WhatsApp open source, e o node é gratuito.

No vídeo eu instalo o node, mostro a credencial, o gatilho, os recursos e testo ao vivo uma lista interativa chegando no WhatsApp. Aqui está o passo a passo escrito, com os 10 fluxos prontos que deixamos para você importar.

<div class="yt"><iframe allow="accelerometer; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" height="433" loading="lazy" src="https://www.youtube.com/embed/Hs-xV2V-i1g?rel=0" style="width: 866px; height: 433px;" title="WhatsApp + Agente de IA no n8n: API grátis com botões, listas e ligações" width="866"></iframe>

</div>## O que você precisa

- Um **AstraCalls** instalado, com pelo menos um número conectado pelo QR Code no painel. A instalação está no artigo sobre [ligações do WhatsApp no Chatwoot](https://chatwoot.astraonline.com.br/blog/ligacoes-whatsapp-chatwoot/).
- A **API Key** do servidor, que é o valor da variável `WACALLS_API_KEY` da stack.
- Um **n8n** em que você seja o dono (owner) da instância. Só o owner instala community nodes.

## O que o node faz

São dois nodes, os dois em português:

<div class="tabela"><table><thead><tr><th>Node</th><th>Função</th></tr></thead><tbody><tr><td>**AstraCalls**</td><td>55 operações em 8 recursos: Mensagem, Chamada, Grupo, Comunidade, Contato, Sessão, Formulário e Requisição Personalizada, que chama qualquer uma das 179 rotas da API</td></tr><tr><td>**AstraCalls Trigger**</td><td>Inicia o fluxo com 15 eventos, como mensagem recebida, leitura, reação, voto em enquete, formulário respondido, entrada e saída de grupo, gravação de chamada e desconexão da sessão</td></tr></tbody></table>

</div>A vantagem sobre o node HTTP Request é que você não monta URL, cabeçalho e corpo a cada chamada. A sessão é escolhida numa lista com nome e número, o destino aceita número com ou sem o nono dígito, e o gatilho já entrega os campos prontos para responder.

## Passo 1: instalar o node no n8n

1. No n8n, abra **Settings** e depois **Community Nodes**.
2. Clique em **Install**, digite `n8n-nodes-astracalls`, marque a ciência dos riscos e confirme.
3. Ao adicionar um node no fluxo, procure por **AstraCalls**. Os dois nodes aparecem.

<figure>![Janela Install community nodes do n8n com o pacote n8n-nodes-astracalls digitado e o botão Install](https://chatwoot.astraonline.com.br/img/blog/n8n-whatsapp-node-astracalls/instalar-node-astracalls-n8n.webp)<figcaption>Instalação pelo Community Nodes. Ao fundo, o pacote já instalado com os dois nodes.</figcaption></figure>Se o seu n8n roda em Docker, outra forma é colocar `N8N_COMMUNITY_PACKAGES=n8n-nodes-astracalls` nas variáveis do serviço e reiniciar. Quando sair versão nova, o próprio Community Nodes mostra o botão de atualizar.

## Passo 2: criar a credencial

1. Vá em **Credentials**, **Add credential** e escolha **AstraCalls API**.
2. Em **URL do Servidor**, coloque o endereço do painel do AstraCalls, sem `/api` no final.
3. Em **API Key**, cole o valor de `WACALLS_API_KEY`.
4. Salve. Se der erro 401, a chave está errada. Se não conectar, confira a URL e se o servidor está no ar.

<figure>![Tela de credencial AstraCalls account no n8n com os campos URL do Servidor e API Key preenchidos](https://chatwoot.astraonline.com.br/img/blog/n8n-whatsapp-node-astracalls/credencial-astracalls-n8n.webp)<figcaption>A credencial pede só duas coisas: a URL do servidor e a API Key.</figcaption></figure>## Passo 3: o gatilho e a primeira resposta automática

O fluxo mais simples responde quem manda mensagem:

1. Adicione o **AstraCalls Trigger**, escolha a sessão e o evento **Mensagem (Recebida ou Enviada)**.
2. Deixe ligadas as opções **Ignorar Mensagens Enviadas por Mim**, para o fluxo não responder a si mesmo em loop, e **Ignorar Mensagens de Grupos**, se não quiser responder em grupo.
3. Depois do gatilho, adicione o node **AstraCalls** com Recurso **Mensagem** e Operação **Enviar Texto**.
4. Em **Para**, use `{{ $json.responderPara }}`. Esse campo já traz o contato certo, ou o grupo quando a mensagem veio de um.
5. No texto, dá para usar `{{ $json.nome }}` e `{{ $json.texto }}` para personalizar.
6. Ative o fluxo e mande uma mensagem para o número.

<figure>![Lista de eventos do AstraCalls Trigger no n8n com voto em enquete, resposta a evento, resposta de formulário e participantes de grupo](https://chatwoot.astraonline.com.br/img/blog/n8n-whatsapp-node-astracalls/eventos-astracalls-trigger-n8n.webp)<figcaption>Eventos do gatilho: além de mensagem, ele escuta voto em enquete, formulário, grupo e mais.</figcaption></figure>Para responder conforme o conteúdo, coloque um **Switch** entre o gatilho e o envio, olhando o campo `texto`. Se contém "preço", manda a tabela; se contém "horário", manda o expediente.

Uma dica do vídeo: antes de responder, use a operação **Mostrar "Digitando..."** e um node **Wait** de alguns segundos. A resposta parece mais humana.

## Recursos e operações

Dentro do node AstraCalls, você escolhe um recurso e depois a operação:

<figure>![Lista de recursos do node AstraCalls no n8n: Mensagem, Chamada, Grupo, Comunidade e Contato](https://chatwoot.astraonline.com.br/img/blog/n8n-whatsapp-node-astracalls/recursos-node-astracalls-n8n.webp)<figcaption>Recursos do node. Cada um abre a sua lista de operações.</figcaption></figure>- **Mensagem:** texto, imagem, vídeo, áudio, figurinha, localização, contato, botões, listas, enquetes, formulários nativos, reação, edição, apagar e mostrar digitando.
- **Chamada:** ligar, encerrar, ligação fantasma (o telefone do cliente toca e a chamada não completa, só para chamar a atenção) e disparo de ligações com áudio ou vídeo gravado, com status e histórico.
- **Contato:** verificar se um número tem WhatsApp, buscar foto e bloquear.
- **Grupo e Comunidade:** criar e administrar grupos e comunidades.
- **Sessão:** operações da conta de WhatsApp conectada.
- **Formulário:** formulários nativos do WhatsApp Business.
- **Requisição Personalizada:** qualquer rota da API que não tenha operação pronta.

A documentação completa, em Swagger, fica no próprio painel do AstraCalls, no ícone de livro no alto da tela.

## Agente de IA no n8n que usa o WhatsApp como ferramenta

O node AstraCalls também pode ser ligado como **ferramenta (Tool)** do node **AI Agent** do n8n. O agente decide sozinho quando enviar mensagem, mandar localização, verificar se um número tem WhatsApp ou ligar para o cliente.

<figure>![Fluxo do n8n com AstraCalls Trigger, AI Agent com modelo OpenAI, memória e ferramentas do AstraCalls para ligar e enviar localização](https://chatwoot.astraonline.com.br/img/blog/n8n-whatsapp-node-astracalls/agente-de-ia-n8n-whatsapp-ferramentas.webp)<figcaption>Fluxo 04: o AI Agent com memória e as ferramentas do AstraCalls penduradas no conector Tool.</figcaption></figure>Para montar:

1. Parta do fluxo do passo 3 e troque o envio direto por um node **AI Agent**, com o modelo de sua preferência e uma memória.
2. No conector **Tool** do agente, adicione nodes AstraCalls com as operações que ele pode usar, por exemplo Enviar Texto, Enviar Localização e Ligar.
3. Escreva na descrição de cada ferramenta quando o agente deve usá-la.
4. Depois do agente, um node AstraCalls envia a resposta para `{{ $json.responderPara }}`.

No n8n self-hosted, nodes da comunidade só funcionam como ferramenta com a variável `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true` no serviço.

Outra opção é a ferramenta **MCP Client** do n8n apontando para o endereço `/mcp` do AstraCalls, com autenticação Bearer. Assim o agente acessa todas as ferramentas sem instalar o node. O mesmo MCP funciona fora do n8n, como mostro no artigo sobre [WhatsApp no ChatGPT e no Claude com MCP](https://chatwoot.astraonline.com.br/blog/whatsapp-chatgpt-claude-mcp/). Para a parte de prompt, contexto e passagem para humano, veja [como criar um agente de IA para WhatsApp](https://chatwoot.astraonline.com.br/blog/como-criar-agente-de-ia-whatsapp/).

## Os 10 fluxos prontos para importar

Deixamos 10 fluxos de exemplo no [guia do n8n no GitHub](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos). Baixe o `.json`, importe pelo menu **Import from File**, escolha a credencial e a sessão em cada node AstraCalls e troque os números de exemplo (`5511999999999`). Cada fluxo tem uma nota amarela explicando como funciona.

<div class="tabela"><table><thead><tr><th>\#</th><th>Fluxo</th><th>O que faz</th></tr></thead><tbody><tr><td>01</td><td>Resposta fora do horário</td><td>Responde quem escreve fora do expediente</td></tr><tr><td>02</td><td>Menu com botões</td><td>Envia um menu e segue um caminho para cada botão</td></tr><tr><td>03</td><td>Lista de serviços e agendamento</td><td>Envia uma lista interativa, confirma a opção e reage à mensagem</td></tr><tr><td>04</td><td>Atendente de IA com ferramentas</td><td>AI Agent com memória que usa o AstraCalls como ferramenta</td></tr><tr><td>05</td><td>Pesquisa de satisfação</td><td>Envia uma enquete, agradece cada voto e avisa o gestor se a nota for ruim</td></tr><tr><td>06</td><td>Boas-vindas no grupo</td><td>Dá boas-vindas a quem entra, mencionando a pessoa</td></tr><tr><td>07</td><td>Disparo de ligações com áudio</td><td>Liga para uma lista tocando um áudio gravado e acompanha o status</td></tr><tr><td>08</td><td>Validar lista antes da campanha</td><td>Confere quais números têm WhatsApp e só envia para eles</td></tr><tr><td>09</td><td>Lembrete diário com toque</td><td>Envia um lembrete no horário marcado e faz o telefone tocar</td></tr><tr><td>10</td><td>Alerta de desconexão e restrição</td><td>Avisa quando a sessão cai ou recebe restrição do WhatsApp</td></tr></tbody></table>

</div>No teste do vídeo, disparei o fluxo 03 e a lista chegou assim no celular:

<figure>![WhatsApp no celular mostrando a lista interativa Ver serviços com as opções Consulta, Retorno e Exame e o botão Selecionar](https://chatwoot.astraonline.com.br/img/blog/n8n-whatsapp-node-astracalls/lista-interativa-whatsapp-n8n.webp)<figcaption>Lista interativa enviada pelo fluxo 03: o cliente escolhe e a opção volta para o n8n.</figcaption></figure>No vídeo eu destaco o fluxo 10 para quem dá suporte a clientes: você fica sabendo que o número caiu ou foi restringido antes do cliente reclamar. O fluxo 07 está detalhado no artigo sobre [disparo de ligações no WhatsApp com n8n](https://chatwoot.astraonline.com.br/blog/disparo-de-ligacoes-whatsapp-n8n/).

## Antes de usar em produção

- **Um gatilho por sessão.** Cada sessão do AstraCalls tem um único webhook. Ao ativar um fluxo com o AstraCalls Trigger, ele assume o webhook da sessão e devolve o anterior quando é desativado. Se ativar dois fluxos com gatilho no mesmo número, o último vence. Junte os caminhos num fluxo só, com o Switch. A integração nativa com o Chatwoot não é afetada.
- **Listas e botões dependem do aparelho.** A nota do fluxo 03 avisa que a lista aparece no celular e pode não aparecer no WhatsApp Web. Teste no aparelho do cliente.
- **Ligações e disparos só para quem autorizou.** Envio em massa não solicitado bloqueia o número e viola a LGPD e as regras da Anatel. O AstraCalls é uma API não oficial, então use um número separado do principal para disparos.

## Problemas comuns

<div class="tabela"><table><thead><tr><th>Sintoma</th><th>O que fazer</th></tr></thead><tbody><tr><td>A sessão não aparece na lista</td><td>Confira a credencial e se o número está conectado no painel</td></tr><tr><td>A sessão aparece aguardando QR Code</td><td>Abra o painel do AstraCalls e pareie o número</td></tr><tr><td>O gatilho não dispara</td><td>O fluxo precisa estar ativo e o n8n precisa ser acessível pelo servidor do AstraCalls</td></tr><tr><td>Outro fluxo parou de receber eventos</td><td>Há dois gatilhos na mesma sessão; deixe só um</td></tr><tr><td>O agente não enxerga o AstraCalls como ferramenta</td><td>Falta a variável `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true`</td></tr></tbody></table>

</div>## Perguntas frequentes

### Como conectar o WhatsApp no n8n?

Instale o community node `n8n-nodes-astracalls` em Settings, Community Nodes, crie uma credencial com a URL e a API Key do seu AstraCalls e use o AstraCalls Trigger para receber mensagens e o node AstraCalls para enviar. O número fica conectado no AstraCalls pelo QR Code.

### O node do AstraCalls para n8n é grátis?

Sim. O node é gratuito e o AstraCalls é open source, sem cobrança por mensagem. Você paga só o servidor onde instala a API. Por ser uma API não oficial, existe risco de bloqueio do número em disparos em massa.

### Dá para mandar botões e listas no WhatsApp pelo n8n?

Sim. O recurso Mensagem do node tem as operações de botões, listas, enquetes e formulários nativos, e o gatilho recebe a opção que o cliente escolheu. Os fluxos 02 e 03 do guia trazem exemplos prontos de menu com botões e de lista de serviços.

### Como fazer um agente de IA no n8n responder pelo WhatsApp?

Use o AstraCalls Trigger para receber a mensagem, um node AI Agent com modelo e memória e ligue nodes AstraCalls no conector Tool do agente. No n8n self-hosted, ative a variável `N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true`. O fluxo 04 do guia já vem montado.

### Dá para fazer ligação de WhatsApp pelo n8n?

Sim. O recurso Chamada do node liga, encerra, faz ligação fantasma e dispara ligações com áudio ou vídeo gravado para uma lista, com status e histórico de cada chamada.

## Quer isso rodando sem montar servidor?

Instalamos o AstraCalls no seu servidor com tudo configurado e também fazemos projetos sob medida com a nossa API, para empresas que querem automatizar atendimento, cobrança ou agendamento pelo WhatsApp.

Se você atende com uma equipe, o **AstraChat**, a nossa versão do Chatwoot, junta multiatendimento, Kanban, agentes de IA e ligações pelo WhatsApp numa tela só. Ele vem na Comunidade Astra Online, com a primeira instalação feita pelo especialista em Chatwoot Raphael Popiolek. Chame no WhatsApp e conte o que você quer automatizar.

<div class="acoes fim">[Falar com um especialista](https://api.whatsapp.com/send?phone=5561996878959&text=Ol%C3%A1!%20Li%20o%20artigo%20%22n8n%20e%20WhatsApp%3A%20node%20gr%C3%A1tis%20com%20bot%C3%B5es%2C%20listas%2C%20liga%C3%A7%C3%B5es%20e%20IA%22%20no%20blog%20do%20AstraChat%20e%20quero%20falar%20com%20um%20especialista%20sobre%20o%20meu%20atendimento.)[Conhecer o AstraChat](https://chatwoot.astraonline.com.br/)</div></article>Mais artigos de [API do WhatsApp](https://chatwoot.astraonline.com.br/blog/categoria/api-whatsapp/) e o [Guia completo do Chatwoot](https://chatwoot.astraonline.com.br/blog/o-que-e-chatwoot/), com todos os assuntos organizados.

## Leia também

<div class="lista">[![](https://i.ytimg.com/vi/LH-51rSTkDk/hqdefault.jpg)<div><small>02 de novembro de 2026</small></div>](https://chatwoot.astraonline.com.br/blog/agente-ia-whatsapp-business-meta/)</div>### Agente de IA do WhatsApp Business: é grátis, como ligar e limites

Agente de IA do WhatsApp Business (Meta Business Agent): o que faz, se é gratuito, como ativar e desativar e quando vale ter um agente próprio.

<div class="lista">[![](https://i.ytimg.com/vi/yCxI2k29B4w/hqdefault.jpg)<div><small>02 de novembro de 2026</small></div>](https://chatwoot.astraonline.com.br/blog/como-criar-agente-de-ia-whatsapp/)</div>### Como criar um agente de IA para WhatsApp: método e 3 caminhos

Como criar um agente de IA para WhatsApp: função, tom, base de conhecimento, regra de passar para humano e testes. Sem programar, com n8n ou com código.

<div class="lista">[![](https://i.ytimg.com/vi/MY2xuPqgISQ/hqdefault.jpg)<div><small>28 de outubro de 2026</small></div>](https://chatwoot.astraonline.com.br/blog/disparo-de-ligacoes-whatsapp-n8n/)</div>### Disparo de ligações WhatsApp com n8n: áudio e vídeo gravados

Disparo de ligações WhatsApp com n8n e AstraCalls: o sistema liga, toca seu áudio ou vídeo gravado e marca quem atendeu. Veja o fluxo e os cuidados.

</main><footer id="bkmrk-%C2%A9-2026-astra-online-"><div class="wrap">© 2026 Astra Online · [AstraChat](https://chatwoot.astraonline.com.br/) · [Blog](https://chatwoot.astraonline.com.br/blog/) · [Canal no YouTube](https://www.youtube.com/@astraonlineweb)</div></footer>

# Tutorial: AstraCalls no n8n com fluxos para botões, listas e outros recursos

Link: [https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos)

<div class="markdown-heading" dir="auto" id="bkmrk-" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#tutorial-astracalls-no-n8n)</div>Neste tutorial você conecta o AstraCalls ao **n8n** e monta um robô que responde mensagens de WhatsApp. Leva uns 10 minutos e não precisa programar.

📦 Node: [`n8n-nodes-astracalls`](https://www.npmjs.com/package/n8n-nodes-astracalls). A documentação completa, com as 55 operações e os 15 eventos, está na página do npm.  
Configurações iniciais: [N8N e WhatsApp: node g... | Portal de Conhecimento](https://capacita.multiautomacoes.com.br/books/astracalls/page/n8n-e-whatsapp-node-gratis-com-botoes-listas-ligacoes-e-ia-no-astracalls)

---

## O que você precisa

<div class="markdown-heading" dir="auto" id="bkmrk--3" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#o-que-voc%C3%AA-precisa)</div>- Um AstraCalls rodando, com **pelo menos uma sessão conectada** (número pareado pelo QR Code no painel).
- A **API Key** do servidor, que é o valor de `WACALLS_API_KEY`.
- Um n8n onde você seja o dono (owner) da instância, porque só o owner instala community nodes.

---

## Passo 1: instalar o node

<div class="markdown-heading" dir="auto" id="bkmrk--6" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-1-instalar-o-node)</div>1. No n8n, abra **Configurações** (⚙️) → **Community Nodes** → **Install a community node**.
2. Digite `n8n-nodes-astracalls`, marque a ciência dos riscos e clique em **Install**.
3. Ao adicionar um node, procure **AstraCalls**. Aparecem dois: 
    - **AstraCalls**: faz ações, como enviar mensagem, ligar ou criar grupo.
    - **AstraCalls Trigger**: inicia o fluxo quando algo acontece, como uma mensagem recebida.

> **n8n em Docker:** se preferir, adicione `N8N_COMMUNITY_PACKAGES=n8n-nodes-astracalls` nas variáveis do serviço e reinicie.

## Passo 2: criar a credencial

<div class="markdown-heading" dir="auto" id="bkmrk--8" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-2-criar-a-credencial)</div>1. **Credentials** → **Add credential** → **AstraCalls API**.
2. Preencha os dois campos:
    
    <table><thead><tr><th>Campo</th><th>Exemplo</th></tr></thead><tbody><tr><td>**URL do Servidor**</td><td>`https://calls.seudominio.com`, o endereço do painel, sem `/api` no final</td></tr><tr><td>**API Key**</td><td>o valor de `WACALLS_API_KEY`</td></tr></tbody></table>
3. Clique em **Save**. Se aparecer ✅, está conectado.
    
    
    - **401**: a API Key está errada.
    - **Não conecta**: a URL está errada ou o servidor está fora do ar.

## Passo 3: enviar a primeira mensagem

<div class="markdown-heading" dir="auto" id="bkmrk--10" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-3-enviar-a-primeira-mensagem)</div>1. Crie um fluxo com um **Manual Trigger** e adicione o node **AstraCalls** depois dele.
2. Configure o node: 
    - **Recurso** `Mensagem` · **Operação** `Enviar Texto`
    - **Sessão**: escolha o número na lista
    - **Para**: `5511999999999`. Use DDI + DDD + número; com ou sem o 9º dígito funciona.
    - **Texto**: `Olá! Primeira mensagem pelo n8n 🚀`
3. Clique em **Test step**. A mensagem chega no WhatsApp, e a resposta do node traz o `id` dela.

## Passo 4: responder mensagens automaticamente

<div class="markdown-heading" dir="auto" id="bkmrk--12" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-4-responder-mensagens-automaticamente)</div>> ⚡ **Atalho:** baixe [`n8n/responder-mensagem.json`](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/responder-mensagem.json) e importe no n8n pelo menu **⋯ → Import from File**. Depois escolha a credencial e a sessão nos dois nodes.

Para montar na mão:

1. Adicione o **AstraCalls Trigger**: 
    - **Sessão**: o número que vai receber
    - **Eventos**: `Mensagem (Recebida ou Enviada)`
    - Deixe **Ignorar Mensagens Enviadas por Mim** ligado, para o fluxo não responder a si mesmo em loop.
2. Depois do gatilho, adicione o node **AstraCalls** (`Mensagem → Enviar Texto`): 
    - **Sessão**: `{{ $json.sessao }}`
    - **Para**: `{{ $json.responderPara }}`. Esse campo já traz o contato certo, ou o grupo quando a mensagem veio de um.
    - **Texto**: `Oi {{ $json.nome }}! Recebi: "{{ $json.texto }}"`
3. **Ative** o fluxo e mande uma mensagem para o número para testar.

Para responder conforme o conteúdo, coloque um **Switch** entre os dois nodes, olhando o campo `texto`. Por exemplo: se contém "preço", envia a tabela.

## Passo 5 (opcional): agente de IA

<div class="markdown-heading" dir="auto" id="bkmrk--14" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#passo-5-opcional-agente-de-ia)</div>Para que uma IA atenda pelo WhatsApp:

1. Use o fluxo do passo 4, mas troque o envio por um node **AI Agent**, com o modelo de sua preferência e uma memória.
2. Ligue o **AstraCalls** como **ferramenta (Tool)** do agente, por exemplo com a operação "Enviar Texto". O agente decide sozinho quando enviar mensagens, consultar contatos etc.

> Outra opção é a ferramenta **MCP Client** do n8n apontando para o `/mcp` do AstraCalls, que dá ao agente acesso a todas as ferramentas, sem instalar o node. Veja a seção "MCP para agentes de IA" no [README](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/README.md#-mcp-para-agentes-de-ia).

---

## 📚 10 fluxos de exemplo prontos

<div class="markdown-heading" dir="auto" id="bkmrk--17" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#-10-fluxos-de-exemplo-prontos)</div>Baixe o `.json`, importe no n8n pelo menu **⋯ → Import from File**, escolha a credencial e a **Sessão** em cada node AstraCalls e troque os números de exemplo (`5511999999999`). Cada fluxo tem uma nota amarela explicando como funciona.

<table id="bkmrk-%23-fluxo-o-que-faz-01"><thead><tr><th>\#</th><th>Fluxo</th><th>O que faz</th></tr></thead><tbody><tr><td>01</td><td>[Resposta fora do horário](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-01-resposta-fora-do-horario.json)</td><td>Responde automaticamente a quem escreve fora do expediente</td></tr><tr><td>02</td><td>[Menu com botões](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-02-menu-com-botoes.json)</td><td>Envia um menu com botões e segue um caminho para cada opção (Switch)</td></tr><tr><td>03</td><td>[Lista de serviços e agendamento](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-03-lista-de-servicos-e-agendamento.json)</td><td>Envia uma lista interativa, confirma a opção escolhida e reage com ✅</td></tr><tr><td>04</td><td>[Atendente de IA com ferramentas](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-04-atendente-de-ia-com-ferramentas.json)</td><td>AI Agent com memória que usa o AstraCalls como ferramenta (requer credencial OpenAI)</td></tr><tr><td>05</td><td>[Pesquisa de satisfação (enquete)](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-05-pesquisa-de-satisfacao-enquete.json)</td><td>Envia uma enquete para os clientes, agradece cada voto e avisa o gestor se a nota for ruim</td></tr><tr><td>06</td><td>[Boas-vindas no grupo](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-06-boas-vindas-no-grupo.json)</td><td>Dá boas-vindas a quem entra no grupo, mencionando a pessoa</td></tr><tr><td>07</td><td>[Disparo de ligações com áudio](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-07-disparo-de-ligacoes-com-audio.json)</td><td>Liga para uma lista tocando um áudio gravado e acompanha o status</td></tr><tr><td>08</td><td>[Validar lista antes da campanha](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-08-validar-lista-antes-da-campanha.json)</td><td>Confere quais números têm WhatsApp e só envia para eles</td></tr><tr><td>09</td><td>[Lembrete diário com toque](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-09-lembrete-diario-com-toque.json)</td><td>Todo dia, no horário marcado, envia um lembrete e faz o telefone tocar</td></tr><tr><td>10</td><td>[Alerta de desconexão e restrição](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n/exemplos/exemplo-10-alerta-de-desconexao-e-restricao.json)</td><td>Avisa quando a sessão cai ou recebe restrição do WhatsApp</td></tr></tbody></table>

> Os fluxos com **AstraCalls Trigger** (01 a 06 e 10) trocam o webhook da sessão quando ativados. Ative **um por sessão**, ou junte os caminhos num só fluxo (veja o aviso abaixo).

---

## ⚠️ Antes de usar em produção

<div class="markdown-heading" dir="auto" id="bkmrk--20" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#%EF%B8%8F-antes-de-usar-em-produ%C3%A7%C3%A3o)</div>- **Cada sessão tem um único webhook.** Ao ativar um fluxo com o AstraCalls Trigger, o node coloca o webhook do n8n no lugar do que estava configurado. Ao desativar, restaura o anterior. **Use um só gatilho por sessão** e separe os caminhos com o **Switch**. A integração nativa com o Chatwoot não é afetada.
- **Ligações e disparos em massa** só para quem autorizou o contato. Envio não solicitado bloqueia o número e viola a LGPD e as regras da Anatel.

## Problemas comuns

<div class="markdown-heading" dir="auto" id="bkmrk--22" style="text-align: justify;">[<svg aria-hidden="true" class="octicon octicon-link" data-component="Octicon" height="16" version="1.1" viewbox="0 0 16 16" width="16"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>](https://github.com/AstraOnlineWeb/AstraCalls/blob/main/guias/n8n.md#problemas-comuns)</div><table id="bkmrk-sintoma-solu%C3%A7%C3%A3o-a-se"><thead><tr><th>Sintoma</th><th>Solução</th></tr></thead><tbody><tr><td>A sessão não aparece na lista</td><td>Confira a credencial e se a sessão está conectada no painel</td></tr><tr><td>A sessão aparece como *aguardando QR Code*</td><td>Abra o painel do AstraCalls e pareie o número</td></tr><tr><td>O gatilho não dispara</td><td>O fluxo precisa estar **ativo**, e o n8n precisa ser acessível pelo servidor do AstraCalls (URL pública ou mesma rede)</td></tr><tr><td>Outro fluxo parou de receber eventos</td><td>Dois gatilhos na mesma sessão: o último ativado vence (veja o aviso acima)</td></tr></tbody></table>

Arquivos do projeto: