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étodo | Ruta |
|---|---|
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
| Evento | Emisor | Consumidor |
|---|---|---|
cms.content.published | CMS/CRUD | Colbot RAG index |
cms.site_config.updated | Wizard / site-config | ISR / invalidación |
cms.form.submitted | Forms públicos | Worker → crm.deal |
crm.opportunity.converted | CRM (al marcar won) | ERP / Bot (después) |
bot.interaction.lead_captured | Bot | CRM (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.