Pular para conteúdo

LINKEDIN POST CREATE - Criar Publicação Pessoal

O que é esta operação?

O LinkedIn Post Create é a operação responsável por criar publicações (posts) pessoais no feed do LinkedIn do usuário autenticado, permitindo compartilhar conteúdo profissional de forma automatizada.

Por que esta operação existe?

Automação de marketing de conteúdo e presença profissional. O Post Create existe para:

  1. Content marketing: Publicar conteúdo automaticamente no LinkedIn
  2. Consistência: Manter presença ativa sem esforço manual
  3. Escala: Publicar em múltiplas contas simultaneamente
  4. Agendamento: Programar publicações para horários estratégicos
  5. Engagement: Compartilhar conquistas e atualizações profissionais

Como funciona internamente?

Quando o Post Create é executado, o sistema:

  1. Valida access token com escopo w_member_social
  2. Processa conteúdo com substituição de variáveis
  3. Monta payload no formato UGC (User Generated Content)
  4. Define visibilidade (PUBLIC ou CONNECTIONS)
  5. Faz POST para /v2/ugcPosts
  6. Retorna ID do post criado
  7. Armazena resultado na variável especificada

Código interno (linkedin.executor.ts:77-124):

private async handlePosts(operation: string, data: any, accessToken: string, context: ExecutionContext): Promise<any> {
  const baseUrl = 'https://api.linkedin.com/v2';

  switch (operation) {
    case 'create':
      // Create a post (share)
      const postContent = this.replaceVariables(data.content || '', context.variables);
      const visibility = data.visibility || 'PUBLIC'; // PUBLIC or CONNECTIONS

      const postPayload = {
        author: `urn:li:person:${data.personId || 'me'}`,
        lifecycleState: 'PUBLISHED',
        specificContent: {
          'com.linkedin.ugc.ShareContent': {
            shareCommentary: {
              text: postContent,
            },
            shareMediaCategory: 'NONE',
          },
        },
        visibility: {
          'com.linkedin.ugc.MemberNetworkVisibility': visibility,
        },
      };

      const postResponse = await axios.post(`${baseUrl}/ugcPosts`, postPayload, {
        headers: {
          'Authorization': `Bearer ${accessToken}`,
          'Content-Type': 'application/json',
          'X-Restli-Protocol-Version': '2.0.0',
        },
      });
      return postResponse.data;
    // ...
  }
}

Quando você DEVE usar esta operação?

Use Post Create sempre que precisar publicar conteúdo no LinkedIn:

Casos de uso:

  1. Content marketing: Publicar artigos, dicas, insights automaticamente
  2. Notícias da empresa: Compartilhar conquistas e atualizações
  3. Geração de leads: Publicar CTAs e ofertas
  4. Personal branding: Manter presença ativa e consistente
  5. Campanhas: Publicar conteúdo de campanhas de marketing
  6. Cross-posting: Replicar conteúdo de outras plataformas

Quando NÃO usar Post Create:

  • Posts de empresa: Use Company Create Post para páginas corporativas
  • Com imagens/vídeos: Requer upload separado de mídia (não coberto nesta operação)
  • Comentários: API não suporta comentários automatizados

Parâmetros Detalhados

content (string, obrigatório)

O que é: Texto do post que será publicado no LinkedIn.

Suporta: Variáveis dinâmicas ({{variavel}}) e emojis

Limite: 3000 caracteres

Flow completo para testar:

{
  "name": "LinkedIn - Criar Post Simples",
  "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_ACCESS_TOKEN"
        }
      }
    },
    {
      "id": "linkedin_1",
      "type": "linkedin",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Criar Post",
        "resource": "posts",
        "operation": "create",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "content": "🚀 Feliz em compartilhar que estamos automatizando nosso marketing no LinkedIn!\n\n#Automation #MarketingDigital #LinkedIn",
        "visibility": "PUBLIC",
        "responseVariable": "postResult"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "✅ Post publicado com sucesso!\n\nID: {{postResult.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. O post será publicado no seu feed do LinkedIn!

visibility (string, opcional)

O que é: Define quem pode ver o post.

Valores: - PUBLIC - Qualquer pessoa pode ver (padrão) - CONNECTIONS - Apenas suas conexões

Padrão: "PUBLIC"

Flow completo para testar:

{
  "name": "LinkedIn - Post Apenas Conexões",
  "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": "Post Privado",
        "resource": "posts",
        "operation": "create",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "content": "🔒 Esta é uma atualização exclusiva para minhas conexões!\n\nCompartilhando uma conquista pessoal...",
        "visibility": "CONNECTIONS",
        "responseVariable": "postResult"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "✅ Post criado! Visível apenas para suas conexões."
        }
      }
    },
    {
      "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" }
  ]
}

