Pular para conteúdo

LINKEDIN PROFILE GET EMAIL - Obter E-mail do Usuário

O que é esta operação?

O LinkedIn Profile Get Email é a operação responsável por obter o endereço de e-mail do usuário autenticado no LinkedIn.

Por que esta operação existe?

E-mail é essencial para comunicação e identificação única. O Profile Get Email existe para:

  1. Comunicação direta: Enviar e-mails ao usuário
  2. Identificação única: E-mail como chave primária em sistemas
  3. Marketing automation: Adicionar e-mail a listas de newsletter
  4. CRM enrichment: Enriquecer dados de leads e contatos
  5. Autenticação: Validar identidade do usuário

Como funciona internamente?

Quando o Profile Get Email é executado, o sistema:

  1. Valida access token do LinkedIn OAuth 2.0
  2. Faz requisição GET para /v2/emailAddress?q=members&projection=(elements*(handle~))
  3. Envia headers de autorização
  4. Recebe array com dados de e-mail
  5. Armazena resultado na variável especificada
  6. Retorna contexto atualizado

Código interno (linkedin.executor.ts:62-70):

case 'get_email':
  // Get email address
  const emailResponse = await axios.get(`${baseUrl}/emailAddress?q=members&projection=(elements*(handle~))`, {
    headers: {
      'Authorization': `Bearer ${accessToken}`,
      'Content-Type': 'application/json',
    },
  });
  return emailResponse.data;

Quando você DEVE usar esta operação?

Use Profile Get Email sempre que precisar do e-mail do usuário:

Casos de uso:

  1. Newsletter signup: Adicionar e-mail a Mailchimp/SendGrid
  2. CRM integration: Criar lead no Salesforce com e-mail
  3. Notificações: Enviar confirmações por e-mail
  4. Account linking: Vincular conta LinkedIn a sistema interno
  5. Email marketing: Adicionar contato a campanhas
  6. Identificação única: Usar e-mail como ID em banco de dados

Quando NÃO usar Profile Get Email:

  • Dados básicos do perfil: Use Profile Get que já inclui ID
  • E-mail opcional: LinkedIn nem sempre retorna e-mail (usuário pode negar)

Parâmetros Detalhados

config.accessToken (string, obrigatório)

O que é: Token de acesso OAuth 2.0 do LinkedIn com escopo r_emailaddress.

Como obter: 1. Configure OAuth 2.0 no LinkedIn Developers 2. Solicite escopo r_emailaddress (além de r_liteprofile) 3. Usuário deve autorizar acesso ao e-mail 4. Use token retornado

Flow completo para testar:

