Files
DeskcommCRM/lib/ai
webtecnica 4a8a65bcdd feat(agent): janela de rajada do WhatsApp configurável por agente (0498)
O debounce de rajada (mensagens do MESMO contato dentro da janela viram uma
resposta só) era só a env do worker INBOUND_DEBOUNCE_MS (default 8000, global,
invisível na tela, exige VPS). Agora vira campo opcional por agente em
'Freios de segurança': vazio = usa a env da instalação (regressão zero),
0 desliga a coalescência, teto de 60s clampa pelo leitor (debounceEfetivo).

O drain lê a config do agente da conversa (loadConversationAgentConfig, mesma
resolução do turno) e usa o debounce do agente no lugar do literal.

DoD: migration 0498 + apêndice idempotente no baseline + linha no MANIFEST;
leitor testado (default/env, campo, teto no limite); gate de consumidor de
knob atendido.
2026-09-30 10:03:31 -03:00
..

lib/ai/

Placeholder. Implementação real virá da Spec 05 — IA Conversacional + RAG + Handoff.

Escopo previsto:

  • gateway.ts — wrapper Vercel AI Gateway (fallback de provedor; observability por tenant)
  • agent.ts — orquestrador do chatbot por tenant (carrega config de ai_agents)
  • rag/
    • ingest.ts — pipeline de ingestão (FAQ + política + catálogo Nuvemshop + conversas resolvidas)
    • embed.ts — wrapper OpenAI text-embedding-3-large
    • retrieve.ts — query top-K em ai_chunks (pgvector) + reranking
  • sentiment.ts — análise binária alta/baixa frustração via Haiku 4.5
  • handoff.ts — política de transição bot → humano (threshold + audit em crm_lead_activities.type='handoff_triggered')

Strings de modelo (canônicas)

  • "anthropic/claude-sonnet-4-6" — agente principal (atendimento)
  • "anthropic/claude-haiku-4-5" — sentiment + classificação
  • "openai/text-embedding-3-large" — embeddings RAG

Prefira sempre roteamento via Vercel AI Gateway. Import direto do SDK Anthropic só como fallback.