Telegram机器人转发消息到其他群:从零搭建自动化消息中转站

本文手把手教你使用Telegram机器人将指定群消息自动转发到其他群,涵盖机器人创建、获取API Token、配置转发规则、处理媒体与文本、多群分发等实用技巧。

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

引言

在Telegram群组管理中,经常需要将一个群的消息同步到另一个群,比如公司内部通知、项目协作、社群联动等。手动复制粘贴显然效率低下,而Telegram机器人可以完美解决这个问题。本文将为你提供一套从零开始的完整教程,使用机器人自动转发指定群的消息到目标群,并支持文本、图片、视频等常见消息类型。

一、转发机器人的工作原理

Telegram机器人本质上是运行在服务端的程序,通过Bot API与Telegram服务器通信。要实现消息转发,机器人需要同时加入源群和目标群,并开启“隐私模式”(Privacy Mode)以接收群内所有消息。默认情况下,机器人只能看到命令消息,需要向@BotFather发送 /setprivacy 并选择 Disable 才能读取全部消息。

随后,机器人通过长轮询(Long Polling)或Webhook实时获取更新,判断消息来自哪个群,然后使用 forwardMessage 方法将消息转发到目标群。整个过程可以全自动,无需人工干预。

二、准备工作:创建机器人并获取Token

  1. 在Telegram中搜索 @BotFather,发送 /newbot
  2. 按提示输入机器人的显示名称和用户名(必须以 bot 结尾)。
  3. 创建成功后,BotFather会返回一个API Token,形如 123456789:ABCdefGHI...,务必保存好。
  4. 将机器人加入源群和目标群,并给予管理员权限(至少具备“发送消息”和“读取消息”权限)。
  5. 在源群中,向机器人发送消息或将其设为管理员,确保它能收到消息。

三、方案一:使用现成转发机器人

如果你不想编写代码,可以直接使用现成的转发机器人,例如 Group ButlerCombot 等。这些机器人通常支持简单的转发规则设置,但灵活性有限,且部分高级功能需要付费。具体操作如下:

  1. 在Telegram搜索并添加所选机器人为好友,或直接拉入群。
  2. 按照机器人的提示设置“源群”和“目标群”,通常通过命令如 /forward 完成。
  3. 启用“自动转发”开关,即可实现基础消息同步。

但现成机器人无法处理复杂的过滤、重写或多源多目标场景,因此推荐有一定技术基础的用户使用方案二。

四、方案二:用Python脚本实现自定义转发

使用Python和 python-telegram-bot 库,可以轻松编写定制化转发脚本。以下是一个最小示例:

import asyncio
from telegram import Bot
from telegram.error import TelegramError

API_TOKEN = '你的BOT_TOKEN'
SOURCE_CHAT_ID = -100123456789  # 源群ID
TARGET_CHAT_ID = -100987654321  # 目标群ID

bot = Bot(token=API_TOKEN)

audio_group = {}

async def forward_message(update, context):
    message = update.message
    if message.chat_id != SOURCE_CHAT_ID:
        return
    try:
        await message.forward(chat_id=TARGET_CHAT_ID)
    except TelegramError as e:
        print(f'转发失败: ')

async def main():
    from telegram.ext import Application, MessageHandler, filters
    app = Application.builder().token(API_TOKEN).build()
    app.add_handler(MessageHandler(filters.ALL, forward_message))
    await app.run_polling()

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

运行脚本前,需安装依赖:pip install python-telegram-bot。获取群ID的方法:将机器人加入群后,访问 https://api.telegram.org/bot<TOKEN>/getUpdates,发送一条消息,即可从JSON中提取 chat.id

五、配置多群转发与消息过滤

在实际应用中,你可能需要将多个源群的消息转发至不同目标群,或只转发包含特定关键词的消息。这可以通过修改 forward_function 的判定条件实现:

  • 多源多目标:使用字典映射 SOURCE_CHAT_IDTARGET_CHAT_ID,遍历判断。
  • 关键词过滤:使用 filters.Text 结合正则表达式,例如 filters.Regex(r'重要')
  • 合并转发:将多条消息合并为一条链接,减少刷屏,可以使用 message.forward 或复制消息实体。

例如,以下A将带有“通知”关键词的消息转发到多个管理群:

mapping = {-100111: [-100222, -100333]}

async def smart_forward(update, context):
    msg = update.message
    if msg.chat_id in mapping and '通知' in msg.text:
        for target in mapping[msg.chat_id]:
            await msg.forward(chat_id=target)

六、常见问题与注意事项

1. 机器人收不到消息?

检查是否已在BotFather中关闭隐私模式(/setprivacy 选择 Disable),并确认机器人在源群中是管理员。

2. 媒体消息能否完全转发?

可以。使用 message.forward 会保留原始消息的媒体、文字和签名,转发后显示“Forwarded from”。

3. 如何避免循环转发?

如果两个群互相设置转发,消息会无限循环。请在逻辑中增加已处理消息ID的记录,或使用 message.forward_date 判断时间戳。

4. 转发会丢失原文作者信息吗?

默认转发会保留原作者的姓名和头像,点击跳转到原消息。如果要隐藏来源,需使用 sendMessage 并提取文本,但媒体信息会丢失。

5. 是否有更简单的托管方案?

可以使用云函数(如腾讯云函数、AWS Lambda)部署脚本,实现24小时在线,无需自备服务器。

总结

通过Telegram机器人转发消息到其他群,可以极大提升群组管理效率。本文从原理、现成工具到自建脚本,提供了完整的解决方案。建议优先尝试现成机器人,若无法满足需求,再参考Python脚本自定义。无论是企业通知、社群联动还是个人自动化,掌握这一技能都将为你带来长远便利。

FAQ

下载与安装

常见问题

Telegram机器人转发消息需要什么权限?

机器人需要同时加入源群和目标群,并开启隐私模式禁用(Disable),且在源群中拥有管理员权限(至少能读取消息)。

转发消息时能保留原消息的作者信息吗?

可以。使用forwardMessage方法转发会保留原作者的姓名和头像,并显示转发来源。

如何防止转发机器人造成消息循环?

可以在脚本中记录已处理消息的ID,或设置转发方向规则,避免多个群互相转发形成死循环。