sábado, 7 de febrero de 2026
Presentando Rooms: Audio en Vivo en Mención
Presentando Rooms: Audio en Vivo en Mención
Presentando Rooms: Audio en Vivo en Mención

La Mayor Lanzamiento de Funciones en la Historia de Mention
Hoy estamos increíblemente emocionados de anunciar Rooms — salas de audio en vivo integradas directamente en Mention. Piensa en ellas como Messenger dentro de Facebook: Rooms es una parte fundamental de la experiencia Mention, y también tiene su propia app independiente — Agora, disponible en agora.mention.earth. Esta es la función más grande que hemos lanzado, y cambia fundamentalmente lo que es Mention: de una plataforma social donde lees y escribes, a una donde puedes hablar y escuchar en tiempo real.
Rooms permite a cualquier usuario crear una sala de audio en vivo, invitar a oradores y transmitir a una audiencia ilimitada de oyentes. Piénsalo como tu propio estudio de podcast, ayuntamiento, o lugar de reunión informal — todo dentro de Mention, o a través de la app dedicada Agora.
No tomamos atajos. Construimos esto sobre WebRTC con una Unidad de Reenvío Selectiva (SFU) auto-hospedada, ejecutándose en nuestra propia infraestructura. No hay APIs de audio de terceros. No hay precios basados en el uso que nos obliguen a limitar tus conversaciones. Solo audio puro, de baja latencia y alta calidad — de nuestros servidores a tus oídos.
Vamos a sumergirnos en todo.
¿Qué Son Rooms?
Una Room es una sala de audio en vivo organizada por un usuario de Mention o Agora. Cuando creas una Room, te conviertes en el anfitrión. Le das un título, opcionalmente un tema y descripción, y luego te pones en vivo. Eso es todo — estás transmitiendo.
Otros usuarios pueden unirse a tu Room como oyentes. Escuchan todo lo que dicen los oradores en tiempo real, con una latencia de sub-segundo. Si un oyente quiere hablar, puede levantar la mano (pedir hablar), y el anfitrión puede aprobar o denegar la solicitud.
Una vez aprobado, un oyente se convierte en orador. Los oradores pueden activar su micrófono y hablar con toda la sala. El anfitrión también puede eliminar oradores en cualquier momento, devolviéndolos al estado de oyente.
Todo el flujo está diseñado para sentirse natural y sin esfuerzo:
Crear — Toca el botón "+" en la pantalla de Rooms. Dale un título y tema a tu Room.
Poner en Vivo — Pulsa "Iniciar Ahora" y estás transmitiendo. Se crea una sala LiveKit en nuestra SFU, y tu sesión de audio comienza.
Invitar y Compartir — Comparte tu Room. Aparece en el directorio de Rooms para que cualquiera se una.
Gestionar — Aprueba o deniega solicitudes de oradores. Silénciate. Elimina oradores. Tienes el control total.
Finalizar — Cuando termines, finaliza la Room. La sala LiveKit se desmantela, el estado de Redis se limpia, y la Room se archiva.
Cómo Funciona Bajo el Capó
Aquí es donde se pone interesante. Construimos Rooms con una arquitectura de doble capa que separa el plano de control del plano de medios.
Capa 1: Socket.IO — El Plano de Control
Socket.IO maneja todo lo que no es audio. Cuando te unes a una Room, tu cliente establece una conexión WebSocket con nuestro backend a través del namespace /rooms Socket.IO. Esta conexión gestiona:
Seguimiento de participantes — Quién está en la sala, sus roles (anfitrión, orador, oyente), y su estado de silencio
Solicitudes de orador — El flujo de levantar la mano, aprobar/denegar, cambio de rol
Ciclo de vida de la sala — Eventos de inicio, fin, y unirse/salir de participantes
Actualizaciones de UI en tiempo real — Indicadores de silencio, conteo de participantes, cambios en la lista de oradores
Todo el estado de la sala se persiste en Redis, no en memoria. Esto significa que si nuestro proceso de backend se reinicia, tu Room sobrevive. También significa que podemos escalar horizontalmente — múltiples instancias de backend pueden atender la misma Room a través de la publicación/suscripción de Redis.
Capa 2: LiveKit SFU — El Plano de Medios
El audio es manejado completamente por LiveKit, una Unidad de Reenvío Selectiva WebRTC de código abierto que auto-hospedamos en nuestra infraestructura de DigitalOcean.
Cuando una Room se pone en vivo, nuestro backend crea una sala LiveKit a través de la API Room Service. Cuando un cliente se une, solicita un token de acceso LiveKit de nuestro backend (POST /api/rooms/:id/token). El token codifica la identidad del usuario, el nombre de la sala, y sus permisos — ¿pueden publicar audio? ¿Pueden suscribirse?
El cliente se conecta directamente a la SFU de LiveKit sobre WebRTC. Las pistas de audio fluyen de peer-a-SFU, no de peer-a-peer. Esto es crítico para la escalabilidad — en un modelo peer-to-peer, una sala con 50 oyentes requeriría que el orador subiera 50 streams de audio separados. Con una SFU, el orador sube una vez, y LiveKit distribuye a todos los suscriptores.
Aquí es lo que LiveKit maneja para nosotros:
Negociación WebRTC — Candidatos ICE, handshake DTLS, selección de codecs
Cancelación de eco y supresión de ruido — Integrado en el stack WebRTC
Tasa de bits adaptativa — La calidad del audio se ajusta según las condiciones de la red
Publicación/suscripción de pistas — Los oradores publican su pista de micrófono; los oyentes se suscriben automáticamente
Gestión de ancho de banda — Dynacast asegura que solo reenviamos las pistas que los participantes están consumiendo realmente
¿Por Qué Auto-Hospedado?
Esto nunca fue una pregunta para nosotros. En Oxy, creemos que tus conversaciones te pertenecen — no a un proveedor de terceros que pueda registrar, analizar o monetizar tus datos de audio. El auto-hospedaje es una extensión directa de los valores que hemos mantenido desde el primer día: privacidad, independencia, y confianza.
Cuando hablas en una Room, tu voz viaja desde tu dispositivo a nuestra SFU y de regreso a los oyentes. Eso es todo. No hay procesadores de terceros en el medio. Ningún dato de audio sale de nuestra infraestructura. Ninguna empresa externa con acceso a lo que dices. No queremos depender de nadie más cuando se trata de proteger a nuestros usuarios, y nos negamos a poner tu privacidad en manos de otros.
Más allá de la privacidad, el auto-hospedaje nos da:
Verdadera independencia — No dependemos de ningún servicio externo que pueda cambiar sus términos, aumentar precios, o cerrar. Nuestra infraestructura es nuestra. Si un proveedor alojado decidiera descontinuar su servicio mañana, no afectaría a una sola Room en Mention.
Control de costos — Los servicios WebRTC alojados cobran por minuto de participante. Para una plataforma social donde las Rooms pueden durar horas con docenas de participantes, los costos escalarían rápidamente y podrían obligarnos a limitar tus conversaciones. Nuestra instancia auto-hospedada de LiveKit se ejecuta en nuestra propia infraestructura de DigitalOcean a un costo predecible.
Control total — Configuramos todo: tiempos de espera de las salas, preferencias de codec, rangos de puertos, terminación TLS. Si necesitamos ajustar el rendimiento o responder a un problema, cambiamos un archivo de configuración — no un ticket de soporte. Respondemos a nuestros usuarios, no a un proveedor.
Podríamos haber tomado el camino fácil e integrado una API alojada. Pero fácil y correcto no son siempre lo mismo. Nuestros usuarios merecen más, y el auto-hospedaje es cómo cumplimos esa promesa.
Nuestra instancia LiveKit se ejecuta como un contenedor Docker detrás de Caddy (para TLS automático vía Let's Encrypt) en un droplet dedicado en livekit.mention.earth. Los puertos UDP 50000-50200 están abiertos para el transporte de medios WebRTC, con respaldo TCP a través del servidor TURN.
Permisos Basados en Roles
Rooms tiene un sistema de permisos en capas que funciona tanto en Socket.IO como en LiveKit:
Anfitrión
El creador de la Room. Tiene control total: puede iniciar/finalizar la Room, aprobar/denegar solicitudes de orador, eliminar oradores, y por supuesto hablar. Su token de LiveKit otorga canPublish: true con canPublishSources: [MICROPHONE].
Orador
Un participante promovido por el anfitrión. Puede desactivar el silencio de su micrófono y publicar audio. Cuando el anfitrión aprueba una solicitud de orador, dos cosas suceden simultáneamente:
Socket.IO transmite el cambio de rol a todos los participantes (actualización de IU)
Nuestro backend llama a updateParticipantPermissions() en la API Room Service de LiveKit, otorgando derechos de publicación al usuario en la sala de LiveKit
Esta actualización dual asegura que la UI y la capa de medios se mantengan sincronizadas. El orador puede desactivar el silencio y comenzar a hablar inmediatamente.
Oyente
El rol predeterminado. Puede escuchar a todos los oradores pero no puede publicar audio. Su token de LiveKit tiene canPublish: false. Incluso si intentaran publicar una pista desde el lado del cliente, LiveKit lo rechazaría a nivel del servidor. La seguridad se aplica del lado del servidor, no solo en la UI.
Modos de Permiso de Orador
Al crear una Room, el anfitrión puede elegir quién está permitido para solicitar hablar:
Todos — Cualquier participante puede levantar la mano
Seguidores — Solo los usuarios que siguen al anfitrión pueden solicitar
Solo Invitados — Solo los usuarios invitados explícitamente por el anfitrión pueden hablar
Rooms en Tu Feed
Las Rooms no están aisladas en una pestaña separada. Están integradas en el tejido de Mention. Cuando creas una Room, puedes adjuntarla a una publicación — tal como lo harías al adjuntar una imagen, encuesta, o artículo.
Tus seguidores verán una tarjeta de Room en su feed. Si la Room está en vivo, la tarjeta pulsa con un indicador en vivo. Al tocar la tarjeta se ingresa inmediatamente a la Room. Si está programada, la tarjeta muestra la hora programada.
Esta fue una decisión de diseño deliberada. No queríamos que las Rooms fueran una función que tuvieras que buscar. Queríamos que surgieran naturalmente en el contenido que ya estás navegando. Una Room en vivo de alguien a quien sigues debería sentirse tan natural como ver su última publicación.
El sistema de adjuntos a publicaciones soporta todo el ciclo de vida de la Room:
Programada — La tarjeta muestra la fecha/hora, actúa como un anuncio
En Vivo — La tarjeta muestra el conteo de participantes, el indicador pulsante, acción "Unirse"
Finalizada — La tarjeta muestra que ha finalizado (futuro: enlazará a una grabación)
Multi-Plataforma desde el Primer Día
Las Rooms funcionan en web, iOS y Android desde el lanzamiento — ya sea que lo uses dentro de Mention o a través de la app independiente Agora. El SDK del cliente LiveKit maneja las diferencias entre plataformas:
Web — Usa la implementación WebRTC del navegador. Las pistas de audio remoto se adjuntan a elementos DOM de audio para su reproducción. Manejamos las políticas de reproducción automática y limpieza de elementos.
iOS y Android — Usa @livekit/react-native con react-native-webrtc en su núcleo. La gestión de sesiones de audio se maneja de forma nativa — iniciamos la sesión de audio al conectar y la detenemos al desconectar.
La IU es la misma experiencia de hoja inferior en todas las plataformas, construida con nuestro sistema de hojas existente. Abre una Room, ve a los oradores, ve a los oyentes, toca para silenciar, toca para levantar la mano. Simplemente funciona.
Estado Respaldado por Redis
En el prototipo inicial, el estado de la sala vivía en un Map de JavaScript en el proceso de backend. Si el proceso se reiniciaba, todas las Rooms activas perdían sus listas de participantes. No aceptable para producción.
Migramos todo el estado de la sala a Redis, que ya usamos para el adaptador de Socket.IO (publicación/suscripción multi-instancia) y cachés. El esquema de claves es limpio:
room:{roomId} — Metadatos de la sala (anfitrión, hora de creación)
room:{roomId}:participants — Hash de userId a rol, estado de silencio, hora de ingreso
room:{roomId}:requests — Hash de solicitudes de orador pendientes
Esto nos da operaciones atómicas sobre el estado de los participantes, capacidades automáticas de expiración, y la capacidad de inspeccionar el estado en vivo de la sala con redis-cli para depuración. También significa que nuestro backend puede escalar horizontalmente — cualquier instancia puede atender cualquier Room.
La Arquitectura de un Vistazo
Aquí está el panorama completo de cómo encaja todo junto:
Droplet de DigitalOcean — Ejecuta LiveKit SFU en Docker, con Caddy para TLS. Maneja todo el transporte de audio WebRTC.
Backend de Mention (Plataforma de Aplicaciones) — Generación de tokens, ciclo de vida de la sala, gestión de oradores, namespace /rooms de Socket.IO.
Redis — Persistencia del estado de la sala, adaptador de Socket.IO para soporte multi-instancia.
Clientes (Expo React Native + Web) — Conexión dual: Socket.IO para eventos de control, SDK de LiveKit para pistas de audio.
La separación de preocupaciones es clara. Socket.IO nunca toca los datos de audio. LiveKit nunca toca la lógica de aplicación. Redis los conecta almacenando el estado de la sala autoritativa que ambas capas referencian.
Agora: Rooms con su Propia Puerta de Entrada
Así como Messenger vive dentro de Facebook y como su propia app independiente, Rooms está integrado en Mention y también existe como Agora — una app dedicada en agora.mention.earth. Misma infraestructura, mismas salas, misma comunidad. Ya sea que abras Rooms dentro de Mention o inicies Agora directamente, estás en el mismo ecosistema. Agora simplemente le da a Rooms una experiencia centrada completamente en el audio en vivo, para usuarios que quieren sumergirse rápidamente.
Lo Que Estamos Construyendo Siguiente
Rooms se lanza hoy, pero solo estamos empezando. Aquí está lo que está en nuestra hoja de ruta:
Grabación y Reproducción — Graba tu Room y permite que las personas escuchen más tarde. LiveKit soporta salida (grabación) de forma nativa, y planeamos integrarlo para que los anfitriones puedan optar por grabar. Imagina convertir cada Room en un episodio de podcast a la carta.
Subtítulos en Vivo — Transcripción en tiempo real impulsada por IA. Sigue con texto incluso cuando no puedes escuchar con audio. Esto hará que las Rooms sean accesibles para personas sordas y con dificultades auditivas, y útil en entornos sensibles al ruido.
Co-anfitrión — Invita a otro usuario como co-anfitrión que pueda gestionar oradores y moderar la sala junto a ti. Esencial para Rooms más grandes donde un solo anfitrión no puede gestionar todo solo.
Reacciones — Los oyentes pueden enviar reacciones de emoji que flotan por la pantalla. Una forma ligera de participar sin hablar. Piensa en aplausos, risas, y manos levantadas — todo animado en tiempo real.
Rooms Programadas con Recordatorios — Programa una Room para el futuro y permite que tus seguidores establezcan recordatorios para que no se la pierdan. Enviaremos notificaciones push cuando la Room se ponga en vivo.
Analíticas de Room — Estadísticas detalladas para anfitriones: oyentes máximos, uniones totales, duración promedio de escucha, participación a lo largo del tiempo. Entiende a tu audiencia y optimiza tu contenido.
Clips — Destaca y comparte clips de audio cortos de las Rooms. Deja que tus mejores momentos vivan más allá de la sesión en vivo.
Pruébalo Ahora
Rooms está disponible hoy dentro de Mention en mention.earth y como la app independiente Agora en agora.mention.earth. Crea tu primera Room, ponla en vivo, y comienza a hablar. No podemos esperar a escuchar lo que construyes con ella.
Si eres un desarrollador interesado en cómo construimos esto, revisa el ecosistema de Oxy en oxy.so — toda nuestra infraestructura está construida internamente, desde los servicios de backend hasta la canalización de audio en tiempo real.
Bienvenido al futuro de la conversación en Mention. Bienvenido a Rooms.
La Mayor Lanzamiento de Funciones en la Historia de Mention
Hoy estamos increíblemente emocionados de anunciar Rooms — salas de audio en vivo integradas directamente en Mention. Piensa en ellas como Messenger dentro de Facebook: Rooms es una parte fundamental de la experiencia Mention, y también tiene su propia app independiente — Agora, disponible en agora.mention.earth. Esta es la función más grande que hemos lanzado, y cambia fundamentalmente lo que es Mention: de una plataforma social donde lees y escribes, a una donde puedes hablar y escuchar en tiempo real.
Rooms permite a cualquier usuario crear una sala de audio en vivo, invitar a oradores y transmitir a una audiencia ilimitada de oyentes. Piénsalo como tu propio estudio de podcast, ayuntamiento, o lugar de reunión informal — todo dentro de Mention, o a través de la app dedicada Agora.
No tomamos atajos. Construimos esto sobre WebRTC con una Unidad de Reenvío Selectiva (SFU) auto-hospedada, ejecutándose en nuestra propia infraestructura. No hay APIs de audio de terceros. No hay precios basados en el uso que nos obliguen a limitar tus conversaciones. Solo audio puro, de baja latencia y alta calidad — de nuestros servidores a tus oídos.
Vamos a sumergirnos en todo.
¿Qué Son Rooms?
Una Room es una sala de audio en vivo organizada por un usuario de Mention o Agora. Cuando creas una Room, te conviertes en el anfitrión. Le das un título, opcionalmente un tema y descripción, y luego te pones en vivo. Eso es todo — estás transmitiendo.
Otros usuarios pueden unirse a tu Room como oyentes. Escuchan todo lo que dicen los oradores en tiempo real, con una latencia de sub-segundo. Si un oyente quiere hablar, puede levantar la mano (pedir hablar), y el anfitrión puede aprobar o denegar la solicitud.
Una vez aprobado, un oyente se convierte en orador. Los oradores pueden activar su micrófono y hablar con toda la sala. El anfitrión también puede eliminar oradores en cualquier momento, devolviéndolos al estado de oyente.
Todo el flujo está diseñado para sentirse natural y sin esfuerzo:
Crear — Toca el botón "+" en la pantalla de Rooms. Dale un título y tema a tu Room.
Poner en Vivo — Pulsa "Iniciar Ahora" y estás transmitiendo. Se crea una sala LiveKit en nuestra SFU, y tu sesión de audio comienza.
Invitar y Compartir — Comparte tu Room. Aparece en el directorio de Rooms para que cualquiera se una.
Gestionar — Aprueba o deniega solicitudes de oradores. Silénciate. Elimina oradores. Tienes el control total.
Finalizar — Cuando termines, finaliza la Room. La sala LiveKit se desmantela, el estado de Redis se limpia, y la Room se archiva.
Cómo Funciona Bajo el Capó
Aquí es donde se pone interesante. Construimos Rooms con una arquitectura de doble capa que separa el plano de control del plano de medios.
Capa 1: Socket.IO — El Plano de Control
Socket.IO maneja todo lo que no es audio. Cuando te unes a una Room, tu cliente establece una conexión WebSocket con nuestro backend a través del namespace /rooms Socket.IO. Esta conexión gestiona:
Seguimiento de participantes — Quién está en la sala, sus roles (anfitrión, orador, oyente), y su estado de silencio
Solicitudes de orador — El flujo de levantar la mano, aprobar/denegar, cambio de rol
Ciclo de vida de la sala — Eventos de inicio, fin, y unirse/salir de participantes
Actualizaciones de UI en tiempo real — Indicadores de silencio, conteo de participantes, cambios en la lista de oradores
Todo el estado de la sala se persiste en Redis, no en memoria. Esto significa que si nuestro proceso de backend se reinicia, tu Room sobrevive. También significa que podemos escalar horizontalmente — múltiples instancias de backend pueden atender la misma Room a través de la publicación/suscripción de Redis.
Capa 2: LiveKit SFU — El Plano de Medios
El audio es manejado completamente por LiveKit, una Unidad de Reenvío Selectiva WebRTC de código abierto que auto-hospedamos en nuestra infraestructura de DigitalOcean.
Cuando una Room se pone en vivo, nuestro backend crea una sala LiveKit a través de la API Room Service. Cuando un cliente se une, solicita un token de acceso LiveKit de nuestro backend (POST /api/rooms/:id/token). El token codifica la identidad del usuario, el nombre de la sala, y sus permisos — ¿pueden publicar audio? ¿Pueden suscribirse?
El cliente se conecta directamente a la SFU de LiveKit sobre WebRTC. Las pistas de audio fluyen de peer-a-SFU, no de peer-a-peer. Esto es crítico para la escalabilidad — en un modelo peer-to-peer, una sala con 50 oyentes requeriría que el orador subiera 50 streams de audio separados. Con una SFU, el orador sube una vez, y LiveKit distribuye a todos los suscriptores.
Aquí es lo que LiveKit maneja para nosotros:
Negociación WebRTC — Candidatos ICE, handshake DTLS, selección de codecs
Cancelación de eco y supresión de ruido — Integrado en el stack WebRTC
Tasa de bits adaptativa — La calidad del audio se ajusta según las condiciones de la red
Publicación/suscripción de pistas — Los oradores publican su pista de micrófono; los oyentes se suscriben automáticamente
Gestión de ancho de banda — Dynacast asegura que solo reenviamos las pistas que los participantes están consumiendo realmente
¿Por Qué Auto-Hospedado?
Esto nunca fue una pregunta para nosotros. En Oxy, creemos que tus conversaciones te pertenecen — no a un proveedor de terceros que pueda registrar, analizar o monetizar tus datos de audio. El auto-hospedaje es una extensión directa de los valores que hemos mantenido desde el primer día: privacidad, independencia, y confianza.
Cuando hablas en una Room, tu voz viaja desde tu dispositivo a nuestra SFU y de regreso a los oyentes. Eso es todo. No hay procesadores de terceros en el medio. Ningún dato de audio sale de nuestra infraestructura. Ninguna empresa externa con acceso a lo que dices. No queremos depender de nadie más cuando se trata de proteger a nuestros usuarios, y nos negamos a poner tu privacidad en manos de otros.
Más allá de la privacidad, el auto-hospedaje nos da:
Verdadera independencia — No dependemos de ningún servicio externo que pueda cambiar sus términos, aumentar precios, o cerrar. Nuestra infraestructura es nuestra. Si un proveedor alojado decidiera descontinuar su servicio mañana, no afectaría a una sola Room en Mention.
Control de costos — Los servicios WebRTC alojados cobran por minuto de participante. Para una plataforma social donde las Rooms pueden durar horas con docenas de participantes, los costos escalarían rápidamente y podrían obligarnos a limitar tus conversaciones. Nuestra instancia auto-hospedada de LiveKit se ejecuta en nuestra propia infraestructura de DigitalOcean a un costo predecible.
Control total — Configuramos todo: tiempos de espera de las salas, preferencias de codec, rangos de puertos, terminación TLS. Si necesitamos ajustar el rendimiento o responder a un problema, cambiamos un archivo de configuración — no un ticket de soporte. Respondemos a nuestros usuarios, no a un proveedor.
Podríamos haber tomado el camino fácil e integrado una API alojada. Pero fácil y correcto no son siempre lo mismo. Nuestros usuarios merecen más, y el auto-hospedaje es cómo cumplimos esa promesa.
Nuestra instancia LiveKit se ejecuta como un contenedor Docker detrás de Caddy (para TLS automático vía Let's Encrypt) en un droplet dedicado en livekit.mention.earth. Los puertos UDP 50000-50200 están abiertos para el transporte de medios WebRTC, con respaldo TCP a través del servidor TURN.
Permisos Basados en Roles
Rooms tiene un sistema de permisos en capas que funciona tanto en Socket.IO como en LiveKit:
Anfitrión
El creador de la Room. Tiene control total: puede iniciar/finalizar la Room, aprobar/denegar solicitudes de orador, eliminar oradores, y por supuesto hablar. Su token de LiveKit otorga canPublish: true con canPublishSources: [MICROPHONE].
Orador
Un participante promovido por el anfitrión. Puede desactivar el silencio de su micrófono y publicar audio. Cuando el anfitrión aprueba una solicitud de orador, dos cosas suceden simultáneamente:
Socket.IO transmite el cambio de rol a todos los participantes (actualización de IU)
Nuestro backend llama a updateParticipantPermissions() en la API Room Service de LiveKit, otorgando derechos de publicación al usuario en la sala de LiveKit
Esta actualización dual asegura que la UI y la capa de medios se mantengan sincronizadas. El orador puede desactivar el silencio y comenzar a hablar inmediatamente.
Oyente
El rol predeterminado. Puede escuchar a todos los oradores pero no puede publicar audio. Su token de LiveKit tiene canPublish: false. Incluso si intentaran publicar una pista desde el lado del cliente, LiveKit lo rechazaría a nivel del servidor. La seguridad se aplica del lado del servidor, no solo en la UI.
Modos de Permiso de Orador
Al crear una Room, el anfitrión puede elegir quién está permitido para solicitar hablar:
Todos — Cualquier participante puede levantar la mano
Seguidores — Solo los usuarios que siguen al anfitrión pueden solicitar
Solo Invitados — Solo los usuarios invitados explícitamente por el anfitrión pueden hablar
Rooms en Tu Feed
Las Rooms no están aisladas en una pestaña separada. Están integradas en el tejido de Mention. Cuando creas una Room, puedes adjuntarla a una publicación — tal como lo harías al adjuntar una imagen, encuesta, o artículo.
Tus seguidores verán una tarjeta de Room en su feed. Si la Room está en vivo, la tarjeta pulsa con un indicador en vivo. Al tocar la tarjeta se ingresa inmediatamente a la Room. Si está programada, la tarjeta muestra la hora programada.
Esta fue una decisión de diseño deliberada. No queríamos que las Rooms fueran una función que tuvieras que buscar. Queríamos que surgieran naturalmente en el contenido que ya estás navegando. Una Room en vivo de alguien a quien sigues debería sentirse tan natural como ver su última publicación.
El sistema de adjuntos a publicaciones soporta todo el ciclo de vida de la Room:
Programada — La tarjeta muestra la fecha/hora, actúa como un anuncio
En Vivo — La tarjeta muestra el conteo de participantes, el indicador pulsante, acción "Unirse"
Finalizada — La tarjeta muestra que ha finalizado (futuro: enlazará a una grabación)
Multi-Plataforma desde el Primer Día
Las Rooms funcionan en web, iOS y Android desde el lanzamiento — ya sea que lo uses dentro de Mention o a través de la app independiente Agora. El SDK del cliente LiveKit maneja las diferencias entre plataformas:
Web — Usa la implementación WebRTC del navegador. Las pistas de audio remoto se adjuntan a elementos DOM de audio para su reproducción. Manejamos las políticas de reproducción automática y limpieza de elementos.
iOS y Android — Usa @livekit/react-native con react-native-webrtc en su núcleo. La gestión de sesiones de audio se maneja de forma nativa — iniciamos la sesión de audio al conectar y la detenemos al desconectar.
La IU es la misma experiencia de hoja inferior en todas las plataformas, construida con nuestro sistema de hojas existente. Abre una Room, ve a los oradores, ve a los oyentes, toca para silenciar, toca para levantar la mano. Simplemente funciona.
Estado Respaldado por Redis
En el prototipo inicial, el estado de la sala vivía en un Map de JavaScript en el proceso de backend. Si el proceso se reiniciaba, todas las Rooms activas perdían sus listas de participantes. No aceptable para producción.
Migramos todo el estado de la sala a Redis, que ya usamos para el adaptador de Socket.IO (publicación/suscripción multi-instancia) y cachés. El esquema de claves es limpio:
room:{roomId} — Metadatos de la sala (anfitrión, hora de creación)
room:{roomId}:participants — Hash de userId a rol, estado de silencio, hora de ingreso
room:{roomId}:requests — Hash de solicitudes de orador pendientes
Esto nos da operaciones atómicas sobre el estado de los participantes, capacidades automáticas de expiración, y la capacidad de inspeccionar el estado en vivo de la sala con redis-cli para depuración. También significa que nuestro backend puede escalar horizontalmente — cualquier instancia puede atender cualquier Room.
La Arquitectura de un Vistazo
Aquí está el panorama completo de cómo encaja todo junto:
Droplet de DigitalOcean — Ejecuta LiveKit SFU en Docker, con Caddy para TLS. Maneja todo el transporte de audio WebRTC.
Backend de Mention (Plataforma de Aplicaciones) — Generación de tokens, ciclo de vida de la sala, gestión de oradores, namespace /rooms de Socket.IO.
Redis — Persistencia del estado de la sala, adaptador de Socket.IO para soporte multi-instancia.
Clientes (Expo React Native + Web) — Conexión dual: Socket.IO para eventos de control, SDK de LiveKit para pistas de audio.
La separación de preocupaciones es clara. Socket.IO nunca toca los datos de audio. LiveKit nunca toca la lógica de aplicación. Redis los conecta almacenando el estado de la sala autoritativa que ambas capas referencian.
Agora: Rooms con su Propia Puerta de Entrada
Así como Messenger vive dentro de Facebook y como su propia app independiente, Rooms está integrado en Mention y también existe como Agora — una app dedicada en agora.mention.earth. Misma infraestructura, mismas salas, misma comunidad. Ya sea que abras Rooms dentro de Mention o inicies Agora directamente, estás en el mismo ecosistema. Agora simplemente le da a Rooms una experiencia centrada completamente en el audio en vivo, para usuarios que quieren sumergirse rápidamente.
Lo Que Estamos Construyendo Siguiente
Rooms se lanza hoy, pero solo estamos empezando. Aquí está lo que está en nuestra hoja de ruta:
Grabación y Reproducción — Graba tu Room y permite que las personas escuchen más tarde. LiveKit soporta salida (grabación) de forma nativa, y planeamos integrarlo para que los anfitriones puedan optar por grabar. Imagina convertir cada Room en un episodio de podcast a la carta.
Subtítulos en Vivo — Transcripción en tiempo real impulsada por IA. Sigue con texto incluso cuando no puedes escuchar con audio. Esto hará que las Rooms sean accesibles para personas sordas y con dificultades auditivas, y útil en entornos sensibles al ruido.
Co-anfitrión — Invita a otro usuario como co-anfitrión que pueda gestionar oradores y moderar la sala junto a ti. Esencial para Rooms más grandes donde un solo anfitrión no puede gestionar todo solo.
Reacciones — Los oyentes pueden enviar reacciones de emoji que flotan por la pantalla. Una forma ligera de participar sin hablar. Piensa en aplausos, risas, y manos levantadas — todo animado en tiempo real.
Rooms Programadas con Recordatorios — Programa una Room para el futuro y permite que tus seguidores establezcan recordatorios para que no se la pierdan. Enviaremos notificaciones push cuando la Room se ponga en vivo.
Analíticas de Room — Estadísticas detalladas para anfitriones: oyentes máximos, uniones totales, duración promedio de escucha, participación a lo largo del tiempo. Entiende a tu audiencia y optimiza tu contenido.
Clips — Destaca y comparte clips de audio cortos de las Rooms. Deja que tus mejores momentos vivan más allá de la sesión en vivo.
Pruébalo Ahora
Rooms está disponible hoy dentro de Mention en mention.earth y como la app independiente Agora en agora.mention.earth. Crea tu primera Room, ponla en vivo, y comienza a hablar. No podemos esperar a escuchar lo que construyes con ella.
Si eres un desarrollador interesado en cómo construimos esto, revisa el ecosistema de Oxy en oxy.so — toda nuestra infraestructura está construida internamente, desde los servicios de backend hasta la canalización de audio en tiempo real.
Bienvenido al futuro de la conversación en Mention. Bienvenido a Rooms.
La Mayor Lanzamiento de Funciones en la Historia de Mention
Hoy estamos increíblemente emocionados de anunciar Rooms — salas de audio en vivo integradas directamente en Mention. Piensa en ellas como Messenger dentro de Facebook: Rooms es una parte fundamental de la experiencia Mention, y también tiene su propia app independiente — Agora, disponible en agora.mention.earth. Esta es la función más grande que hemos lanzado, y cambia fundamentalmente lo que es Mention: de una plataforma social donde lees y escribes, a una donde puedes hablar y escuchar en tiempo real.
Rooms permite a cualquier usuario crear una sala de audio en vivo, invitar a oradores y transmitir a una audiencia ilimitada de oyentes. Piénsalo como tu propio estudio de podcast, ayuntamiento, o lugar de reunión informal — todo dentro de Mention, o a través de la app dedicada Agora.
No tomamos atajos. Construimos esto sobre WebRTC con una Unidad de Reenvío Selectiva (SFU) auto-hospedada, ejecutándose en nuestra propia infraestructura. No hay APIs de audio de terceros. No hay precios basados en el uso que nos obliguen a limitar tus conversaciones. Solo audio puro, de baja latencia y alta calidad — de nuestros servidores a tus oídos.
Vamos a sumergirnos en todo.
¿Qué Son Rooms?
Una Room es una sala de audio en vivo organizada por un usuario de Mention o Agora. Cuando creas una Room, te conviertes en el anfitrión. Le das un título, opcionalmente un tema y descripción, y luego te pones en vivo. Eso es todo — estás transmitiendo.
Otros usuarios pueden unirse a tu Room como oyentes. Escuchan todo lo que dicen los oradores en tiempo real, con una latencia de sub-segundo. Si un oyente quiere hablar, puede levantar la mano (pedir hablar), y el anfitrión puede aprobar o denegar la solicitud.
Una vez aprobado, un oyente se convierte en orador. Los oradores pueden activar su micrófono y hablar con toda la sala. El anfitrión también puede eliminar oradores en cualquier momento, devolviéndolos al estado de oyente.
Todo el flujo está diseñado para sentirse natural y sin esfuerzo:
Crear — Toca el botón "+" en la pantalla de Rooms. Dale un título y tema a tu Room.
Poner en Vivo — Pulsa "Iniciar Ahora" y estás transmitiendo. Se crea una sala LiveKit en nuestra SFU, y tu sesión de audio comienza.
Invitar y Compartir — Comparte tu Room. Aparece en el directorio de Rooms para que cualquiera se una.
Gestionar — Aprueba o deniega solicitudes de oradores. Silénciate. Elimina oradores. Tienes el control total.
Finalizar — Cuando termines, finaliza la Room. La sala LiveKit se desmantela, el estado de Redis se limpia, y la Room se archiva.
Cómo Funciona Bajo el Capó
Aquí es donde se pone interesante. Construimos Rooms con una arquitectura de doble capa que separa el plano de control del plano de medios.
Capa 1: Socket.IO — El Plano de Control
Socket.IO maneja todo lo que no es audio. Cuando te unes a una Room, tu cliente establece una conexión WebSocket con nuestro backend a través del namespace /rooms Socket.IO. Esta conexión gestiona:
Seguimiento de participantes — Quién está en la sala, sus roles (anfitrión, orador, oyente), y su estado de silencio
Solicitudes de orador — El flujo de levantar la mano, aprobar/denegar, cambio de rol
Ciclo de vida de la sala — Eventos de inicio, fin, y unirse/salir de participantes
Actualizaciones de UI en tiempo real — Indicadores de silencio, conteo de participantes, cambios en la lista de oradores
Todo el estado de la sala se persiste en Redis, no en memoria. Esto significa que si nuestro proceso de backend se reinicia, tu Room sobrevive. También significa que podemos escalar horizontalmente — múltiples instancias de backend pueden atender la misma Room a través de la publicación/suscripción de Redis.
Capa 2: LiveKit SFU — El Plano de Medios
El audio es manejado completamente por LiveKit, una Unidad de Reenvío Selectiva WebRTC de código abierto que auto-hospedamos en nuestra infraestructura de DigitalOcean.
Cuando una Room se pone en vivo, nuestro backend crea una sala LiveKit a través de la API Room Service. Cuando un cliente se une, solicita un token de acceso LiveKit de nuestro backend (POST /api/rooms/:id/token). El token codifica la identidad del usuario, el nombre de la sala, y sus permisos — ¿pueden publicar audio? ¿Pueden suscribirse?
El cliente se conecta directamente a la SFU de LiveKit sobre WebRTC. Las pistas de audio fluyen de peer-a-SFU, no de peer-a-peer. Esto es crítico para la escalabilidad — en un modelo peer-to-peer, una sala con 50 oyentes requeriría que el orador subiera 50 streams de audio separados. Con una SFU, el orador sube una vez, y LiveKit distribuye a todos los suscriptores.
Aquí es lo que LiveKit maneja para nosotros:
Negociación WebRTC — Candidatos ICE, handshake DTLS, selección de codecs
Cancelación de eco y supresión de ruido — Integrado en el stack WebRTC
Tasa de bits adaptativa — La calidad del audio se ajusta según las condiciones de la red
Publicación/suscripción de pistas — Los oradores publican su pista de micrófono; los oyentes se suscriben automáticamente
Gestión de ancho de banda — Dynacast asegura que solo reenviamos las pistas que los participantes están consumiendo realmente
¿Por Qué Auto-Hospedado?
Esto nunca fue una pregunta para nosotros. En Oxy, creemos que tus conversaciones te pertenecen — no a un proveedor de terceros que pueda registrar, analizar o monetizar tus datos de audio. El auto-hospedaje es una extensión directa de los valores que hemos mantenido desde el primer día: privacidad, independencia, y confianza.
Cuando hablas en una Room, tu voz viaja desde tu dispositivo a nuestra SFU y de regreso a los oyentes. Eso es todo. No hay procesadores de terceros en el medio. Ningún dato de audio sale de nuestra infraestructura. Ninguna empresa externa con acceso a lo que dices. No queremos depender de nadie más cuando se trata de proteger a nuestros usuarios, y nos negamos a poner tu privacidad en manos de otros.
Más allá de la privacidad, el auto-hospedaje nos da:
Verdadera independencia — No dependemos de ningún servicio externo que pueda cambiar sus términos, aumentar precios, o cerrar. Nuestra infraestructura es nuestra. Si un proveedor alojado decidiera descontinuar su servicio mañana, no afectaría a una sola Room en Mention.
Control de costos — Los servicios WebRTC alojados cobran por minuto de participante. Para una plataforma social donde las Rooms pueden durar horas con docenas de participantes, los costos escalarían rápidamente y podrían obligarnos a limitar tus conversaciones. Nuestra instancia auto-hospedada de LiveKit se ejecuta en nuestra propia infraestructura de DigitalOcean a un costo predecible.
Control total — Configuramos todo: tiempos de espera de las salas, preferencias de codec, rangos de puertos, terminación TLS. Si necesitamos ajustar el rendimiento o responder a un problema, cambiamos un archivo de configuración — no un ticket de soporte. Respondemos a nuestros usuarios, no a un proveedor.
Podríamos haber tomado el camino fácil e integrado una API alojada. Pero fácil y correcto no son siempre lo mismo. Nuestros usuarios merecen más, y el auto-hospedaje es cómo cumplimos esa promesa.
Nuestra instancia LiveKit se ejecuta como un contenedor Docker detrás de Caddy (para TLS automático vía Let's Encrypt) en un droplet dedicado en livekit.mention.earth. Los puertos UDP 50000-50200 están abiertos para el transporte de medios WebRTC, con respaldo TCP a través del servidor TURN.
Permisos Basados en Roles
Rooms tiene un sistema de permisos en capas que funciona tanto en Socket.IO como en LiveKit:
Anfitrión
El creador de la Room. Tiene control total: puede iniciar/finalizar la Room, aprobar/denegar solicitudes de orador, eliminar oradores, y por supuesto hablar. Su token de LiveKit otorga canPublish: true con canPublishSources: [MICROPHONE].
Orador
Un participante promovido por el anfitrión. Puede desactivar el silencio de su micrófono y publicar audio. Cuando el anfitrión aprueba una solicitud de orador, dos cosas suceden simultáneamente:
Socket.IO transmite el cambio de rol a todos los participantes (actualización de IU)
Nuestro backend llama a updateParticipantPermissions() en la API Room Service de LiveKit, otorgando derechos de publicación al usuario en la sala de LiveKit
Esta actualización dual asegura que la UI y la capa de medios se mantengan sincronizadas. El orador puede desactivar el silencio y comenzar a hablar inmediatamente.
Oyente
El rol predeterminado. Puede escuchar a todos los oradores pero no puede publicar audio. Su token de LiveKit tiene canPublish: false. Incluso si intentaran publicar una pista desde el lado del cliente, LiveKit lo rechazaría a nivel del servidor. La seguridad se aplica del lado del servidor, no solo en la UI.
Modos de Permiso de Orador
Al crear una Room, el anfitrión puede elegir quién está permitido para solicitar hablar:
Todos — Cualquier participante puede levantar la mano
Seguidores — Solo los usuarios que siguen al anfitrión pueden solicitar
Solo Invitados — Solo los usuarios invitados explícitamente por el anfitrión pueden hablar
Rooms en Tu Feed
Las Rooms no están aisladas en una pestaña separada. Están integradas en el tejido de Mention. Cuando creas una Room, puedes adjuntarla a una publicación — tal como lo harías al adjuntar una imagen, encuesta, o artículo.
Tus seguidores verán una tarjeta de Room en su feed. Si la Room está en vivo, la tarjeta pulsa con un indicador en vivo. Al tocar la tarjeta se ingresa inmediatamente a la Room. Si está programada, la tarjeta muestra la hora programada.
Esta fue una decisión de diseño deliberada. No queríamos que las Rooms fueran una función que tuvieras que buscar. Queríamos que surgieran naturalmente en el contenido que ya estás navegando. Una Room en vivo de alguien a quien sigues debería sentirse tan natural como ver su última publicación.
El sistema de adjuntos a publicaciones soporta todo el ciclo de vida de la Room:
Programada — La tarjeta muestra la fecha/hora, actúa como un anuncio
En Vivo — La tarjeta muestra el conteo de participantes, el indicador pulsante, acción "Unirse"
Finalizada — La tarjeta muestra que ha finalizado (futuro: enlazará a una grabación)
Multi-Plataforma desde el Primer Día
Las Rooms funcionan en web, iOS y Android desde el lanzamiento — ya sea que lo uses dentro de Mention o a través de la app independiente Agora. El SDK del cliente LiveKit maneja las diferencias entre plataformas:
Web — Usa la implementación WebRTC del navegador. Las pistas de audio remoto se adjuntan a elementos DOM de audio para su reproducción. Manejamos las políticas de reproducción automática y limpieza de elementos.
iOS y Android — Usa @livekit/react-native con react-native-webrtc en su núcleo. La gestión de sesiones de audio se maneja de forma nativa — iniciamos la sesión de audio al conectar y la detenemos al desconectar.
La IU es la misma experiencia de hoja inferior en todas las plataformas, construida con nuestro sistema de hojas existente. Abre una Room, ve a los oradores, ve a los oyentes, toca para silenciar, toca para levantar la mano. Simplemente funciona.
Estado Respaldado por Redis
En el prototipo inicial, el estado de la sala vivía en un Map de JavaScript en el proceso de backend. Si el proceso se reiniciaba, todas las Rooms activas perdían sus listas de participantes. No aceptable para producción.
Migramos todo el estado de la sala a Redis, que ya usamos para el adaptador de Socket.IO (publicación/suscripción multi-instancia) y cachés. El esquema de claves es limpio:
room:{roomId} — Metadatos de la sala (anfitrión, hora de creación)
room:{roomId}:participants — Hash de userId a rol, estado de silencio, hora de ingreso
room:{roomId}:requests — Hash de solicitudes de orador pendientes
Esto nos da operaciones atómicas sobre el estado de los participantes, capacidades automáticas de expiración, y la capacidad de inspeccionar el estado en vivo de la sala con redis-cli para depuración. También significa que nuestro backend puede escalar horizontalmente — cualquier instancia puede atender cualquier Room.
La Arquitectura de un Vistazo
Aquí está el panorama completo de cómo encaja todo junto:
Droplet de DigitalOcean — Ejecuta LiveKit SFU en Docker, con Caddy para TLS. Maneja todo el transporte de audio WebRTC.
Backend de Mention (Plataforma de Aplicaciones) — Generación de tokens, ciclo de vida de la sala, gestión de oradores, namespace /rooms de Socket.IO.
Redis — Persistencia del estado de la sala, adaptador de Socket.IO para soporte multi-instancia.
Clientes (Expo React Native + Web) — Conexión dual: Socket.IO para eventos de control, SDK de LiveKit para pistas de audio.
La separación de preocupaciones es clara. Socket.IO nunca toca los datos de audio. LiveKit nunca toca la lógica de aplicación. Redis los conecta almacenando el estado de la sala autoritativa que ambas capas referencian.
Agora: Rooms con su Propia Puerta de Entrada
Así como Messenger vive dentro de Facebook y como su propia app independiente, Rooms está integrado en Mention y también existe como Agora — una app dedicada en agora.mention.earth. Misma infraestructura, mismas salas, misma comunidad. Ya sea que abras Rooms dentro de Mention o inicies Agora directamente, estás en el mismo ecosistema. Agora simplemente le da a Rooms una experiencia centrada completamente en el audio en vivo, para usuarios que quieren sumergirse rápidamente.
Lo Que Estamos Construyendo Siguiente
Rooms se lanza hoy, pero solo estamos empezando. Aquí está lo que está en nuestra hoja de ruta:
Grabación y Reproducción — Graba tu Room y permite que las personas escuchen más tarde. LiveKit soporta salida (grabación) de forma nativa, y planeamos integrarlo para que los anfitriones puedan optar por grabar. Imagina convertir cada Room en un episodio de podcast a la carta.
Subtítulos en Vivo — Transcripción en tiempo real impulsada por IA. Sigue con texto incluso cuando no puedes escuchar con audio. Esto hará que las Rooms sean accesibles para personas sordas y con dificultades auditivas, y útil en entornos sensibles al ruido.
Co-anfitrión — Invita a otro usuario como co-anfitrión que pueda gestionar oradores y moderar la sala junto a ti. Esencial para Rooms más grandes donde un solo anfitrión no puede gestionar todo solo.
Reacciones — Los oyentes pueden enviar reacciones de emoji que flotan por la pantalla. Una forma ligera de participar sin hablar. Piensa en aplausos, risas, y manos levantadas — todo animado en tiempo real.
Rooms Programadas con Recordatorios — Programa una Room para el futuro y permite que tus seguidores establezcan recordatorios para que no se la pierdan. Enviaremos notificaciones push cuando la Room se ponga en vivo.
Analíticas de Room — Estadísticas detalladas para anfitriones: oyentes máximos, uniones totales, duración promedio de escucha, participación a lo largo del tiempo. Entiende a tu audiencia y optimiza tu contenido.
Clips — Destaca y comparte clips de audio cortos de las Rooms. Deja que tus mejores momentos vivan más allá de la sesión en vivo.
Pruébalo Ahora
Rooms está disponible hoy dentro de Mention en mention.earth y como la app independiente Agora en agora.mention.earth. Crea tu primera Room, ponla en vivo, y comienza a hablar. No podemos esperar a escuchar lo que construyes con ella.
Si eres un desarrollador interesado en cómo construimos esto, revisa el ecosistema de Oxy en oxy.so — toda nuestra infraestructura está construida internamente, desde los servicios de backend hasta la canalización de audio en tiempo real.
Bienvenido al futuro de la conversación en Mention. Bienvenido a Rooms.
Últimas noticias
Últimas noticias
Últimas noticias

Iniciativas y Conexiones
Services
Sostenibilidad e Impacto
Nuestra misión es impulsar la innovación con propósito, proporcionando las herramientas y el apoyo para crear soluciones que resuelvan desafíos globales.
Hecho con 💚 en el 🌎 por Oxy.
Información corporativa

Iniciativas y Conexiones
Services
Sostenibilidad e Impacto
Nuestra misión es impulsar la innovación con propósito, proporcionando las herramientas y el apoyo para crear soluciones que resuelvan desafíos globales.
Hecho con 💚 en el 🌎 por Oxy.
Información corporativa





















