LINKEDIN PROFILE GET - Obter Perfil do Usuário
O que é esta operação?
O LinkedIn Profile Get é a operação responsável por obter informações do perfil do usuário autenticado no LinkedIn, incluindo nome, sobrenome, ID e dados básicos profissionais.
Por que esta operação existe?
Integrar dados profissionais do LinkedIn em automações. O Profile Get existe para:
- Personalização: Usar nome do usuário em mensagens e flows
- Identificação: Obter ID único do LinkedIn para outras operações
- Validação: Confirmar autenticação e permissões
- Enriquecimento: Adicionar dados profissionais ao CRM
- Onboarding: Capturar informações básicas de novos usuários
Como funciona internamente?
Quando o Profile Get é executado, o sistema:
- Valida access token do LinkedIn OAuth 2.0
- Faz requisição GET para
https://api.linkedin.com/v2/me - Envia headers de autorização e content-type
- Recebe resposta com dados do perfil
- Armazena resultado na variável especificada
- Retorna contexto atualizado para próximo node
Código interno (linkedin.executor.ts:48-74):
private async handleProfile(operation: string, data: any, accessToken: string, context: ExecutionContext): Promise<any> {
const baseUrl = 'https://api.linkedin.com/v2';
switch (operation) {
case 'get':
// Get current user profile
const profileResponse = await axios.get(`${baseUrl}/me`, {
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json',
},
});
return profileResponse.data;
// ...
}
}
Quando você DEVE usar esta operação?
Use Profile Get sempre que precisar de dados do perfil do usuário:
Casos de uso:
- Personalização de mensagens: "Olá {{firstName}}, bem-vindo!"
- Identificação de usuário: Obter ID único para outras operações
- Validação de autenticação: Testar se token é válido
- Enriquecimento de CRM: Adicionar dados do LinkedIn ao Salesforce
- Onboarding automatizado: Capturar dados para cadastro
- Analytics: Rastrear qual usuário iniciou o flow
Quando NÃO usar Profile Get:
- Obter e-mail: Use Profile Get Email específico
- Dados de outros usuários: API não permite (apenas perfil autenticado)
- Histórico de posts: Use Post List
Parâmetros Detalhados
config.accessToken (string, obrigatório)
O que é: Token de acesso OAuth 2.0 do LinkedIn.
Como obter:
1. Crie aplicação em LinkedIn Developers
2. Configure OAuth 2.0
3. Solicite escopo r_liteprofile
4. Use token retornado
Flow completo para testar:
{
"name": "LinkedIn - Obter Perfil",
"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_AQUI"
}
}
},
{
"id": "linkedin_1",
"type": "linkedin",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Obter Perfil",
"resource": "profile",
"operation": "get",
"config": {
"accessToken": "{{linkedin_token}}"
},
"responseVariable": "meuPerfil"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Mostrar Dados",
"parameters": {
"message": "✅ Perfil obtido!\n\nNome: {{meuPerfil.localizedFirstName}}\nSobrenome: {{meuPerfil.localizedLastName}}\nID: {{meuPerfil.id}}"
}
}
},
{
"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á seu nome, sobrenome e ID do LinkedIn!
responseVariable (string, opcional)
O que é: Nome da variável onde o resultado será armazenado.
Padrão: "linkedInResult"
Flow completo para testar:
{
"name": "LinkedIn - Variable Customizada",
"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_1",
"type": "linkedin",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Obter Meu Perfil",
"resource": "profile",
"operation": "get",
"config": {
"accessToken": "{{linkedin_token}}"
},
"responseVariable": "dadosUsuario"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Saudação",
"parameters": {
"message": "Olá {{dadosUsuario.localizedFirstName}}! 👋"
}
}
},
{
"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" }
]
}
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| resource | string | Sim | Sempre "profile" |
| operation | string | Sim | Sempre "get" |
| config.accessToken | string | Sim | Token OAuth 2.0 do LinkedIn |
| responseVariable | string | Não | Nome da variável de resposta (padrão: linkedInResult) |
Exemplo 1: Personalizar Mensagem com Nome
Objetivo: Buscar perfil do usuário e personalizar saudação
JSON para Importar
{
"name": "LinkedIn - Saudação Personalizada",
"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_AQUI"
}
}
},
{
"id": "linkedin_1",
"type": "linkedin",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Perfil",
"resource": "profile",
"operation": "get",
"config": {
"accessToken": "{{linkedin_token}}"
},
"responseVariable": "perfil"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Saudação",
"parameters": {
"message": "🎯 Olá, {{perfil.localizedFirstName}} {{perfil.localizedLastName}}!\n\nSeja bem-vindo ao nosso sistema."
}
}
},
{
"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" }
]
}
Saída esperada:
Sistema: 🎯 Olá, José Roberto!
Seja bem-vindo ao nosso sistema.
Exemplo 2: Validar Autenticação
Objetivo: Testar se o token do LinkedIn é válido antes de continuar
JSON para Importar
{
"name": "LinkedIn - Validar Token",
"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_1",
"type": "linkedin",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Testar Token",
"resource": "profile",
"operation": "get",
"config": {
"accessToken": "{{linkedin_token}}"
},
"responseVariable": "validacao"
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Token Válido?",
"parameters": {
"variable": "validacao.id",
"operator": "exists"
}
}
},
{
"id": "message_success",
"type": "message",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "✅ Token válido! Autenticado como {{validacao.localizedFirstName}}"
}
}
},
{
"id": "message_error",
"type": "message",
"position": { "x": 900, "y": 150 },
"data": {
"label": "Erro",
"parameters": {
"message": "❌ Token inválido ou expirado. Por favor, faça login novamente."
}
}
},
{
"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_1" },
{ "source": "linkedin_1", "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 (sucesso):
Sistema: ✅ Token válido! Autenticado como José
Exemplo 3: Enriquecer CRM com Dados do LinkedIn
Objetivo: Obter perfil do LinkedIn e criar/atualizar lead no Salesforce
JSON para Importar
{
"name": "LinkedIn → Salesforce Integration",
"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_1",
"type": "linkedin",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Perfil LinkedIn",
"resource": "profile",
"operation": "get",
"config": {
"accessToken": "{{linkedin_token}}"
},
"responseVariable": "linkedinProfile"
}
},
{
"id": "linkedin_2",
"type": "linkedin",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Buscar Email",
"resource": "profile",
"operation": "get_email",
"config": {
"accessToken": "{{linkedin_token}}"
},
"responseVariable": "linkedinEmail"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Confirmar Dados",
"parameters": {
"message": "📊 Dados capturados do LinkedIn:\n\nNome: {{linkedinProfile.localizedFirstName}} {{linkedinProfile.localizedLastName}}\nEmail: {{linkedinEmail.elements[0].handle~.emailAddress}}\n\nCriando lead no Salesforce..."
}
}
},
{
"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_1" },
{ "source": "linkedin_1", "target": "linkedin_2" },
{ "source": "linkedin_2", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: 📊 Dados capturados do LinkedIn:
Nome: José Roberto
Email: jose@exemplo.com
Criando lead no Salesforce...
Resposta do Node
{
"localizedFirstName": "José",
"localizedLastName": "Roberto",
"id": "abcd1234",
"firstName": {
"localized": {
"pt_BR": "José"
},
"preferredLocale": {
"country": "BR",
"language": "pt"
}
},
"lastName": {
"localized": {
"pt_BR": "Roberto"
},
"preferredLocale": {
"country": "BR",
"language": "pt"
}
}
}
Campos Retornados
| Campo | Tipo | Descrição |
|---|---|---|
| id | string | ID único do usuário no LinkedIn |
| localizedFirstName | string | Nome no idioma do usuário |
| localizedLastName | string | Sobrenome no idioma do usuário |
| firstName | object | Nome com localização detalhada |
| lastName | object | Sobrenome com localização detalhada |
Boas Práticas
✅ SIM: - Armazene tokens em variáveis seguras (não hardcode) - Valide resposta antes de usar dados - Trate erros de autenticação com CONDITION - Cache dados do perfil (não busque repetidamente) - Use responseVariable descritivo
❌ NÃO: - Não exponha access token em logs ou mensagens - Não assuma que campos sempre existem (valide) - Não faça múltiplas chamadas desnecessárias - Não ignore erros de API
Dicas
💡 Token expira: Implemente refresh token flow para renovação automática
💡 Rate limits: LinkedIn permite ~100k chamadas por dia por app
💡 Cache inteligente: Salve dados do perfil em banco para evitar chamadas
💡 Campos localizados: Use localizedFirstName para simplicidade
Próximo Node
→ Profile Get Email - Obter endereço de e-mail → Post Create - Criar publicação no LinkedIn → Company List Managed - Listar empresas gerenciadas