Bridging between Matrix and Telegram

Updated 23 Septembre 2019

Enregistrement de l'API

Pour établir un pont entre Matrix et Telegram, commencez par enregistrer l'API :

Vous aurez besoin des valeurs api_id et api_hash pour faire le pont, ainsi que des adresses MTProto du serveur.

Enregistrement d'un bot

Depuis votre client Telegram, accédez à la boîte de dialogue BotFather en cliquant sur le lien.

Commencez une conversation et créez votre exemple_bot en procédant comme suit :

/start
/newbot
example_bot

Vous verrez quelque chose comme :

Done! Congratulations on your new bot. You will find it at t.me/example_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
123456789:abcdefghijklmniopqrstuvwxyzABCDEFGH
Keep your token secure and store it safely, it can be used by anyone to control your bot.

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

Rappelez-vous ce que vous obtenez comme BOT_TOKEN : 123456789:abcdefghijklmniopqrstuvwxyzABCDEFGH.

Pour permettre au robot d'accéder aux discussions des groupes auxquels il appartient :

/setprivacy
@example_bot
Disable

Activez le bot en vous rendant sur ~t.me/example_bot~ et en lui envoyant comme message :

/start

Préparer un conteneur LXC

Nous recommandons de configurer votre passerelle dans un conteneur distinct, créé comme expliqué dans le manuel.

Installer le logiciel

Installez FFmpeg pour permettre au service de traiter les vidéos Telegram :

emerge -a media-video/ffmpeg

Créez et activez un environnement virtuel pour Python :

mkdir -p /var/calculate/matrix-telegram

cd /var/calculate/matrix-telegram

python3 -m venv .

source bin/activate

Installez Matrix-Telegram et le module de fonctionnement via SOCKS5 dans l'environnement virtuel :

pip install --upgrade mautrix-telegram[all]

pip install PySocks

Copiez le fichier de configuration example-config.yaml dans config.yaml :

cp example-config.yaml config.yaml

Veuillez ajuster les paramètres de la passerelle, où :

  • https://matrix.example.org est l'adresse de votre serveur Matrix
  • matrix.example.org est le domaine MXID
  • http://matrix-telegram:8080 est l'adresse du pont
  • 123456 est l'identifiant API que vous avez créé précédemment
  • secret_hash est l'api_hash que vous aurez créé
/var/calculate/matrix-telegram/config.yaml
homeserver:
    # The address that this appservice can use to connect to the homeserver.
    address: https://matrix.example.org
    # The domain of the homeserver (for MXIDs, etc).
    domain: matrix.example.org
appservice:
    address: http://matrix-telegram:8080
    # Public part of web server for out-of-Matrix interaction with the bridge.
    # Used for things like login if the user wants to make sure the 2FA password isn't stored in
    # the HS database.
    public:
        # Whether or not the public-facing endpoints should be enabled.
        enabled: false
# Permissions for using the bridge.
# Permitted values:
#   relaybot - Only use the bridge via the relaybot, no access to commands.
#       user - Relaybot level + access to commands to create bridges.
#  puppeting - User level + logging in with a Telegram account.
#       full - Full access to use the bridge, i.e. previous levels + Matrix login.
#      admin - Full access to use the bridge and some extra administration commands.
# Permitted keys:
#        * - All Matrix users
#   domain - All users on that homeserver
#     mxid - Specific user
permissions:
    "*": "relaybot"
    "@admin:matrix.example.org": "admin"

telegram:
    api_id: 123456
    api_hash: secret_hash
    bot_token: bot_token

Ajoutez les paramètres suivants pour pouvoir utiliser SOCKS5 1.2.3.4:1080 :

/var/calculate/matrix-telegram/config.yaml
telegram:
    # Telethon proxy configuration.
    # You must install PySocks from pip for proxies to work.
    proxy:
        # Allowed types: disabled, socks4, socks5, http
        type: socks5
        # Proxy IP address and port.
        address: 1.2.3.4
        port: 1080
        # Whether or not to perform DNS resolving remotely.
        rdns: true
        # Proxy authentication (optional).
        username: "sockuser"
        password: "secret"

Créez un fichier d'enregistrement pour permettre à l'application d'échanger avec le serveur Matrix :

python -m mautrix_telegram -g -r registration_telegram.yaml

Copiez le fichier d'enregistrement dans Synapse :

scp registration_telegram.yaml root@synapse:/var/calculate/synapse/

Ajoutez le fichier d'enregistrement à la configuration de Synapse :

homeserver.yaml
app_service_config_files:
    - registration_telegram.yaml

Redémarrez Synapse :

/etc/init.d/synapse restart

Pour que la passerelle puisse fonctionner, il faut reconfigurer la base de données :

alembic upgrade head

Démarrage de la passerelle

Créez un script OpenRC pour gérer le démon de la passerelle Matrix-Telegram :

/etc/init.d/matrix-telegram-bridge
#!/sbin/openrc-run
# Copyright 2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

name="Matrix-Telegram daemon"
description="Matrix Telegram bridge daemon"
command=/var/calculate/matrix-telegram/bin/python3
command_args="-m mautrix_telegram -r registration_telegram.yaml"
directory=/var/calculate/matrix-telegram
pidfile="/run/matrixtelegram.pid"
command_background=true

Modifier les droits d'accès au besoin :

chmod 755 /etc/init.d/matrix-telegram-bridge

Lancez le démon :

/etc/init.d/matrix-telegram-bridge start

Mettez-le sur la liste de démarrage automatique :

rc-update add matrix-telegram-bridge

Intégrer des groupes Matrix à des groupes Telegram

Obtenir l'identifiant d'un groupe Telegram

Invitez votre robot Telegram dans le bon groupe :

curl "https://api.telegram.org/botBOT_TOKEN/getUpdates

{"ok":true,"result":[{"update_id":123451234,
"message":{"message_id":12345,"from":{"id":123451234,"is_bot":false,"first_name":"User","username":"Username"},
"chat":{"id":-100123456789,
"title":"Groupname","username":"calculate_talk","type":"supergroup"},
"date":1553239850,"new_chat_participant":
{"id":123451234,"is_bot":true,"first_name":"Example bot","username":"example_bot"},"new_chat_member":{"id":123451234,"is_bot":true,"first_name":"Example bot","username":"example_bot"},"new_chat_members":[{"id":123456789,"is_bot":true,"first_name":"Example bot","username":"example_bot"}]}}]}

Obtenir l'identifiant d'une chaîne Telegram

Définissez le bot en tant qu'administrateur du canal et tapez /id :

curl "https://api.telegram.org/botBOT_TOKEN/getUpdates

"channel_post":{"message_id":123,
"chat":{"id":-1001123456789,
"title":"Example Channel","type":"channel"},"date":1553242405,"text":"/id","entities":[{"offset":0,"length":3,"type":"bot_command"}]}}]}

Rejoindre une salle de discussion

Invitez le bot @telegrambot:matrix.example.org dans votre salle de discussion.

Intégrez la salle de discussion concernée à une chaîne ou un groupe Telegram en utilisant son identifiant, ~~-1001123456789~. Pour envoyer un message à la salle de discussion commune :

!tg bridge -1001123456789
!tg continue