v1.0

mychat-api

Chat financiero con IA embebible. RAG sobre documentos CMF.

Demo interactivo

Configura el widget y haz clic en la burbuja para probarlo. La UI se renderiza completa; enviar mensajes requiere un backend activo.

El widget aparece en la esquina inferior. Cambia las opciones y haz clic en "Aplicar".

Capacidades

🔍

RAG sobre documentos CMF

Busca en Hechos Esenciales, FECU, Memorias y Analisis. Citas con pagina exacta.

📊

Datos estructurados

FondosChile: function calling sobre API de fondos mutuos y de inversion.

🎨

Temas configurables

Dark/light + color de acento personalizable para matching visual con tu app.

SSE Streaming

Respuestas token-a-token en tiempo real. Markdown renderizado.

🔒

Multi-tenant

Aislamiento por tenant via JWT. Rate limiting por usuario.

👍

Feedback integrado

Thumbs up/down en cada respuesta. Analytics de satisfaccion.

Integracion

1. Cargar el widget

<script src="https://chat-api.mychat.cl/widget/mychat-widget.js"></script>

2. Inicializar

// Obtener token via tu backend (token-exchange)
const token = await exchangeToken(parentJWT);

MyChatWidget.init({
  apiUrl: 'https://chat-api.mychat.cl',
  token: token,
  tenant: 'alertacmf',       // o 'fondoschile'
  theme: 'dark',              // 'dark' | 'light'
  accentColor: '#4f46e5',     // Color hex de tu marca
  position: 'bottom-right',   // 'bottom-right' | 'bottom-left'
});

3. Token exchange (backend → backend)

// Tu backend llama a mychat-api para intercambiar el JWT de tu app
const response = await fetch('https://chat-api.mychat.cl/api/auth/token-exchange', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    token: parentAppJWT,     // JWT firmado con tu JWT_SECRET
    tenant: 'alertacmf'
  })
});
const { token } = await response.json();
// Retorna `token` al frontend para inicializar el widget

4. Actualizar contexto (SPA)

// Cuando el usuario navega a otra pagina en tu SPA:
MyChatWidget.updateContext({
  pageType: 'fund_detail',
  fundId: 123,
  fundName: 'Fondo Alpha',
});

5. Destruir

MyChatWidget.destroy();

API Reference

Auth

POST /api/auth/token-exchange Intercambiar JWT de app padre

Conversations

POST /api/conversations Crear conversacion
GET /api/conversations Listar conversaciones del usuario
DELETE /api/conversations/{id} Eliminar conversacion

Messages

POST /api/conversations/{id}/messages Enviar mensaje (SSE streaming)
GET /api/conversations/{id}/messages Listar mensajes
POST /api/messages/{id}/rate Calificar respuesta (thumbs up/down)

Documents

POST /api/documents/upload Subir PDF (max 50MB)
GET /api/documents Listar documentos del tenant

Webhook

POST /api/webhook/notify Push de documentos (server-to-server)

Admin

GET /api/admin/analytics Dashboard de uso
GET /api/admin/analytics/queries Queries populares
GET /api/admin/analytics/satisfaction Satisfaccion de usuarios
GET /api/admin/analytics/conversations Metricas de conversaciones

MyChatWidget.init() — opciones

OpcionTipoRequeridoDefaultDescripcion
apiUrlstringSiURL base de mychat-api
tokenstringSiJWT obtenido via token-exchange
tenantstringSi'alertacmf' o 'fondoschile'
themestringNo'dark''dark' o 'light'
accentColorstringNo'#4f46e5'Color hex para branding
positionstringNo'bottom-right''bottom-right' o 'bottom-left'
pageContextobjectNoContexto de pagina (FondosChile)

Rate limits

EndpointLimiteKey
Token exchange10/minIP
Chat messages60/minuser:tenant
Otros endpoints120/minuser:tenant

Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset