Integração Gmail
O Gmail é a plataforma de email mais utilizada no mundo, e a integração com n8n permite automatizar processos de comunicação, criar workflows de email marketing e gerenciar correspondências de forma inteligente.
Configuração
1. Configurar Credenciais no Google Cloud
- Vá para "APIs & Services" > "Credentials"
- Clique em "Create Credentials" > "OAuth 2.0 Client IDs"
- Configure o tipo de aplicação (Web application)
- Adicione URIs de redirecionamento autorizados
- Copie o Client ID e Client Secret
2. Configurar Credenciais no n8n
- No n8n, vá para Settings > Credentials
- Clique em "Add Credential"
- Selecione "Gmail"
- Insira o Client ID e Client Secret
- Autorize o acesso à conta Gmail
3. Permissões Necessárias
O app solicitará as seguintes permissões:
- Read and send emails - Ler e enviar emails
- Manage drafts and send emails - Gerenciar rascunhos
- View and modify but not delete your email - Visualizar e modificar emails
- View your email address - Visualizar endereço de email
Nodes Disponíveis
1. Gmail Trigger
Monitora eventos do Gmail em tempo real.
Configuração básica:
{
"event": "messageReceived",
"filters": {
"from": "cliente@exemplo.com",
"subject": "pedido",
"hasAttachment": true
}
}
2. Send Email
Envia emails através do Gmail.
Configuração básica:
{
"to": "destinatario@exemplo.com",
"subject": "Confirmação de Pedido",
"text": "Seu pedido foi confirmado com sucesso!",
"html": "<h1>Pedido Confirmado</h1><p>Obrigado pela compra!</p>"
}
Configuração avançada:
{
"to": "{{$json.email}}",
"cc": "gerente@empresa.com",
"bcc": "admin@empresa.com",
"subject": "Pedido {{$json.pedido_id}} - {{$json.status}}",
"html": "{{$('Template Node').json.html_template}}",
"attachments": [
{
"name": "fatura.pdf",
"data": "{{$binary.fatura.data}}"
}
]
}
3. Get Emails
Busca emails da caixa de entrada com filtros.
Configuração:
{
"query": "from:cliente@exemplo.com subject:pedido",
"maxResults": 10,
"includeAttachments": true
}
4. Reply to Email
Responde automaticamente a emails.
Configuração:
{
"messageId": "{{$json.id}}",
"text": "Recebemos sua mensagem e responderemos em breve.",
"html": "<p>Obrigado pelo contato!</p>"
}
Casos de Uso Práticos
1. Sistema de Suporte Automatizado
Cenário: Processamento automático de tickets de suporte via email.
Configuração do Trigger:
{
"event": "messageReceived",
"filters": {
"to": "suporte@empresa.com",
"subject": "suporte OR ajuda OR problema"
}
}
Configuração da Auto-Resposta:
{
"messageId": "{{$json.id}}",
"html": `
<h2>Ticket Recebido</h2>
<p>Olá {{$json.from.name}},</p>
<p>Recebemos sua solicitação de suporte e criamos o ticket #{{$json.ticket_id}}</p>
<p><strong>Assunto:</strong> {{$json.subject}}</p>
<p><strong>Prioridade:</strong> {{$json.prioridade}}</p>
<p>Nossa equipe entrará em contato em até 24 horas.</p>
<p>Atenciosamente,<br>Equipe de Suporte</p>
`
}
2. Email Marketing Automatizado
Cenário: Sequência de emails para leads qualificados.
Configuração do Email:
{
"to": "{{$json.email}}",
"subject": "{{$json.nome}}, conheça nossa solução!",
"html": `
<div style="font-family: Arial, sans-serif;">
<h1>Olá {{$json.nome}}!</h1>
<p>Obrigado por se interessar pela nossa solução.</p>
<p>Baseado no seu perfil, acreditamos que podemos ajudar com:</p>
<ul>
<li>{{$json.interesse_1}}</li>
<li>{{$json.interesse_2}}</li>
</ul>
<p><a href="{{$json.link_demo}}">Agendar Demonstração</a></p>
</div>
`
}
3. Processamento de Pedidos
Cenário: Confirmação automática de pedidos recebidos por email.
Configuração da Extração:
// Code Node - Extrair dados do email
const emailBody = $json.body;
const pedidoRegex = /pedido[:\s]*#(\d+)/i;
const valorRegex = /valor[:\s]*R?\$?\s*([\d,]+)/i;
const pedidoMatch = emailBody.match(pedidoRegex);
const valorMatch = emailBody.match(valorRegex);
return {
pedido_id: pedidoMatch ? pedidoMatch[1] : null,
valor: valorMatch ? parseFloat(valorMatch[1].replace(',', '.')) : null,
cliente_email: $json.from.email,
cliente_nome: $json.from.name,
status: 'pendente'
};
4. Monitoramento de Caixa de Entrada
Cenário: Alertas quando emails importantes são recebidos.
Configuração do Filtro:
{
"event": "messageReceived",
"filters": {
"subject": "urgente OR emergência OR crítico",
"from": "gerente@empresa.com OR diretor@empresa.com"
}
}
Expressões e Data Mapping
Emails Dinâmicos
// Email personalizado baseado em dados
{
"to": "{{$json.email}}",
"subject": "{{$json.nome}}, seu pedido #{{$json.pedido_id}} foi processado",
"html": `
<h1>Olá {{$json.nome}}!</h1>
<p>Seu pedido foi processado com sucesso.</p>
<p><strong>Valor:</strong> R$ {{$json.valor.toFixed(2)}}</p>
<p><strong>Prazo de entrega:</strong> {{$json.prazo_entrega}}</p>
`
}
Templates Condicionais
// Template baseado no status
const template = $json.status === 'aprovado'
? $('Template Aprovado').json.html
: $('Template Pendente').json.html;
return {
"to": $json.email,
"subject": `Pedido ${$json.status.toUpperCase()}`,
"html": template
};
Filtros Dinâmicos
// Filtro baseado em horário
const hora = $now.getHours();
const filtroHora = hora >= 9 && hora <= 18 ? 'normal' : 'urgente';
return {
"query": `from:cliente@exemplo.com subject:${filtroHora}`,
"maxResults": 5
};
Tratamento de Erros
Retry para Falhas de Envio
// Configuração de retry
{
"maxTries": 3,
"waitBetweenTries": 5000,
"continueOnFail": false
}
Fallback para Outros Canais
Boas Práticas
1. Organização de Labels
- Automação - Emails processados automaticamente
- Suporte - Tickets de suporte
- Vendas - Leads e oportunidades
- Financeiro - Faturas e pagamentos
- Urgente - Requer atenção imediata
2. Templates de Email HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{subject}}</title>
</head>
<body style="font-family: Arial, sans-serif; line-height: 1.6;">
<div style="max-width: 600px; margin: 0 auto; padding: 20px;">
<header style="background-color: #f8f9fa; padding: 20px;">
<h1>{{empresa_nome}}</h1>
</header>
<main style="padding: 20px;">
{{conteudo}}
</main>
<footer style="background-color: #f8f9fa; padding: 20px; text-align: center;">
<p>{{texto_footer}}</p>
</footer>
</div>
</body>
</html>
3. Rate Limiting
// Respeitar limites do Gmail
{
"maxEmailsPerDay": 500,
"waitBetweenEmails": 1000, // 1 segundo
"batchSize": 10
}
4. Privacidade e Compliance
- Não envie dados sensíveis por email
- Respeite leis de proteção de dados (LGPD)
- Implemente unsubscribe em emails marketing
- Monitore logs de envio
Troubleshooting
Problemas Comuns
Erro: "Invalid credentials"
- Verifique se as credenciais OAuth estão corretas
- Reautorize o acesso à conta Gmail
- Confirme se o app tem as permissões necessárias
Erro: "Quota exceeded"
- Reduza a frequência de envio
- Implemente rate limiting
- Use contas diferentes para diferentes tipos de email
Erro: "Message not found"
- Verifique se o messageId está correto
- Confirme se o email ainda existe na caixa de entrada
- Use IDs relativos em vez de absolutos
Debugging
// Para debugging
console.log('Gmail Debug:', {
to: $json.to,
subject: $json.subject,
timestamp: $now,
status: 'sending'
});
Integração com Outros Nós
Fluxo Completo
Exemplo de Workflow Completo
// 1. Gmail Trigger - Novo email
{
"event": "messageReceived",
"filters": {
"to": "vendas@empresa.com"
}
}
// 2. Code Node - Extrair lead
const email = $json;
const lead = {
nome: email.from.name,
email: email.from.email,
telefone: extrairTelefone(email.body),
interesse: extrairInteresse(email.subject),
origem: 'email',
data_recebimento: $now
};
return lead;
// 3. Database - Salvar lead
{
"operation": "insert",
"table": "leads",
"data": $json
}
// 4. Slack - Notificar equipe
{
"channel": "#vendas",
"text": "Novo lead via email: ${$json.nome} (${$json.email})"
}
// 5. Gmail - Auto-resposta
{
"messageId": "{{$('Gmail Trigger').json.id}}",
"html": `
<p>Olá {{$json.nome}},</p>
<p>Recebemos sua mensagem e entraremos em contato em breve!</p>
`
}
Referências
- Gatilhos de App - Triggers de aplicações como Gmail
- Code Node - Processamento customizado de emails
- Database Nodes - Armazenamento de dados de email
- Error Handling - Tratamento de erros em workflows
Esta documentação está em processo de validação. Os exemplos práticos e configurações de nós apresentados precisam ser testados e validados em ambientes reais. A intenção é sempre fornecer práticas e exemplos que funcionem corretamente em produção. Se encontrar inconsistências ou problemas, por favor, reporte para que possamos melhorar a qualidade da documentação.