Skip to content

Canales

Un canal es por dónde entra una conversación a un agente. Cada agente tiene exactamente dos, creados automáticamente al crearlo:

CanalQué esPaquete
widgetEl chat flotante que embebes con <script>@nykk/ur-agent-widget
js_sdkTu propia UI, construida sobre el SDK@nykk/ur-agent-client

No se crean ni se borran: solo se editan. En el panel están en la ficha del agente, tarjeta Canales.

Qué se configura en cada uno

Habilitado. Si el canal está deshabilitado, las llamadas por esa vía devuelven 404 — el mismo código que un agente inexistente, a propósito, para no revelar qué agentes existen.

Orígenes permitidos. O bien * (cualquiera) o bien una lista explícita de orígenes (https://tutienda.com). Se comprueba contra la cabecera Origin de la petición.

Estilo (solo widget). Los colores de marca que el widget se descarga solo al arrancar, para que el <script> embebido no tenga que repetirlos. Ver Widget.

La lista de orígenes NO es autenticación

Solo evita el copia-pega del snippet en un sitio ajeno. Un cliente que no sea un navegador puede omitir la cabecera Origin o falsificarla — y de hecho, si la cabecera no viene, la petición se acepta, porque las llamadas servidor a servidor no la envían.

El freno real al abuso es el rate limit por IP y los límites por agente. No pongas detrás de un canal público nada que no puedas enseñar a cualquiera.

widget y js_sdk son el mismo protocolo

Hablan con los mismos endpoints, comparten los mismos rate limits y devuelven los mismos eventos. Se diferencian solo en dos cosas:

  1. Se habilitan y se restringen por separado. Puedes tener el widget abierto a tu dominio público y el SDK apagado, o al revés.
  2. Sus conversaciones son hilos distintos. El hilo se identifica por la terna (agente, subjectId, canal), así que el mismo usuario en widget y en js_sdk tiene dos conversaciones separadas, cada una con su memoria.

Ese segundo punto importa si migras de una vía a otra: la conversación no viaja. Un usuario que venía hablando por el widget empezará de cero al pasar al SDK.

El SDK usa js_sdk por defecto

@nykk/ur-agent-client manda por el canal js_sdk salvo que le digas otra cosa. Si integras con el SDK, es ese el que tienes que tener habilitado — no el widget.

El canal demo

En el panel, el botón Probar agente abre un chat que va por un tercer canal, demo. No tiene fila de configuración, no se restringe por origen, y es el único que recibe información de diagnóstico: qué tools se han llamado y cuántos tokens ha costado el turno.

Eso explica una asimetría que confunde al integrar: onToolEvent y onUsage del SDK nunca disparan en una integración real. No es un fallo — el backend no revela a un embed público qué tools usa un agente ni lo que cuesta. Lo mismo con el contexto de cliente, que se ignora por completo en demo.