IA nos comentários do Instagram

Respostas públicas curtas para perguntas da base e elogios, com opção de continuar no direct.

A IA fica desligada até a configuração explícita por Conta de canal. O painel oferece a mesma configuração em Automações › Instagram › IA responde comentários e em Canais. Só atende comentários de primeiro nível em posts e reels; lives, respostas em threads e comentários da própria conta são descartados. Uma Regra de comentário ativa que case sempre tem prioridade, inclusive se o envio da Regra falhar.

Configurar

GET /v1/channel_accounts/{id}/comment-ai exige agents:read. PATCH no mesmo caminho exige agents:write. Use o UUID interno da Conta de canal do Instagram; Conta e Cliente são derivados da autenticação e do canal. Sandbox não opera esta automação. Erros mantêm { error: { code, message } }. GET também retorna a configuração padrão quando não há opt-in.

Consultar a IA de comentários

curl https://botozap.com.br/api/v1/channel_accounts/5b0a9d0e-6e1a-4f3b-8c2d-1a9f6e0b7c11/comment-ai \
  -H "X-API-Key: $BOTOZAP_KEY"

Resposta 200

{
  "data": {
    "enabled": false,
    "agent_id": null,
    "daily_limit": 50,
    "status": "inactive",
    "answered_today": 0,
    "reserved_today": 0,
    "timezone": "America/Sao_Paulo",
    "gate_mode": "pre_go_live",
    "readiness": []
  }
}
Campo editávelContrato
enabledBooleano; padrão false. Ligar exige agente publicado, ativo, automático e com credencial validada.
agent_idUUID do agente do mesmo Cliente, publicado para esta Conta de canal; null limpa a seleção quando desligada.
daily_limitInteiro de 1 a 200; padrão 50. Renova à meia-noite de America/Sao_Paulo.

PATCH altera só os campos enviados e rejeita campos desconhecidos ou corpo vazio. Para ativar, envie {"enabled":true,"agent_id":"UUID_DO_AGENTE"}. agent_unavailable e credential_unavailable retornam 422; agente ou canal de outra Conta/Cliente retornam 404. plan_restricted impede ativar quando o plano não permite IA. Desligar continua disponível.

Configurar a IA de comentários

curl https://botozap.com.br/api/v1/channel_accounts/5b0a9d0e-6e1a-4f3b-8c2d-1a9f6e0b7c11/comment-ai \
  -X PATCH \
  -H "X-API-Key: $BOTOZAP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "enabled": false,
  "agent_id": null,
  "daily_limit": 75
}'

Resposta 200

{
  "data": {
    "enabled": false,
    "agent_id": null,
    "daily_limit": 75,
    "status": "inactive",
    "answered_today": 0,
    "reserved_today": 0,
    "timezone": "America/Sao_Paulo",
    "gate_mode": "pre_go_live",
    "readiness": []
  }
}

Desligada por padrão. Para ligar, envie enabled:true e agent_id de um agente publicado para o canal, ativo em modo automático e com credencial válida.

daily_limit aceita 1 a 200 (padrão 50). Campos ausentes preservam a configuração. Não aceita tokens OAuth do ChatGPT; use chave de API ou o painel.

A leitura retorna ainda status (inactive, active, testing ou paused), answered_today (respostas públicas confirmadas), reserved_today (tentativas admitidas, incluindo incertas), timezone, gate_mode e readiness (orientações legíveis). Reservas incertas continuam consumindo o teto para evitar excesso. Chegar ao teto gera um aviso para a equipe. Não há disparo retroativo dos comentários descartados pelo teto.

O gate existente do canal é respeitado: pre_go_live só admite testadores; allowlist admite testadores e contatos autorizados; open abre para todos os contatos elegíveis. Pausa e atendimento humano continuam vetando. Configurar comentários não abre o gate nem autoriza contatos. No OAuth do ChatGPT, a leitura é permitida com escopo e papel; PATCH é dashboard, pois liga uma automação pública.

Histórico, custo e reentregas

Listar comentários tratados pela IA

curl https://botozap.com.br/api/v1/channel_accounts/5b0a9d0e-6e1a-4f3b-8c2d-1a9f6e0b7c11/comment-ai/runs?page=1&per_page=30 \
  -H "X-API-Key: $BOTOZAP_KEY"

Resposta 200

{
  "data": [],
  "meta": {
    "page": 1,
    "per_page": 30,
    "total_count": 0,
    "total_pages": 1
  }
}

GET /v1/channel_accounts/{id}/comment-ai/runs exige agents:read e usa page/per_page. Ordena do mais recente para o mais antigo. Cada item contém IDs do comentário, post e execução, texto e perfil do autor, status, action, reason, reason_message, resposta pública, estados dos envios privado/público e instantes. Não expõe credenciais, reservas internas nem conteúdo nativo do provedor.

status: processing, ready, completed, skipped, failed ou unknown. action: public, private ou ignore; null se o descarte ocorreu antes da classificação. Motivos incluem answered, praise, private, offense, spam, competitor, no_knowledge, rule_won, daily_limit e os bloqueios de elegibilidade. Consulte reason_message para exibição. A execução em /ia/execucoes registra modelo, uso e motivo; a medição e o orçamento usam o mesmo ledger BYOK das DMs. Sem versão/credencial válida, o descarte fica no histórico e não cria uma execução de modelo fictícia.

As execuções deste recurso em /v1/ai/executions e nas execuções por agente ganham estimated_cost_usd, número estimado pelo ledger de preços ou null quando faltar preço/medição. O campo fica ausente nas demais execuções. finish_reason usa o prefixo comment_ai_ e descartes usam error_code=comment_ai:motivo. O source continua live, sem novo escopo.

Classificação e conferência pública usam a credencial e o modelo do agente, com prompts próprios, sem ferramentas. Preços, condições e links precisam de apoio literal na base; dados pessoais nunca vão ao público. A resposta tem até duas frases e 300 caracteres. Para detalhe, preço ausente ou dados pessoais, envia uma abertura privada fixa e só publica “Te chamei no direct 💬” após confirmar a DM. A Private Reply usa a janela de sete dias; não abre a janela normal de DM: o contato precisa responder para iniciar o atendimento normal.

O inbox durável processa após persistir o webhook. Claim por comentário e admissão atômica por etapa impedem dois envios concorrentes. Recusas comprovadas por throttle podem repetir. Timeout, rede, 5xx, retorno sem ID ou lease vencido ficam unknown e nunca são reenviados automaticamente. Eventos confirmados são reconstruídos do banco em reentregas. instagram.comment.replied mantém o envelope de comentário e usa automation.kind=instagram_comment_ai, automation.execution_id e automation.comment_id.