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:
- Content marketing: Publicar conteúdo automaticamente no LinkedIn
- Consistência: Manter presença ativa sem esforço manual
- Escala: Publicar em múltiplas contas simultaneamente
- Agendamento: Programar publicações para horários estratégicos
- Engagement: Compartilhar conquistas e atualizações profissionais
Como funciona internamente?
Quando o Post Create é executado, o sistema:
- Valida access token com escopo
w_member_social - Processa conteúdo com substituição de variáveis
- Monta payload no formato UGC (User Generated Content)
- Define visibilidade (PUBLIC ou CONNECTIONS)
- Faz POST para
/v2/ugcPosts - Retorna ID do post criado
- 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:
- Content marketing: Publicar artigos, dicas, insights automaticamente
- Notícias da empresa: Compartilhar conquistas e atualizações
- Geração de leads: Publicar CTAs e ofertas
- Personal branding: Manter presença ativa e consistente
- Campanhas: Publicar conteúdo de campanhas de marketing
- 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