config.accessToken (string, obrigatório)

O que é: Token OAuth 2.0 com escopo w_member_social (write permission).

Como obter: 1. Configure OAuth 2.0 no LinkedIn Developers 2. Solicite escopo w_member_social (permissão de escrita) 3. Usuário deve autorizar publicação em seu nome 4. Use token retornado

Parâmetros

Campo Tipo Obrigatório Descrição
resource string Sim Sempre "posts"
operation string Sim Sempre "create"
content string Sim Texto do post (máx 3000 caracteres)
visibility string Não PUBLIC ou CONNECTIONS (padrão: PUBLIC)
config.accessToken string Sim Token OAuth 2.0 com escopo w_member_social
responseVariable string Não Nome da variável de resposta (padrão: linkedInResult)

Exemplo 1: Content Marketing Automatizado

Objetivo: Publicar conteúdo automaticamente com base em input do usuário

JSON para Importar

{
  "name": "LinkedIn - Content Marketing Bot",
  "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": "Pedir Conteúdo",
        "parameters": {
          "message": "Digite o conteúdo do post para o LinkedIn:",
          "variable": "conteudoPost"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Token",
        "parameters": {
          "name": "linkedin_token",
          "value": "SEU_TOKEN"
        }
      }
    },
    {
      "id": "linkedin_1",
      "type": "linkedin",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Publicar",
        "resource": "posts",
        "operation": "create",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "content": "{{conteudoPost}}\n\n---\n📢 Publicado via Lumina Flow Builder",
        "visibility": "PUBLIC",
        "responseVariable": "postCriado"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Sucesso",
        "parameters": {
          "message": "🎉 Post publicado com sucesso no LinkedIn!\n\nVisualize em: https://www.linkedin.com/feed/"
        }
      }
    },
    {
      "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": "linkedin_1" },
    { "source": "linkedin_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: Digite o conteúdo do post para o LinkedIn:
Usuário: Acabei de lançar meu novo curso de automação!
Sistema: 🎉 Post publicado com sucesso no LinkedIn!

Visualize em: https://www.linkedin.com/feed/

Exemplo 2: Publicar Conquistas de CRM

Objetivo: Quando lead vira cliente no Salesforce, publicar no LinkedIn

JSON para Importar

{
  "name": "Salesforce → LinkedIn Auto-Post",
  "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 da Venda",
        "parameters": {
          "name": "novoCliente",
          "value": {
            "nome": "Tech Startup XYZ",
            "valor": "R$ 50.000",
            "produto": "Enterprise Plan"
          }
        }
      }
    },
    {
      "id": "variable_2",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Token",
        "parameters": {
          "name": "linkedin_token",
          "value": "SEU_TOKEN"
        }
      }
    },
    {
      "id": "linkedin_1",
      "type": "linkedin",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Publicar Conquista",
        "resource": "posts",
        "operation": "create",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "content": "🎉 Feliz em anunciar que {{novoCliente.nome}} escolheu nossa solução!\n\nMais uma empresa confiando em nosso {{novoCliente.produto}} para transformar seus resultados.\n\n#SaaS #Vendas #Crescimento",
        "visibility": "PUBLIC",
        "responseVariable": "postPublicado"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Confirmação",
        "parameters": {
          "message": "✅ Conquista publicada no LinkedIn automaticamente!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "variable_2" },
    { "source": "variable_2", "target": "linkedin_1" },
    { "source": "linkedin_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: ✅ Conquista publicada no LinkedIn automaticamente!

Post no LinkedIn:

🎉 Feliz em anunciar que Tech Startup XYZ escolheu nossa solução!

Mais uma empresa confiando em nosso Enterprise Plan para transformar seus resultados.

#SaaS #Vendas #Crescimento

Exemplo 3: Agendar Posts com Delay

Objetivo: Publicar 3 posts espaçados ao longo do dia

JSON para Importar

{
  "name": "LinkedIn - Posts Espaçados",
  "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": "Post Manhã",
        "resource": "posts",
        "operation": "create",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "content": "☀️ Bom dia! Começando o dia com energia e foco.\n\n#BomDia #Produtividade",
        "visibility": "PUBLIC"
      }
    },
    {
      "id": "delay_1",
      "type": "delay",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Aguardar 4h",
        "parameters": {
          "duration": 4,
          "unit": "hours"
        }
      }
    },
    {
      "id": "linkedin_2",
      "type": "linkedin",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Post Tarde",
        "resource": "posts",
        "operation": "create",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "content": "🎯 Tarde produtiva! Compartilhando uma dica rápida...\n\n#Dicas #Networking",
        "visibility": "PUBLIC"
      }
    },
    {
      "id": "delay_2",
      "type": "delay",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Aguardar 4h",
        "parameters": {
          "duration": 4,
          "unit": "hours"
        }
      }
    },
    {
      "id": "linkedin_3",
      "type": "linkedin",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Post Noite",
        "resource": "posts",
        "operation": "create",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "content": "🌙 Finalizando o dia com gratidão. Até amanhã!\n\n#Networking #Agradecimento",
        "visibility": "PUBLIC"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 1500, "y": 100 },
      "data": {
        "label": "Concluído",
        "parameters": {
          "message": "✅ Todos os 3 posts foram publicados ao longo do dia!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1700, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "variable_1" },
    { "source": "variable_1", "target": "linkedin_1" },
    { "source": "linkedin_1", "target": "delay_1" },
    { "source": "delay_1", "target": "linkedin_2" },
    { "source": "linkedin_2", "target": "delay_2" },
    { "source": "delay_2", "target": "linkedin_3" },
    { "source": "linkedin_3", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Resposta do Node

{
  "id": "urn:li:share:1234567890",
  "activity": "urn:li:activity:1234567890",
  "created": {
    "actor": "urn:li:person:abc123",
    "time": 1642512000000
  }
}

Campos Retornados

Campo Tipo Descrição
id string URN único do post criado
activity string URN da atividade associada
created.actor string URN do autor (pessoa)
created.time number Timestamp da criação (epoch ms)

Boas Práticas

SIM: - Escreva conteúdo relevante e profissional - Use hashtags estratégicas (3-5 por post) - Espaçe posts com DELAY (não spam) - Valide sucesso antes de continuar - Use emojis para engajamento visual - Teste com visibility: CONNECTIONS primeiro

NÃO: - Não faça spam (máx 2-3 posts por dia) - Não publique conteúdo duplicado repetidamente - Não ignore rate limits (150 posts/dia) - Não publique conteúdo ofensivo ou inapropriado - Não use apenas CAIXA ALTA - Não exagere em emojis (parece não profissional)

Dicas

💡 Horários estratégicos: Publique 8h-9h, 12h-13h ou 17h-18h para mais engajamento 💡 Hashtags: Use 3-5 hashtags relevantes ao final do post 💡 Emojis: Use 2-3 emojis para destacar visualmente 💡 Call-to-action: Inclua pergunta ou convite para comentar 💡 Variáveis dinâmicas: Use {{nome}}, {{data}}, etc. para personalização

Limitações

⚠️ Rate Limits LinkedIn: - Máximo 150 posts por pessoa por dia - Máximo 3000 caracteres por post - Apenas texto (mídia requer upload separado)

Erros Comuns

Erro 401: Unauthorized

Causa: Token sem escopo w_member_social Solução: Solicite permissão de escrita no OAuth

Erro 429: Too Many Requests

Causa: Excedeu rate limit Solução: Use DELAY entre posts, reduza frequência

Erro: Text too long

Causa: Conteúdo > 3000 caracteres Solução: Reduza tamanho do texto

Próximo Node

Post List - Listar publicações do usuário → Company Create Post - Publicar em página de empresa → Profile Get - Obter dados do perfil para personalização