Runbook — Pausar / Reativar cliente¶
Três cenários diferentes com soluções diferentes:
- Pausar um lead específico (atendente humano assumiu a conversa) → label Chatwoot
pausar-ia - Pausar um agente inteiro (ex: fim de lançamento, modo perpétuo, bug crítico) →
is_active=false+ status emCLIENTES.md - Pausar um cliente inteiro (todos os agentes desse cliente) → idem, em loop nos agentes
Cenário 1 — Pausar um lead específico (humano assumiu)¶
Quando usar: Tay/Junior viu a conversa no Chatwoot e quer responder manualmente. A IA precisa parar de responder pra não atropelar.
Via Chatwoot (recomendado — operador)¶
- Abrir a conversa em
https://atendimento.gita.work/app/accounts/1/conversations/<id> - Adicionar label
pausar-iana conversa (painel lateral direito) - Responder manualmente — a IA respeita o bloqueio automaticamente
Via Redis (emergência — dev)¶
Se o label não estiver funcionando (checar crm_config.block_label do agente), dá pra setar direto:
# Engine faz isso automaticamente quando detecta mensagem "fromMe" via Uazapi,
# mas pode ser forçado via script ou re-check manual.
Como funciona por baixo¶
filters.tschecaredis.get(block:<agentId>:<remoteJid>)no início do pipeline- Quando TTL expira (padrão 6h, configurável via
block_ia_ttl_minutes), IA volta automaticamente - Follow-up também respeita o block (
follow-up.tscheca a mesma key antes de disparar) - O label
pausar-iano Chatwoot só serve pra operador humano sinalizar — quem bloqueia de fato é o Redis
Voltar a IA antes do TTL expirar¶
- Remover o label
pausar-iano Chatwoot E esperar até a próxima mensagem do lead (Redis limpa ao próximo ciclo válido) - Ou deletar a key direto no Redis (requer acesso)
Cenário 2 — Pausar um agente inteiro¶
Quando usar: - Fim de lançamento (captação dormindo até próxima janela) - Bug crítico no prompt (evitar que a IA atenda mal enquanto corrige) - Troca de estratégia (agente vai ser refatorado)
Passos¶
- Desativar no banco (via admin ou SQL):
UPDATE ai_agents
SET is_active = false
WHERE slug = '<agente-slug>';
- Atualizar status em
CLIENTES.md: mover linha do cliente pra seção "Histórico (pausado)" com nota:
| Cliente | 🔴 pausado | <data> | <agentes> | <canal> | <operador> | Pausado em <data> — motivo: <motivo> |
-
Se for um router (ex:
janaina-router), pausar também os agentes-alvo ou deixar eles "silenciosos" (sem webhook apontando). Opção: remover webhook da Uazapi temporariamente. -
Registrar em
MEMORY.mddo repo da Gita:
- [YYYY-MM-DD] Agente <slug> pausado — motivo: <motivo>. Voltar quando: <condição>.
- Atualizar
CHANGELOG.mddo cliente em~/gita/agents/<cliente>/CHANGELOG.md.
O que acontece quando is_active=false¶
- Webhooks chegam mas
getAgentConfig(slug)retorna null (verorchestrator.ts:87) - Log
webhook.agent_not_foundé registrado - Mensagem do lead não é respondida nem salva em
messages - ⚠️ Cuidado: se for o router principal, o cliente inteiro fica sem resposta. Confirmar com operador antes.
Cenário 3 — Pausar um cliente inteiro¶
Raro mas acontece (pendência financeira, fim de contrato, crise interna). É o cenário 2 aplicado em todos os agentes daquele client_name.
UPDATE ai_agents
SET is_active = false
WHERE client_name = '<Nome do Cliente>';
Checklist completo:
-
is_active=falseem todos os agentes do cliente -
CLIENTES.mdatualizado pra 🔴 pausado -
MEMORY.mdregistra data e motivo -
AGENT.mddo cliente atualizado com status -
CHANGELOG.mddo cliente registra o evento - Webhook da Uazapi removido temporariamente (opcional — se quiser evitar logs de
webhook.agent_not_found) - Ads ativos (Meta) pausados se estavam apontando pro WhatsApp desse cliente
- Comunicação ao operador humano (Tay, Junior, cliente direto)
Cenário 4 — Reativar cliente pausado¶
Reverso do Cenário 3.
UPDATE ai_agents
SET is_active = true
WHERE client_name = '<Nome do Cliente>';
Antes de reativar, checar:
- Prompt revisado (pode ter desatualizado)
- Variáveis (
modo_captacao, horários, links) atualizadas - Credenciais ainda válidas (
provider_config.gemini_api_key, token Uazapi, Chatwoot) - Webhook Uazapi reapontado (se foi removido)
- Rodar bateria de testes dry-run antes de liberar tráfego real
-
CLIENTES.mdatualizado pra 🟢 produção ou 🟡 validação -
MEMORY.mdregistra reativação - Comunicação ao operador humano
Cache do agente (atenção)¶
getAgentConfig tem TTL de 60 segundos (ver services/agent-config.ts). Após mudar is_active no banco, aguardar até 60s pra a mudança refletir em produção.
Pra forçar invalidação imediata: restart do engine no Easypanel (redeploy).
Comunicação ao operador humano¶
Sempre avisar a Tay (ou responsável do cliente) quando agente for pausado/reativado:
[pausado]
"Tay, acabei de pausar o agente <X> do cliente <Y>. Motivo: <motivo>. Estimativa pra voltar: <quando>.
Enquanto isso, quem responder lá vai precisar responder manualmente — o label `pausar-ia` do Chatwoot não é necessário porque o agente já está off."
[reativado]
"Tay, reativei o agente <X> do cliente <Y>. Testei 3 cenários em dry-run antes, tudo passou.
Pode voltar a operar normal — se quiser responder manualmente em algum lead, aplica o label `pausar-ia` nele."