Como criar um agente de IA no WhatsApp que agenda sozinho com n8n, Evolution API e Google Agenda?

Um agente de agendamento no WhatsApp com n8n funciona assim: a Evolution API recebe a mensagem do cliente e dispara um webhook, o n8n entrega o texto pro Tools Agent, o node do Google Calendar checa a disponibilidade (Resource Calendar, Operation Availability), o agente marca com Event: create e a resposta volta pelo POST /message/sendText/{instance}. Dá pra montar tudo com o community node n8n-nodes-evolution-api, credencial OAuth do Google e o evento MESSAGES_UPSERT no webhook. Só que a rota da Evolution API é cliente não oficial, e os Termos do WhatsApp proíbem mensagem automática e uso não pessoal, então o risco de banimento do número existe e não zera 🙂
Fala aí, beleza? Se liga na cena: 22h de uma terça, o cliente manda “tem horário na quinta de manhã?” no WhatsApp
O bot lê a mensagem, consulta a agenda, vê que às 9h tem buraco, oferece o horário, o cliente responde “fecha” e o evento já nasce no Google Agenda, com a confirmação voltando pro WhatsApp
Ninguém digitou nada do outro lado
É exatamente esse fluxo que a gente monta aqui, ligando n8n, Evolution API e Google Agenda, com o agente de IA no meio decidindo o que fazer
E já vou avisando de cara, porque odeio tutorial que esconde a parte chata: a Evolution API conversa com o WhatsApp por um cliente não oficial (ela usa a biblioteca Baileys como dependência pra conexão), e os Termos de Serviço do WhatsApp proíbem mensagens em massa, mensagens automáticas, discagem automática e uso não pessoal do serviço sem autorização
Ou seja: funciona, é MUITO massa de ver rodando, mas o número pode ser banido
Tu decide com consciência, beleza?
O que você precisa antes de começar
Antes de sair arrastando node, o ambiente tem que estar de pé. Sem isso as integrações simplesmente não conversam
- n8n rodando: a Community Edition é autohospedada e gratuita sob a Sustainable Use License, que é fair-code e NÃO é uma licença open source certificada pela OSI. Detalhe importante pra quem pensa em vender: oferecer o n8n como serviço hospedado pra clientes terceiros pagantes exige licença comercial
- Uma instância da Evolution API no ar: o repositório principal é evolution-foundation/evolution-api, mantido pela organização Evolution Foundation. A licença é Apache 2.0 com condições adicionais de proteção de marca: preservar logo e copyright e notificar dentro do próprio sistema, de forma visível pra administradores, que a Evolution API está sendo usada (isso vale inclusive em projeto de código fechado)
- Conta Google com projeto no Google Cloud Console, que é de onde sai a credencial OAuth do Google Agenda
- Um número de WhatsApp dedicado, nunca o teu número pessoal
- Papel Owner ou Admin no n8n, porque só esses papéis instalam community node
Antes de subir tudo, vale fazer a conta mensal de VPS, n8n e tokens pra saber no que tu está entrando
E se tu não quiser começar da tela em branco, existem dois pontos de partida públicos: o template 10944 da galeria do n8n, que é um assistente de WhatsApp com Gemini pra gerenciar agenda via Evolution API, e o repositório da Asimov Academy com os arquivos de um workflow de agendamento por WhatsApp integrado ao Google Calendar
Formação Agentes de IA
Domine a criação de Agentes de IA e Venda para Empresas
- 402 aulas
- 32 projetos
- 38h 19min
Passo a passo: ligar n8n, Evolution API e Google Agenda
A lógica do fluxo é sempre a mesma: Evolution recebe, n8n pensa, Google Agenda responde, Evolution devolve
Se você conhece aqueles fluxos de formulário que caem num sistema, é a mesma ideia, só que o formulário aqui é uma conversa de WhatsApp 😀
1. Instalar o community node da Evolution API
A Evolution API não tem node nativo no n8n. A integração vem por community node: o pacote n8n-nodes-evolution-api, publicado no npm
No n8n self-hosted a instalação acontece pela própria interface, sem terminal: o caminho é Settings > Community Nodes > Install
No campo de instalação dessa tela tu informa o nome do pacote, que é exatamente n8n-nodes-evolution-api, e ali tu precisa aceitar explicitamente o risco de instalar código não verificado
Erro comum deste passo: tentar instalar logado com um usuário que não é Owner nem Admin, e ficar achando que o n8n bugou. Vale lembrar também que o n8n mantém uma blocklist de community nodes que ele impede de instalar, e que no self-hosted dá pra controlar a disponibilidade desse recurso por variáveis de ambiente
2. Criar e conectar a instância da Evolution API
O community node expõe os recursos de instância: criar, conectar, obter informações, reiniciar e excluir
Cria uma instância nova só pra esse projeto e conecta o WhatsApp lendo o QR Code pelo celular
Erro comum deste passo: sair correndo pro próximo node sem conferir na tela da Evolution se o número aparece vinculado e a instância está ativa. Se não estiver, nada depois disso vai funcionar
3. Criar o node Webhook nativo do n8n
O fluxo começa pelo core node Webhook do n8n, porque é ele que recebe a chamada vinda de fora
Deixa ele esperando em POST, que é o verbo que a Evolution usa pra falar com o n8n, e copia a URL gerada
Erro comum deste passo: mandar mensagem de teste com o workflow parado. O webhook precisa estar escutando na hora do teste, senão tu fica olhando pra tela vazia achando que a Evolution está com problema
4. Apontar o webhook na Evolution API e escolher o evento certo
Agora cola aquela URL do n8n na configuração de webhook da Evolution. Dá pra fazer pelo endpoint de referência Set Webhook da doc v2 (webhook/set), onde tu define a URL de destino e a lista de eventos, ou pelo node de webhook do próprio community node, que permite definir uma nova configuração ou verificar a existente, ligar e desligar a integração, criar rotas separadas por tipo de evento e escolher se a mídia vai em base64 no payload
O evento que interessa é o MESSAGES_UPSERT, que é o que entrega as mensagens recebidas e serve de gatilho do fluxo
Outros eventos disponíveis na configuração incluem QRCODE_UPDATED, MESSAGES_UPDATE, MESSAGES_DELETE e SEND_MESSAGE
Erro comum deste passo: ligar TODOS os eventos “por garantia”. Aí cada mudança de status vira execução no n8n e o fluxo vira bagunça. Liga só o que o projeto precisa
Se tu quiser entender melhor essa ponte antes de ir pro agente, dá pra integrar o n8n ao WhatsApp primeiro e só depois plugar a inteligência em cima
5. Montar a credencial Google em cinco etapas
A credencial Google no n8n é montada assim: criar o projeto no Google Cloud Console, ativar as APIs, configurar a tela de consentimento OAuth, criar as credenciais de cliente OAuth e concluir a credencial no n8n
No Google Cloud Console o caminho é APIs & Services > Credentials > + Create credentials > OAuth client ID, com Application type igual a Web application
Erro comum deste passo: esquecer de colar, em Authorized redirect URIs, a OAuth Redirect URL que o n8n mostra dentro da credencial. É o motivo número um de OAuth do Google recusando conexão
6. Adicionar o Tools Agent
O node de agente documentado do n8n é o Tools Agent (n8n-nodes-langchain.agent/tools-agent): ele interpreta o pedido e decide qual ferramenta chamar
É ele que lê “tem horário na quinta de manhã?” e entende que precisa consultar a agenda antes de responder qualquer coisa
Erro comum deste passo: o campo de entrada do agente vir apontado pro chat interno do n8n. Eu bati nesse erro gravando o vídeo, e a saída foi trocar pra opção de definir a entrada manualmente, puxando o texto da conversa que veio do WhatsApp
7. Ligar o Google Calendar como ferramenta do agente
O node Google Calendar do n8n pode ser usado como tool de um agente de IA, com os parâmetros preenchidos automaticamente pelo modelo
Pra checar buraco na agenda, seleciona Resource: Calendar e Operation: Availability, escolhe o calendário e informa Start Time e End Time
Os padrões desses campos são {{ $now }} e {{ $now.plus(1, 'hour') }}
O Output Format tem três opções:
| Output Format | O que ele devolve |
|---|---|
| Availability | se já existem eventos sobrepostos ao intervalo |
| Booked Slots | os horários ocupados |
| RAW | o dado bruto da API |
Erro comum deste passo: deixar o End Time no padrão de uma hora e o cliente perguntar pela semana inteira. O agente vai olhar uma janela minúscula e responder que não tem nada. Booked Slots costuma ser o formato mais confortável pra IA montar a frase de oferta de horário
8. Marcar (e remarcar) com o resource Event
Confirmou o horário com o cliente? Aí sim entra o Event: create, que é o node que faz o evento nascer no Google Agenda
O node suporta, no resource Event, as operações create, get, get many, update e delete. Ou seja: create pra marcar, get e get many pra achar o compromisso da pessoa, update pra remarcar e delete pra cancelar
Erro comum deste passo: criar o evento na mesma tacada da consulta, antes do cliente confirmar. Aí a agenda enche de horário que ninguém confirmou, e a dor de cabeça é maior do que a que tu queria resolver
9. Responder ao cliente pelo WhatsApp
A volta é o envio de texto da Evolution API v2: POST {server-url}/message/sendText/{instance}, com os headers Content-Type: application/json e apikey
curl -X POST "{server-url}/message/sendText/{instance}" \
-H "Content-Type: application/json" \
-H "apikey: SUA_APIKEY" \
-d '{
"number": "5511999999999",
"text": "Boa! Quinta, 9h, está reservado pra você. Qualquer coisa é só me chamar por aqui",
"delay": 1200,
"linkPreview": false
}'
Os campos principais do corpo são number e text, e ainda existem delay (atraso em milissegundos), linkPreview, mentionsEveryOne, mentioned e quoted
O quoted é ótimo quando o cliente manda três mensagens seguidas e tu quer responder citando a certa
É nesse node que o ciclo fecha: o evento já está na agenda e a confirmação volta pro WhatsApp do cliente
Erro comum deste passo: mandar sem o header apikey e tomar erro de autenticação no envio. O fluxo fica todo verde até esse ponto e morre no último node, o que é fácil de diagnosticar errado
O que aprendi montando esse agente na prática
No vídeo eu monto um sistema multi agentes no WhatsApp com n8n e Evolution API, e a primeira lição é meio anticlimática: não comece pelo avançado
Eu montei o fluxo mínimo de ponta a ponta antes de qualquer coisa: mensagem chega do WhatsApp, entra no n8n, passa pela IA e volta como resposta
Só depois disso é que faz sentido plugar ferramenta, memória, mais agente e por aí vai
Comecei o workflow pelo nó de webhook, justamente porque é ele que recebe a chamada vinda de fora e dispara tudo, e deixei ele aguardando em POST
Criei uma instância nova na Evolution pro projeto, mantendo as demais opções no padrão, conectei o WhatsApp pelo QR Code e conferi na tela se o número tinha ficado vinculado mesmo
Habilitei a opção de Base64 na Evolution, porque é ela que permite trafegar mídia (áudio, imagem, vídeo) entre o WhatsApp e o n8n
E ativei APENAS o evento de recebimento de mensagem, em vez de ligar todos: fluxo com evento demais vira bagunça rápido
Aí veio o momento que eu trato como ponto de corte do projeto: rodei o workflow em modo de execução e mandei uma mensagem real de outro WhatsApp
Se a execução não fica verde e os dados da mensagem não chegam, tudo o que vier depois vai falhar, sem exceção
Abri o output do webhook pra mostrar que ali já vêm o número, o texto da mensagem e o nome da instância, que são exatamente os dados reaproveitados nas etapas seguintes
Duas coisas que parecem bobas e não são: a configuração de ambiente (a VPS com o stack rodando) precisa estar pronta ANTES, senão nada integra, e renomear o workflow logo de cara evita aquele cemitério de “My workflow 7” 😛
Depois liguei o webhook direto no nó de agente de IA e passei pelas partes dele: o modelo de chat, a memória pra guardar as interações da mesma pessoa e as tools pra acessar ferramentas externas
Foi aí que bati no erro de nó não conectado, porque o campo de entrada apontava pro chat interno do n8n. Resolvi trocando pra opção de definir a entrada manualmente e puxando o texto da conversa vinda do WhatsApp
Escolhi a OpenAI como provedor, com a credencial saindo de uma chave de API criada no painel da plataforma, e rodei os testes em modelos menores de propósito, pra gastar poucos tokens. Trocar por um modelo mais avançado depois é só um clique, quando tu já sabe que o fluxo está de pé
Detalhe de bastidor: os prompts eu preparei em arquivo à parte e colei durante a gravação, porque escrever prompt longo na tela mataria a dinâmica do vídeo, haha
E pra devolver a resposta ao usuário, o último passo é buscar o nó da Evolution API na saída do agente
Resumo do resumo: a base de qualquer agente no WhatsApp é sempre a mesma, webhook no n8n recebendo a Evolution API, agente de IA no meio e resposta voltando pela Evolution
Veja o fluxo completo em vídeo
No vídeo tu vê a parte que texto nenhum entrega direito: a montagem do fluxo acontecendo na tela, node por node, com o erro aparecendo e sendo resolvido na hora
Problemas comuns e o risco de bloqueio do número
O fluxo não dispara
- Sintoma: tu manda mensagem no WhatsApp e o n8n não registra execução nenhuma
- Causa: o evento MESSAGES_UPSERT não está marcado na array de events do webhook, ou a URL apontada na Evolution está errada
- Solução: conferir a configuração de webhook (pelo Set Webhook ou pelo node de webhook do community node, que também permite verificar a configuração existente) e comparar a URL com a que o node Webhook do n8n mostra
Erro de autenticação no envio
- Sintoma: o agente pensa certo, decide certo e o último node estoura
- Causa: o header
apikeynão foi enviado noPOST /message/sendText/{instance} - Solução: revisar os headers do envio, que são
Content-Type: application/jsoneapikey
OAuth do Google recusando
- Sintoma: a credencial Google não conclui no n8n
- Causa: a OAuth Redirect URL exibida na credencial do n8n não foi colada em
Authorized redirect URIsno cliente OAuth - Solução: voltar em
APIs & Services > Credentials, abrir o OAuth client ID do tipo Web application e colar a URL exatamente como o n8n mostra
Community node indisponível
- Sintoma: a opção de instalar não aparece, ou o pacote é recusado
- Causa: usuário sem papel Owner ou Admin, blocklist do n8n, ou o recurso desligado por variável de ambiente no self-hosted
- Solução: instalar com um usuário Owner ou Admin e checar a configuração de ambiente da instância
O mais pesado: banimento do número
Esse aqui não é bug, é regra do jogo
Os Termos de Serviço do WhatsApp proíbem mensagens em massa, mensagens automáticas, discagem automática e uso não pessoal do serviço sem autorização, além de proibir criar contas ou grupos de forma não autorizada ou automatizada e usar versões modificadas do WhatsApp
As Diretrizes de Mensagens citam explicitamente clientes não oficiais, mensagens em massa, mensagens automáticas e automação como usos que não devem ser feitos
E o WhatsApp declara usar aprendizado de máquina e denúncias de usuários pra detectar e banir contas que enviam mensagens automatizadas indesejadas
Prevenção honesta, sem prometer imunidade:
- número dedicado, nunca o pessoal e nunca o número principal do negócio como cobaia
- volume baixo, sem disparo pra lista
- responder só quem iniciou a conversa, jamais abordar quem não chamou
- usar o campo
delayno envio pra não responder em ritmo de robô - e aceitar que o risco não zera, porque a rota é cliente não oficial mesmo
Se o número é o coração do teu negócio, pensa duas vezes antes de plugar ele nisso…
Onde esse agente faz diferença de verdade
Agendamento é o caso em que a automação se paga sozinha, porque a conversa é curta, repetitiva e sempre igual
- Clínica e consultório: o ajuste é no Availability, com janela por profissional e calendário separado pra cada um. O agente checa o calendário certo antes de oferecer horário
- Barbearia e salão: serviços com duração diferente mudam o End Time do evento. Corte e barba não ocupam o mesmo bloco, e isso precisa estar no prompt do agente
- Consultoria com sessão de 1 hora: é o cenário mais confortável, porque o padrão
{{ $now.plus(1, 'hour') }}do Availability já bate com o tamanho real da sessão - Aula particular: aqui a memória do agente pesa mais que a agenda, porque o aluno costuma ser recorrente e a conversa continua de uma semana pra outra
- Remarcação e cancelamento: usa get ou get many pra achar o evento da pessoa, update pra mover e delete pra cancelar. É o pedido que mais consome tempo humano no dia a dia e o que menos precisa de humano
Conclusão
Montar um agente de agendamento no WhatsApp com n8n é totalmente viável: Evolution API recebendo pelo MESSAGES_UPSERT, Tools Agent decidindo, node do Google Calendar consultando disponibilidade e criando o evento, e a resposta voltando pelo sendText
O veredito honesto é esse: a parte técnica é a fácil, o incômodo é que a rota da Evolution API é não oficial e o WhatsApp diz, nos próprios Termos e Diretrizes, que automação e cliente não oficial não são usos permitidos
Então vale escolher sabendo o que tu está aceitando
Próximo passo concreto: sobe o fluxo a partir do template 10944 da galeria do n8n ou do repositório da Asimov Academy, roda primeiro num número de teste com pouquíssimas conversas, valida o primeiro teste com mensagem real e SÓ depois pensa em ligar no número que atende cliente de verdade
Até o próximo post! =)
Perguntas frequentes
O WhatsApp pode banir o número usado num agente de agendamento no WhatsApp com n8n?
Pode sim. Os Termos de Serviço do WhatsApp proíbem mensagens em massa, mensagens automáticas, discagem automática e uso não pessoal do serviço sem autorização, e o próprio WhatsApp diz usar machine learning e denúncias de usuários pra detectar e banir contas assim. Por isso a recomendação é sempre usar um número dedicado, nunca o pessoal.
A Evolution API é gratuita para montar esse fluxo?
Sim, ela é distribuída sob licença Apache 2.0, mas com condições adicionais de marca: precisa preservar logo e copyright e notificar dentro do sistema, de forma visível pra administradores, que a Evolution API está sendo usada. Essa obrigação de notificação vale até em projeto de código fechado.
Preciso pagar pelo n8n para rodar esse agente de agendamento no WhatsApp?
Não, a Community Edition do n8n é autohospedada e gratuita, sob a Sustainable Use License, que é fair-code e não é uma licença open source certificada pela OSI. Só entra licença comercial se a ideia for oferecer o n8n como serviço hospedado pra clientes terceiros pagantes.
Qual evento de webhook da Evolution API dispara o agente quando chega mensagem no WhatsApp?
É o MESSAGES_UPSERT, evento que entrega as mensagens recebidas e serve de gatilho do fluxo no n8n. A configuração de webhook também permite ligar outros eventos, como QRCODE_UPDATED, MESSAGES_UPDATE, MESSAGES_DELETE e SEND_MESSAGE, mas pra esse fluxo só o MESSAGES_UPSERT é necessário.
O node Google Calendar do n8n consegue checar se o horário está livre antes de marcar?
Sim, existe a operação Availability dentro do resource Calendar, com Start Time e End Time como campos. Por padrão o Start Time vem como {{ $now }} e o End Time como {{ $now.plus(1, ‘hour’) }}, e o retorno pode vir em três formatos: Availability, Booked Slots ou RAW.
Dá pra usar um workflow pronto em vez de montar esse agente de agendamento no WhatsApp com n8n do zero?
Dá. Existe o template 10944 na galeria oficial do n8n, um assistente de WhatsApp com Gemini pra gerenciar agenda via Evolution API, e também o repositório público da Asimov Academy com os arquivos de um workflow de agendamento por WhatsApp integrado ao Google Calendar. Os dois servem como ponto de partida antes de tu ajustar pro teu caso.
Formações
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
Blog | Mais populares

Guia completo do Grok 4: Tudo sobre funcionalidades, versões e preços
Descubra neste guia completo do Grok 4 tudo o que você precisa saber para escolher, contratar e aproveitar o máximo dessa IA inovadora! Confira funcionalidades, […]

Como criar slides no NotebookLM e aposentar o PowerPoint
Aprenda a criar apresentações incríveis com o NotebookLM: slides e infográficos automáticos em poucos minutos – e aposente o PowerPoint de vez! Criar apresentações visuais […]

Planos: n8n preço para 2026 | Qual vale a pena?
O n8n possui um modelo de preço e planos flexível, baseado em execuções mensais de workflows, independentemente da complexidade. O plano Starter custa cerca de […]
