You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Telegram Bot API获取指定频道的聊天记录?

如何通过Telegram Bot API获取指定频道的聊天记录

嘿,我来帮你搞定这个问题!Telegram Bot API的getUpdates接口确实会返回机器人收到的所有消息(来自所有接入的频道、私聊等),但它本身并不支持直接指定chat_id来过滤结果。不过我们有几个实用的办法来实现你想要的效果:

方法1:本地筛选getUpdates返回的结果

这是最直接的方式——先调用getUpdates获取所有消息,然后在你的代码里手动筛选出目标频道的内容。

步骤说明:

  • 先调用getUpdates拿到所有更新数据
  • 遍历每个更新,区分普通消息(message字段)和频道帖子(channel_post字段,频道消息会存在这里)
  • 检查每条消息的chat.id是否匹配你要的频道ID(可以是@频道用户名或者-100开头的数字ID,数字ID更稳定)
  • 提取并保留匹配的消息

代码示例(Python):

import requests

# 替换成你的机器人Token和目标频道ID
BOT_TOKEN = "你的机器人Token"
TARGET_CHANNEL = "-1001234567890"  # 或者 "@your_channel_username"

# 调用getUpdates接口
response = requests.get(f"https://api.telegram.org/bot{BOT_TOKEN}/getUpdates")
updates = response.json().get("result", [])

# 筛选目标频道的消息
target_messages = []
for update in updates:
    # 处理不同类型的消息
    if "channel_post" in update:
        post = update["channel_post"]
        chat_id = str(post["chat"]["id"])
    elif "message" in update:
        post = update["message"]
        chat_id = str(post["chat"]["id"])
    else:
        continue  # 忽略其他类型的更新(比如回调查询等)
    
    # 匹配目标频道(兼容数字ID和用户名)
    if chat_id == TARGET_CHANNEL or post["chat"].get("username") == TARGET_CHANNEL.lstrip("@"):
        target_messages.append(post)

# 输出筛选后的消息内容
for msg in target_messages:
    print(f"[{msg['date']}] {msg.get('text', '无文本内容')}")

方法2:使用Webhook实时过滤并存储消息

如果需要长期跟踪指定频道的消息,设置Webhook会更高效:

  • 配置Webhook后,Telegram会把所有新消息实时推送到你的服务器地址
  • 在服务器端接收消息时,直接检查chat.id,只处理目标频道的内容
  • 可以把这些消息存储到数据库(比如MySQL、SQLite),之后随时根据chat_id查询历史记录

重要注意事项:

  • 频道权限:确保你的机器人是目标频道的管理员,并且拥有「查看消息」的权限,否则无法获取频道内容
  • 频道ID获取:如果不知道频道的数字ID,可以先调用一次getUpdates,发送一条测试消息到频道,然后在返回结果里找到channel_post.chat.id
  • getUpdates的局限性:这个接口只能获取机器人启动后(或上次拉取后)的新消息,无法获取更早的历史消息。如果需要历史消息,可能需要借助Telegram的MTProto API(比如使用第三方MTProto库)

内容的提问来源于stack exchange,提问作者abhijeet Mandal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:32:58