Secretária IA — Auditoria de Inconsistências e Roadmap de Correções #14
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
🔍 Contexto
Auditoria completa do ecossistema de IA/Chatbot/Secretária Virtual realizada em 12/05/2026. Foram identificados dois sistemas de IA paralelos sem integração, gaps críticos na entrega automática de respostas via WhatsApp, e ausência de feedback visual no inbox.
🏗️ Arquitetura Atual
backend/src/modules/chatbot/chatbot.service.tsplugins/secretaria/brain.tsplugins/ext-api/backend/routes.ts/secretaria/ask— ponto de entrada externoProblema central: A Secretária IA não tem loop automático. Para funcionar end-to-end, depende de:
/api/ext/v1/secretaria/askreplye chama/api/ext/v1/send-textseparadamenteSe qualquer um desses passos falhar (sem webhook, sem API key ext-api), a secretária fica completamente muda.
🚨 P0 — Crítico (bloqueiam funcionamento)
[SEC-01] Secretária não envia reply automaticamente via WhatsApp
plugins/ext-api/backend/routes.ts:738-750:/secretaria/askretorna{ reply }mas NÃO chamasock.sendMessage()de voltabrain.chat(), chamarmanager.getSocket(instanceId)?.sendMessage(jid, { text: reply })e persistir a mensagem[SEC-02] Secretária não é disparada automaticamente por mensagens recebidas
MessageHandler.ts:703-714: só chamachatbotService(chatbot rápido), nunca oProtocolEnginePOST /api/ext/v1/secretaria/askpor webhook externohooks.on('ext:message.new')dentro do plugin secretaria[SEC-03] Secretária e Chatbot Rápido podem disparar ao mesmo tempo
⚠️ P1 — Alto (degradam UX)
[SEC-04] Indicador visual de "bot ativo/pausado" ausente no inbox
chatStore.ts:415-416: eventobot:escalatedatualizachat.botPaused = trueno store, mas nenhum componente exibe issofrontend/components/ChatListItem.tsx: sem badge, ícone ou cor diferente para chats com bot pausadoChatListItem.tsxquandochat.botPaused === true[SEC-05] botPaused não é mapeado na bridge legada
hooks/inbox/useNewInboxBridge.ts:chatToLegacy()não incluibotPausedno objeto retornadobot_paused: c.botPausednochatToLegacy()[SEC-06] ChatbotService usa apenas Gemini — sem fallback
chatbot.service.ts:9: importaGoogleGenerativeAIhardcodedAICredentialsuportaLLMProvider.OPENAImas o service nunca usa OpenAIProtocolEngine.callAI()do plugin secretaria[SEC-07] LLMProvider enum desalinhado entre chatbot e secretaria
enum LLMProvider { GEMINI, OPENAI }openai, anthropic, gemini, ollama/api/chatbot/*🔧 P2 — Médio (melhorias funcionais)
[SEC-08]
/secretaria/askcria nova conversa sem verificar se instância está conectadaext-api/routes.ts:705-724: criasec_conversationcomext_chat_idmas não valida se a instância WA estáCONNECTED[SEC-09] POST /chatbot/bots/:instanceId retorna 409 sem mensagem amigável
chatbot.routes.ts: constraint@@unique([tenantId, instanceId])causa 409 quando já existe bot[SEC-10] credentialId não é validado no POST /bots
chatbot.routes.ts: cria bot comcredentialIdsem verificar se pertence ao mesmotenantIdAICredential.tenantId === req.tenantIdantes de criar[SEC-11] Secretária não persiste mensagens no banco principal (Prisma)
brain.ts: armazena mensagens emsec_messages(SQLite via Knex) — tabela separada do DB principalsock.sendMessage(), criar registro emprisma.messageigual ao queChatbotServicefaz (linhas 175-188 do chatbot.service.ts)[SEC-12] Resumo
botSummarynão é resetado ao retomar botchatbot.repository.ts:chatBotState.resumeBot(): só mudabotPaused = false, não limpabotSummarybotSummarycomo stale ao retomar📊 P3 — Baixo (observabilidade)
[SEC-13] Sem telemetria de tokens no ChatbotService
chatbot.service.ts: não registrainputTokens,outputTokenspor chamadaconv.total_tokens[SEC-14] Sem indicador de "Respondendo..." enquanto IA processa
chat:typingantes de chamar a IA e cancelar após[SEC-15] Página
/botse página/secretariasem unificação📁 Arquivos Envolvidos
backend/src/modules/chatbot/chatbot.service.tsbackend/src/modules/chatbot/chatbot.routes.tsbackend/src/modules/whatsapp/handlers/MessageHandler.tsplugins/secretaria/brain.tsplugins/ext-api/backend/routes.tsfrontend/components/ChatListItem.tsxfrontend/hooks/inbox/useNewInboxBridge.tsfrontend/pages/bots/index.tsxfrontend/pages/secretaria/index.tsxAICredential/AIBot✅ Componentes Consistentes (sem ação necessária)
Chat.botPaused/Chat.botSummaryno schema Prisma ✅MessageHandler → ChatbotServiceviasetImmediate()✅bot:escalatedvia Socket.IO ✅chatStore.tsrecebe e processabot:escalated✅ProtocolEngine(agendar, escalar, encerrar) ✅ProtocolEngine✅/sec/handoff/:chatIdpara controle manual ✅