FEAT: Adicionado bot de triagem e filas

This commit is contained in:
Rafael Alves Lopes 2026-05-19 15:26:59 -03:00
parent 036d539fe1
commit ba88d9cf0b
4 changed files with 55 additions and 0 deletions

1
backend Submodule

@ -0,0 +1 @@
Subproject commit 8790ce70d05d0256ded89ea8fb9335afad41bfa8

View File

@ -0,0 +1,41 @@
-- ============================================================
-- Migration 006: Fila e controle de atribuicao do WhatsApp
-- Tabela: whatsapp_chat_atribuicoes
-- ============================================================
-- A atribuicao passa a representar dois estados principais:
-- 1. queued: conversa esta na fila de uma area, sem atendente definido
-- 2. assigned: conversa foi assumida ou transferida diretamente para um atendente
--
-- A janela de atendimento e controlada por expires_at. Ao expirar, a aplicacao
-- trata a proxima mensagem como um novo ciclo de conversa.
ALTER TABLE whatsapp_chat_atribuicoes
ALTER COLUMN user_id DROP NOT NULL,
ALTER COLUMN area_id DROP NOT NULL;
ALTER TABLE whatsapp_chat_atribuicoes
ADD COLUMN IF NOT EXISTS status VARCHAR(40) NOT NULL DEFAULT 'assigned',
ADD COLUMN IF NOT EXISTS conversation_started_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
ADD COLUMN IF NOT EXISTS expires_at TIMESTAMP WITH TIME ZONE DEFAULT (CURRENT_TIMESTAMP + INTERVAL '24 hours'),
ADD COLUMN IF NOT EXISTS transfer_note TEXT,
ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP;
UPDATE whatsapp_chat_atribuicoes
SET
status = CASE
WHEN user_id IS NULL THEN 'queued'
ELSE 'assigned'
END,
conversation_started_at = COALESCE(conversation_started_at, assigned_at, CURRENT_TIMESTAMP),
expires_at = COALESCE(expires_at, assigned_at + INTERVAL '24 hours', CURRENT_TIMESTAMP + INTERVAL '24 hours'),
updated_at = COALESCE(updated_at, assigned_at, CURRENT_TIMESTAMP);
CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_area_status
ON whatsapp_chat_atribuicoes (area_id, status);
CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_user_status
ON whatsapp_chat_atribuicoes (user_id, status);
CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_expires_at
ON whatsapp_chat_atribuicoes (expires_at);

View File

@ -0,0 +1,12 @@
-- ============================================================
-- Migration 007: Estado de triagem automatica do Omnino
-- Tabela: whatsapp_chat_atribuicoes
-- ============================================================
ALTER TABLE whatsapp_chat_atribuicoes
ADD COLUMN IF NOT EXISTS routing_attempts INTEGER NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS last_routed_message_id VARCHAR(255),
ADD COLUMN IF NOT EXISTS last_bot_sent_at TIMESTAMP WITH TIME ZONE;
CREATE INDEX IF NOT EXISTS idx_whatsapp_atribuicoes_triage
ON whatsapp_chat_atribuicoes (status, routing_attempts);

1
frontend Submodule

@ -0,0 +1 @@
Subproject commit 7dc07c2a806d6352d2a84c333f09974d997918b0