Pular para conteúdo

FORWARD_EMAIL - Encaminhar Email no Gmail

O que é este Node?

O FORWARD_EMAIL é o node responsável por encaminhar emails existentes para outros destinatários mantendo o conteúdo original com cabeçalho de encaminhamento.

Por que este Node existe?

Encaminhar emails é essencial para distribuir informações entre equipes e departamentos. O FORWARD_EMAIL existe para:

  1. Distribuir informações: Repassar emails importantes para outras pessoas
  2. Escalação: Encaminhar para departamentos responsáveis
  3. Compartilhamento: Distribuir conteúdo relevante com contexto
  4. Automação: Encaminhar automaticamente baseado em regras

Como funciona internamente?

Quando o FORWARD_EMAIL é executado, o sistema:

  1. Busca email original: Recupera conteúdo completo via messageId
  2. Prepara header: Adiciona cabeçalho "Forwarded message"
  3. Monta email: Inclui From, Date, Subject do original
  4. Adiciona corpo: Concatena corpo original
  5. Envia novo email: Cria nova thread com "Fwd:" no subject
  6. Se sucesso: Retorna messageId e referência ao original

Código interno (gmail-executor.service.ts:436-474):

private async forwardMessage(gmail: any, data: GmailNodeData): Promise<any> {
  // Get original message
  const originalMessage = await this.getMessage(gmail, data);

  const forwardBody = `
---------- Forwarded message ---------
From: ${originalMessage.from}
Date: ${originalMessage.date}
Subject: ${originalMessage.subject}
To: ${originalMessage.to}

${originalMessage.body}
  `;

  const emailLines = [
    `To: ${data.forwardTo}`,
    `Subject: Fwd: ${originalMessage.subject}`,
    'Content-Type: text/plain; charset=utf-8',
    '',
    forwardBody
  ];

  const email = emailLines.join('\n');
  const encodedEmail = Buffer.from(email).toString('base64url');

  const response = await gmail.users.messages.send({
    userId: 'me',
    requestBody: {
      raw: encodedEmail
    }
  });

  return {
    messageId: response.data.id,
    threadId: response.data.threadId,
    originalMessageId: data.messageId,
    forwardedTo: data.forwardTo
  };
}

Quando você DEVE usar este Node?

Use FORWARD_EMAIL sempre que precisar de distribuição de emails existentes:

Casos de uso

  1. Escalar suporte: "Encaminhar ticket complexo para especialista"
  2. Distribuir informações: "Repassar email importante para equipe"
  3. Automação de triagem: "Encaminhar emails por departamento"
  4. Backup de comunicação: "Encaminhar emails importantes para arquivo"

Quando NÃO usar FORWARD_EMAIL

  • Nova mensagem: Use SEND_EMAIL para comunicação original
  • Responder: Use REPLY_TO_EMAIL para manter thread
  • Copiar: Use CC/BCC em SEND_EMAIL ao invés de encaminhar

Parâmetros

Campo Tipo Obrigatório Descrição
oauth2 object Sim Credenciais OAuth2
operation string Sim Deve ser "forward"
messageId string Sim ID do email a encaminhar
forwardTo string Sim Email do novo destinatário

Exemplo 1: Encaminhar para Departamento

Objetivo: Encaminhar automaticamente emails para departamento correto

JSON para Importar

{
  "name": "Triagem Automática de Emails",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Novo Email" }
    },
    {
      "id": "gmail_get_1",
      "type": "gmail",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Ler Email",
        "operation": "get",
        "oauth2": {
          "clientId": "YOUR_CLIENT_ID",
          "clientSecret": "YOUR_SECRET",
          "refreshToken": "YOUR_TOKEN"
        },
        "messageId": "{{triggerEmailId}}"
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "É Técnico?",
        "parameters": {
          "condition": "{{gmail_get_1.subject}} contains 'bug' OR {{gmail_get_1.subject}} contains 'erro'"
        }
      }
    },
    {
      "id": "gmail_forward_1",
      "type": "gmail",
      "position": { "x": 700, "y": 50 },
      "data": {
        "label": "Encaminhar TI",
        "operation": "forward",
        "oauth2": {
          "clientId": "YOUR_CLIENT_ID",
          "clientSecret": "YOUR_SECRET",
          "refreshToken": "YOUR_TOKEN"
        },
        "messageId": "{{gmail_get_1.id}}",
        "forwardTo": "ti@empresa.com"
      }
    },
    {
      "id": "gmail_forward_2",
      "type": "gmail",
      "position": { "x": 700, "y": 150 },
      "data": {
        "label": "Encaminhar Comercial",
        "operation": "forward",
        "oauth2": {
          "clientId": "YOUR_CLIENT_ID",
          "clientSecret": "YOUR_SECRET",
          "refreshToken": "YOUR_TOKEN"
        },
        "messageId": "{{gmail_get_1.id}}",
        "forwardTo": "comercial@empresa.com"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Email encaminhado para departamento responsável"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "gmail_get_1" },
    { "source": "gmail_get_1", "target": "condition_1" },
    { "source": "condition_1", "target": "gmail_forward_1", "label": "true" },
    { "source": "condition_1", "target": "gmail_forward_2", "label": "false" },
    { "source": "gmail_forward_1", "target": "message_1" },
    { "source": "gmail_forward_2", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Email encaminhado para departamento responsável

Boas Práticas

SIM: - Verifique conteúdo antes de encaminhar - Use forwardTo específico por departamento - Mantenha histórico original intacto

NÃO: - Não encaminhe sem validar destinatário - Não altere conteúdo original

Dicas

💡 Dica 1: Combine com CONDITION para triagem inteligente 💡 Dica 2: Use GET_EMAIL_BY_ID para analisar antes de encaminhar 💡 Dica 3: Subject com "Fwd:" é adicionado automaticamente

Próximo Node

REPLY_TO_EMAIL - Responder email → GET_EMAIL_BY_ID - Buscar email → SEND_EMAIL - Enviar novo