
Idioma 🇪🇸 Español
Primeros pasos
Configuración
Personalización
Avanzado
Añadir comentarios en vivo integrados a documentos, libros, etc
FastComments Collab Chat permite a los usuarios resaltar y anotar cualquier contenido de texto en su sitio web, creando discusiones en hilos vinculadas a selecciones de texto específicas. Los usuarios pueden seleccionar palabras, frases o párrafos enteros para iniciar conversaciones colaborativas directamente dentro de su contenido.
Esta función es perfecta para retroalimentación editorial, entornos de lectura colaborativa, plataformas educativas, revisión de documentos y cualquier escenario en el que desee discusiones contextuales ancladas a texto específico.
Tenga en cuenta que esta documentación es específica de la funcionalidad Collab Chat. Puede añadir comentarios para contenido con muchas páginas, como libros, con thread-per-page, sin usar collab chat. FastComments tampoco cobra por página ni por hilo. Collab Chat es específicamente cuando usted quiere permitir que los usuarios seleccionen texto y comenten la sección de texto resaltada.
You can see an example here.
Primeros pasos 
Inicio rápido
Comenzar con Collab Chat es sencillo. Necesitas el script de FastComments Collab Chat, un elemento HTML que contenga el texto que deseas anotar y un objeto de configuración con tu Tenant ID.
Instalación
Añade el script de Collab Chat a tu página:

Implementación básica
Aquí tienes un ejemplo mínimo:
Run 
Replace 'demo' with your actual FastComments Tenant ID if it's not already, which you can find in your FastComments dashboard.
Cómo funciona
Una vez inicializado, los usuarios pueden seleccionar cualquier texto dentro del elemento objetivo. Tras una breve demora (3,5 segundos en escritorio), aparece un aviso que les permite iniciar una discusión. Cuando se crea una discusión, aparece un resaltado visual en el texto. Otros usuarios pueden pasar el cursor o hacer clic en el resaltado para ver y participar en la discusión. Todas las discusiones se sincronizan en tiempo real entre todos los visitantes.
Demostración en vivo
Puedes ver Collab Chat en acción en nuestra página de demostración en vivo.
Siguientes pasos
Ahora que tienes lo básico funcionando, puedes personalizar la apariencia y el comportamiento en la guía de Opciones de Configuración. Consulta la guía de Comportamiento de Selección de Texto para entender cómo funciona la selección de texto. Aprende sobre estilos y soporte de modo oscuro en la guía de Personalización. Para integraciones avanzadas, explora la Referencia de la API.
Bibliotecas frontend
Todas las bibliotecas frontend de FastComments (react, vue, angular, etc) incluyen Collab Chat.
Ejemplos 
Ejemplo básico
La forma más sencilla de usar Collab Chat es apuntar a un único contenedor de contenido. Este ejemplo muestra cómo habilitar anotaciones de texto en un artículo:
Run 
Ejemplo con ID de URL personalizado (por página de libro, artículo, etc.)
Por defecto, Collab Chat usa la URL de la página combinada con la ruta del elemento y el rango de texto para identificar conversaciones. Puedes proporcionar un urlId personalizado para tener más control sobre cómo se agrupan las conversaciones:

Esto es útil si la estructura de tus URL cambia pero quieres mantener las mismas conversaciones, o si deseas compartir las mismas anotaciones de conversación en varias páginas.
Ejemplo con modo oscuro
Si tu sitio tiene un fondo oscuro, activa el soporte de modo oscuro para asegurar que la interfaz de chat se vea correctamente:
Run 
Ejemplo con barra superior desactivada
Por defecto, Collab Chat muestra una barra superior con el conteo de usuarios y el conteo de discusiones. Puedes desactivarla:
Run 
Ejemplo con callback de recuento de comentarios
Puedes rastrear cuando se agregan o actualizan comentarios usando el callback commentCountUpdated:

Ejemplo con múltiples secciones
Puedes inicializar Collab Chat en múltiples secciones separadas de tu página. Cada sección tendrá sus propias anotaciones independientes:

Agregar comentarios en vivo a libros en línea 
Puedes inicializar Collab Chat por página si lo deseas, y tener hilos separados por página; simplemente pasa el parámetro urlId
un valor como book-one-page1. Esta configuración también funciona para el widget de comentarios normal.
Opciones de configuración 
Descripción general
FastComments Collab Chat amplía el widget de comentarios estándar de FastComments, por lo que hereda todas las opciones de configuración del widget base y añade algunas específicas para anotaciones de texto.
Configuración requerida
tenantId
Se requiere su ID de inquilino (Tenant ID) de FastComments. Puede encontrarlo en su panel de FastComments.