{
  "name": "LinkedIn - Obter Email",
  "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": "Configurar Token",
        "parameters": {
          "name": "linkedin_token",
          "value": "SEU_ACCESS_TOKEN_COM_EMAIL_SCOPE"
        }
      }
    },
    {
      "id": "linkedin_1",
      "type": "linkedin",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Obter Email",
        "resource": "profile",
        "operation": "get_email",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "responseVariable": "emailData"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Mostrar Email",
        "parameters": {
          "message": "📧 E-mail obtido: {{emailData.elements[0].handle~.emailAddress}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "linkedin_1" },
    { "source": "linkedin_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Teste: Execute o flow. Você verá o e-mail associado à conta LinkedIn!

responseVariable (string, opcional)

O que é: Nome da variável onde o resultado será armazenado.

Padrão: "linkedInResult"

Parâmetros

Campo Tipo Obrigatório Descrição
resource string Sim Sempre "profile"
operation string Sim Sempre "get_email"
config.accessToken string Sim Token OAuth 2.0 com escopo r_emailaddress
responseVariable string Não Nome da variável de resposta (padrão: linkedInResult)

Exemplo 1: Adicionar E-mail ao Mailchimp

Objetivo: Obter e-mail do LinkedIn e adicionar à lista de newsletter

JSON para Importar

{
  "name": "LinkedIn → Mailchimp Newsletter",
  "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": "Tokens",
        "parameters": {
          "name": "linkedin_token",
          "value": "SEU_LINKEDIN_TOKEN"
        }
      }
    },
    {
      "id": "linkedin_profile",
      "type": "linkedin",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Obter Nome",
        "resource": "profile",
        "operation": "get",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "responseVariable": "profile"
      }
    },
    {
      "id": "linkedin_email",
      "type": "linkedin",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Obter Email",
        "resource": "profile",
        "operation": "get_email",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "responseVariable": "email"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "✅ {{profile.localizedFirstName}}, você foi inscrito na nossa newsletter!\n\nE-mail: {{email.elements[0].handle~.emailAddress}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "linkedin_profile" },
    { "source": "linkedin_profile", "target": "linkedin_email" },
    { "source": "linkedin_email", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: ✅ José, você foi inscrito na nossa newsletter!

E-mail: jose@exemplo.com

Exemplo 2: Criar Lead no Salesforce com Dados Completos

Objetivo: Obter perfil e e-mail do LinkedIn e criar lead completo no CRM

JSON para Importar

{
  "name": "LinkedIn → Salesforce Lead",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_welcome",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Boas-vindas",
        "parameters": {
          "message": "👋 Bem-vindo! Vamos capturar seus dados do LinkedIn..."
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Token",
        "parameters": {
          "name": "linkedin_token",
          "value": "SEU_TOKEN"
        }
      }
    },
    {
      "id": "linkedin_profile",
      "type": "linkedin",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Buscar Perfil",
        "resource": "profile",
        "operation": "get",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "responseVariable": "linkedinProfile"
      }
    },
    {
      "id": "linkedin_email",
      "type": "linkedin",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Buscar Email",
        "resource": "profile",
        "operation": "get_email",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "responseVariable": "linkedinEmail"
      }
    },
    {
      "id": "variable_2",
      "type": "variable",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Preparar Dados",
        "parameters": {
          "name": "leadData",
          "value": {
            "FirstName": "{{linkedinProfile.localizedFirstName}}",
            "LastName": "{{linkedinProfile.localizedLastName}}",
            "Email": "{{linkedinEmail.elements[0].handle~.emailAddress}}",
            "LeadSource": "LinkedIn"
          }
        }
      }
    },
    {
      "id": "message_result",
      "type": "message",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "🎉 Lead criado com sucesso!\n\nNome: {{leadData.FirstName}} {{leadData.LastName}}\nEmail: {{leadData.Email}}\nFonte: {{leadData.LeadSource}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1500, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_welcome" },
    { "source": "message_welcome", "target": "variable_1" },
    { "source": "variable_1", "target": "linkedin_profile" },
    { "source": "linkedin_profile", "target": "linkedin_email" },
    { "source": "linkedin_email", "target": "variable_2" },
    { "source": "variable_2", "target": "message_result" },
    { "source": "message_result", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 👋 Bem-vindo! Vamos capturar seus dados do LinkedIn...
Sistema: 🎉 Lead criado com sucesso!

Nome: José Roberto
Email: jose@exemplo.com
Fonte: LinkedIn

Exemplo 3: Validar E-mail Antes de Continuar

Objetivo: Verificar se usuário concedeu permissão de e-mail

JSON para Importar

{
  "name": "LinkedIn - Validar Permissão Email",
  "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": "Token",
        "parameters": {
          "name": "linkedin_token",
          "value": "SEU_TOKEN"
        }
      }
    },
    {
      "id": "linkedin_email",
      "type": "linkedin",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Buscar Email",
        "resource": "profile",
        "operation": "get_email",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "responseVariable": "emailData"
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Email Disponível?",
        "parameters": {
          "variable": "emailData.elements[0].handle~.emailAddress",
          "operator": "exists"
        }
      }
    },
    {
      "id": "message_success",
      "type": "message",
      "position": { "x": 900, "y": 50 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "✅ E-mail autorizado: {{emailData.elements[0].handle~.emailAddress}}"
        }
      }
    },
    {
      "id": "message_error",
      "type": "message",
      "position": { "x": 900, "y": 150 },
      "data": {
        "label": "Erro",
        "parameters": {
          "message": "⚠️ Você precisa autorizar o acesso ao seu e-mail do LinkedIn.\n\nPor favor, faça login novamente e conceda a permissão."
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "linkedin_email" },
    { "source": "linkedin_email", "target": "condition_1" },
    { "source": "condition_1", "target": "message_success", "label": "true" },
    { "source": "condition_1", "target": "message_error", "label": "false" },
    { "source": "message_success", "target": "end_1" },
    { "source": "message_error", "target": "end_1" }
  ]
}

Saída esperada (com permissão):

Sistema: ✅ E-mail autorizado: jose@exemplo.com

Saída esperada (sem permissão):

Sistema: ⚠️ Você precisa autorizar o acesso ao seu e-mail do LinkedIn.

Por favor, faça login novamente e conceda a permissão.

Resposta do Node

{
  "elements": [
    {
      "handle": "urn:li:emailAddress:123456789",
      "handle~": {
        "emailAddress": "jose@exemplo.com"
      }
    }
  ]
}

Estrutura da Resposta

Campo Tipo Descrição
elements array Array com dados de e-mail
elements[0].handle string URN do e-mail no LinkedIn
elements[0].handle~.emailAddress string Endereço de e-mail real

Boas Práticas

SIM: - Valide se e-mail existe antes de usar - Solicite escopo r_emailaddress no OAuth - Explique ao usuário por que precisa do e-mail - Trate casos onde usuário nega permissão - Armazene e-mail de forma segura (LGPD/GDPR)

NÃO: - Não assuma que e-mail sempre está disponível - Não use e-mail para spam (respeite opt-in) - Não compartilhe e-mail sem consentimento - Não armazene sem criptografia adequada

Dicas

💡 Permissão explícita: Usuário pode negar acesso ao e-mail mesmo com token válido 💡 Array de e-mails: API retorna array, mas geralmente tem apenas 1 elemento 💡 Caminho do e-mail: Use elements[0].handle~.emailAddress para acessar 💡 LGPD/GDPR: Armazene apenas com consentimento e permita exclusão

Erros Comuns

Erro 401: Unauthorized

Causa: Token sem escopo r_emailaddress Solução: Solicite escopo correto no OAuth flow

Erro: elements is empty

Causa: Usuário negou permissão de e-mail Solução: Peça autorização novamente explicando motivo

Erro: Cannot read emailAddress of undefined

Causa: Tentando acessar campo sem validar Solução: Use CONDITION para validar antes de usar

Próximo Node

Profile Get - Obter dados básicos do perfil → Post Create - Criar publicação no LinkedIn → Lead Gen Get Leads - Capturar leads de formulários