Une tus grupos de Telegram y XMPP e incluso otras plataformas con Matterbridge.
Tanto Telegram como XMPP son posibles opciones a la hora de organizar tu comunidad; ambos tienen ventajas y desventajas; y gente distinta que podría participar en ella. Pero, ¿Y si pudieses crear una comunidad que traspasase las fronteras de los distintos sistemas de mensajería?
Eso es precisamente lo que hace Matterbridge un software desarrollado en Golang por 42wim, a lo largo de este artículo descubriréis que es un software muy sencillo de usar teniendo un conocimiento mínimo de Linux.
En primer lugar vamos a crear el bot de telegram que servirá para enlazar la comunidad a XMPP:
Para realizar esto deberás hablar con @BotFather y en su menú seleccionar /newbot, para el nombre del bot escribiremos "XMPP User" para que los usuarios sepan de que tratan los mensajes que envía el bot.
A continuación nos preguntará por un nombre de usuario, puedes escoger el que deseés. Yo he escogido "pruebabridgexmppbot".
Ahora en el menú de Botfather seleccionaremos /mybots y pulsaremos sobre nuestro bot recien creado, tras hacer esto pulsaremos sobre "Bot Settings/Group Privacy" y seleccionaremos "Turn Off".
Este paso es necesario para que el bot de Telegram pueda leer los mensajes de los usuarios que no le mencionan directamente y enviarlos a XMPP.
Ahora tendrémos que crear un usuario de XMPP para el bot, no uses el tuyo propio, crear el usuario sale del ámbito del tutorial debido a la amplia cantidad de opciones posibles en mi caso lo he creado en mi propia instancia con prosodyctl register.
El siguiente paso es escoger el dominio muc que vamos a usar, en mi caso voy a hacerlo en prueba.owlcode.tech que voy a crearen mi propio servidor.
Puedes escoger un dominio muc que permita abrir salas sin problemas, pero asegurate de crearlas con tu usuario personal antes de añadirlas al bridge o el owner de la sala será el bridge lo cual puede ser problemático.
Voy a dejar instrucciones opcionales para crear nuestro propio dominio muc en un prosody ya configurado para favorecer la descentralización:
En primer lugar abriremos en nuestro editor de texto de preferencia la configuración de prosody.
sudo vim /etc/prosody/prosody.cfg.lua
Imaginemos que tenemos un VirtualHost como este.
VirtualHost "host.postmarketos-en-espanol.freemyip.com"
enable = true
admins = { 'admin@example.com' }
disco_items = {
{ 'postmarketos-en-espanol.freemyip.com', 'Canales públicos' }
}
Component "postmarketos-en-espanol.freemyip.com" "muc"
name = "Salas de chat de Postmarketos en Español"
restrict_room_creation = true
enforce_registered_nickname = true
component_admins_as_room_owners = true
Al final de este virtualhost tan solo tendrémos que añadir otro componente muc y actualizar los disco_items.
Recuerda añadir a tu usuario de XMPP como admin.
VirtualHost "host.postmarketos-en-espanol.freemyip.com"
enable = true
admins = { 'admin@example.com' }
disco_items = {
{ 'postmarketos-en-espanol.freemyip.com', 'Canales públicos' },
{ 'prueba.owlcode.tech', 'Canales de prueba' }
}
Component "postmarketos-en-espanol.freemyip.com" "muc"
name = "Salas de chat de Postmarketos en Español"
restrict_room_creation = true
enforce_registered_nickname = true
component_admins_as_room_owners = true
Component "prueba.owlcode.tech" "muc"
name = "Sala de prueba para tutorial."
restrict_room_creation = true
enforce_registered_nickname = true
component_admins_as_room_owners = true
Generamos un certificado TLS y un registro DNS para prueba.owlcode.tech.
sudo certbot certonly
Y respondemos las preguntas.
Importamos los certificados en prosody:
sudo /usr/bin/prosodyctl --root cert import /etc/letsencrypt/live
Ahora cuando reiniciemos el servidor de prosody nuestro nuevo servidor de salas muc estará listo.
Deberemos unirnos con nuestra cuenta de admin a la sala que queramos enlazar, en este caso prueba@prueba.owlcode.tech.
Una vez hecho esto marcamos en las opciones de la sala como persistente y buscable publicamente para que se pueda buscar desde search.jabber.network y le ponemos nombre y descripción a la sala. (Opcional)
Hecho esto podemos empezar a configurar Matterbridge.
sudo useradd -m -d /var/lib/matterbridge matterbridge
sudo vim /var/lib/matterbridge/matterbridge.toml
[xmpp.pruebaxmpp]
label="prueba.owlcode.tech"
Server="<el servidor de tu bot>"
#Jid your userid
Jid="<el jid de tu bot>"
Password="<la contraseña de tu bot>"
Muc="prueba.owlcode.tech"
Nick="Telegram User"
RemoteNickFormat="({PROTOCOL}) {NICK}: "
[telegram.pruebatelegram]
Token="<token de tu bot de telegram>"
RemoteNickFormat="(XMPP) {NICK} in {CHANNEL}: "
MessageFormat="HTMLNick"
[[gateway]]
name="prueba-gateway"
enable=true
[[gateway.inout]]
account="telegram.pruebatelegram"
channel="-10"
[[gateway.inout]]
account="xmpp.pruebaxmpp"
channel="prueba"
Instala Matterbridge con
sudo -u matterbridge go install github.com/42wim/matterbridge@master
Ejecuta
sudo -u matterbridge /var/lib/matterbridge/go/bin/matterbridge -conf /var/lib/matterbridge/matterbridge.toml
Necesitarás unir al bot de telegram que has creado al grupo que quieres unir con XMPP y ejecutar /chatId en el grupo, despues de eso tendrás el verdadero id de tu grupo de telegram para su uso en la configuración, por ejemplo:
[[gateway.inout]]
account="telegram.pruebatelegram"
channel="-932023"
Reincia el comando
sudo -u matterbridge /var/lib/matterbridge/go/bin/matterbridge -conf /var/lib/matterbridge/matterbridge.toml
Prueba a enviar mensajes entre telegram y xmpp; y si lo has hecho bien deberían recibirse en las dos direcciones.
Ahora puedes escoger cualquier manera que deseés de hacer persistente el bridge, ya sea un cron al encender el ordenador, un systemd unit o un init service de openrc.