📄 SCHEMA.md

← Vault

Schema — RelatoriosRS

Banco: Insights (Supabase self-hosted)


Tabelas Existentes

insights.conversations

insights.agents


Tabela Nova: insights.messages

`sql

CREATE TABLE insights.messages (

id SERIAL PRIMARY KEY,

conversation_id UUID NOT NULL REFERENCES insights.conversations(id) ON DELETE CASCADE,

chatwoot_msg_id INTEGER NOT NULL,

sender_type TEXT, -- 'User' (agente) ou 'Contact' (cliente)

sender_name TEXT,

sender_id INTEGER,

content TEXT,

message_type INTEGER, -- 0=incoming, 1=outgoing, 2=activity

created_at TIMESTAMP

);

CREATE INDEX idx_messages_conversation_id ON insights.messages(conversation_id);

CREATE INDEX idx_messages_created_at ON insights.messages(created_at);

`


Chatwoot — Schema de Origem

chatwoot_production.messages

chatwoot_production.contacts

chatwoot_production.users


Message Types (Chatwoot)

ColunaTipoDescrição
-------------------------
idUUIDPK
chatwoot_idINTEGERID da conversa no Chatwoot
chatwoot_account_idINTEGERAccount (sempre 1)
chatwoot_inbox_idINTEGERInbox
statusTEXT'open' ou 'resolved'
contact_nameTEXTNome do contato
contact_phoneTEXTTelefone
contact_emailTEXTEmail
message_countINTEGERTotal de mensagens
first_response_atTIMESTAMPPrimeira resposta do agente
created_atTIMESTAMPCriação da conversa
last_activity_atTIMESTAMPÚltima atividade
assignee_idUUIDAgente (ref: insights.agents.id)
assignee_chatwoot_idINTEGERID do agente no Chatwoot
labelsTEXTLabels
inbox_nameTEXTNome do inbox
ColunaTipo
--------------
idUUID
chatwoot_idINTEGER
nameTEXT
emailTEXT
ColunaTipoNotas
---------------------
idINTEGERPK
conversation_idINTEGERFK → conversations.id
account_idINTEGER
inbox_idINTEGER
message_typeINTEGER0=incoming, 1=outgoing, 2=activity
contentTEXTTexto da mensagem
content_typeINTEGER0=text
created_atTIMESTAMP
sender_typeVARCHAR'User' ou 'Contact'
sender_idBIGINT
source_idTEXT
ColunaTipo
--------------
idINTEGER
nameTEXT
phone_numberTEXT
emailTEXT
ColunaTipo
--------------
idINTEGER
nameTEXT
emailTEXT
ValorTipoDescrição
------------------------
0incomingMensagem do cliente
1outgoingMensagem do agente
2activityEvento do sistema (conversa criada, status mudado, etc.)


Queries Úteis

`sql

-- Contar mensagens por tipo para um agente

SELECT m.message_type, COUNT(*)

FROM messages m

JOIN conversations c ON c.chatwoot_id = m.conversation_id

WHERE c.assignee_chatwoot_id = 11

GROUP BY m.message_type;

-- Texto das últimas 5 mensagens de uma conversa

SELECT m.content, m.sender_name, m.created_at

FROM insights.messages m

WHERE m.conversation_id = 'uuid-da-conversa'

ORDER BY m.created_at DESC

LIMIT 5;

-- Conversas sem mensagens capturadas

SELECT c.id FROM insights.conversations c

LEFT JOIN insights.messages m ON m.conversation_id = c.id

WHERE m.id IS NULL;

`


Atualizado: 2026-06-26