publicar-instagram · git:20260908.f78425b · 2026-09-08 · sha256 9b694a7afc882d57

publicar-instagram git:20260908.f78425bA

Immutable. This exact content never changes and is served at /api/v1/blob/9b694a7afc882d57.

---
name: publicar-instagram
description: >
  Publica carrosséis e posts no Instagram e TikTok direto do Claude Code.
  Suporta dois métodos: Post for Me (mais simples, multi-plataforma) ou
  Graph API do Instagram (direto, sem intermediário).
  Inclui setup guiado na primeira vez pra configurar credenciais.
  Use quando o usuário mencionar "publicar", "postar no instagram", "publicar carrossel",
  "publicar no tiktok", "postar isso", ou pedir pra enviar imagens pro Instagram/TikTok.
---

# /publicar — Publicar no Instagram e TikTok

## Setup (primeira vez)

Na primeira vez, guiar o usuário pra escolher e configurar o método de publicação.

### Perguntar o método

> "Pra publicar direto do Claude Code, tu tem duas opções:
>
> **1. Post for Me** (recomendado)
> - Publica no Instagram, TikTok e LinkedIn com uma API só
> - Setup em 5 minutos, token não expira
> - Gratuito pra uso normal
> - Site: postforme.dev
>
> **2. Graph API do Instagram** (avançado)
> - Publica direto pela API oficial do Meta/Facebook
> - Só Instagram (TikTok e LinkedIn não)
> - Token expira a cada 60 dias (precisa renovar)
> - Setup mais técnico (~15 min)
> - Gratuito
>
> Qual tu prefere?"

---

### Setup Post for Me

Se escolheu Post for Me:

1. **Criar conta:**
   > "Acessa postforme.dev, cria uma conta e conecta teu Instagram (e TikTok se quiser).
   > Depois vai em Settings > API e copia a API Key. Cola aqui."

2. **Salvar a key:**
   Receber a API key e adicionar no `.env`:
   ```
   POSTFORME_API_KEY=pfm_live_xxxxx
   ```

3. **Testar conexão:**
   ```bash
   curl -s -H "Authorization: Bearer $(grep POSTFORME_API_KEY .env | cut -d= -f2)" \
     "https://app.postforme.dev/api/v1/social-accounts?platform=instagram" | head -c 200
   ```
   Se retornar conta conectada, tá pronto. Se não, guiar o usuário pra conectar a conta no dashboard.

4. **Conferir o script de publicação:**
   `scripts/publish-postforme.js` vem dentro desta skill e roda de lá. Não copiar pra fora: assim a skill viaja inteira quando a pasta for compartilhada.

5. Confirmar:
   > "Pronto! Script de publicação instalado. Tua conta tá conectada. Pra publicar, é só chamar /publicar com as imagens."

---

### Setup Graph API

Se escolheu Graph API:

1. **Guiar configuração do Meta Developer:**
   > "Vou te guiar passo a passo. Primeiro:
   > 1. Acessa developers.facebook.com e cria um app tipo 'Empresa'
   > 2. No app, ativa o produto 'Instagram Graph API'
   > 3. Vai no Graph API Explorer (developers.facebook.com/tools/explorer/)
   > 4. Seleciona teu app e gera um token com estes escopos:
   >    - instagram_content_publish
   >    - instagram_basic
   >    - pages_read_engagement
   > 5. Cola o token aqui"

2. **Converter token pra longa duração (60 dias):**
   ```bash
   curl -s "https://graph.facebook.com/v21.0/oauth/access_token?grant_type=fb_exchange_token&client_id=APP_ID&client_secret=APP_SECRET&fb_exchange_token=TOKEN_CURTO"
   ```
   Pedir App ID e App Secret ao usuário.

3. **Pegar Instagram User ID:**
   ```bash
   curl -s "https://graph.facebook.com/v21.0/me/accounts?access_token=TOKEN_LONGO" | python3 -m json.tool
   ```
   Com o Page ID:
   ```bash
   curl -s "https://graph.facebook.com/v21.0/PAGE_ID?fields=instagram_business_account&access_token=TOKEN_LONGO"
   ```

4. **Configurar imgbb (host de imagens):**
   > "A Graph API precisa de URL pública pra cada imagem. O imgbb faz isso de graça:
   > 1. Acessa api.imgbb.com
   > 2. Cria conta e copia a API Key
   > 3. Cola aqui"

