diff --git a/backend b/backend new file mode 160000 index 0000000..8790ce7 --- /dev/null +++ b/backend @@ -0,0 +1 @@ +Subproject commit 8790ce70d05d0256ded89ea8fb9335afad41bfa8 diff --git a/database/migrations/006_whatsapp_assignment_queue.sql b/database/migrations/006_whatsapp_assignment_queue.sql new file mode 100644 index 0000000..1f5b734 --- /dev/null +++ b/database/migrations/006_whatsapp_assignment_queue.sql @@ -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); diff --git a/database/migrations/007_whatsapp_triage_state.sql b/database/migrations/007_whatsapp_triage_state.sql new file mode 100644 index 0000000..f9fcc7b --- /dev/null +++ b/database/migrations/007_whatsapp_triage_state.sql @@ -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); diff --git a/frontend b/frontend new file mode 160000 index 0000000..7dc07c2 --- /dev/null +++ b/frontend @@ -0,0 +1 @@ +Subproject commit 7dc07c2a806d6352d2a84c333f09974d997918b0