Opciones específicas de Collab Chat
urlId
Por defecto, Collab Chat genera un identificador único para cada conversación basado en la URL de la página, la ruta DOM al elemento y el rango de texto seleccionado. Puede sobrescribir esto con un urlId personalizado.

Esto es útil cuando la estructura de sus URL puede cambiar pero quiere mantener las mismas conversaciones, o cuando desea compartir anotaciones entre varias páginas.
topBarTarget
Controla la visualización de la barra superior que muestra el recuento de usuarios y el recuento de discusiones. Establézcalo en null para desactivar la barra superior por completo, o proporcione un elemento DOM para renderizarla en una ubicación específica.

hasDarkBackground
Habilite el estilo de modo oscuro cuando su página tenga un fondo oscuro. Esta detección es automática, pero puede ser deseable sobrescribirla.

commentCountUpdated
Una función de callback que se dispara cada vez que cambia el recuento de comentarios. Esto es útil para actualizar elementos de la UI como insignias o títulos de página.

Opciones de configuración heredadas
Dado que Collab Chat extiende el widget de comentarios estándar, puede usar cualquier opción de configuración del widget base de FastComments. Aquí hay algunas opciones comúnmente utilizadas:
locale
Establece el idioma para la interfaz del widget. FastComments admite docenas de idiomas.

readonly
Haga que todas las conversaciones sean de solo lectura. Los usuarios pueden ver las anotaciones existentes pero no pueden crear nuevas ni responder.

sso and simpleSSO
Integre con su sistema de autenticación usando Single Sign-On.

Consulte la documentación de SSO para obtener detalles completos sobre las opciones de autenticación.
maxReplyDepth
Controle cuántos niveles de profundidad pueden tener las respuestas. Por defecto, Collab Chat establece esto en 0, lo que significa que todos los comentarios son planos (sin respuestas anidadas). Puede cambiar esto si desea conversaciones en hilos.

Configuración interna
Estas opciones son establecidas automáticamente por Collab Chat y no deben ser sobrescritas:
El productId se establece automáticamente en 3 para Collab Chat. La extensión floating-chat se carga automáticamente para proporcionar la funcionalidad de la ventana de chat. El widget detecta automáticamente dispositivos móviles (pantallas de menos de 768px de ancho) y ajusta la interfaz en consecuencia.
Ejemplo completo
Aquí hay un ejemplo que muestra múltiples opciones de configuración juntas:

Para una lista completa de todas las opciones de configuración disponibles heredadas del widget base, consulte la documentación principal de configuración de FastComments.
Comportamiento de selección de texto 
Cómo funciona la selección de texto
Cuando los usuarios seleccionan texto dentro del contenedor Collab Chat, el widget captura esa selección y les permite iniciar una discusión. La selección puede ser tan pequeña como una sola palabra o tan grande como varios párrafos que abarcan diferentes elementos.
Retardo de selección
En dispositivos de escritorio, hay un retraso de 3,5 segundos entre el momento en que un usuario selecciona texto y el momento en que aparece el aviso de discusión. Esto evita que la interfaz parpadee cuando los usuarios simplemente están resaltando texto para copiar o leer. En dispositivos móviles, el aviso aparece de inmediato ya que la selección de texto es más deliberada en pantallas táctiles.
IDs de conversación únicos
Cada conversación recibe un urlId único que combina la URL de la página, la ruta del elemento del DOM y el rango de texto serializado. Esto asegura que cada selección de texto cree una conversación distinta que se pueda encontrar más tarde.
Si proporciona un urlId personalizado en su configuración, se combinará con la ruta del elemento y el rango de texto para crear el identificador final.
Resaltados visuales
Cuando existe una discusión para una selección de texto determinada, ese texto recibe un resaltado visual. El resaltado se implementa mediante colores de fondo y aparece al pasar el cursor o cuando la ventana de chat asociada está abierta.
El sistema de resaltado funciona envolviendo el texto seleccionado en un elemento especial que puede ser estilizado. Este enfoque garantiza que los resaltados sigan siendo precisos incluso cuando la estructura HTML subyacente es compleja.
Posicionamiento de la ventana de chat
Cuando un usuario hace clic en un resaltado o crea una nueva anotación, aparece una ventana de chat cerca del texto seleccionado. El widget calcula automáticamente la mejor posición para esta ventana en función del espacio disponible en la ventana gráfica.
El sistema de posicionamiento utiliza clases CSS como to-right, to-left, to-top y to-bottom para indicar en qué dirección debe extenderse la ventana de chat desde el resaltado. En dispositivos móviles (pantallas de menos de 768px de ancho), la ventana de chat siempre aparece en pantalla completa para una mejor usabilidad.
Dimensiones de la ventana de chat
Las ventanas de chat tienen 410px de ancho en escritorio con 20px de separación y una flecha visual de 16px que apunta al texto resaltado. Estas dimensiones son fijas para asegurar un comportamiento coherente, pero puede personalizar la apariencia con CSS.
Selecciones entre elementos
Los usuarios pueden seleccionar texto que abarca múltiples elementos HTML, como resaltar desde la mitad de un párrafo hasta el inicio de otro. El sistema de serialización de rangos maneja esto correctamente y resaltará todo el texto seleccionado incluso a través de los límites de los elementos.
Compatibilidad con navegadores
El sistema de selección de texto utiliza la API estándar window.getSelection() que es compatible con todos los navegadores modernos. Para versiones antiguas de Internet Explorer, recurre a document.selection para compatibilidad.
Persistencia de la selección
Una vez que se crea una conversación para una selección de texto, esa anotación persiste incluso si se recarga la página. El rango serializado y la ruta del DOM permiten que el widget restaure los resaltados en la misma ubicación exacta cuando los usuarios regresen a la página.
Esto funciona de manera fiable siempre que el contenido de su página permanezca estable. Si cambia el contenido de texto o reestructura su HTML, las anotaciones existentes pueden dejar de alinearse correctamente con el texto. Por esta razón, es mejor evitar cambios importantes en el contenido de las páginas con anotaciones activas, o considerar migrar las anotaciones cuando sean necesarios cambios en el contenido.
Personalización 
Soporte de Modo Oscuro
Modo Oscuro Dinámico
Si el modo oscuro de tu sitio se controla agregando una clase .dark al elemento body, la interfaz de Collab Chat respetará esto automáticamente sin requerir reinitialización. Los estilos del widget están diseñados para responder a la presencia de esta clase.

Estilizado personalizado con CSS
Puedes personalizar la apariencia de los resaltados, las ventanas de chat y otros elementos usando CSS. El widget añade clases específicas a las que puedes dirigirte en tu hoja de estilos.
Los resaltados de texto usan el sistema de estilo de burbujas de comentario de FastComments, por lo que cualquier personalización que hayas aplicado al widget de comentarios estándar también afectará a Collab Chat.
Personalización de la barra superior
La barra superior muestra el número de usuarios en línea y el número de discusiones. Puedes personalizar su posición proporcionando un elemento personalizado como topBarTarget:

O desactívala por completo estableciéndola en null:

Comportamiento móvil
En pantallas de menos de 768px de ancho, Collab Chat cambia automáticamente a una disposición optimizada para móvil. Las ventanas de chat aparecen a pantalla completa en lugar de flotar junto al texto, y se elimina el retraso de selección para una interacción más inmediata.
Este comportamiento está integrado y no requiere ninguna configuración. El widget detecta el tamaño de la pantalla automáticamente y se ajusta en consecuencia.
Apariencia de la ventana de chat
Las ventanas de chat tienen 410px de ancho en escritorio con una flecha de 16px apuntando al texto resaltado. Las ventanas se posicionan automáticamente según el espacio disponible en la ventana gráfica, usando clases de posicionamiento como to-right, to-left, to-top, y to-bottom.
Puedes añadir CSS personalizado para ajustar colores, fuentes, espaciado u otras propiedades visuales de estas ventanas. Las ventanas de chat usan la misma estructura de componentes que el widget estándar de FastComments, por lo que heredan cualquier personalización global que hayas aplicado.
Localización
Collab Chat admite todas las mismas opciones de localización que el widget estándar de FastComments. Establece la opción locale para mostrar el texto de la interfaz en diferentes idiomas:

