Volver a la wiki

Tabla D1 correo_digests

Descripción

Tabla D1 que almacena los informes periódicos de buzón Zoho publicados por cada miembro via POST /api/correo/digest.

Archivo de migración: migrations/0050_correo_digests.sql

Modelo de datos: una fila por pasada y miembro; retención 30 días (poda automática en cada POST).

Esquema

CREATE TABLE IF NOT EXISTS correo_digests (
  id           INTEGER PRIMARY KEY AUTOINCREMENT,
  owner        TEXT NOT NULL,                       -- 'Edu' | 'Dani' | 'Txell'
  generated_at TEXT NOT NULL,                       -- timestamp ISO 8601 de la pasada
  resumen      TEXT,                                -- una línea de resumen (opcional)
  ruido_count  INTEGER NOT NULL DEFAULT 0,          -- nº mensajes clasificados como ruido
  payload      TEXT NOT NULL,                       -- JSON: items actúa/entérate
  created_at   TEXT NOT NULL DEFAULT (datetime('now'))
);

CREATE INDEX IF NOT EXISTS idx_correo_digests_owner
  ON correo_digests(owner, created_at DESC);

Columnas

ColumnaTipoNullableDescripción
idINTEGERNOClave primaria auto-incrementante.
ownerTEXTNOMiembro del staff (‘Edu’, ‘Dani’, ‘Txell’). Fijado por autenticación en el endpoint.
generated_atTEXTNOTimestamp ISO 8601 de cuándo se ejecutó la pasada de /correo. Lo proporciona el skill.
resumenTEXTSÍLínea de resumen (ej: “6 actúa, 12 entérate, 8 urgentes”). Opcional.
ruido_countINTEGERNOCantidad de mensajes filtrados como ruido/spam. Default 0.
payloadTEXTNOJSON serializado con los items del informe. Array de DigestItem.
created_atTEXTNOTimestamp ISO 8601 de inserción (autogenerado).

Índice

Privacidad y retención

Decisión del grill (12-08-2026):

Estructura del payload JSON

interface DigestItem {
  nivel: 'actua' | 'enterate';   // categoría: acción requerida o informativo
  urgente?: boolean;              // true → alerta general del workspace
  remitente: string;              // máx 500 chars
  asunto: string;                 // máx 500 chars
  porque: string;                 // síntesis "por qué importa", máx 500 chars
  zoho_link?: string;             // URL del mensaje original en Zoho, máx 500 chars
}

Ejemplo:

[
  {
    "nivel": "actua",
    "urgente": true,
    "remitente": "CEO <ceo@example.com>",
    "asunto": "Aprobación presupuesto Q4",
    "porque": "Decisión crítica, deadline mañana",
    "zoho_link": "https://crearack.zohomail.com/mail/...#id=123456"
  },
  {
    "nivel": "enterate",
    "remitente": "Noticias <news@example.com>",
    "asunto": "Resumen semanal",
    "porque": "Solo informativos"
  }
]

Máximo 50 items por pasada. Campos truncados a 500 caracteres en el endpoint.

Uso desde el endpoint

Ver [[entity—functions—endpoint—correo-digest]].

INSERT (POST)

INSERT INTO correo_digests (owner, generated_at, resumen, ruido_count, payload)
  VALUES (?, ?, ?, ?, ?)

SELECT (GET)

SELECT owner, generated_at, resumen, ruido_count, payload, created_at
  FROM correo_digests
  WHERE owner = ?
  ORDER BY created_at DESC, id DESC
  LIMIT 1

DELETE (poda automática)

DELETE FROM correo_digests
  WHERE owner = ?
  AND created_at < datetime('now', '-30 days')

Integraciones

Migración aplicada

✅ Ya aplicada a D1 remota en la sesión de deploy (12-08-2026).

Véase también

Subir