Publicação Social (Social Publishing)
Propósito
Publicar o conteúdo de lançamento em um cronograma a partir de um único lugar, por meio da API oficial de cada plataforma, sem perder uma conta pessoal para a marca ou a marca para uma conta pessoal. A ferramenta aqui é o Postiz (código aberto, auto-hospedado); as etapas da plataforma se aplicam a qualquer agendador.
Pré-requisitos
- Contas de marca já criadas: conta profissional do Instagram, perfil do Threads (vem do Instagram), conta do X, opcionalmente TikTok.
- Um domínio no Cloudflare (para o hostname do túnel), Docker Desktop, uma máquina que fique ligada nos horários de postagem (ou um VPS pequeno).
- A configuração
console-automationse os consoles forem controlados a partir de um navegador. - Um calendário de conteúdo (veja "Calendário" abaixo).
Realidade da plataforma (verifique novamente antes de começar; estes itens mudam)
| Plataforma | Rota oficial | O que bloqueia você |
|---|---|---|
| Aplicativo Meta + Login do Facebook, conta profissional do IG vinculada a uma Página do Facebook | Novos aplicativos Meta recebem a configuração "Login unificado" do Instagram, que exige um portfólio de negócios; a configuração mais antiga apenas com Login do Instagram "não está disponível para aplicativos mais novos". Stories são publicados como mídia simples: sem enquete, link ou adesivos de contagem regressiva via API. | |
| Threads | Aplicativo Meta com o caso de uso do Threads | Até a Revisão do Aplicativo, apenas contas com a função Tester do Threads podem conectar; o tester aceita no Threads › Configurações › Conta › Permissões do site › Convites. |
| X | Conta de desenvolvedor com acesso pago à API (verifique preços atuais da API do X) | Precisa de um método de pagamento; defina um limite de gastos. |
| TikTok | API de Postagem de Conteúdo | Aplicativos não auditados postam apenas como privado até que a auditoria seja aprovada (a auditoria leva tempo). Contas novas precisam de verificação por telefone, e um número pode pertencer a apenas uma conta. |
| YouTube | Upload da API de Dados | Projetos de API não verificados fazem upload como privado até uma auditoria de conformidade. |
Planeje-se em torno dos bloqueadores: inicie as auditorias cedo, publique no TikTok/YouTube nativamente (TikTok Studio, agendadores do YouTube Studio) até que as auditorias sejam aprovadas, ou descarte a plataforma.
Procedimento
1. Auto-hospedar o Postiz (Docker)
- Comece a partir do arquivo oficial
postiz-docker-compose. Antes deup:- Remova serviços que você não precisa e qualquer um que vincule portas já em uso na máquina (o arquivo upstream vincula a interface do Temporal a
127.0.0.1:8080). - Remova o Elasticsearch: defina
ENABLE_ES=falseeSKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES=trueno Temporal (visibilidade SQL). O Postiz registra apenas dois atributos de palavra-chave. Se o Temporal foi iniciado primeiro com ES, seu banco de dados ainda mantém os atributos de texto padrão e o Postiz falha com "cannot have more than 3 search attribute of type Text": recrie o volume do banco de dados do Temporal antes que qualquer coisa seja agendada. - Vincule o Postiz apenas a
127.0.0.1; definaMAIN_URL,FRONTEND_URL,NEXT_PUBLIC_BACKEND_URLpara o hostname HTTPS público. - Coloque segredos (
JWT_SECRET, token do túnel, chaves do aplicativo) em um.envignorado pelo git, referenciado como${VAR}no arquivo compose. - Adicione
mem_limit/cpuspor serviço. O Postiz executa frontend, backend e orquestrador em um contêiner; observamos cerca de 1,5 GB de uso, então um limite de 2 GB evitou atingir o teto. No Windows, também limite a VM do WSL em%USERPROFILE%\.wslconfig(memory=4GB,processors=4,autoMemoryReclaim=gradual), depoiswsl --shutdowne reinicie o Docker Desktop.
- Remova serviços que você não precisa e qualquer um que vincule portas já em uso na máquina (o arquivo upstream vincula a interface do Temporal a
- Crie a primeira conta no navegador após a página ter hidratado (um formulário não hidratado envia como GET e coloca a senha na URL). Em seguida, defina
DISABLE_REGISTRATION=truee reinicie. - Mantenha
restart: alwayse ative "iniciar o Docker Desktop no login"; desative o modo de suspensão se a máquina for o agendador.
2. Hostname público (Cloudflare Tunnel)
- Crie um túnel gerenciado remotamente (API:
POST /accounts/{id}/cfd_tunnelcomconfig_src: cloudflare,PUT .../configurationscom a regra de entrada, umCNAMEcom proxy para<tunnel-id>.cfargotunnel.com,GET .../token). - Execute
cloudflaredcomo um serviço na mesma rede do compose e aponte a entrada parahttp://postiz:5000, nãolocalhost. - APROVAÇÃO: um túnel expõe um serviço local à internet; peça antes de criá-lo. Opcionalmente, adicione o Cloudflare Access na frente (precisa que o Zero Trust esteja ativado na conta; mantenha
/uploadsacessível para a busca de mídia do Meta).
3. Meta (Instagram + Threads)
- Crie um aplicativo Meta separado para publicação (não adicione casos de uso a um aplicativo que já alimenta um recurso no aplicativo, como compartilhamento de Stories do Instagram). Casos de uso: "Gerenciar mensagens e conteúdo no Instagram" e "Acessar a API do Threads".
- Instagram:
- Crie um portfólio de negócios quando o caso de uso solicitar um (gratuito; nome, nome do proprietário, e-mail comercial). A verificação só é necessária para dados de outras pessoas e Revisão do Aplicativo.
- Crie uma Página do Facebook para a marca (também necessária para anúncios Meta) e vincule a conta profissional do Instagram a ela: Configurações da Página › Contas vinculadas › Instagram › Conectar. O pop-up OAuth faz login com a conta do Instagram que o navegador possui: leia o nome "Entrar como …"; se for uma conta pessoal, troque de conta primeiro (vincular uma conta pessoal a converte em profissional).
- No caso de uso do Instagram, adicione exatamente os escopos que o agendador solicita (Postiz:
instagram_basic,pages_show_list,pages_read_engagement,business_management,instagram_content_publish,instagram_manage_comments,instagram_manage_insights). Defina o URI de redirecionamento do Login do Facebook para Empresas para o callback do agendador (Postiz:/integrations/social/instagram). - ID + segredo do aplicativo (Configurações do aplicativo › Básico; mostrar o segredo pede a senha do Facebook) →
FACEBOOK_APP_ID/SECRET.
- Threads: adicione
threads_basic,threads_content_publish,threads_manage_replies,threads_manage_insights; defina o redirecionamento (/integrations/social/threads) além dos URLs de callback de desinstalação/exclusão; pegue o ID/segredo separado do aplicativo Threads; adicione o perfil da marca como Tester do Threads e aceite o convite no telefone. - Se a URL de consentimento do Threads cair na página inicial do Threads em vez da tela de consentimento, a sessão do navegador está em
threads.comenquanto o agendador usathreads.net: abra a mesma URL emthreads.com. - Se o navegador estiver atuando como a Página (após editá-la), o consentimento do Facebook primeiro mostra "Você precisa mudar para "; continue como a pessoa, não a Página.
- Durante o consentimento do Facebook, o Meta padroniza para "todas as Páginas/Empresas/Contas do Instagram atuais e futuras". Em uma conta que gerencia outras marcas, escolha "apenas atuais" e selecione os ativos da marca.
4. X
- Integração no Console do Desenvolvedor: nome da conta, uma descrição precisa do caso de uso (apenas conta própria, sem revenda de dados, sem curtidas/seguimentos/DMs automatizados), aceitar os termos.
- Compre o menor pacote de créditos; deixe a recarga automática desligada e defina um limite de ciclo de faturamento. O total no painel pode ficar atrás da página de Créditos.
- Aplicativo › Configurações de autenticação do usuário: Ler e escrever, "Aplicativo Web, Aplicativo Automatizado ou Bot", callback = callback do agendador (Postiz:
/integrations/social/x), site, URLs de termos e privacidade. Salvar mostra o segredo do cliente OAuth 2.0 uma vez. - O Postiz usa OAuth 1.0a: regenere a Chave do Consumidor e copie a chave + "Segredo da Chave do Consumidor" (esse rótulo exato) uma vez →
X_API_KEY/X_API_SECRET. - Autorizando: marque "Confio neste aplicativo", confirme que a tela mostra o identificador da marca, depois Autorize.
5. TikTok (opcional)
Conta:
- Contas novas exigem verificação por telefone e um número pode ficar em apenas uma conta; um cadastro na web pode terminar em "continuar no aplicativo". Opções: um segundo número para contas de marca, ou converter uma conta pessoal existente (novo nome de usuário e nome de exibição, foto de perfil, biografia; arquivar/privatizar vídeos pessoais antigos).
- Em algumas regiões, o toque único "Mudar para Conta Empresarial" desapareceu; o menu oferece "Torne-se uma Conta Empresarial Verificada", que pede documentos da empresa. Uma conta pessoal é suficiente: o agendamento do TikTok Studio, análises, Spark Ads e a API de Postagem de Conteúdo funcionam com ela. A biblioteca de música empresarial é a principal perda.
- O nome de usuário pode mudar uma vez a cada 30 dias, o nome de exibição uma vez a cada 7 dias. O perfil web (nome, biografia, foto, contagens) pode ficar atrasado em relação ao aplicativo por um dia ou mais; confie no aplicativo.
- A região da conta é definida no cadastro a partir do SIM/IP e não pôde ser alterada nas configurações.
Aplicativo do desenvolvedor (para o agendador):
- O cadastro em developers.tiktok.com mostra apenas "Desenvolvedor Empresarial" (e-mail + código + senha), mas ao criar o aplicativo você pode escolher Individual como propriedade, então nenhuma empresa é necessária para começar.
- Crie o aplicativo e, em seguida, um Sandbox: informações básicas (ícone 1024², categoria, descrição ≤120 caracteres, URLs de termos/privacidade, URL da plataforma Web), produtos Login Kit (URI de redirecionamento Web = callback do agendador; Postiz
/integrations/social/tiktok) e API de Postagem de Conteúdo (ative Direct Post), e todos os escopos que o agendador solicita. O Postiz pedeuser.info.basic,user.info.profile,user.info.stats,video.list,video.upload,video.publish; um escopo faltando mostra "Algo deu errado … corrija o seguinte: escopo" na página de consentimento. Clique em "Aplicar alterações" após cada edição. - Adicione a conta da marca como um Usuário alvo do Sandbox (o pop-up de login aceita uma leitura de QR do aplicativo do telefone). Use a chave/segredo do cliente sandbox no agendador.
- O envio por arquivo não precisa de verificação de domínio; a obtenção por URL sim.
- Antes da auditoria: o modo
UPLOADenvia o vídeo para a caixa de entrada do TikTok da conta como rascunho (publique do telefone em até 24 h; máximo de 5 pendentes por 24 h).DIRECT_POSTfunciona, mas posta apenas como privado. Envie o aplicativo de produção para revisão com um vídeo de demonstração para postagem pública direta. - A etapa de consentimento pode pedir "Verifique se é realmente você" com um código de e-mail. Após muitas alterações na conta em um único dia (e-mail, nome, biografia, novos logins), o TikTok limita a taxa desses códigos ("Número máximo de tentativas atingido"): pare e tente novamente no dia seguinte, em vez de forçar.
6. Verificar
- A lista de canais do agendador mostra cada conta da marca (nome/identificador), nenhuma desabilitada.
- Poste um teste privado/de baixo risco por plataforma, ou um rascunho, antes do calendário começar.
- Uso de recursos após um dia:
docker stats --no-stream.
Calendário
- Vincule o calendário de postagens a eventos reais de lançamento, não a datas fixas: pré-lançamento (sem chamada para ação de download, sem preço), depois o lançamento de cada loja, depois ambos ao vivo. As datas de revisão da loja mudam; reancore o calendário quando isso acontecer.
- Verifique cada afirmação em uma postagem em relação ao build enviado e cada chamada para ação em relação ao que está realmente ativo em cada loja.
- Stories com enquetes, links ou adesivos de contagem regressiva não podem ser publicados por meio da API; publique-os no aplicativo.
Pontos de decisão que precisam de aprovação humana
Criação de contas de marca, portfólio de negócios, Página do Facebook; exposição de um serviço local por meio de um túnel; compra de créditos de API e o limite de gastos; quais contas pessoais nunca podem ser conectadas; conversão de uma conta pessoal; exclusão de volumes ou dados do Docker.
Armadilhas comuns
- Conectar a conta pessoal do Instagram porque o pop-up OAuth reutilizou a sessão do navegador.
- Assumir que a configuração antiga apenas com Login do Instagram existe em um novo aplicativo Meta.
- Adicionar casos de uso de publicação ao aplicativo Meta que é enviado dentro do aplicativo móvel.
- Elasticsearch deixado na pilha quando a visibilidade SQL do Temporal é suficiente.
- O arquivo compose upstream capturando uma porta já usada por outro serviço local.
- Chave do X salva do rótulo errado ("Segredo da Chave do Consumidor", não o título do diálogo).
- Calendário escrito como se o aplicativo estivesse ao vivo em ambas as lojas no dia 1.
- Fazer todas as alterações na conta do TikTok e a conexão do desenvolvedor no mesmo dia, o que aciona o limite de taxa do código de verificação.