⚡ AutomationsAI|Portal de Cursos →

Verificando acesso...

MÓDULO 2.4

🔌 Conectando contas

Plugar Bluesky, X, LinkedIn e Mastodon no Postiz, agendar o primeiro post multicanal e validar que o agendador está mesmo trabalhando.

6
Tópicos
40
Minutos
Intermediário
Nível
Prático
Tipo

🎯 Por onde começar

Comece pelo Bluesky pra validar o fluxo end-to-end. É a rede mais simples (handle + App Password, sem OAuth, sem dashboard de developer), então qualquer falha que aparecer aqui é problema do Postiz — não do provider. Depois que um agendamento Bluesky chegar publicado, aí sim parta para X, LinkedIn e Mastodon.

🗺️ Fluxo geral de conexão

Independente da rede, conectar uma conta no Postiz segue cinco passos. As variações (OAuth vs. App Password, scopes, custos) entram nos detalhes — mas a coluna vertebral é sempre essa.

1

Settings → Channels → Add channel

No dashboard do Postiz, escolha a rede social na grade de providers. Cada uma exibe seu fluxo próprio.

2

Autenticar

Login direto (Bluesky, Mastodon) ou redirect OAuth (X, LinkedIn) para o provider autorizar o Postiz a postar em seu nome.

3

Aprovar scopes

Confirmar permissões mínimas: ler perfil, publicar posts, anexar mídia. Recusar scope extra que a rede não exigir.

4

Token persistido

Postiz grava access_token + refresh_token criptografados no Postgres.

5

Canal aparece como ativo

A conta vira opção no compositor de posts. Status verde = pronta para agendar.

1

🦋 Adicionar conta Bluesky

Bluesky é o caminho mais curto: handle (algo como seunome.bsky.social) mais um App Password gerado nas configurações da própria rede. Não tem OAuth, não tem developer portal, não tem aprovação. Login direto via API ATProto.

Gere o App Password em bsky.app → Settings → App Passwords → Add App Password. Use um nome reconhecível tipo postiz-prod. Nunca cole sua senha principal.

# Dados pedidos pelo Postiz
Handle:       seunome.bsky.social
App Password: xxxx-xxxx-xxxx-xxxx   # gerado no bsky.app

# O que acontece internamente
POST https://bsky.social/xrpc/com.atproto.server.createSession
  { "identifier": "seunome.bsky.social", "password": "xxxx-xxxx-xxxx-xxxx" }
# → retorna accessJwt + refreshJwt, que o Postiz armazena

🦋 Dica prática

Crie um App Password por ferramenta. Assim, se quiser desconectar só o Postiz no futuro, revoga aquele App Password específico e suas outras integrações continuam vivas. Senha principal jamais é tocada.

Conceitos-chave

ATProto

Protocolo aberto que serve de base para o Bluesky.

Handle

Identificador público no formato de domínio.

App Password

Senha escopada por aplicação, revogável a qualquer hora.

createSession

Endpoint de login que devolve JWT de acesso.

2

🐦 Conectar X via OAuth

X (ex-Twitter) usa OAuth 2.0 com PKCE. Clica em "Connect X" no Postiz, é redirecionado para x.com/i/oauth2/authorize, autoriza o app e volta com um code que o backend troca por tokens.

O detalhe que assusta: postar via API exige o Basic plan, que custa US$ 200/mês e libera 3.000 posts mensais — ou usar provedores pay-per-use que revendem cotas. O Free tier só lê dados, não publica.

✓ O que FAZER

  • Avaliar se US$ 200/mês compensam pelo volume real.
  • Considerar pay-per-use se posta menos de 100/mês.
  • Confirmar o callback URL no developer portal.
  • Guardar client_id/client_secret só no .env.

✗ O que NÃO fazer

  • Esperar postar com o Free tier — não publica.
  • Reusar tokens de uma app antiga do Twitter v1.1.
  • Setar callback como localhost em prod.
  • Estourar rate limit sem backoff (vira ban temporário).
# .env adicional
X_API_KEY=seu_client_id
X_API_SECRET=seu_client_secret

# Callback URL registrado no developer.x.com
https://seu-dominio.com/api/auth/callback/x

Conceitos-chave

OAuth 2.0

Padrão de autorização delegada via redirect.

PKCE

Proof Key — proteção contra interceptação do code.

Basic plan

US$ 200/mês, 3k posts, write habilitado.

Pay-per-use

Provedores revendem cota por post avulso.

3

💼 Conectar LinkedIn

LinkedIn usa o produto Sign in with LinkedIn using OpenID Connect + Share on LinkedIn. Crie um app em linkedin.com/developers, habilite os dois produtos, configure o callback e capture Client ID + Client Secret.

Pegadinha: o access_token do LinkedIn vive 60 dias, e o refresh_token precisa do produto Marketing Developer Platform (aprovação manual). Sem ele, o Postiz força reconexão a cada dois meses.

# Scopes mínimos para postar como pessoa
openid
profile
email
w_member_social      # publicar no feed pessoal

# Scopes extras para postar em Company Page
r_organization_social
w_organization_social
rw_organization_admin

Dica prática

Anote no calendário a data de expiração do token LinkedIn (60 dias após conectar). O Postiz avisa via dashboard, mas se você só checa o app uma vez por semana, perde a janela e seu post agendado falha em silêncio. Reconecte uns 5 dias antes.

Conceitos-chave

OIDC

OpenID Connect — identidade sobre OAuth 2.0.

Scopes

