EFB How-to: Send and Receive Messages from WeChat on Telegram (zh-CN)

Posted by Eana Hufwe on Jan 9, 2017

安装并使用 EFB:在 Telegram 收发微信消息

Banner

Abstract

This article is a tutorial on how to install EH Forwarder Bot on a VPS server, with Telegram Master Channel and WeChat Slave Channel, alongside with simple exmaples of how to use it. Targeting WeChat power users in China, this article is written in Chinese (zh-CN). For installation manual in English, please visit the documentation.

Update: 11 Jan 2017
跟进了新版 Daemon 进程的启动方式。

注意!
本教程基于 EFB v1.2 build 20170111 版本制作而成。目前最新版本为
新版本的安装方式可能与旧版本不同。请参阅官方文档以获取最新安装说明。

开发代号 EH Forwarder Bot(简称 EFB)是一个可扩展的聊天平台隧道框架,基于 Python 3。目前已内置了 Telegram 主端 (Master Channel) 和微信从端 (Slave Channel),用来在 Telegram 收发微信消息。其他从端开发已在计划之中。同时 EFB 也配备了详尽的文档,欢迎有兴趣的朋友们开发自己的主端或从端,来支持更多的平台。EFB 在 GitHub 中开放了源代码,并且在 Read The Docs 平台上发布的开发文档(英文,en-US)。

本文主要介绍了如何在一个虚拟服务器 (VPS) 中安装并配置 EFB、Telegram 主端和微信从端,以及如何使用 Telegram 主端来收发微信消息。

0x00: 说明

  • 本文档基于 EFB v1.2 build 20170111 版本制作而成。较新的版本可能会有不同的安装步骤。敬请注意。
  • 本教程面向具有一定背景知识的进阶用户,如有疑问,请您先在互联网上搜索(推荐 Google),若仍未解决、欢迎在 EFB Telegram 支持群组留言。

0x01: 用料

在开始之前,请准备:

  • 电脑 一台
    推荐 Linux、OS X、macOS 操作系统
    部分手机亦可使用,但操作会略微繁琐。
  • Telegram 账号 一枚
  • 可用的科学上网方式 若干
  • Windows 用户需要 SSH 客户端 一枚,常用 PuTTY
  • 墙外 VPS 一枚
    没有 VPS 的可以尝试一下 Vultr 日本,速度还不错,顺带可以搭梯子。新用户赠送 $20 链接

(才不是要假装菜谱呢)

0x02: 构建环境

这里我们使用 Ubuntu 16.04 作为例子。CentOS、Arch 等其他发行版除去包管理器指令之外操作基本相同。(因为实在是不想再加钱开一个 VPS,所以下面的指令运行在同等版本的 Docker Image 上)

首先通过 SSH 客户端连接到你的 VPS。

0x021: 安装 Python 与非 Python 依赖

输入以下指令。

注:以下安装的部分软件包可能已经预安装在你的系统中。但请注意将已安装的 Python 3 版本升级到 3.5 或以上

1
sudo apt-get install python3.5 libopus0 ffmpeg libmagic1 python3-pip git nano

(怎么感觉包名这么奇怪呢,算了,大概这样吧,差也差不了太多。 ¯\_(ツ)_/¯)

0x023: 下载源码并安装 Python 依赖

1
2
3
git clone https://github.com/blueset/ehForwarderBot.git
cd ehForwarderBot
pip3 install -r requirements.txt

0x03: 配置 EFB

接下来就是进行各种必要的配置和初始化的步骤了。

0x030: 创建 Telegram Bot

Telegram Bot 是 EFB(Telegram 主端)的出口,也是呈献给用户的渠道。我们在这里使用了 Telegram 官方的 Bot API,以最大化利用 Telegram Bot 所提供的各种便利功能。

要创建一个新的 Bot,要先向 @BotFather 发起会话。发送指令 /newbot 以启动向导。期间,你需要指定这个 Bot 的名称与用户名(用户名必须以 bot 结尾)。完毕之后 @BotFather 会提供给你一个密钥(Token),妥善保存这个密钥。请注意,为保护您的隐私及信息安全,请不要向任何人提供你的 Bot 用户名及密钥,这可能导致聊天信息泄露等各种风险

接下来还要对刚刚启用的 Bot 进行进一步的配置:允许 Bot 读取非指令信息、允许将 Bot 添加进群组、以及提供指令列表。

  • 发送 /setprivacy 到 @BotFather,选择刚刚创建好的 Bot 用户名,然后选择 “Disable”.
  • 发送 /setjoingroups 到 @BotFather,选择刚刚创建好的 Bot 用户名,然后选择 “Enable”.
  • 发送 /setcommands 到 @BotFather,选择刚刚创建好的 Bot 用户名,然后发送如下内容:
1
2
3
4
link - 将会话绑定到 Telegram 群组
chat - 生成会话头
recog - 回复语音消息以进行识别
extra - 获取更多功能

然后还需要获取你自己的 Telegram ID,ID 应显示为一串数字。获取你自己的 ID 有很多方式,你可以选择任意一种。下面介绍两种可能的方式。

  1. Plus Messenger
    如果你使用了 Plus Messenger 作为你的 Telegram 客户端,你可以直接打开你自己的资料页,在「自己」下面会显示你的 ID。
  2. 通过 Bot 查询
    很多现存的 Bot 也提供了 ID 查询服务,直接向其发送特定的指令即可获得自己的数字 ID。在这里介绍一些接触过的。

