如何搞Telegram群发营销软件

如何搞Telegram群发营销软件

马草原 2,907 2023-04-09

开发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上一顿搜索🔍
功夫不负有心人,找到了第三方封装好的库,比较主流的有两个:

  1. Pyrogram:https://docs.pyrogram.org
  2. 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的使用

准备工作

  1. 首先需要在Telegram官方申请一个API密钥

https://core.telegram.org/api/obtaining_api_id

image-1683383336336

  1. 登录你的账户后选择API development tools
    image-1683383454441

  2. 随后填写信息,获的你的API秘钥
    image-1683383529006

开始测试

对比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端的控制端

yl

  1. 随后把控制端(Master)部署好,然后配置好参数,在节点管理中添加海外任务节点的SSH连接信息,一键初始化节点,然后导入群发账号等信息
  2. 然后启动任务即可,账号缺少,群组缺少,被禁言,被T等程序都会自动处理全托管式服务。程序无法处理的异常会短信、邮件通知用户。

由于是去年年底搞的,环境已经没有了,勉强找了几张那时候的聊天截图用了(涉及客户隐私具体功能细节就不描述了)
其实主要是和Telegram的API上比较容易踩坑,很多人一开始都是去研究Telegram的官方API然后发现太复杂就放弃了🙉
只要搞定了任务节点的Telegram API交互和弄清楚Telegram的风控规则抽象成参数给用户动态配置,剩下的功能无非就是清晰明了的业务逻辑了。

  1. 监控节点的状态即可,几乎无需人工操作了。
    yl2