blank
25
Oct

Como crear una sala de conversación federada de Nextcloud Talk

Introducción

Nextcloud Hub es la plataforma de colaboración de código abierto líder en el mercado centro europeo y en fuerte expansión en España y América Latina.

Entre las características principales de Nextcloud Hub, podemos mencionar dos que nos resultan de particular interés en el contexto de este articulo: la federación, que permite compartir y colaborar entre usuarios definidos en instalaciones separadas y Nextcloud Talk, la herramienta de mensajería instantánea y videoconferencias integrada en el Hub.

Estas dos funcionalidades se combinan en la posibilidad de crear salas virtuales de conversación descentralizadas. En otras palabras, esta integración permite a los participantes chatear sin perder el control sobre sus propios datos y respectando sus propios criterios de privacidad. Este objetivo es inalcanzable con las herramientas de chat centralizadas, que, lamentablemente, son tan populares hoy en día.

En este articulo explicaremos paso a paso cómo crear un puente Matterbridge, la tecnología que hace realidad la comunicación descentralizada en Nextcloud Talk.

Objetivo

El objetivo de este tutorial es de crear una sala de conversación virtual federada entre dos instancias de Nextcloud Hub.

A lo largo del articulo utilizaremos los siguientes nombres y identificativos

  • Instancia Nextcloud 1: nube.minube1.com
  • Instancia Nextcloud 2: nube.minube2.com
  • Token de conversación en la instancia 1: token1
  • Token de conversación en la instancia 2: token2
  • Usuario técnico en las dos instancias: matterbot

Funcionamiento de Matterbridge

Matterbridge es un servicio que se ejecuta en su propio sistema y donde vamos a definir los parámetros del puente entre dos o más servidores de Nextcloud Talk. Dentro de la conversación que queremos federar pondremos como participante un usuario técnico con el cual se conectará el servicio Matterbridge para recoger y entregar los mensajes a los usuarios reales que participan en la conversación.

El servicio Matterbridge hará sus tareas a través de consultas HTTP de tipo GET y POST, así que no necesita ninguna regla de acceso de red particular.

blank


Diagrama de un puente Matterbridge entre dos instancias de Nextcloud Talk

El procedimiento

Resumen

Antes de entrar en los detalles de cada paso, listamos los pasos necesarios:

  1. Crear el usuario técnico matterbot en nube.minube1.com y nube.minube2.com. Crear una contraseña de aplicación para ambos usuarios y apuntarlas.
  2. Crear una conversación en nube.minube1.com y nube.minube2.com. Apuntar token1 (en nube.minube1.com) y token2 (en nube.minube2.com).
  3. Añadir matterbot como participante en esta conversación, en nube.minube1.com y nube.minube2.com.
  4. Instalar y configurar el servicio Matterbridge. Para eso, necesitaremos las contraseñas de aplicación creadas al paso 1.
  5. Lanzar el servicio Matterbridge.
  6. Hacer pruebas y comprobar el funcionamiento de la conversación federada.

1 – Creación de los usuarios

La creación del usuario técnico matterbot en cada instancia se hace desde la consola de gestión de usuarios o bien utilizando la API.

Para mayor seguridad es recomendable compartir con el servicio matterbridge una contraseña de aplicación. Esta se crea en el apartado Ajustes de Usuario→Seguridad→Dispositivos y Sesiones:

blank

2 – Creación de las conversaciones

Para la creación de las conversación federada tenemos dos opciones.

  • el administrador local de cada instancia crea la conversación y luego añade los usuarios reales como participantes y el usuario técnico matterbot. Los usuarios reales o algunos entre ellos pueden también agregarse como moderadores para una gestión más sencilla. No es necesario que matterbot sea moderador.
  • El usuario real de cada instancia crea la conversación y añade almenos el usuario técnico matterbot.

Para que sea una conversación federada hará falta añadir el token de la conversación en la fichero de configuración de Mattebridge como se indicar más abajo. El token de conversación es una cadena aleatoria de caracteres que se puede obtener en la barra de dirección, a la derecha de la última barra.

Por ejemplo para:

https://nube.minube1.com/call/nb9xk3d2

El token es: nb9xk3d2

3 – Instalación y configuración del servicio Matterbridge

