Telegram机器人监听群消息并自动回复:从Webhook到关键词响应的完整实战

本文详细介绍如何用Python实现Telegram机器人监听群消息并自动回复,涵盖Bot API轮询、Telethon客户端模式、关键词匹配、权限控制、防刷屏机制等核心内容,提供可直接部署的完整代码示例。

阅读提示建议先浏览文章结构,再按需深入阅读具体段落。

在Telegram社群运营中,自动监听群消息并回复是最高频的需求之一。无论是客服答疑、关键词提醒,还是社群管理员的自动化辅助,一个能“听懂”群聊并即时响应的机器人,都能大幅提升效率。本文将从实战角度出发,手把手教你用Python实现Telegram机器人监听群消息并自动回复,覆盖两种主流方案,并给出可运行代码与优化建议。

方案对比:Bot API轮询 vs Telethon客户端模式

在开始之前,我们需要明确两种实现路径的区别,以便根据场景选择最合适的方式。

  • Bot API轮询(getUpdates / Webhook):官方Bot API,通过HTTP请求获取更新。适合个人机器人和中小型群组,部署简单,但只能操作机器人自己可见的消息。
  • Telethon客户端模式:基于MTProto协议,以用户身份登录,可以监听整个群组的消息(包括普通用户的消息),功能更强大,但需要用户账号授权,存在一定的账号风险。

如果你要监听的是“群内所有人的发言”,必须使用Telethon;如果只处理机器人收到的命令或回复(比如@机器人),则用Bot API即可。下面分别实战。

环境准备与机器人创建

无论哪种方案,都需要先安装Python环境(3.8+),并创建Telegram机器人。步骤如下:

  1. 在Telegram中搜索 @BotFather,发送 /newbot,按提示设置名称和用户名,获得 BOT_TOKEN(形如 123456:ABC-DEF...)。
  2. 安装必要的库:
    pip install telethon python-telegram-bot
    (若只用Bot API,可仅安装 python-telegram-bot)。
  3. 准备一个测试群组,并把机器人(或你的用户账号)加入群组,授予相应权限。

用Telethon监听群消息并回复(完整代码)

Telethon允许你以用户身份监听群内所有消息。下面是一个最简可用的示例:监听指定群聊中所有包含“订单”或“客服”关键词的消息,并自动回复一条固定文案。

import asyncio
from telethon import TelegramClient, events

# 在 https://my.telegram.org 获取 api_id 和 api_hash
api_id = 123456
api_hash = 'your_api_hash'
phone = '+8613900000000'  # 手机号
client = TelegramClient('session_name', api_id, api_hash)

# 群组标识:可以是群名、群ID或邀请链接(需设置为可解析)
TARGET_GROUP = 'My Group'

@events.register(events.NewMessage(chats=TARGET_GROUP))
async def handler(event):
    # 忽略自己发的消息,避免死循环
    if event.out:
        return

    text = event.message.text or ''
    # 关键词触发回复
    if ('订单' in text) or ('客服' in text):
        await event.reply('您好,已收到您的消息,客服将尽快处理,请稍候。')

async def main():
    await client.start(phone=phone)
    print('监听中... Ctrl+C 退出')
    await client.run_until_disconnected()

if __name__ == '__main__':
    asyncio.run(main())

注意事项:

  • chats 参数支持群组名精确匹配,但建议使用群ID或邀请链接以提高准确率。
  • 更多过滤条件(如只回复图片、视频等)可通过 event.message.media 判断。
  • Telethon需要有效的手机号登录,并会提示输入验证码,请确保账号安全。

用Bot API轮询实现自动回复(Webhook与getUpdates)

使用官方Bot API,监听机器人被@或接收的消息。下面用 python-telegram-bot 实现简单轮询,监听群组中 /keyword 命令并回复。

from telegram.ext import Application, CommandHandler, MessageHandler, filters

BOT_TOKEN = '123456:ABC-DEF'

async def start(update, context):
    await update.message.reply_text('机器人正常运行,发送 /help 查看指令。')

async def auto_reply(update, context):
    # 非命令消息触发回复(按需过滤)
    if update.message.chat.type in ('group', 'supergroup'):
        if '你好' in update.message.text:
            await update.message.reply_text('你好呀!我是本群助手机器人。')

async def help_cmd(update, context):
    await update.message.reply_text('支持关键词:你好')

def main():
    app = Application.builder().token(BOT_TOKEN).build()
    app.add_handler(CommandHandler('start', start))
    app.add_handler(CommandHandler('help', help_cmd))
    # 只处理文本消息,忽略命令
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, auto_reply))
    app.run_polling(allowed_updates=Update.ALL_TYPES)

if __name__ == '__main__':
    main()

这种方式仅当群内用户直接@机器人或发送命令时才会触发,默认收不到普通用户的纯消息。若需要监听所有群消息,请使用Telethon方案。

高级技巧:关键词匹配、白名单与防刷屏

实际生产环境中,直接回复所有消息可能造成骚扰。我们需要加入精细控制:

  • 正则匹配:支持更灵活的关键词,例如价格、电话、邮箱等,使用 re.search
  • 用户白名单/黑名单:只回复特定用户,或忽略指定用户,避免机器人被滥用。
  • 频率限制:同一用户短时间内多次触发,只回复一次,防止刷屏。
  • 随机延时:模拟人工回复,降低被平台风控的概率。

下面是一个升级版的Telethon示例,整合了这些功能:

import asyncio, re, time
from telethon import TelegramClient, events

# ... 初始化同上 ...

# 配置
ALLOWED_USERS = None  # None 表示所有用户,或写入用户ID集
BLACKLIST = {12345678}
LAST_REPLY = {}  # 用于频率控制

@events.register(events.NewMessage(chats=TARGET_GROUP))
async def handler(event):
    if event.out:
        return
    sender = await event.get_sender()
    user_id = sender.id
    if BLACKLIST and user_id in BLACKLIST:
        return
    if ALLOWED_USERS and user_id not in ALLOWED_USERS:
        return

    text = event.message.text or ''
    # 正则匹配价格或订单号
    if re.search(r'订单[0-9]{6,}|价格.*?\d', text):
        # 防刷屏:同一用户120秒内只回复一次
        now = time.time()
        if user_id in LAST_REPLY and now - LAST_REPLY[user_id] < 120:
            return
        LAST_REPLY[user_id] = now
        await event.reply('相关业务已提交工单,请耐心等待。')

潜在风险与合规建议

使用Telethon模拟用户登录会触犯Telegram服务条款,存在封号风险。建议:

  • 优先使用官方Bot API,配合 getUpdates 轮询或Webhook,安全稳定。
  • 若必须监听群内消息,可使用群组添加机器人并设为管理员,机器人通过 chat_membermessage 更新(Bot API的 gruop 消息在特定条件下机器人也能获取?实际上Bot默认收不到普通消息,除非启用 privacy mode(需通过BotFather设置)。设置后机器人也只能收到命令、被@和回复的消息,并非全部。若想全部,还是需要Telethon)。
  • 对用户隐私保持尊重,只处理必要信息,避免存储敏感内容。
  • 定期检查官方API文档,因为策略可能更新。

总结

本文从零开始演示了Telegram机器人监听群消息并自动回复的两种实现路径:官方Bot API适合标准场景,Telethon适合强监听需求。通过关键词匹配、白名单和频率控制,可以打造一个高效且不扰人的群管助手。建议先在小范围试用,逐步优化回复逻辑,最终部署到正式环境。记住,合规与安全永远是自动化脚本的基石。

FAQ

下载与安装

常见问题