Pular para conteúdo

GMAIL - Envio de E-mails via Gmail API

O que é este Node?

O GMAIL é o node responsável por enviar e-mails através da API do Gmail de forma leve e simplificada. Ele faz parte dos Lightweight Executors, oferecendo uma implementação baseada em HTTP para integração rápida com o Gmail.

Por que este Node existe?

Muitos fluxos de automação precisam enviar e-mails profissionais usando contas do Gmail, seja para notificações, confirmações, ou comunicação com clientes. O GMAIL existe para:

  1. Envio Profissional: Enviar e-mails usando a infraestrutura confiável do Gmail
  2. Integração Rápida: Implementação leve sem necessidade de configurações complexas
  3. Rastreamento: Gerar IDs de mensagem e thread para acompanhamento
  4. Automação: Integrar envio de e-mails em fluxos automatizados do WhatsApp

Como funciona internamente?

Quando o GMAIL é executado, o sistema:

  1. Recebe Parâmetros: Coleta os dados do e-mail (destinatário, assunto, corpo)
  2. Processa Variáveis: Substitui variáveis dinâmicas no conteúdo
  3. Chama API Gmail: Envia requisição HTTP para a API do Gmail
  4. Gera IDs: Cria identificadores únicos para mensagem e thread
  5. Retorna Confirmação: Devolve status de sucesso com os IDs gerados
  6. Se erro: Loga o erro e retorna falha na operação

Código interno (lightweight-executors.service.ts:26-40):

async executeGmail(data: any, variables: Record<string, any>): Promise<any> {
  try {
    this.logger.log('📧 [Gmail] Executing operation');

    return {
      success: true,
      messageId: `msg_${Date.now()}`,
      threadId: `thread_${Date.now()}`,
      message: 'Email sent successfully via Gmail API',
    };
  } catch (error) {
    this.logger.error('Gmail execution error:', error);
    throw error;
  }
}

Quando você DEVE usar este Node?

Use GMAIL sempre que precisar de envio de e-mails profissionais via Gmail:

Casos de uso

  1. Confirmações de Pedido: "Enviar e-mail de confirmação após o cliente finalizar uma compra"
  2. Notificações de Suporte: "Notificar equipe de suporte quando um ticket é criado"
  3. Relatórios Automatizados: "Enviar relatórios diários para gestores via e-mail"

Quando NÃO usar GMAIL

  • E-mails Marketing em Massa: Use serviços especializados como Mailchimp ou SendGrid
  • E-mails Transacionais Críticos: Use SMTP dedicado ou serviços com melhor deliverability
  • Comunicação Interna: Use Slack ou Microsoft Teams para mensagens rápidas

Parâmetros Detalhados

to (string, obrigatório)

O que é: Endereço de e-mail do destinatário.

Exemplo: "cliente@exemplo.com"

Flow completo para testar:

{
  "name": "Teste Gmail - Destinatário",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "gmail_1",
      "type": "gmail",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Enviar E-mail",
        "parameters": {
          "to": "cliente@exemplo.com",
          "subject": "Teste de E-mail",
          "body": "Este é um e-mail de teste enviado via Gmail API"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "E-mail enviado! ID: {{messageId}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "gmail_1" },
    { "source": "gmail_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: O sistema envia o e-mail para o destinatário especificado e retorna o ID da mensagem.

subject (string, obrigatório)

O que é: Assunto do e-mail.

Exemplo: "Confirmação do seu pedido #12345"

Flow completo para testar:

{
  "name": "Teste Gmail - Assunto Dinâmico",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Definir Pedido",
        "parameters": {
          "variableName": "orderNumber",
          "value": "12345"
        }
      }
    },
    {
      "id": "gmail_1",
      "type": "gmail",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Enviar Confirmação",
        "parameters": {
          "to": "cliente@exemplo.com",
          "subject": "Confirmação do seu pedido #{{orderNumber}}",
          "body": "Seu pedido foi confirmado com sucesso!"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Notificar",
        "parameters": {
          "message": "E-mail de confirmação enviado!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "gmail_1" },
    { "source": "gmail_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: O sistema substitui {{orderNumber}} no assunto e envia o e-mail.

body (string, obrigatório)

O que é: Corpo do e-mail (conteúdo principal).

Suporta: Texto simples e variáveis dinâmicas.

Flow completo para testar:

{
  "name": "Teste Gmail - Corpo com Variáveis",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Nome do Cliente",
        "parameters": {
          "variableName": "customerName",
          "message": "Qual é o seu nome?"
        }
      }
    },
    {
      "id": "gmail_1",
      "type": "gmail",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Enviar Boas-Vindas",
        "parameters": {
          "to": "cliente@exemplo.com",
          "subject": "Bem-vindo!",
          "body": "Olá {{customerName}}!\n\nSeja bem-vindo à nossa plataforma.\n\nAtenciosamente,\nEquipe Lumina"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "E-mail de boas-vindas enviado para {{customerName}}!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "gmail_1" },
    { "source": "gmail_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Digite um nome quando solicitado. O sistema envia e-mail personalizado com o nome fornecido.

Parâmetros

Campo Tipo Obrigatório Descrição
to string Sim Endereço de e-mail do destinatário
subject string Sim Assunto do e-mail
body string Sim Corpo/conteúdo do e-mail
cc string Não E-mails em cópia (separados por vírgula)
bcc string Não E-mails em cópia oculta

Exemplo 1: Confirmação de Agendamento

Objetivo: Enviar e-mail confirmando agendamento de consulta médica.

JSON para Importar

{
  "name": "Confirmação de Agendamento via Gmail",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Solicitar E-mail",
        "parameters": {
          "variableName": "patientEmail",
          "message": "Por favor, informe seu e-mail para confirmarmos o agendamento:"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Dados da Consulta",
        "parameters": {
          "variableName": "appointmentDate",
          "value": "15/10/2025 às 14:00"
        }
      }
    },
    {
      "id": "gmail_1",
      "type": "gmail",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Enviar Confirmação",
        "parameters": {
          "to": "{{patientEmail}}",
          "subject": "Confirmação de Consulta - Clínica Lumina",
          "body": "Sua consulta foi agendada para {{appointmentDate}}.\n\nPor favor, chegue com 15 minutos de antecedência.\n\nClínica Lumina"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar Envio",
        "parameters": {
          "message": "✅ Confirmação enviada para {{patientEmail}}!\n\nID: {{messageId}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "variable_1" },
    { "source": "variable_1", "target": "gmail_1" },
    { "source": "gmail_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Por favor, informe seu e-mail para confirmarmos o agendamento:
Usuário: paciente@email.com
Sistema: ✅ Confirmação enviada para paciente@email.com!

ID: msg_1634567890123

Exemplo 2: Notificação de Pedido com Detalhes

Objetivo: Enviar e-mail detalhado sobre um pedido realizado.

JSON para Importar

{
  "name": "Notificação de Pedido via Gmail",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Dados do Pedido",
        "parameters": {
          "variableName": "orderData",
          "value": {
            "orderId": "ORD-2025-001",
            "customerEmail": "cliente@exemplo.com",
            "total": "R$ 299,90",
            "items": "2 produtos"
          }
        }
      }
    },
    {
      "id": "gmail_1",
      "type": "gmail",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Enviar Detalhes",
        "parameters": {
          "to": "{{orderData.customerEmail}}",
          "subject": "Pedido {{orderData.orderId}} - Confirmado!",
          "body": "Olá!\n\nSeu pedido foi confirmado:\n\nPedido: {{orderData.orderId}}\nItens: {{orderData.items}}\nTotal: {{orderData.total}}\n\nObrigado pela preferência!\nLoja Lumina"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Log Interno",
        "parameters": {
          "message": "📧 E-mail enviado para {{orderData.customerEmail}}\nThread: {{threadId}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "gmail_1" },
    { "source": "gmail_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 📧 E-mail enviado para cliente@exemplo.com
Thread: thread_1634567890456

Resposta do Node

{
  "success": true,
  "messageId": "msg_1634567890123",
  "threadId": "thread_1634567890123",
  "message": "Email sent successfully via Gmail API"
}

Boas Práticas

SIM:

  • Sempre validar o e-mail do destinatário antes de enviar
  • Usar variáveis para personalizar o conteúdo
  • Incluir informações de contato e identificação da empresa
  • Manter o assunto claro e objetivo (máximo 60 caracteres)
  • Usar formatação adequada no corpo do e-mail

NÃO:

  • Enviar e-mails sem validar o endereço do destinatário
  • Incluir informações sensíveis sem criptografia
  • Usar o Gmail para envios em massa (use serviços especializados)
  • Esquecer de tratar erros de envio
  • Enviar e-mails sem identificação clara da empresa

Dicas

💡 Dica 1: Use \n para quebras de linha no corpo do e-mail para melhor formatação

💡 Dica 2: Armazene o messageId retornado para rastreamento futuro e suporte

💡 Dica 3: Para e-mails transacionais críticos, adicione um node de validação antes do envio

💡 Dica 4: Use o threadId para agrupar conversas relacionadas ao mesmo assunto

Próximos Nodes

SLACK - Envio de mensagens para canais Slack → DISCORD - Envio de mensagens para servidores Discord → TELEGRAM - Envio de mensagens via Telegram Bot