-- --------------------------------------------------------------------------- -- Sincronización por id de las cinco entidades. -- -- Las tablas `conversations` y `messages` se declararon en 002_crm.sql y hasta -- ahora NADIE escribía en ellas: la bandeja consultaba el CRM en vivo en cada -- carga. Eso significa que sin red no hay bandeja, que cada visita gasta cuota, -- y que no se puede cruzar un hilo con una clienta sin volver a salir a internet. -- Aquí se añade lo que faltaba para llenarlas. -- --------------------------------------------------------------------------- ALTER TABLE messages -- De qué contacto del CRM es el mensaje, para cruzarlo con la clienta sin -- pasar por la conversación. ADD COLUMN crm_contact_id text, -- El canal tal cual lo devolvió el CRM, además del normalizado. La API da el -- tipo como número o como cadena según el endpoint, y guardar solo la versión -- traducida perdería el dato original si mañana cambia la traducción. ADD COLUMN channel_raw text; CREATE INDEX messages_crm_contact ON messages (business_id, crm_contact_id) WHERE crm_contact_id IS NOT NULL; -- Cursor de la última sincronización de conversaciones, para continuar donde se -- quedó en vez de releer las 3 213 cada vez. ALTER TABLE crm_connections ADD COLUMN conv_cursor_date bigint; -- El servicio de la plataforma, una vez publicado en el catálogo del CRM. -- MEDIDO (hallazgos 6 y 32): el catálogo del CRM está VACÍO, así que -- «sincronizar servicios» solo puede significar empujar, nunca traer. ALTER TABLE services ADD COLUMN crm_service_id text, ADD COLUMN crm_synced_at timestamptz; CREATE INDEX services_crm ON services (crm_service_id) WHERE crm_service_id IS NOT NULL; -- La cita de la plataforma, una vez escrita como evento en el calendario del -- CRM. Es distinto de `crm_opportunity_id`: la oportunidad es el embudo de -- ventas y el evento es la agenda. Una cita puede tener las dos cosas. ALTER TABLE appointments ADD COLUMN crm_event_id text; CREATE INDEX appointments_crm_event ON appointments (crm_event_id) WHERE crm_event_id IS NOT NULL; COMMENT ON COLUMN crm_sync_runs.kind IS 'contacts | appointments | conversations | one — "one" es la sincronizacion de una sola entidad por id';