开发Telegram群发营销软件
Telegram是国外一款火爆的即时通讯软件,用户量高达6亿。
关于分享
其实这是来自一位从事比特币交易的客户定制的一套营销引流系统(之前是传统的桌面端程序,纯人工操作的那种,效率低下且不支持人工值守)。在开发过程中也踩了很多坑,而且资料极其匮乏;能搜到的大多数是怎么开发一个Telegram Bot。并且Telegram营销在某些领域需求量特别大,而很多人一开始都和我一样专注研究官方复杂的原生API;所以这里把最简单的方式分享给大家。
开发环境
操作系统:MacOS
数据库:MySQL+Redis
任务端(Slave):Python3
管理端(Master):Java11
管理端UI(Master-UI):VUE
问题解决
核心任务端
Telegram的客户端是开源的,并且Telegram官方是提供API的,但是官方API使用比较复杂
Telegram 官方API:https://core.telegram.org/api
随后在Google、Github上一顿搜索🔍
功夫不负有心人,找到了第三方封装好的库,比较主流的有两个:
- Pyrogram:https://docs.pyrogram.org
- Telethon:https://docs.telethon.dev
Pyrogram和Telethon都是用于与Telegram API进行交互的Python库,它们都有自己的优缺点,下面是它们的比较:
- 异步支持:Telethon在异步支持方面表现更加出色,它是一个专门为异步I/O操作而设计的库,性能更好,处理大量请求和响应更加高效。而Pyrogram在异步支持方面相对较弱,虽然也提供了异步支持,但是相对于Telethon来说,它的性能要稍逊一些。
- API设计:两者在API设计方面有所不同,Telethon的API设计更加贴近Telegram的API结构,对于对Telegram API比较熟悉的开发者来说,使用起来更加自然和舒适。而Pyrogram则提供了更加简洁和易用的API,更加适合新手或不太熟悉Telegram API的开发者使用。
- 代码量:Telethon的代码量比Pyrogram要多一些,这也反映了它更加全面和复杂的功能。Pyrogram则在代码量上相对较少,更加简洁,使用起来更加轻便。
- 社区支持:两者都有庞大的社区支持,但是由于Telethon的历史更为悠久,因此它的社区更加成熟,资源更加丰富。
- 文档:Telethon的文档相对比较全面和详细,而Pyrogram的文档相对来说要少一些。但是Pyrogram的代码注释更加详细和清晰,对于阅读源代码和理解库的内部工作原理更有帮助。
最终我选择了Telethon
管理端
管理端千篇一律,随意找个JavaWeb管理后台的框架使用即可
软件设计
采用一个管理端(Master)+若干从任务端(Slave)
- 任务节点:真正执行群发广告、私聊广告、自动加好友、拉人等具体操作的节点,通常是境外服务器,需要若干台。
- 管理节点:管理任务节点的服务,暴露WebUI给使用者操作的节点,通常是境内服务器(方便访问)且只有一台。
Telethon的使用
准备工作
- 首先需要在Telegram官方申请一个API密钥
-
登录你的账户后选择
API development tools
-
随后填写信息,获的你的API秘钥
开始测试
对比Telegram原生API,Telethon的真的超级简单……😂
import datetime
import socks
from telethon import TelegramClient
from telethon.tl import functions
api_id = 申请到的API ID
api_hash = '申请的API HAShH'
# 由于我的电脑是境内网络所以加了一层SOCKS5代理访问Telegram服务器
client = TelegramClient('Telegram账户(通常是手机号)', api_id, api_hash, proxy=(socks.SOCKS5, "127.0.0.1", 15733))
async def main():
# 创建客户端 此时连接Telegram的服务器
me = await client.get_me()
# me是个user对象 可以获取用户的各种信息
username = me.username
# 输出一下当前用户的用户名
print(username)
# 输出一下当前用户的手机号
print(me.phone)
# 加入指定群聊/频道
result = await client(functions.channels.JoinChannelRequest(
channel='https://t.me/tfwzclz'
))
# 向群组发送简单消息
await client.send_message(1001453133135, '大家好')
# 发送验证码
phone = '+8618939187503'
await client.send_code_request(phone)
# 更多功能参考Telethon’s API:https://docs.telethon.dev/en/stable/concepts/full-api.html
# 获取聊天消息
result = await client(functions.messages.GetHistoryRequest(
peer="So1234Bot",
offset_id=0,
offset_date=datetime.datetime.today(),
add_offset=0,
limit=100,
max_id=0,
min_id=0,
hash=-12398745604826
))
with client:
client.loop.run_until_complete(main())
上面这个简单的例子便完成了登录账号、加入群组,发送消息;更多功能可以查询API调用不用方法即可。
随后我们开发一个Python程序提供HTTP接口与管理端交互。
随后开发一个Java端的控制端
- 随后把控制端(Master)部署好,然后配置好参数,在节点管理中添加海外任务节点的SSH连接信息,一键初始化节点,然后导入群发账号等信息
- 然后启动任务即可,账号缺少,群组缺少,被禁言,被T等程序都会自动处理全托管式服务。程序无法处理的异常会短信、邮件通知用户。
由于是去年年底搞的,环境已经没有了,勉强找了几张那时候的聊天截图用了(涉及客户隐私具体功能细节就不描述了)
其实主要是和Telegram的API上比较容易踩坑,很多人一开始都是去研究Telegram的官方API然后发现太复杂就放弃了🙉
只要搞定了任务节点的Telegram API交互和弄清楚Telegram的风控规则抽象成参数给用户动态配置,剩下的功能无非就是清晰明了的业务逻辑了。
- 监控节点的状态即可,几乎无需人工操作了。