Cómo configurar la Content-Security-Policy (CSP) de tu sitio para que el chat de Cliengo funcione
Si tu sitio web tiene activada una Content-Security-Policy (CSP), es necesario autorizar los dominios de Cliengo para que el chat funcione correctamente. En este artículo encontrarás la lista exacta de dominios, una política lista para copiar y cómo aplicarla según tu servidor o plataforma.
¿Este artículo es para ti?
Sí, si te ocurre alguno de estos casos:
- Un análisis de seguridad de tu sitio te indicó que "falta la Content-Security-Policy".
- Instalaste el widget de Cliengo y el chat no aparece, aparece un instante y desaparece, o carga pero no conecta.
- Tu equipo de seguridad activó una política CSP y desde entonces el chat dejó de funcionar.
En resumen: la CSP es una regla de seguridad de tu propio sitio web (no del chat de Cliengo). Cuando está activa, debes autorizar los dominios de Cliengo para que el chat pueda cargarse.
Dominios que utiliza el widget de Cliengo
| Dominio | Para qué se usa | Directiva |
|---|---|---|
lw2.cliengo.com |
Carga del widget y el iframe donde se muestra el chat | script-src y frame-src |
s.cliengo.com |
Componentes del chat y conexión | script-src, connect-src |
web-broker.cliengo.com |
Mensajes en vivo (envío y recepción) | connect-src (wss:// y https://) |
*.chatbot.cliengo.com |
Conexión del chatbot | connect-src (wss://) |
res.cloudinary.com |
Imágenes, avatares y logos del chat | img-src |
Tip: la mayor parte del funcionamiento del chat ocurre dentro del iframe de
lw2.cliengo.com, que tiene su propia política. Lo imprescindible en tu sitio es habilitarlw2.cliengo.comenscript-srcy enframe-src.
Política mínima compatible con Cliengo
El chat funciona incluso si tu sitio ya tiene default-src 'self'. Estas reglas se suman a tu política actual (no la reemplaces):
script-src 'self' 'unsafe-inline' https://lw2.cliengo.com https://s.cliengo.com;
frame-src https://lw2.cliengo.com;
connect-src 'self' https://s.cliengo.com https://web-broker.cliengo.com wss://web-broker.cliengo.com wss://*.chatbot.cliengo.com;
img-src 'self' data: https://res.cloudinary.com https://*.cliengo.com;
style-src 'self' 'unsafe-inline';
Importante:
frame-src https://lw2.cliengo.comes la línea más importante. Sin ella, si tu sitio tienedefault-src 'self', el chat no llega a mostrarse.
(Opcional) Silenciar las advertencias de analítica
El widget carga Google Tag Manager / Google Analytics. Si no lo permites, el chat funciona igual (se trata solo de medición), pero la consola del navegador mostrará avisos de CSP de dominios de Google. Para silenciar la mayoría, agrega lo siguiente a cada directiva (donde dice ... van los valores que ya tenías):
script-src ... https://www.googletagmanager.com https://www.google-analytics.com https://*.doubleclick.net;
img-src ... https://www.googletagmanager.com https://www.google-analytics.com https://www.google.com https://*.doubleclick.net;
connect-src ... https://www.googletagmanager.com https://www.google-analytics.com https://*.doubleclick.net https://www.google.com;
Ten en cuenta: no es posible garantizar una consola 100% limpia con la analítica activa. Si tienes Google Ads vinculado, el píxel de conversión se comunica con www.google. + el dominio del país del visitante (por ejemplo, www.google.com.gt o www.google.de). La CSP no permite comodines para el dominio de país, por lo que no se pueden listar todos. Si necesitas una consola sin avisos para tus mercados, agrega explícitamente https://www.google.<país> de cada uno a img-src. De lo contrario, puede quedar un aviso por país en img-src, que es solo visual y no afecta al chat.
Cómo aplicarla según tu servidor o plataforma
Apache (archivo .htaccess o configuración del servidor):
Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' https://lw2.cliengo.com https://s.cliengo.com; frame-src https://lw2.cliengo.com; connect-src 'self' https://s.cliengo.com https://web-broker.cliengo.com wss://web-broker.cliengo.com wss://*.chatbot.cliengo.com; img-src 'self' data: https://res.cloudinary.com https://*.cliengo.com; style-src 'self' 'unsafe-inline';"
Nginx (dentro del bloque server):
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' https://lw2.cliengo.com https://s.cliengo.com; frame-src https://lw2.cliengo.com; connect-src 'self' https://s.cliengo.com https://web-broker.cliengo.com wss://web-broker.cliengo.com wss://*.chatbot.cliengo.com; img-src 'self' data: https://res.cloudinary.com https://*.cliengo.com; style-src 'self' 'unsafe-inline';" always;
Cloudflare: ve a Rules → Transform Rules → Modify Response Header, elige Set static, usa el nombre Content-Security-Policy y pega como valor la política de arriba.
WordPress u otros CMS: pega la política en la sección "Content-Security-Policy" de tu plugin de cabeceras o de seguridad.
Prueba primero sin bloquear (modo "solo aviso")
- Aplica la política usando la cabecera
Content-Security-Policy-Report-Only. En este modo el navegador no bloquea nada, solo avisa. - Abre tu sitio y presiona F12 para abrir las herramientas del navegador. Ve a la pestaña Console.
- Abre el chat, envía un mensaje y espera la respuesta del bot.
- Si no aparecen avisos de CSP (más allá de los de analítica, que son opcionales), cambia la cabecera a
Content-Security-Policypara activar la política de forma real.
CSP estricta (sin 'unsafe-inline'): qué es posible hoy
Muchos equipos de seguridad prefieren evitar 'unsafe-inline'. Para hacerlo, es importante tener en cuenta lo siguiente:
1. El código de instalación de Cliengo es un script en línea (inline). Si tu script-src no incluye 'unsafe-inline' (ni un hash o nonce), el navegador bloquea el código de instalación y el chat no aparece. Para usar una CSP estricta y que el chat cargue, permite el código de instalación de una de estas formas:
- Opción A — Moverlo a un archivo propio (la más simple): copia el contenido del código de instalación a un archivo
.jsde tu sitio y cárgalo con<script src="/tu-ruta/cliengo.js"></script>. Así queda cubierto porscript-src 'self'. - Opción B — Hash: agrega el
'sha256-…'del código de instalación ascript-src. Este código es fijo para cada sitio, por lo que su hash no cambia. - Opción C — Nonce: usa
<script nonce="XYZ">y agrega'nonce-XYZ'ascript-src(tu servidor debe generar un nonce nuevo en cada respuesta).
2. Estilos: el widget aplica estilos al cargarse, por lo que style-src 'unsafe-inline' sigue siendo necesario.
3. Analítica con CSP estricta: el widget también agrega un script de Google Analytics que cambia en cada visita, por lo que no se puede autorizar con hash ni nonce. Con una CSP estricta, ese script queda bloqueado: la analítica no se inicia y en la consola verás el mensaje Uncaught ReferenceError: gtag is not defined. Este mensaje no es un error de CSP y no afecta al chat.
En resumen: con una CSP estricta puedes tener el chat funcionando (usando la opción A, B o C para el código de instalación, más style-src 'unsafe-inline'), aceptando que la analítica del widget no se ejecutará.
Problemas frecuentes
| Qué ves | Qué falta / cómo resolverlo |
|---|---|
| El chat no aparece, o aparece un instante y desaparece | Falta frame-src https://lw2.cliengo.com. Es el error más común cuando tu sitio ya tiene default-src. |
El chat no carga y tu CSP no tiene 'unsafe-inline' |
El código de instalación quedó bloqueado. Muévelo a un archivo propio o permítelo con hash o nonce (ver "CSP estricta"). |
| El chat no carga (caso general) | Agrega https://lw2.cliengo.com y https://s.cliengo.com a script-src. |
| El chat carga pero no conecta | Agrega web-broker.cliengo.com y *.chatbot.cliengo.com a connect-src (incluyendo wss://). |
| No se ven las imágenes, avatares o el logo | Agrega https://res.cloudinary.com a img-src. |
| El chat se ve descuadrado | Agrega 'unsafe-inline' a style-src. |
La consola muestra avisos de googletagmanager, google-analytics, doubleclick o www.google.<país> |
Corresponden a la analítica del widget y no afectan al chat. Puedes silenciarlos con el bloque opcional de analítica o ignorarlos. |
La consola muestra ReferenceError: gtag is not defined |
Tienes una CSP estricta y la analítica no se inició. No es un error de CSP y no afecta al chat. |
Un error Refused to… que menciona CSP |
El mensaje indica el dominio y el tipo de recurso bloqueado. Agrégalo a la directiva correspondiente. |
Historial de cambios
| Fecha | Cambio |
|---|---|
| 14/10/2026 | Bloque opcional de analítica: se agregó https://*.doubleclick.net a script-src y https://www.google.com a connect-src. |
| 08/10/2026 | Bloque opcional de analítica: se agregó https://*.doubleclick.net a img-src y connect-src, y la aclaración sobre los dominios de Google por país. Sección de CSP estricta: se explican las tres formas de permitir el código de instalación (archivo propio, hash o nonce). |
| 28/09/2026 | Se agregó frame-src https://lw2.cliengo.com, necesario para que el chat se muestre. |
| 11/09/2026 | Primera versión de la lista de dominios. |
¿Sigues con problemas?
Contacta a nuestro equipo de soporte e incluye:
- El error que aparece en la consola del navegador (F12 → Console) que menciona "CSP" o "Refused to…".
- La URL de la página donde está instalado el widget.
Artículo relacionado: ¿Cómo instalar Cliengo en mi propio sitio?