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

如何通过Telegram Python API获取消息的message_id

获取指定聊天/频道消息message_id的几种常用方法

针对你用pyTelegramBotAPI开发的场景,常用的获取方式分三类:

1. 实时监听新消息自动获取

这是最常用的场景,如果你需要转发刚产生的新消息,直接在对应的消息处理函数中从消息对象的message_id属性取值即可:

# 示例:自动转发源频道@from的所有新消息到目标频道@send_to
@bot.channel_post_handler(chat_id='@from')
def auto_forward(post):
    # post就是源频道刚产生的消息对象,直接拿message_id
    bot.forward_message('@send_to', '@from', post.message_id)

如果是监听普通群聊/私人聊天的消息,把channel_post_handler换成message_handler即可。

2. 手动获取单条历史消息的ID

如果你需要转发已经发送过的旧消息,可以用两种方式拿ID:

  • 手动查询:打开Telegram桌面端,找到目标消息,右键选择「复制消息链接」,链接末尾的数字就是该消息的message_id。比如链接格式为t.me/频道名/123,对应的message_id就是123
  • 代码批量查询:调用get_chat_history拉取历史消息列表,筛选你需要的消息对应的ID:
# 拉取@from频道最近20条消息,输出每条的ID和内容
recent_msgs = bot.get_chat_history(chat_id='@from', limit=20)
for msg in recent_msgs:
    print(f"ID: {msg.message_id} | 内容:{msg.text if msg.text else '[非文本消息]'}")

3. 命令触发时动态获取ID

针对你写的/forward命令场景,常用的交互逻辑是让用户回复要转发的消息后再触发命令,直接取被回复消息的ID即可:

@bot.message_handler(commands=['forward'])
def forward_handler(message):
    # 校验用户是否回复了消息
    if not message.reply_to_message:
        bot.reply_to(message, "请先回复要转发的消息,再执行/forward命令")
        return
    # 取被回复消息的ID
    target_msg_id = message.reply_to_message.message_id
    bot.forward_message(chat_id='@send_to', from_chat_id='@from', message_id=target_msg_id)

注意:机器人必须拥有源聊天/频道的管理员权限,且开启读取消息的权限,才能正常获取消息ID和转发消息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:06:04