Skip to main content

Storage y Event Bus — Core como mediador

Todo lo compartido (MinIO, Redis de plataforma, Keycloak, UAP) pasa por SaaSCol Core.
Aislamiento en dos ejes: tenant_id (empresa) × product (cms | bot | crm | erp | …).

ObjectStore (MinIO)

Bucket canónico: saascol.

tenants/{tenant_id}/products/{product}/{collection}/{object_id}_{name}

Ejemplos:

  • …/products/cms/pages/… — imágenes del sitio
  • …/products/bot/rag/… — docs RAG del bot de la misma empresa

APIs

MétodoRuta
GET/api/v1/storage/presigned-upload?filename=&product=&collection=
GET/api/v1/storage/signed-url?key=
POST/api/v1/storage/objects
GET/api/v1/public/assets/{tenantId}/{path…}

Env: MINIO_ENDPOINT, MINIO_ROOT_USER, MINIO_ROOT_PASSWORD, MINIO_BUCKET=saascol. Sin credenciales → MemoryStore (dev).

Event Bus

Envelope v1:

{
"schema_version": "v1",
"event": "cms.content.published",
"event_id": "…",
"occurred_at": "…",
"tenant_id": "samisaludips",
"product": "cms",
"payload": {}
}
  • Publicar: POST /api/v1/events/publish
  • Canal Redis: saascol.events.{topic}
  • Caché: saascol:t:{tenant}:p:{product}:{purpose}:{key}
  • Webhooks: header X-SaaSCol-Signature = HMAC-SHA256 del body

Catálogo usado hoy

EventoEmisorConsumidor
cms.content.publishedCMS/CRUDColbot RAG index
cms.site_config.updatedWizard / site-configISR / invalidación
cms.form.submittedForms públicosWorker → crm.deal
crm.opportunity.convertedCRM (al marcar won)ERP / Bot (después)
bot.interaction.lead_capturedBotCRM (después)

Migración Colbot

Colbot no es mediador ni cede el CognitiveBrain a Core.
Core solo conecta (storage, bus, IAM, knowledge) con aislamiento por tenant_id.

  • Handshake: GET /api/v1/bot/mediator
  • Knowledge (JWT): GET /api/v1/bot/knowledge
  • Guía completa (contratos Core + checklist de cambios futuros en el repo Bot): architecture/36-guia-migracion-colbot-a-core.md
  • Env Core: COLBOT_WEBHOOK_URL, WEBHOOK_SECRET

Ver también Handoff CRM y Notas de cierre.