静看光阴荏苒
不管不顾不问不说也不念

Conduit桥接Telegram

桥接telegram需要用到mautrix-telegram这个软件,这篇文章记录一下安装和配置。

如果你只需要mautrix-telegram基本的功能,那配置起来还是比较简单的,但如果要支持全部功能的话就需要额外安装很多依赖,配置起来也很麻烦,所以我这里直接用docker的方式来部署,因为官方提供的docker镜像是支持全部功能的,所有的这些依赖都已经在镜像内提供了。

由于mautrix-telegram使用docker进行部署,所以conduit这里也用docker的方式部署,并且两个服务同在一个compose内可以使用默认的网络,而不需要再额外配置网络。如果你的conduit不是docker部署的,建议就不要参考这篇文章来配置了,不要将宿主机的服务和docker启的服务混用是常识。

首先安装docker和一些其他需要用到的软件,注意现在安装的docker版本都已经自带了compose的子命令,所以不再需要额外安装docker-compose了:

apt -y update
apt -y install curl nginx python3-certbot-nginx
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

新建一个目录,进入这个目录:

mkdir /opt/conduit-docker && cd /opt/conduit-docker

新建一个docker-compose文件:

nano docker-compose.yml

写入如下配置,需要修改的地方我加了注释:

version: '3.5'

services:
    homeserver:
        container_name: conduit
        image: matrixconduit/matrix-conduit:latest
        restart: unless-stopped
        environment:
            CONDUIT_SERVER_NAME: conduit.example.com # 修改成你的域名
            CONDUIT_DATABASE_PATH: /var/lib/matrix-conduit/
            CONDUIT_DATABASE_BACKEND: rocksdb
            CONDUIT_PORT: 6167
            CONDUIT_MAX_REQUEST_SIZE: 50_000_000
            CONDUIT_ALLOW_REGISTRATION: 'true'
            CONDUIT_ALLOW_FEDERATION: 'true'
            CONDUIT_TRUSTED_SERVERS: '["matrix.org"]'
            CONDUIT_MAX_CONCURRENT_REQUESTS: 500
            #CONDUIT_LOG: info,rocket=off,_=off,sled=off
            CONDUIT_ADDRESS: 0.0.0.0
            CONDUIT_CONFIG: ''
        ports:
            - 127.0.0.1:6167:6167
        volumes:
            - db:/var/lib/matrix-conduit/

    mautrix-telegram:
        container_name: mautrix-telegram
        image: dock.mau.dev/mautrix/telegram:latest
        restart: unless-stopped
        volumes:
            - ./mautrix-telegram:/data

    mautrix-db:
        container_name: mautrix-db
        image: postgres:14.4-alpine
        restart: unless-stopped
        environment:
            POSTGRES_DB: telegram_bridge # 数据库名
            POSTGRES_USER: telegram # 数据库用户名
            POSTGRES_PASSWORD: password # 数据库用户密码
        volumes:
            - ./postgres:/var/lib/postgresql/data

volumes:
    db:

首先启动conduit:

docker compose up -d homeserver

配置反向代理,新建一个nginx站点配置文件:

nano /etc/nginx/conf.d/conduit.conf

写入如下配置:

server {
    listen 80;
    server_name conduit.example.com;
    merge_slashes off;
    client_max_body_size 0;

    location /_matrix/ {
        proxy_pass http://127.0.0.1:6167$request_uri;
        proxy_set_header Host $http_host;
        proxy_buffering off;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
    }

    location /.well-known/matrix/server {
        return 200 '{ "m.server": "conduit.example.com:443" }';
    }

    location /.well-known/matrix/client {
        add_header Access-Control-Allow-Origin '*';
        return 200 '{ "m.homeserver": { "base_url": "https://conduit.example.com" } }';
    }
}

签发ssl证书:

certbot --nginx

之后还需要修改一下之前新建的nginx站点配置文件

nano /etc/nginx/conf.d/conduit.conf

在原本的基础上额外添加一个8448端口的监听,以及启用http2:

listen 8448 ssl http2;
listen 443 ssl http2; # managed by Certbot

重载nginx使配置生效:

systemctl reload nginx

至此conduit就搭建完成了,测试你搭建的服务是否正常:

