NAiOSOmni Web
omnichat-webv0.1.0Afegeix un xatbot incrustable (widget de xat) a NAiOSOmni. Enganxa un <script> en qualsevol web i el visitant conversa amb el teu agent; apareix com un canal més a la safata d'entrada unificada.
Descripció
Connector acoblat a NAiOSOmni: registra un driver 'web-widget' al ChannelRegistry perquè qualsevol web pugui incrustar un xatbot. El transport és long-polling stateless (segur amb Passenger multi-worker): el visitant fa POST del seu missatge i consulta les respostes del bot/operador des de la BD. Tota la resta (agents de l'assistent, bucle d'eines, captura de leads al CRM, webhooks, safata d'entrada, panells, compartició) s'hereta del nucli sense canvis d'esquema. Allò específic de la web (visitor_id, pàgina d'origen, user-agent, referrer) va a media_meta JSON; l'aparença, els dominis CORS i el subpressupost diari fins a driver_config.
Funcionalitats (3)
Un <script> a la web del client i la bombolla de xat apareix. Zero dependències, Shadow DOM aïllat.
L'agent de l'assistent, les eines, la captura de leads al CRM i la safata d'entrada unificada s'hereten tal qual.
Long-polling stateless + CORS per domini + límit de peticions per IP + subpressupost diari de tokens.
Changelog
- MVP (Fases 0-6) — driver 'web-widget' registrat al ChannelRegistry de NAiOSOmni
- Vinculació per incrustació: startPairing() retorna el <script> per copiar + pàgina de configuració del widget (branding + dominis CORS)
- Transport d'entrada públic: POST /p/omnichat-web/:channelId/message normalitza i emet omnichat.message.received
- Transport de sortida long-polling: sendMessage() persisteix a BD; GET /poll retorna missatges nous del bot/operador
- Widget incrustable widget.js: vanilla, Shadow DOM, llançador+panell+compositor, persistència a localStorage, branding per canal
- Seguretat en 3 capes: subpressupost diari a BD (PRE-IA) + límit de peticions per IP + llista blanca CORS per canal
- Safata d'entrada: insígnia/icona 'web', pàgina d'origen al fil; traspàs bàsic (estat 'un agent s'unirà' + avís per correu a l'owner)