El esquema completo está en plantillas/supabase/esquema.sql (consolidado de Minerales + endurecimiento). Todas las
tablas tienen RLS. Roles en user_roles (admin, editor, viewer) con ia_puede_editar() / ia_puede_ver().
| Tabla |
Contenido |
Acceso desde el navegador |
ia_agentes |
Configuración (una fila: índice único) |
Ver / editar según rol; pruebas_ok protegido por trigger |
ia_conocimiento |
tipo, titulo, contenido, activo, vigente_desde, vigente_hasta |
Ver / editar |
ia_documentos, ia_fragmentos |
Archivos y fragmentos con búsqueda en español |
Ver / subir |
ia_conversaciones |
Contacto (wa_id), modo agente/humano, asignado_a, datos, resumen, ráfaga (ultimo_entrante_id, respondido_hasta), opt-out y consentimiento |
Solo lectura |
ia_mensajes |
Mensajes con wa_message_id único, dirección, autor, estado de entrega |
Solo lectura |
ia_eventos |
Una fila por ejecución: acción, motivo, herramientas (incluye guardrails), modelo, tokens, latencia |
Solo lectura |
ia_leads |
Leads con datos jsonb y resumen |
Ver / editar |
ia_agente_versiones |
Snapshots de configuración activada (siguiente fase) |
Solo lectura |
whatsapp_connections |
Conexión Conecta: connection_id, phone_number_id, waba_id, token y signing key cifrados |
Ninguno (service_role) |
whatsapp_messages, whatsapp_webhook_log |
Registro crudo e idempotente del webhook |
Ninguno |
| Función |
|
ia_wa_registrar_mensaje(...) |
Upsert de conversación + mensaje; devuelve conv_id, es_nuevo, conv_modo |
ia_reclamar_turno(conversacion, wamid) |
Turno atómico por conversación (evita respuestas dobles) |
ia_wa_estado(wamid, estado) |
Estados de entrega que solo avanzan |
ia_registrar_lead(...) |
Crea el lead (cantidad numérica tolerante con ia_try_numeric) |
ia_buscar_fragmentos(agente, q, limite) |
Búsqueda en documentos (revocada a authenticated) |