FastComments admite docenas de idiomas. La configuración de locale afecta todo el texto de la interfaz, incluidos los mensajes, botones y texto de marcador de posición.
Opciones de personalización heredadas
Como Collab Chat extiende el widget de comentarios estándar, hereda todas las opciones de personalización del widget base. Esto incluye clases CSS personalizadas, traducciones personalizadas, personalización de avatar, formato de fechas y mucho más.
Consulta la documentación principal de personalización de FastComments para la lista completa de opciones de personalización disponibles.
Trabajar con fuentes personalizadas
Si tu sitio usa fuentes personalizadas, la interfaz de Collab Chat heredará esas fuentes desde el CSS de tu página. Es posible que tengas que crear una regla de personalización de widget e @import cualquier fuente en el CSS personalizado dentro de esa regla si deseas que la ventana de chat flotante use las mismas fuentes.
Sincronización en vivo 
Actualizaciones en tiempo real
Collab Chat utiliza conexiones WebSocket para sincronizar todas las conversaciones en tiempo real entre todos los usuarios conectados. Cuando alguien crea una nueva anotación, añade un comentario o elimina una discusión, todos los demás usuarios que estén viendo la misma página ven la actualización de inmediato sin necesidad de recargar.
Cómo funciona la sincronización por WebSocket
Cuando inicializas Collab Chat, el widget establece una conexión WebSocket con los servidores de FastComments. Esta conexión permanece abierta durante la sesión del usuario y escucha actualizaciones relacionadas con la página actual.
El sistema WebSocket utiliza tres tipos de mensajes de difusión para Collab Chat. El evento new-text-chat se activa cuando alguien crea una nueva anotación en la página. El evento updated-text-chat se activa cuando alguien actualiza una conversación existente. El evento deleted-text-chat se activa cuando alguien elimina una anotación.
Sistema de ID de difusión
Para evitar efectos de eco en los que los usuarios ven sus propias acciones retransmitidas de vuelta, cada actualización incluye un broadcastId único. Cuando un usuario crea o actualiza una anotación, su cliente genera un UUID para esa operación. Cuando el WebSocket retransmite la actualización a todos los clientes, el cliente de origen ignora la actualización porque coincide con su propio broadcastId.
Esto garantiza una interacción fluida en la que los usuarios ven sus cambios de inmediato en la interfaz sin esperar el viaje de ida y vuelta al servidor, al mismo tiempo que asegura que todos los demás usuarios reciban la actualización.
Conteo de usuarios en vivo
La barra superior muestra el número de usuarios que actualmente están viendo la página. Este conteo se actualiza en tiempo real a medida que los usuarios se unen y abandonan. El recuento de usuarios se proporciona a través de la misma conexión WebSocket y se incrementa/decrementa automáticamente en función de los eventos de conexión y desconexión.
Resiliencia de la conexión
Si la conexión WebSocket se cae debido a problemas de red o mantenimiento del servidor, el widget intenta reconectarse automáticamente. Durante el período de reconexión, los usuarios aún pueden interactuar con las anotaciones existentes, pero no verán actualizaciones en tiempo real de otros usuarios hasta que la conexión se restablezca.
Una vez reconectado, el widget se resincroniza para asegurarse de que no se hayan perdido actualizaciones. Esto sucede de forma transparente sin requerir intervención del usuario.
Consideraciones de ancho de banda
Los mensajes WebSocket son ligeros y contienen solo la información esencial necesaria para sincronizar el estado. Crear una nueva anotación normalmente usa menos de 1 KB de ancho de banda. El sistema también incluye agrupamiento inteligente para reducir la frecuencia de mensajes durante períodos de alta actividad.
Tus métricas de uso en el panel de FastComments rastrean pubSubMessageCount y pubSubBandwidth para que puedas supervisar la actividad de sincronización en tiempo real en tus sitios.
Sincronización entre pestañas
Si un usuario tiene la misma página abierta en varias pestañas del navegador, las actualizaciones en una pestaña aparecen inmediatamente en las otras pestañas. Esto funciona mediante el mismo mecanismo de sincronización WebSocket y no requiere ninguna configuración adicional.
Seguridad
Los mensajes WebSocket se transmiten a través de conexiones seguras (WSS) e incluyen validación del tenant para garantizar que los usuarios solo reciban actualizaciones de las conversaciones que están autorizados a ver. El servidor valida todas las operaciones antes de difundirlas para evitar acceso no autorizado o manipulación.
Referencia de la API 
Descripción general de la API
Collab Chat proporciona tres endpoints REST API para gestionar conversaciones de texto de forma programática. Estos endpoints le permiten recuperar, crear y eliminar anotaciones sin usar el widget del navegador.
Estos son endpoints públicos que autentican a los usuarios mediante cookies del navegador. No utilizan claves de API. Los usuarios deben haber iniciado sesión en FastComments en su navegador para acceder a estos endpoints.
URL base
Todos los endpoints de la API de Collab Chat se encuentran en:

