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

agente de agendamento no WhatsApp com n8n consultando disponibilidade no Google Agenda
Resposta rápida

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
Formação Recomendada

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 apikey não foi enviado no POST /message/sendText/{instance}
  • Solução: revisar os headers do envio, que são Content-Type: application/json e apikey

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 URIs no 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 delay no 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.




Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Claude Code

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 116 aulas
  • 4 projetos
  • 9h 23min

Blog | Mais populares