curl https://conduit.example.com/_matrix/client/versions
curl https://conduit.example.com:8448/_matrix/client/versions

如果正常会有类似回显:

{"versions":["r0.5.0","r0.6.0","v1.1","v1.2"],"unstable_features":{"org.matrix.e2e_cross_signing":true}}

现在你可以在element-web内用你刚搭建的conduit服务器注册一个账号:

https://github.com/vector-im/element-web#getting-started

你可以选择自建一个element-web服务还是用官方的,这里的element-web实际就是一个客户端,你也可以用其他的客户端,比如iOS上的Element Messenger:

https://apps.apple.com/us/app/element/id1083446067

接下来配置mautrix-telegram。

首先启动postgresql容器,准备好mautrix-telegram需要用到的数据库:

docker compose up -d mautrix-db

然后先运行一次mautrix-telegram,用于生成配置文件:

docker compose run --rm mautrix-telegram

编辑配置文件:

nano mautrix-telegram/config.yaml

这里我只列出必须要改动的项:

homeserver:
    address: https://conduit.example.com
    domain: conduit.example.com
...
appservice:
    address: http://mautrix-telegram:29317
    database: postgres://telegram:password@mautrix-db/telegram_bridge
...
bridge:
    permissions:
        '*': relaybot
        conduit.example.com: full
        '@imlala:conduit.example.com': admin
...
telegram:
    api_id: 89648964
    api_hash: 8964896489648964896489648964

telegram的api和hash在这个网站申请:https://my.telegram.org/apps

修改好配置后,再运行一次mautrix-telegram,用于生成应用服务注册文件:

docker compose run --rm mautrix-telegram

如果正常,你可以查看到应用服务注册文件:

cat mautrix-telegram/registration.yaml

应用服务注册文件的内容类似于:

id: telegram
as_token: secret
hs_token: secret
namespaces:
    users:
    - exclusive: true
      regex: '@telegram_.*:conduit\.example\.com'
    - exclusive: true
      regex: '@telegrambot:conduit\.example\.com'
    aliases:
    - exclusive: true
      regex: \#telegram_.*:conduit\.example\.com
url: http://mautrix-telegram:29317
sender_localpart: secret
rate_limited: false

现在回到element-web,浏览到conduit的管理员房间,在房间内@管理员机器人注册应用服务,格式如下:

@conduit:conduit.example.com: register-appservice
```
id: telegram
as_token: secret
hs_token: secret
namespaces:
    users:
    - exclusive: true
      regex: '@telegram_.*:conduit\.example\.com'
    - exclusive: true
      regex: '@telegrambot:conduit\.example\.com'
    aliases:
    - exclusive: true
      regex: \#telegram_.*:conduit\.example\.com
url: http://mautrix-telegram:29317
sender_localpart: secret
rate_limited: false
```

注册完成后启动mautrix-telegram:

docker compose up -d mautrix-telegram

回到element-web,添加@telegrambot:conduit.example.com,与telegrambot机器人聊天:

向机器人发送login登录指令,之后机器人会让你输入手机号进行登录,注意输入的手机号是需要带国际区号的,比如中国是+86:

至此桥接就配置好了,来自telegram群组和频道的消息会在桥接器启动或者重启后自动创建相应的matrix房间,而对于telegram私聊的消息,只有当你收到新消息的时候才会创建matrix房间。可以简单测试一下:

参考文献:

https://docs.mau.fi/bridges/general/docker-setup.html?bridge=telegram
https://docs.mau.fi/bridges/general/registering-appservices.html
https://gitlab.com/famedly/conduit/-/blob/next/APPSERVICES.md
https://docs.mau.fi/bridges/python/telegram/authentication.html
https://docs.mau.fi/bridges/python/telegram/creating-and-managing-chats.html
https://github.com/mautrix/telegram

赞(15)
未经允许不得转载:荒岛 » Conduit桥接Telegram
分享到: 更多 (0)

评论 3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    赢两次是吧 :razz:

    kleos2年前 (2022-08-10) Google Chrome 104.0.0.0 Google Chrome 104.0.0.0 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    请问怎么同时运行 https://github.com/mautrix/whatsapp 这个项目呢

    Saiki2年前 (2022-08-12) Microsoft Edge 104.0.1293.47 Microsoft Edge 104.0.1293.47 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