Autenticación
Estos endpoints autentican a los usuarios mediante cookies del navegador. No utilizan claves de API. Los usuarios deben haber iniciado sesión en FastComments en su navegador para acceder a estos endpoints.
Obtener todas las conversaciones
Recupera todas las conversaciones de texto para una página específica.
Punto final

Parámetros
tenantId (parámetro de ruta, requerido) es su Tenant ID de FastComments.
urlId (parámetro de consulta, requerido) es el identificador de la página para la que desea recuperar las conversaciones.
Respuesta
La respuesta incluye el estado de la API, la información de la sesión del usuario actual si está autenticado, un array de conversaciones con sus IDs, URLs y rangos de texto, un identificador de URL limpiado, una bandera que indica si el usuario actual es administrador del sitio o moderador, y detalles de conexión WebSocket para la sincronización en vivo incluyendo tenantIdWS, urlIdWS, y userIdWS.
Ejemplo de solicitud

Ejemplo de respuesta

Crear conversación
Crea una nueva conversación de texto para una selección de texto específica.
Punto final

Parámetros
tenantId (parámetro de ruta, requerido) es su Tenant ID de FastComments.
El cuerpo de la solicitud debe ser JSON e incluir estos campos obligatorios.
urlId (string, requerido) es el identificador base de la página.
urlIdWithRange (string, requerido) es la URL combinada con el rango de texto, por ejemplo my-page:p:0:15,0:45{abc123}.
pageTitle (string, requerido) es el título de la página.
selector (string, requerido) es la ruta DOM al elemento que contiene el texto seleccionado.
range (string, requerido) es el rango de texto serializado en el formato startOffset:endOffset,startOffset:endOffset{checksum}.
createdFromCommentId (string, requerido) es el ID del comentario que inició este chat.
broadcastId (string, requerido) es un UUID para la sincronización en vivo para prevenir efectos de eco.
Respuesta
La respuesta incluye el estado de la API y el ID de la conversación recién creada.
Ejemplo de solicitud

Ejemplo de respuesta

Eliminar conversación
Elimina una conversación de texto existente. Este endpoint requiere permisos de administrador o moderador, o la conversación debe haber sido creada por el usuario autenticado.
Punto final

Parámetros
tenantId (parámetro de ruta, requerido) es su Tenant ID de FastComments.
chatId (parámetro de ruta, requerido) es el ID de la conversación a eliminar.
broadcastId (cuerpo de la solicitud, requerido) es un UUID para la sincronización en vivo.
Ejemplo de solicitud

Ejemplo de respuesta

Limitación de tasa
Estos endpoints están sujetos a la limitación de tasa estándar de la API de FastComments. El middleware de limitación de tasa se aplica por tenant para prevenir el abuso a la vez que permite patrones de uso normales.
Respuestas de error
Todos los endpoints devuelven códigos de estado HTTP estándar. Una respuesta 400 indica parámetros de solicitud inválidos. Una respuesta 401 significa que la autenticación falló. Una respuesta 403 indica permisos insuficientes. Una respuesta 404 significa que la conversación no se encontró. Una respuesta 429 indica que se excedió el límite de tasa.
Las respuestas de error incluyen un cuerpo JSON con detalles:

Seguimiento de uso
La creación de conversaciones incrementa su métrica de uso conversationCreateCount. Toda la actividad de sincronización por WebSocket incrementa pubSubMessageCount y pubSubBandwidth. Puede monitorizar estas métricas en su panel de FastComments bajo analytics de uso.
¿Tienes preguntas?
¡Eso es todo por FastComments Collab Chat! Si tienes alguna pregunta, necesitas ayuda con la implementación o tienes sugerencias de funciones, háznoslo saber más abajo o ponte en contacto con nuestro equipo de soporte.
Para ejemplos en vivo, visita Govscent.org que usa Collab Chat en producción.