Demo del widget d'assistent — tenant espic
Página de demostración interna (Ola 8-B — ANDAMIO, no el sitio público
de espic.ad). El widget de abajo SÍ es producto real: habla con el
gateway de espic-core (POST /web/messages → 202 →
GET /web/stream por SSE), no con el motor directamente
— la clave del motor ya no viaja al navegador.
Cómo apuntar el widget a tu instancia local
data-gatewayfija la base del gateway de espic-core (dev:http://localhost:8080, publicado solo en loopback). El widget compone{gateway}/web/messagesy{gateway}/web/streama partir de ahí — nunca pegar aquí un endpoint de/v1/answerdel motor: esa ruta directa quedó migrada en esta ola.- La precedencia real es
data-attribute> querystring >window.ESPIC_WIDGET_CONFIG> default. Esta página ya fija losdata-*en el<script>de abajo, así que para cambiarlos hay que editar ese atributo directamente. - Excepción de seguridad:
data-allowed-host(whitelist de navegación/citas) NUNCA se lee del querystring, ni aunque no exista el data-attribute — es la última línea de defensa contra alucinación de URL y solo puede fijarla quien edita el HTML de esta página. data-chipssiembra los chips de sugerencia iniciales (JSON: lista de strings; cada chip mostra i envia el seu text).data-callback="always-on-handoff"es el fallback declarado en la ola mientras core (ola13) todavía no mandakind == "handoff"en la raíz del frame SSE.
Qué esperar
- El primer mensaje del asistente identifica que es IA (Art. 50) y avisa de no introducir datos personales — siempre visible, no se puede descartar, y sigue visible aunque se recargue la página.
- Tema visual
espic: navy #0B1221 + verd #00FFBF de acento (nunca texto verde sobre blanco). El tema se aplica pordata-espic-tenanten la raíz del widget, sin parpadeo. - Los enlaces de las respuestas solo se renderizan como clicables si su host es
espic.ad(o subdominio); cualquier otra URL se muestra como texto, nunca como enlace — ni siquiera con?espic_host=en la URL. - Si el gateway no responde (caído, 404 de
/web/callbackmientras core/ola13 no está desplegado, etc.), el widget muestra un estado de error digno con botón de reintentar, nunca una pantalla rota. - Mientras hay una respuesta pendiente, el campo de texto y el botón de enviar quedan deshabilitados (evita enviar dos veces la misma consulta).
- Solo se guarda en
sessionStorageel identificador de sesión (opaco, sin PII) y si el panel está abierto — nunca el texto escrito, ni elconversation_id(que vive solo en memoria de página): recargar esta página conserva la sesión pero no repinta las burbujas anteriores (cerrar la pestaña también la termina).