Estos pasos de instalación se aplican a un sistema basado en Ubuntu Server 22.04.

Crear un sistema de versionamiento del ejecutable:

# mkdir /opt/matterbridge/

# mkdir /opt/matterbridge/vX.Y.Z

Descargar el ejecutable desde el repositorio de proyecto (cambiar X.Y.Z con la versión más actualizada):

# wget -C /opt/matterbridge/vX.Y.Z/matterbridge https://github.com/42wim/matterbridge/releases/download/vX.Y.Z/matterbridge-X.Y.Z-linux-64bit

# chmod +x /opt/matterbridge/vX.Y.Z/matterbridge

# ln -s /opt/matterbridge/vX.Y.Z/matterbridge /opt/matterbridge/current/matterbridge

Crear una carpeta de configuración para el servicio:

# mkdir /etc/matterbridge

4 – Lanzamiento del servicio Matterbridge

La parte principal de la configuración del servicio Matterbridge se hace en su fichero de configuración, en formato toml.

Para cada instancia Nextcloud tenemos que definir un account, con su nombre (Server), usuario (Login) y contraseña (Password). El parámetro no obligatorio RemoteNickFormat cambia la cadena de caracteres que el destinatario ve cuando recibe mensajes de un remitente, veremos un ejemplo más adelante.

Luego tenemos definir los gateways, es decir que Accounts son visibles entre ellos. Para cada elemento del Gateway tenemos que especificar el channel, es decir el token de conversación.

# vim /etc/matterbridge/matterbridge.toml

## Account 1 – matterbot@nube.nube1.com
[nctalk.nube-minube1-com]

Server=»https://nube.minube1.com»

Login=»matterbot»

Password=»<contraseña de aplicación para matterbot en nube.minube1.com>»

RemoteNickFormat=»[{NICK}@{BRIDGE}] «

## Account 2 – matterbot@nube.nube2.com
[nctalk.nube-minube2-com]

Server=»https://nube.minube2.com»

Login=»matterbot»

Password=»<contraseña de aplicación para matterbot en nube.minube2.com»
RemoteNickFormat=»[{NICK}@{BRIDGE}] »

## Gateway 1
[[gateway]]
name=»gateway-minube1-minube2″
enable=true

[[gateway.inout]]
account=»nctalk.nube-minube1-com»
channel=»<token de la conversación en nube.minube1.com>»

[[gateway.inout]]
account=»nctalk.nube-minube2-com»
channel=»<token de la conversación en nube.minube2.com>»

Para una gestión más cómoda del servicio, creamos un usuario de sistema dedicado y un servicio systemd:

# useradd –system –shell /bin/false matterbridge_usr

# vim /etc/systemd/system/matterbridge.service

[Unit]
Description=Matterbridge Service

Documentation=https://github.com/42wim/matterbridge/wiki

After=network.target auditd.service

[Service]
Type=simple

User=matterbridge_usr

ExecStart=/opt/matterbridge/current/matterbridge -conf /etc/matterbridge/matterbridge.toml

Restart=always

RestartSec=5s

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload

# systemctl enable matterbridge

# systemctl start matterbridge

# systemctl status matterbridge

● matterbridge.service – Matterbridge Service

Loaded: loaded (/etc/systemd/system/matterbridge.service; enabled; vendor preset: enabled)

Active: active (running) since Wed 2023-08-23 16:03:22 CEST; 7min ago

Docs: https://github.com/42wim/matterbridge/wiki Main PID: 2811 (matterbridge)

Tasks: 5 (limit: 77009)

Memory: 12.3M

CPU: 610ms

CGroup: /system.slice/matterbridge.service

└─2811 /opt/matterbridge/current/matterbridge -conf

/etc/matterbridge/matterbridge.toml

Aug 23 16:03:23 matterbridge matterbridge[2811]: time=»2023-08-23T16:03:23+02:00″ level=info msg=»nctalk.[…]: joining […] (ID: […]nctalk.[…])» prefix=nctalk

Aug 23 16:03:23 matterbridge matterbridge[2811]: time=»2023-08-23T16:03:23+02:00″ level=info msg=»Starting bridge: nctalk.[…] » prefix=router