Granularidade do que o app pode fazer pela conta.

Token expiry

60 dias por padrão sem refresh aprovado.

Company Page

Requer scopes organization e admin role.

4

🐘 Adicionar Mastodon

Mastodon é federado: não tem "um Mastodon", tem milhares de instâncias (mastodon.social, fosstodon.org, hachyderm.io...). Cada uma é um servidor independente com seu próprio OAuth. O Postiz pede a URL da sua instância antes do login.

O fluxo é dinâmico: Postiz registra um app OAuth na instância que você informou via /api/v1/apps, recebe credenciais efêmeras e redireciona para o /oauth/authorize daquela instância. Tudo automático — você só cola a URL.

# O que Postiz pede
Instance URL:  https://mastodon.social
               # ou https://fosstodon.org, https://hachyderm.io, etc.

# Scopes solicitados
read           # ler timeline e perfil
write          # publicar toots
push           # notificações (opcional)

# Caracteres por post na maioria das instâncias
500            # (algumas instâncias customizam pra 1000+)

🐘 Dica prática

Não confunda seu handle federado (@voce@fosstodon.org) com a URL da instância (https://fosstodon.org). Postiz pede a URL — a instância onde sua conta vive, não o identificador público.

Conceitos-chave

Fediverso

Rede de servidores que conversam via ActivityPub.

Instância

Servidor Mastodon individual, com regras próprias.

Dynamic app

App registrado on-the-fly via API da instância.

Toot

O "post" do Mastodon, equivalente ao tweet.

5

📅 Programar primeiro post

Com pelo menos dois canais conectados, abra o compositor (botão + New Post). Escreva texto curto, anexe uma imagem, marque dois ou mais canais e agende para amanhã às 9h — horário em que você consegue conferir se publicou de verdade.

1

Escrever o conteúdo

Texto que caiba no menor limite (280 do X). O Postiz mostra contador por canal e avisa estouro.

2

Anexar imagem

Drag-and-drop ou clique no clipe. JPG/PNG até ~8MB. Postiz redimensiona se algum provider exigir.

3

Selecionar canais

Marque os badges das contas (Bluesky + Mastodon recomendados pro primeiro teste — não consomem cota paga).

4

Definir data/hora

"Schedule" → calendário → amanhã 9h. Confirme o fuso horário no canto do compositor.

5

Confirmar agendamento

Job entra na fila Redis/BullMQ. Aparece no calendário com cor por canal e status scheduled.

🕘 Dica prática

No dia seguinte, faça as três checagens: 1) o calendário do Postiz mudou o status para posted; 2) a URL pública do post aparece como link no cartão; 3) você consegue clicar e ver o conteúdo na rede social real. Sem os três, não confie no agendador ainda.

Conceitos-chave

Compositor

Editor unificado que adapta o conteúdo a cada canal.

BullMQ

Fila baseada em Redis que dispara o post na hora certa.

Timezone

Conferir no perfil — agendamento usa o fuso do usuário.

Multicanal

Um draft, várias APIs — cada canal com seu render.

6

📊 Ver analytics básico

Depois que o post sair, o Postiz puxa métricas via API de cada provider. A aba Analytics agrega clicks, impressions, engagement e o status de entrega por plataforma.

📈 Métricas disponíveis por rede

  • Bluesky: likes, reposts, replies. Sem impressions na API pública — só engajamento absoluto.
  • X: impressions, likes, reposts, replies, bookmarks. Requer plano Basic+ para puxar via API.
  • LinkedIn: impressions, reactions, comments, shares. Métricas detalhadas só em Company Pages.
  • Mastodon: favourites, boosts, replies. Sem impressions — o protocolo não rastreia visualização.
# Status que aparecem no dashboard de cada post
scheduled    # na fila, ainda não saiu
posting      # job rodando agora
posted       # publicado com sucesso, URL disponível
failed       # erro do provider — clique para ver stack trace
expired      # token expirou antes do horário (reconectar)

✓ O que FAZER

  • Olhar a aba Analytics 24h após o post (números amadurecem).
  • Comparar engagement absoluto, não taxas entre redes diferentes.
  • Investigar todo status failed — não ignore.
  • Exportar CSV mensalmente para arquivo histórico.

✗ O que NÃO fazer

  • Confiar em impressions logo após postar — atrasa horas.
  • Comparar X (write pago) com Bluesky em valor absoluto.
  • Tratar expired como erro do Postiz — é token do provider.
  • Otimizar pra métrica antes de ter 30 posts de baseline.

Conceitos-chave

Impressions

Quantas vezes o post entrou na tela de alguém.

Clicks

Cliques em links ou no próprio post.

Engagement

Reações, comentários e compartilhamentos somados.

Status

Estado do job no agendador (scheduled → posted).

🎯 Resumo do Módulo

Bluesky conectado — handle + App Password, sem OAuth, validação rápida do fluxo end-to-end.
X via OAuth — redirect, PKCE, callback registrado, decisão consciente de Basic US$ 200/mês vs. pay-per-use.
LinkedIn integrado — Sign in with LinkedIn + Share, scopes mínimos, ciência da expiração de 60 dias.
Mastodon plugado — URL da instância correta, app dinâmico via /api/v1/apps, OAuth federado.
Primeiro post agendado — texto + imagem, multicanal, fila BullMQ, amanhã 9h confirmado.
Analytics inspecionado — clicks, impressions, engagement e status por plataforma na aba Analytics.

Próximo Módulo:

2.5 — Agendamento avançado, calendário editorial e automações