Image for post
Image for post
“person using smartphone” by Christian Wiediger on Unsplash

用 Telegram 收发微信消息

手机上装的 IM 实在太多,而不同应用的好友圈又不一样,所以不得不留下多个 IM 工具,像是微信、QQ for 学校,Telegram、Slack for 网友。在多个工具之间切换很是费神,而且有的屏蔽消息的群偶尔又会出现重要的消息,有时就不能及时看到。所以合并多个聊天工具真的很有必要。

其实我一直觉得微信和 QQ 留下一个就够了,无奈好友圈里既有只用微信的人,又有只用 QQ 的人,要和他们保持联系就必须把这两个应用挂在后台(有统一的通知推送机制还好,不然两个毒瘤在后台真是了不得)。但最近我觉得不用这俩 IM 还更舒服点,因为能收到的消息不外乎是 QQ 小冰、群签到、支付宝红包。

用 Telegram 收发微信消息主要依靠 ehForwarderBot,这是一个可扩展的聊天通道框架,用户可以通过它收发多个平台的消息。在本文要用到的是默认的 Telegram 主端和 WeChat 从端。官方有完善的 英文文档,网上也有很多相关教程了。本文安装使用的 ehForwarderBot 为 v1 版本,最新的 2.x 版本最近试用了下感觉还不是很稳定。

完成本文操作需要:

  • 一个 SSH 客户端。本文使用 MobaXterm。
  • 一个海外 VPS 或独立服务器,尽量用网络状况好的。本文用的是 DigitalOcean 512M VPS 阿姆斯特丹节点,点击 此处 新用户注册可获得 $10 余额。
  • 一个关注了 BenWong 新闻台 的 Telegram 账号(误)。

服务器环境准备

两种安装方法,请选其一:

1. 用 HyperApp 安装

HyperApp 是一个基于 Docker 的服务器管理应用,其商店内已内置 ehForwarderBot,只需简单几步即可完成部署。但是我部署好以后发现不能在后台保持运行,于是采取了添加 Docker Image 的方法:

商店 里找到 Docker Image,添加到你的服务器,在配置中,Imageroyx/docker-efbOption 里填上:

其中 $(pwd)/config.py 指放置配置文件 config.py 的地方,$(pwd) 指的是执行命令的位置,一般是 /root 下,可以改成另外的位置; $(pwd)/tgdata.db 同理,指的是放置数据文件的地方。config.pytgdata.db 这两个文件需要自行准备,可以直接 touch 新建。

配置完以后安装到服务器里,安装完点击服务器,查看日志,点右上角的 Term,按 A- 缩小字体直到看见二维码,不行的话可以复制出现的链接,在电脑打开也能看见二维码,用微信扫码登陆。

其实不需要 HyperApp,直接用 Docker 部署也行,具体可看 royx/docker-efb,实际上就是自行 docker pull royx/docker-efb,然后输入上面图中 docker run 的整条命令。但是用 HyperApp 的话管理上会方便一点。

2. 普通安装方法

首先,克隆项目。

然后,新建存储临时文件的文件夹并赋权。

安装非 Python 依赖。本文示例操作于 Ubuntu 16.04 x64 环境下。

安装 Python 依赖。在 ehForwarderBot 文件夹下执行:

Telegram 准备

点击 @BotFather 发起会话,发送 /newbot 启动新建 Bot 向导,注意 Bot 的账号名(用户名)结尾必须是 Bot,建立好以后你会得到一串密钥(Token),请将之妥善保管并不要泄露。

接下来还要对 Bot 进行配置。

  • 发送 /setprivacy 到 @BotFather,选择刚刚创建好的 Bot 用户名,然后选择 “Disable”。
  • 发送 /setjoingroups 到 @BotFather,选择刚刚创建好的 Bot 用户名,然后选择 “Enable”。
  • 发送 /setcommands 到 @BotFather,选择刚刚创建好的 Bot 用户名,然后发送如下内容:

然后还需要获取你自己的 Telegram ID,有很多方法,下面介绍一个方法:与 @get_id_bot 对话,发送 /start,获得的一串数字就是你的 ID。

@BotFather 里还有很多指令,可以对自己的 Bot 进行个性化,如编辑头像和显示名。

配置 ehForwarderBot

如果使用 HyperApp / Docker 安装的话,config.py 需要建立在你指定的位置或是默认的 /root 下。

使用普通安装方法的话,进入 ehForwarderBot 文件夹。执行以下命令新建 config.py

在配置文件中,token 后引号里面的内容替换为你之前获得的 Bot 密钥,admins 后方括号里面填入你自己的 Telegram ID。

配置到这一步已经完成了,如果想进行额外的自定义,可以参考 EFB Telegram MasterEFB WeChat Slave Channel

实验性功能

我的 VPS 网络状况不佳(可能是太便宜了吧),所以经常会收到网络连接错误的提示,但我自知 VPS 没有网络问题,所以我把网络连接错误的提示关掉了:

ehForwarderBot 的微信端默认以好友 / 群组的名称为 uid 来保存数据,但是有的好友热衷于改微信名,导致绑定好的群组常常失效,这时可以把默认的 uid 改成备注名:

想要解析微信消息内容中的 HTML 标签,可以这样做:

启动

用 HyperApp / Docker 部署的直接使用相应的启动方法即可,可忽略此节。

首先在 VPS 启动 ehForwarderBot。启动方法有两种,一是可以用自带的 daemon.py

第二种方法是使用 screen

之后就会在 SSH 客户端里显示一个二维码,看不到的可以打开出现的链接。然后用微信扫一扫进行登录授权,然后手机会出现「网页微信已登录」的提示。之后就可以关闭输出:使用 daemon.py 的按 Ctrl + C;使用 screen 的按 Ctrl + A 再按 D

使用

现在到 Telegram,搜索你之前设定的 Bot 用户名并点击 Start 发起会话,就可以和微信互通消息了。

一开始所有的微信消息都会通过 Bot 发给你,要回复一条微信,需要选中消息,选择 Reply,再输入回复内容。要发起会话,需要给 Bot 发送 /chat 关键词,关键词可选,输入对方备注或昵称的关键词可以进行搜索。

要对微信消息进行分类(分流),可以新建一个空群组,并在搜索框输入 Bot 的用户名即可把 Bot 邀请入群组。然后向 Bot 发送 /link 关键词,选择一个会话,并点击 Link(在这里点击 Mute 可以屏蔽掉一个会话),选择刚刚建好的群组。这样以后,该会话的消息全都会发送到新群组里。

在绑定会话中,你可以像普通聊天一样直接发送消息。也可以通过指定回复的形式来 @ 其他人。

一个妙用:把所有订阅号绑定到一个群组里,就可以集合所有订阅号消息,不需要再逐个点进去看。

如果重装系统或是换服务器,不想丢失自己做的 LinkMute 设置,可以备份 tgdata.db 文件,HyperApp / Docker 安装的就在自己指定的位置或者 /root 下,普通安装方法在 /ehForwarderBot/plugins/eh_telegram_master 里。

参考资料

其他自定义功能及问题解答请参考:

Nothing lasts forever.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store