桥接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
赢两次是吧
请问怎么同时运行 https://github.com/mautrix/whatsapp 这个项目呢