留存你的 Telegram ID 以便后续使用。

0x031: 配置 EFB 和 Telegram 主端

这差不多就是安装过程的最后一步了。首先创建存储用文件夹并赋予其权限。回到 VPS 上 ehForwarderBot 目录。(不出意外的话你应该还在这个目录)

1
2
mkdir storage
chmod 777 storage

然后复制并编辑配置文件。

1
2
cp config.sample.py config.py
editor config.py

在配置文件中,token 后引号里面的内容替换为你之前获得的 Bot 密钥,admins 后方括号里面填入你自己的 Telegram ID。后面的 6 行是用来配置语音转文字功能的,不是必要功能,目前可以删除各行。如果有兴趣启用该功能的,请到各平台申请 API keys。详情请参见文档 的「ETM」章节。

注意
配置文件 (config.py) 是一个 Python 文件。Python 文件有着严格的格式要求。在编辑该文档的时候请全程使用英文输入模式,并避免更改缩进。每一个括号和引号都应该在适当的地方合上。错误的格式会导致 EFB 运行失败。
本文件使用 4 个空格作为一个缩进级别并避免使用 Tab 字符。

编辑好的结果应类似如下内容。tokenadmins 字段有所不同。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# ##############################
# Configs for EH Forwarder Bot
# ##############################
#
# Basic settings
# ----------------
#
# Master/Slave Channels
#
# Master channel:
# The channel that is mainly used to view/manage messages
# from slave channels.
# Currently only 1 master channel is supported.
#
# Slave channels:
# Channels that are hosted on the server and being delivered
# to and from the master channel.
# You may have more than 1 slave channel.
#
master_channel = 'plugins.eh_telegram_master', 'TelegramChannel'
slave_channels = [('plugins.eh_wechat_slave', 'WeChatChannel')]
#
# Plugin specific settings
# --------------------------
# Plugin specific settings should be written below in the format of:
# `channel_name = {"key1": "value1", "key2": "value2"}`
# Please refer to docs of individual plugin for details
#
eh_telegram_master = {
"token": "12345678:QWFPGJLUYarstdheioZXCVBKM",
"admins": [123456789]
}

0x04: 启动 EFB

到目前为止,EFB 的配置工作已经完成。现在我们只需要启动它,登陆微信就大功告成了。大多数时候,启动微信需要扫描屏幕上的二维码进行授权。这时需要你的 SSH 客户端字体缩小到适当的大小以完整显示整个二维码。

1
python3 daemon.py start

扫描完成之后,手机上会显示「网页微信已登录」,这是因为 EFB 微信从端使用了网页版微信的接口。当终端显示:Start auto replying. 时,即代表登陆成功,这时候就可以按下 Ctrl + C 来隐藏输出了。

0x05: 使用 EFB Telegram 主端

现在,在 Telegram 里面搜索你之前指定的 Bot 用户名,点击 Start(开始)即可开始与微信互通消息了。

在最初,所有来自微信的消息都会通过 Bot 直接发送给你,要回复其中的任意一条消息,你需要在 Telegram 中选中那条消息,选择 Reply(回复),再输入消息内容。

如果需要向新联系人发送消息,只需发送 /chat 指令,选择一个会话。之后这条消息就会变成一个「会话头」,回复这条消息就可以向指定的联系人或群组发送消息。

当消息过多时,来自不同会话的消息会使 Telegram 上面的会话混乱不堪。EFB 支持将来自指定会话的消息分流到一个 Telegram 群组中。

  • 在 Telegram 中新建一个空群组,并将你的 Bot 加入到这个群组中。
    (如果找不到自己的 Bot,请尝试在桌面版中创建,并在添加成员时搜索 Bot 的用户名)
  • 回到 Bot 会话,发送 /link,选择一个会话,并点击 “Link”
  • 在弹出的列表中选择刚刚创建的空群组即可

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

注意
虽然 Telegram 群组中的所有人可以看到会话全文,但是只有配置文件 (config.py) 中指定的管理员 (admins) 能够以你的名义发送消息到微信。EFB 支持设置多个管理员,但只有第一个管理员(按照输入排序)能够接收到所有消息,而且这有可能造成不必要的隐私问题,敬请注意。

以上就是 EFB Telegram 主端的基础用法。关于其他的功能(语音转文字、微信附加功能等)请参见文档 的「ETM」章节。

0x06: 常见问题

Q: EFB 微信从端稳定吗?
只要保持微信手机版网络连接长期稳定,根据上游项目 ItChat 的统计,可长达数个月不掉线。

Q: EFB 微信从端支持哪些类型的消息?
A: EFB 微信从端理论上支持所有网页版微信支持的消息类型。即:

  • 微信→Telegram:文字、图片、视频、分享链接、表情、文档、位置、语音、名片、好友请求、系统通知
  • Telegram→微信:文字、图片、表情(以图片发送)、视频

所以说,不支持红包、支付、朋友圈、转账、语音通话、视频聊天等网页版不支持的消息类型。

Q: 有些表情收不到
由于微信网页版的限制,部分受版权保护的表情包不能显示出来,故亦不能转发到 Telegram。

Q: 偶尔会丢消息怎么办?
这个是 Python 3 urllib3 的长时间网络连接出现的问题。上游项目 python-telegram-bot 已在着手解决这个问题。预计在近期(2017 年 1 月)修复。