5. **Salvar tudo no `.env`:**
   ```
   INSTAGRAM_ACCESS_TOKEN=token_longo_aqui
   INSTAGRAM_USER_ID=id_aqui
   IMGBB_API_KEY=key_aqui
   ```

6. **Conferir o script:**
   `scripts/publish-graph-api.js` vem dentro desta skill e roda de lá. Não copiar pra fora.

7. **Avisar sobre renovação:**
   > "Importante: teu token do Instagram expira em 60 dias. Quando parar de funcionar, roda /publicar de novo que eu te guio pra renovar."

---

## Workflow de publicação (após setup)

### 1. Detectar o que publicar

Se o usuário chamou `/publicar` sem argumentos, verificar:
- Existe `conteudo/carrosseis/` com PNGs recentes? Se sim, oferecer publicar o mais recente
- Se não, perguntar: "O que tu quer publicar? Me passa o caminho das imagens ou roda /carrossel primeiro"

Se chamou com caminho (ex: `/publicar conteudo/carrosseis/ia-no-varejo/instagram/`):
- Usar os PNGs e o `carousel-text.md` (legenda) daquela pasta

### 2. Detectar o método configurado

Verificar `.env`:
- Se tem `POSTFORME_API_KEY` -> usar Post for Me
- Se tem `INSTAGRAM_ACCESS_TOKEN` -> usar Graph API
- Se tem os dois -> perguntar qual usar
- Se não tem nenhum -> rodar setup

### 3. Preview antes de publicar

Antes de qualquer publicação, mostrar preview:

> "Vou publicar no Instagram:
> - Imagens: slide-01.png, slide-02.png, ... slide-08.png
> - Legenda: [primeiros 200 chars]...
> - Método: Post for Me / Graph API
>
> Quer que eu faça um dry-run primeiro pra testar, ou manda direto?"

### 4. Dry-run (recomendado na primeira vez)

Os comandos abaixo rodam da raiz do sistema. Se a skill mora na pasta de um projeto, o caminho é `<pasta>/.claude/skills/publicar-instagram/scripts/...`.

```bash
# Post for Me
node --env-file=.env .claude/skills/publicar-instagram/scripts/publish-postforme.js \
  --platform "instagram" \
  --images "slide-01.png,slide-02.png,..." \
  --caption "legenda" \
  --dry-run

# Graph API
node --env-file=.env .claude/skills/publicar-instagram/scripts/publish-graph-api.js \
  --images "slide-01.png,slide-02.png,..." \
  --caption "legenda" \
  --dry-run
```

Mostrar resultado do dry-run. Se OK, perguntar:
> "Dry-run passou. Quer publicar de verdade?"

### 5. Publicar

```bash
# Post for Me — Instagram
node --env-file=.env .claude/skills/publicar-instagram/scripts/publish-postforme.js \
  --platform "instagram" \
  --images "slide-01.png,slide-02.png,..." \
  --caption "legenda"

# Post for Me — TikTok (SEMPRE como draft pro usuario escolher musica no app)
node --env-file=.env .claude/skills/publicar-instagram/scripts/publish-postforme.js \
  --platform "tiktok" \
  --images "slide-01.png,slide-02.png,..." \
  --caption "legenda tiktok" \
  --draft

# Graph API — Instagram
node --env-file=.env .claude/skills/publicar-instagram/scripts/publish-graph-api.js \
  --images "slide-01.png,slide-02.png,..." \
  --caption "legenda"
```

### 6. Confirmar

Após publicação:
> "Publicado no Instagram! [link se disponível]"

Se o usuário quiser publicar no TikTok também (e usar Post for Me), perguntar:
> "Quer publicar no TikTok também? Vai como rascunho pra tu escolher a música no app."

---

## Regras

- NUNCA publicar sem confirmação explícita do usuário
- Dry-run recomendado na primeira publicação (não obrigatório depois)
- TikTok via Post for Me: SEMPRE como draft (flag --draft)
- Se o token da Graph API expirou, guiar renovação em vez de dar erro genérico
- Legenda max: 2200 caracteres (Instagram/TikTok), 3000 (LinkedIn)
- Imagens: 2-10 (Instagram), 4-35 (TikTok)
- Nunca commitar `.env` no git (já tá no .gitignore)