Pular para conteúdo

LINKEDIN COMPANY LIST MANAGED - Listar Empresas Gerenciadas

O que é esta operação?

O LinkedIn Company List Managed é a operação responsável por listar todas as empresas/páginas que o usuário autenticado gerencia no LinkedIn (admin de página).

Por que esta operação existe?

Gerenciamento de múltiplas páginas corporativas. O Company List Managed existe para:

  1. Multi-account management: Gerenciar várias páginas de clientes
  2. Automação em escala: Publicar em todas as páginas gerenciadas
  3. Auditoria: Ver quais páginas você administra
  4. Seleção de conta: Permitir usuário escolher em qual página publicar
  5. Dashboard: Mostrar estatísticas de todas as páginas

Como funciona internamente?

Quando o Company List Managed é executado, o sistema:

  1. Valida access token com escopo r_organization_social
  2. Faz GET para /v2/organizationAcls?q=roleAssignee&role=ADMINISTRATOR
  3. Filtra apenas organizações onde usuário é admin
  4. Usa projection para incluir dados da organização
  5. Retorna array de empresas gerenciadas
  6. Armazena resultado na variável especificada

Código interno (linkedin.executor.ts:142-150):

case 'list_managed':
  // List companies user manages
  const managedResponse = await axios.get(`${baseUrl}/organizationAcls?q=roleAssignee&role=ADMINISTRATOR&projection=(elements*(organization~(localizedName,vanityName)))`, {
    headers: {
      'Authorization': `Bearer ${accessToken}`,
      'Content-Type': 'application/json',
    },
  });
  return managedResponse.data;

Quando você DEVE usar esta operação?

Use Company List Managed sempre que precisar listar páginas administradas:

Casos de uso:

  1. Dashboard de agência: Mostrar todas as páginas de clientes
  2. Seletor de página: Permitir escolher onde publicar
  3. Publicação em massa: Postar em todas as páginas gerenciadas
  4. Auditoria de acessos: Ver quais páginas você gerencia
  5. Multi-tenant SaaS: Gerenciar páginas de múltiplos clientes

Parâmetros

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

Exemplo 1: Dashboard de Agência

Objetivo: Listar todas as páginas de clientes gerenciadas

JSON para Importar

{
  "name": "LinkedIn - Dashboard Páginas Gerenciadas",
  "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": "Listar Páginas",
        "resource": "companies",
        "operation": "list_managed",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "responseVariable": "minhasPaginas"
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Mostrar Lista",
        "parameters": {
          "message": "🏢 PÁGINAS GERENCIADAS\n\nTotal: {{minhasPaginas.paging.total}}\n\n1. {{minhasPaginas.elements[0].organization~.localizedName}}\n2. {{minhasPaginas.elements[1].organization~.localizedName}}\n3. {{minhasPaginas.elements[2].organization~.localizedName}}"
        }
      }
    },
    {
      "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" }
  ]
}

Exemplo 2: Publicar em Todas as Páginas

Objetivo: Postar mesmo conteúdo em todas as páginas gerenciadas

JSON para Importar

{
  "name": "LinkedIn - Post em Todas Páginas",
  "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 para publicar em todas as páginas:",
          "variable": "conteudo"
        }
      }
    },
    {
      "id": "variable_1",
      "type": "variable",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Token",
        "parameters": {
          "name": "linkedin_token",
          "value": "SEU_TOKEN"
        }
      }
    },
    {
      "id": "linkedin_list",
      "type": "linkedin",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Listar Páginas",
        "resource": "companies",
        "operation": "list_managed",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "responseVariable": "paginas"
      }
    },
    {
      "id": "loop_1",
      "type": "loop",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Para Cada Página",
        "parameters": {
          "array": "{{paginas.elements}}",
          "itemVariable": "paginaAtual"
        }
      }
    },
    {
      "id": "linkedin_post",
      "type": "linkedin",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Publicar",
        "resource": "companies",
        "operation": "create_post",
        "config": {
          "accessToken": "{{linkedin_token}}"
        },
        "companyId": "{{paginaAtual.organization}}",
        "content": "{{conteudo}}",
        "responseVariable": "postResult"
      }
    },
    {
      "id": "message_final",
      "type": "message",
      "position": { "x": 1300, "y": 100 },
      "data": {
        "label": "Concluído",
        "parameters": {
          "message": "✅ Publicado em {{paginas.paging.total}} páginas!"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1500, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "variable_1" },
    { "source": "variable_1", "target": "linkedin_list" },
    { "source": "linkedin_list", "target": "loop_1" },
    { "source": "loop_1", "target": "linkedin_post" },
    { "source": "linkedin_post", "target": "loop_1" },
    { "source": "loop_1", "target": "message_final", "label": "done" },
    { "source": "message_final", "target": "end_1" }
  ]
}

Resposta do Node

{
  "paging": {
    "count": 3,
    "start": 0,
    "total": 3
  },
  "elements": [
    {
      "organization": "urn:li:organization:1234567",
      "organization~": {
        "localizedName": "Tech Startup Inc",
        "vanityName": "tech-startup"
      },
      "role": "ADMINISTRATOR",
      "state": "APPROVED"
    }
  ]
}

Boas Práticas

SIM: - Use LOOP para processar múltiplas páginas - Valide permissões antes de publicar - Cache lista de páginas (mudam raramente) - Use DELAY entre posts em múltiplas páginas

NÃO: - Não publique sem validar permissões - Não ignore rate limits em publicações em massa

Próximo Node

Company Create Post - Publicar em página → Company Get - Obter dados de empresa → Post Create - Criar publicação pessoal