Opa! Vou te ensinar como montar seu chatbot WhatsApp gratuito de forma bem simples, como se você nunca tivesse mexido com essas ferramentas. Vamos por partes, sem pressa!
O Que Vamos Construir (Visão Geral)
Imagina o seguinte cenário:
- Cliente manda mensagem no seu WhatsApp
- Sistema recebe automaticamente
- IA processa e entende a mensagem
- Resposta inteligente é enviada
- Tudo fica salvo no banco de dados
Resultado: Atendimento 24/7 sem você precisar estar online!
Ferramentas Que Vamos Usar (Todas Gratuitas)
- Railway: Para hospedar o n8n (cérebro do sistema)
- n8n: Para criar a automação
- Evolution API: Para conectar com WhatsApp
- Groq: Para a inteligência artificial
- Supabase: Para salvar as conversas
Preparando o Terreno
Passo 1.1: Criando Contas Necessárias
1.1.1 – Conta no Railway (Hospedagem)
- Acesse: https://railway.app
- Clique em “Login”
- Escolha “Continue with GitHub”
- Se não tem GitHub, crie em: https://github.com
- Autorize o Railway a acessar seu GitHub
Como saber se deu certo: Você vai ver o dashboard do Railway com “New Project”
1.1.2 – Conta no Groq (IA)
- Acesse: https://console.groq.com
- Clique em “Sign Up”
- Use seu email ou Google
- Confirme o email se necessário
Como saber se deu certo: Você vai ver o painel do Groq
1.1.3 – Conta no Supabase (Banco de Dados)
- Acesse: https://supabase.com
- Clique em “Start your project”
- Entre com GitHub (mesmo do Railway)
- Autorize o Supabase
Como saber se deu certo: Você vai ver “Create a new project”
Passo 1.2: Pegando as Chaves de API
1.2.1 – Chave do Groq
No painel do Groq, clique em “API Keys” (menu lateral)
Clique em “Create API Key”
Dê um nome: “MeuBot”
Clique em “Submit”
IMPORTANTE: Copie a chave e salve num bloco de notas
Vai ser algo como:
gsk_abc123def456...
1.2.2 – Dados do Supabase
- No Supabase, clique em “New project”
- Escolha sua organização
- Nome do projeto: “chatbot-whatsapp”
- Senha do banco: Crie uma senha forte e anote
- Região: “South America (São Paulo)”
- Clique em “Create new project”
- Aguarde 2-3 minutos (vai aparecer uma tela de loading)
Quando terminar:
Vá em “Settings” → “API”
Anote esses dois valores:
Project URL:
https://abc123.supabase.co
anon public:
eyJ0eXAiOiJKV1Q...
(chave longa)
PARTE 2: Configurando o n8n (Cérebro do Sistema)
Passo 2.1: Subindo o n8n no Railway
2.1.1 – Criando o Projeto
- No Railway, clique em “New Project”
- Escolha “Deploy from GitHub repo”
- Clique em “Configure GitHub App”
- Autorize o Railway a ver seus repositórios
- Volte e clique em “Deploy from GitHub repo” novamente
2.1.2 – Usando Template do n8n
- Na busca, digite: “n8n”
- Escolha o template oficial “n8n”
- Clique em “Deploy Now”
- Nome do projeto: “meu-chatbot-n8n”
2.1.3 – Configurando Variáveis Após o deploy, você vai ver o projeto criado:
- Clique no projeto
- Vá na aba “Variables”
- Adicione essas variáveis (clique em “New Variable” para cada uma):
Nome: N8N_BASIC_AUTH_ACTIVE
Valor: true
Nome: N8N_BASIC_AUTH_USER
Valor: admin
Nome: N8N_BASIC_AUTH_PASSWORD
Valor: minhasenha123
Nome: N8N_HOST
Valor: 0.0.0.0
Nome: N8N_PORT
Valor: 5678
Nome: WEBHOOK_URL
Valor: https://meu-chatbot-n8n.up.railway.app
ATENÇÃO: No último item, substitua “meu-chatbot-n8n” pelo nome real do seu projeto!
2.1.4 – Pegando a URL do seu n8n
- Vá na aba “Settings”
- Procure por “Domains”
- Você vai ver algo como:
https://meu-chatbot-n8n.up.railway.app
- Anote essa URL – é o endereço do seu n8n!
Passo 2.2: Testando o n8n
- Abra a URL do seu n8n no navegador
- Vai aparecer uma tela de login
- Usuário:
admin
- Senha:
minhasenha123
(ou a que você colocou) - Sucesso: Você vai ver a interface do n8n!
Se não funcionou:
- Aguarde 2-3 minutos (Railway demora pra subir)
- Verifique se as variáveis estão corretas
- Tente acessar novamente
Configurando o Banco de Dados
Passo 3.1: Criando as Tabelas no Supabase
3.1.1 – Acessando o Editor SQL
- No seu projeto Supabase, vá em “SQL Editor” (menu lateral)
- Clique em “New query”
3.1.2 – Criando as Tabelas Cole esse código e clique em “Run”:
-- Tabela para guardar as conversas
CREATE TABLE conversations (
id SERIAL PRIMARY KEY,
phone VARCHAR(20) NOT NULL UNIQUE,
name VARCHAR(100),
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
status VARCHAR(20) DEFAULT 'active'
);
-- Tabela para guardar as mensagens
CREATE TABLE messages (
id SERIAL PRIMARY KEY,
phone VARCHAR(20) NOT NULL,
message_text TEXT NOT NULL,
is_from_user BOOLEAN DEFAULT true,
created_at TIMESTAMP DEFAULT NOW()
);
-- Tabela para configurações do bot
CREATE TABLE bot_settings (
id SERIAL PRIMARY KEY,
setting_name VARCHAR(50) UNIQUE NOT NULL,
setting_value TEXT,
description TEXT
);
-- Inserindo configurações básicas
INSERT INTO bot_settings (setting_name, setting_value, description) VALUES
('company_name', 'Minha Empresa', 'Nome da sua empresa'),
('business_hours', '08:00-18:00', 'Horário de funcionamento'),
('welcome_message', 'Olá! Como posso ajudar você hoje?', 'Mensagem de boas-vindas');
Como saber se deu certo: Vai aparecer “Success. No rows returned” e você vai ver as tabelas criadas no menu “Table Editor”.
Passo 3.2: Configurando Permissões
3.2.1 – Desabilitando RLS (Simplificando)
Vá em “Authentication” → “Policies”
Para cada tabela (conversations, messages, bot_settings):
Clique na tabela
Clique em “Disable RLS” se estiver habilitado
Por que fazer isso: Para simplificar o tutorial. Em produção, você deveria configurar as políticas de segurança.
Configurando a Evolution API (WhatsApp)
Passo 4.1: Subindo a Evolution API
4.1.1 – Novo Projeto no Railway
- No Railway, clique em “New Project” novamente
- Escolha “Empty Project”
- Nome: “evolution-api-whatsapp”
4.1.2 – Adicionando o Serviço
- Clique em “Add Service”
- Escolha “GitHub Repo”
- Na busca, digite:
EvolutionAPI/evolution-api
- Clique no repositório oficial
- Clique em “Deploy”
4.1.3 – Configurando Variáveis da Evolution Vá na aba “Variables” e adicione:
Nome: SERVER_TYPE
Valor: http
Nome: SERVER_PORT
Valor: 8080
Nome: CORS_ORIGIN
Valor: *
Nome: DEL_INSTANCE
Valor: false
Nome: STORE_MESSAGES
Valor: true
Nome: STORE_CONTACTS
Valor: true
Nome: STORE_CHATS
Valor: true
Nome: WEBHOOK_URL
Valor: https://meu-chatbot-n8n.up.railway.app/webhook/whatsapp
IMPORTANTE: No WEBHOOK_URL, use a URL do seu n8n (do Passo 2.1.4)!
4.1.4 – Pegando a URL da Evolution API
- Vá em “Settings” → “Domains”
- Anote a URL:
https://evolution-api-whatsapp.up.railway.app
Passo 4.2: Conectando seu WhatsApp
4.2.1 – Criando uma Instância Vamos usar um programa chamado Postman ou Insomnia para fazer requisições. Se não tem, pode usar o site httpie.io:
Acesse: https://httpie.io/app
Método: POST
URL:
https://SUA_EVOLUTION_URL/instance/create
Headers:
Content-Type
:application/json
Body (JSON):
{
"instanceName": "meubot",
"token": "meutoken123",
"qrcode": true,
"webhook": "https://SUA_N8N_URL/webhook/whatsapp"
}
Substitua:
SUA_EVOLUTION_URL
pela URL da sua Evolution APISUA_N8N_URL
pela URL do seu n8n
- Clique em “Send”
4.2.2 – Escaneando o QR Code Se deu certo, você vai receber uma resposta com:
qrcode
: Uma string gigantecode
: Uma imagem em base64
Para ver o QR Code:
- Copie o valor do
qrcode
- Acesse: https://qr-code-generator.com
- Cole o código
- Escaneie com seu WhatsApp
Como saber se conectou: Faça uma nova requisição GET para: https://SUA_EVOLUTION_URL/instance/connectionState/meubot
Deve retornar: "state": "open"
Criando o Workflow no n8n (A Mágica Acontece)
Passo 5.1: Criando o Workflow Básico
5.1.1 – Acessando o n8n
- Abra seu n8n:
https://meu-chatbot-n8n.up.railway.app
- Faça login (admin / minhasenha123)
- Clique em “New Workflow”
5.1.2 – Adicionando o Primeiro Nó (Webhook)
Clique no “+” para adicionar um nó
Procure por “Webhook”
Clique em “Webhook”
Configure:
HTTP Method:
POST
Path:
whatsapp
Response:
Immediately
Clique em “Execute Node” para testar
Anote a URL do webhook que aparece (algo como:
https://seu-n8n.railway.app/webhook/whatsapp
)
Passo 5.2: Processando a Mensagem
5.2.1 – Adicionando Nó de Código
- Clique no “+” após o Webhook
- Procure por “Code”
- Clique em “Code”
- Cole este código:
// Pegar dados da mensagem do WhatsApp
const webhookData = $input.first().json;
// Verificar se tem dados
if (!webhookData || !webhookData.data) {
return [];
}
const data = webhookData.data;
// Extrair informações importantes
const phone = data.key?.remoteJid?.replace('@s.whatsapp.net', '') || '';
const message = data.message?.conversation ||
data.message?.extendedTextMessage?.text || '';
// Se não tem mensagem válida, não processar
if (!message || !phone) {
return [];
}
// Retornar dados organizados
return [{
json: {
phone: phone,
message: message.trim(),
timestamp: new Date().toISOString(),
messageId: data.key?.id || ''
}
}];
- Clique em “Execute Node” para testar
Passo 5.3: Consultando a IA
5.3.1 – Adicionando HTTP Request para Groq
Adicione um novo nó “HTTP Request”
Configure:
Method:
POST
URL:
https://api.groq.com/openai/v1/chat/completions
Headers:
Authorization
:Bearer SUA_CHAVE_GROQ
Content-Type
:application/json
Body (JSON):
{
"messages": [
{
"role": "system",
"content": "Você é um assistente virtual prestativo. Responda de forma cordial e útil. Mantenha as respostas curtas e objetivas."
},
{
"role": "user",
"content": "{{ $json.message }}"
}
],
"model": "llama3-8b-8192",
"temperature": 0.7,
"max_tokens": 200
}
IMPORTANTE: Substitua SUA_CHAVE_GROQ
pela chave que você anotou no Passo 1.2.1!
Passo 5.4: Extraindo a Resposta da IA
5.4.1 – Nó de Código para Processar Resposta
- Adicione outro nó “Code”
- Cole este código:
// Pegar resposta da IA
const aiResponse = $input.first().json;
const originalData = $('Code').first().json; // Dados do primeiro nó de código
// Extrair a resposta
const botMessage = aiResponse.choices[0].message.content;
// Combinar tudo
return [{
json: {
...originalData,
botResponse: botMessage,
tokensUsed: aiResponse.usage?.total_tokens || 0
}
}];
Passo 5.5: Salvando no Banco de Dados
5.5.1 – Salvando Mensagem do Cliente
Adicione nó “HTTP Request”
Configure:
Method:
POST
URL:
https://SEU_PROJETO.supabase.co/rest/v1/messages
Headers:
apikey
:SUA_CHAVE_SUPABASE
Authorization
:Bearer SUA_CHAVE_SUPABASE
Content-Type
:application/json
Body:
{
"phone": "{{ $json.phone }}",
"message_text": "{{ $json.message }}",
"is_from_user": true
}
5.5.2 – Salvando Resposta do Bot
- Adicione outro nó “HTTP Request”
- Mesma configuração, mas Body:
{
"phone": "{{ $json.phone }}",
"message_text": "{{ $json.botResponse }}",
"is_from_user": false
}
Passo 5.6: Enviando Resposta pelo WhatsApp
5.6.1 – Nó Final – Enviar Mensagem
Adicione último nó “HTTP Request”
Configure:
Method:
POST
URL:
https://SUA_EVOLUTION_URL/message/sendText/meubot
Headers:
Content-Type
:application/json
apikey
:meutoken123
Body:
{
"number": "{{ $json.phone }}",
"text": "{{ $json.botResponse }}"
}
Passo 5.7: Salvando e Ativando
- Salve o workflow: Ctrl+S ou clique no ícone de salvar
- Dê um nome: “ChatBot WhatsApp”
- Ative o workflow: Toggle no canto superior direito deve ficar verde
Testando Tudo
Passo 6.1: Teste Básico
6.1.1 – Enviando Mensagem de Teste
- Pegue o número que você conectou na Evolution API
- De outro WhatsApp, mande uma mensagem para esse número
- Exemplo: “Olá, como vocês funcionam?”
6.1.2 – Verificando se Funcionou
- No n8n, vá em “Executions” (menu lateral)
- Você deve ver uma execução recente
- Clique nela para ver o fluxo
- Cada nó deve estar verde (sucesso)
6.1.3 – Verificando no Banco
- No Supabase, vá em “Table Editor”
- Clique na tabela “messages”
- Você deve ver suas mensagens salvas
Passo 6.2: Troubleshooting Básico
Se não recebeu resposta:
- Verifique se o webhook está correto na Evolution API
- Veja se há erros nas execuções do n8n
- Confirme se as chaves de API estão corretas
Se a IA não responde:
- Teste a chave do Groq separadamente
- Verifique se não excedeu o limite gratuito
- Veja se o JSON está formatado corretamente
Se não salvou no banco:
- Confirme as credenciais do Supabase
- Verifique se as tabelas foram criadas
- Teste a conexão com o banco separadamente
Melhorias e Personalizações
Passo 7.1: Personalizando as Respostas
7.1.1 – Editando o Prompt da IA No nó HTTP Request do Groq, mude o prompt do sistema:
{
"role": "system",
"content": "Você é um assistente da empresa [SEU_NOME]. Somos especializados em [SEU_RAMO]. Nosso horário é de segunda a sexta, 8h às 18h. Seja cordial, prestativo e sempre ofereça ajuda. Se não souber algo específico, diga que vai verificar com a equipe."
}
7.1.2 – Adicionando Respostas Rápidas Antes do nó da IA, adicione um nó “Code” com respostas automáticas:
const message = $json.message.toLowerCase();
// Respostas rápidas para palavras-chave
const quickReplies = {
'horario': 'Nosso horário de atendimento é de segunda a sexta, das 8h às 18h! 🕐',
'preço': 'Para informações sobre preços, me conte mais sobre o que você precisa!',
'obrigado': 'Por nada! Estou aqui para ajudar sempre! 😊',
'tchau': 'Até logo! Qualquer coisa, é só chamar! 👋'
};
// Verificar se a mensagem contém alguma palavra-chave
for (const [keyword, reply] of Object.entries(quickReplies)) {
if (message.includes(keyword)) {
return [{
json: {
...$json,
botResponse: reply,
skipAI: true // Flag para pular a IA
}
}];
}
}
// Se não encontrou palavra-chave, continua para IA
return [$input.first()];
Passo 7.2: Sistema de Horário Comercial
Adicione este código antes da IA:
const now = new Date();
const hour = now.getHours();
const day = now.getDay(); // 0=domingo, 1=segunda...
// Verificar se está no horário comercial (seg-sex, 8h-18h)
const isBusinessHours = (day >= 1 && day <= 5) && (hour >= 8 && hour <= 18);
if (!isBusinessHours) {
return [{
json: {
...$json,
botResponse: "Olá! Nosso atendimento é de segunda a sexta, das 8h às 18h. Deixe sua mensagem que retornaremos assim que possível! 📱",
skipAI: true
}
}];
}
return [$input.first()];
Monitoramento e Manutenção
Passo 8.1: Acompanhando o Desempenho
8.1.1 – Dashboard no Supabase
- Vá em “SQL Editor”
- Crie uma query para estatísticas:
-- Mensagens por dia
SELECT
DATE(created_at) as data,
COUNT(*) as total_mensagens,
COUNT(CASE WHEN is_from_user = true THEN 1 END) as mensagens_clientes,
COUNT(CASE WHEN is_from_user = false THEN 1 END) as respostas_bot
FROM messages
WHERE created_at >= NOW() - INTERVAL '7 days'
GROUP BY DATE(created_at)
ORDER BY data DESC;
8.1.2 – Verificando Logs no n8n
- Menu “Executions” mostra todas as execuções
- Verde = sucesso, Vermelho = erro
- Clique em qualquer execução para ver detalhes
Passo 8.2: Backup e Segurança
8.2.1 – Exportando Workflow
- No n8n, abra seu workflow
- Menu “…” → “Export”
- Salve o arquivo JSON em local seguro
8.2.2 – Backup do Banco
- No Supabase, vá em “Settings” → “Database”
- Anote as informações de conexão
- Use um cliente PostgreSQL para backup regular
✅ Checklist de Funcionamento
Contas Criadas:
- Railway configurado
- Groq com API key
- Supabase com projeto criado
- GitHub conectado
Serviços Funcionando:
- n8n acessível via browser
- Evolution API respondendo
- WhatsApp conectado (QR code escaneado)
- Banco de dados com tabelas criadas
Workflow Ativo:
- Webhook recebendo mensagens
- IA processando e respondendo
- Mensagens sendo salvas no banco
- Respostas chegando no WhatsApp
Testes Realizados:
- Mensagem de teste enviada e respondida
- Dados aparecendo no Supabase
- Execuções aparecendo no n8n sem erros
Próximos Passos Sugeridos
- Personalize o prompt da IA para seu negócio
- Adicione respostas rápidas para perguntas comuns
- Configure horário comercial
- Monitore regularmente as execuções
- Faça backup do workflow mensalmente
Dicas Importantes
- Teste sempre antes de colocar em produção
- Monitore os limites gratuitos das APIs
- Mantenha as chaves de API seguras
- Documente suas personalizações
- Faça backup regular dos dados
Parabéns! Você agora tem um sistema de atendimento WhatsApp com IA funcionando 24/7, completamente gratuito!
Se tiver dúvidas em algum passo específico, pode perguntar que eu explico com mais detalhes. O importante é ir devagar e testar cada etapa antes de passar para a próxima.
Avalie este conteúdo: Este artigo foi útil para você? Deixe sua avaliação e comentários!