Aug 23 16:03:23 matterbridge matterbridge[2811]: time=»2023-08-23T16:03:23+02:00″ level=info msg=Connecting prefix=nctalk

Aug 23 16:03:24 matterbridge matterbridge[2811]: time=»2023-08-23T16:03:24+02:00″ level=info msg=Connected prefix=nctalk

Aug 23 16:03:24 matterbridge matterbridge[2811]: time=»2023-08-23T16:03:24+02:00″ level=info msg=»nctalk.[…]: joining […] (ID: […]nctalk.[…])» prefix=nctalk

Aug 23 16:03:26 matterbridge matterbridge[2811]: time=»2023-08-23T16:03:26+02:00″ level=info msg=»Gateway(s) started succesfully. Now relaying messages» prefix=main

5 – Comprobación de funcionamiento

Si el entorno está bien configurado, los usuarios podrán comunicar a través de una sala federada.

Por ejemplo, imaginando el usuario Marcos en una instancia y la usuaria Laura en la otra, en los pantallazos vemos como cada uno ve los mensaje del otro:

blank

Vista de Marcos de la conversación federada; Marcos ha puesto el nombre “Laura (Federada)” a la conversación

blank


Vista de Laura de la conversación federada; Laura ha puesto el nombre «Marcos (Federada)» a la conversación

La cadena de caracteres que identifica el usuario remoto es lo que aparece entre corchetes. En este caso el formato es <nombre-usuario>@<nombre-instancia-nextcloud> que corresponde al ID Federado, pero se puede configurar en los ajustes de Matterbridge, parámetro RemoteNickName.

Limitaciones de Matterbridge

Actualmente la integración con Matterbridge tiene algunas limitaciones que afectan la experiencia de usuario y es importante tenerlas en cuenta:

  • No es posible compartir archivos en el chat.
  • No es posible compartir notas de voz en el chat.
  • No es posible hacer llamadas y videollamadas.
  • El destinatario no ve las respuestas a mensaje formateadas como tales.
  • Los usuarios remotos no son visibles en la lista de participantes. Su presencia será visible sólo si participan activamente a la conversación, por ejemplo escribiendo un mensaje.

Conclusión

En este articulo hemos montado un entorno compuesto por dos instancias de Nextcloud Talk enlazadas por un puente Matterbridge que permite a los usuarios de las dos instancias participar en salas de conversaciones federadas.

Creemos que esta técnica sea una manera potente, y relativamente sencilla de implementar, para obtener una comunicación descentralizada, segura y basada en soluciones de código abierto.

Si decidimos probarlo, tendremos que decidir como y donde instalar el servicio Matterbridge. Este es un tema complejo, porque quien operará este servicio tendrá el poder y la responsabilidad de asegurar su funcionamiento y disponibilidad a nivel técnico. Cabe destacar, que en contextos de experimentación, el administrador tiene la posibilidad de instalar el binario de Matterbridge desde los ajustes de Talk.

Si en este articulo nos centramos exclusivamente en utilizar Matterbridge entre múltiples instancias de Nextcloud, hay que destacar también que el proyecto permite crear puentes entre herramientas de mensajería que utilizan protocolos diferentes, como Telegram, Matrix o WhatsApp. Si la base de usuarios de Matterbridge sigue creciendo, quizá se podrá utilizar como base técnica para tener un protocolo abierto de mensajería instantánea similar a lo que existe desde el nacimiento de Internet para el correo electrónico.

Mientras tanto, el equipo de desarrollo de Nextcloud Talk y la comunidad alrededor, están discutiendo y trabajando para un soporte más integrado y avanzado de las salas federadas: la discusión es pública y se puede tomar como referencia inicial este hilo de discusión. Estamos convencidos que dicha funcionalidad generaría un gran impulso hacia la adopción de Nextcloud Talk como herramienta de chat y videoconferencias, sea un contextos empresariales (ej. despliegues de tipo Global Scale) o comunitarios (instancias domesticas conectadas).

Contactos

Estaremos encantados de atender cualquiera consulta y/o comentario.

Nos puedes contactar a través del formulario de contacto https://nextcloud.com/contact/ o bien escribiendo a sales@nextcloud.com.

Acerca del autor

Pietro Marini es Ingeniero Comercial Senior en Nextcloud GmbH y vive en A Coruña.