aiogram中如何获取机器人已发送至Telegram频道的消息ID
aiogram框架获取频道已发消息ID并实现评论回复的方法
核心逻辑
aiogram所有调用发送消息/媒体的接口执行完成后,会直接返回对应已发送内容的Message对象,不需要额外发起查询请求,直接读取该对象的message_id属性,就能拿到这条消息在会话中的唯一ID。
要实现频道消息的评论挂载效果,需要配合频道关联的讨论组ID,传入reply_to_message_id参数绑定目标消息ID即可。
代码示例(基于aiogram 3.x主流版本)
1. 发送频道消息并获取消息ID
from aiogram import Bot from aiogram.types import Message # 初始化机器人实例,替换为你自己的Bot Token bot = Bot(token="YOUR_BOT_TOKEN") async def send_channel_post(): # 替换为你的频道ID,支持@用户名格式或者纯数字ID channel_chat_id = "@your_own_channel" # 发送消息,接口返回值即为已发送消息对应的Message实例 sent_post: Message = await bot.send_message( chat_id=channel_chat_id, text="这是机器人发布的频道正文内容" ) # 读取message_id属性拿到目标ID post_message_id = sent_post.message_id print(f"已发送频道消息ID:{post_message_id}") return post_message_id
2. 针对目标消息发送评论
async def leave_comment(post_message_id: int): # 替换为频道绑定的关联讨论组ID,注意必须是数字格式的群组ID discuss_chat_id = -1001234567890 await bot.send_message( chat_id=discuss_chat_id, text="这是机器人自动发送的评论内容", # 绑定要回复的消息ID,即可形成评论挂载效果 reply_to_message_id=post_message_id )
注意事项
- 所有发送类接口(包括
send_photo、send_video、send_document等发媒体的接口)返回值结构一致,都可以直接通过.message_id拿到对应内容的ID,没有例外。 - 评论功能依赖频道的关联讨论组,必须提前在频道设置中开启关联讨论组,否则不存在评论区,接口会直接报错。
- 机器人需要同时被添加为频道管理员、关联讨论组成员/管理员,拥有对应场景的发消息权限,否则会触发权限不足报错。
- 评论发送时
chat_id必须填关联讨论组的ID,不能填频道本身的ID——如果填频道ID加reply_to_message_id,只会在频道内发布一条带引用的新帖子,不会进入评论区。 - 该逻辑同样适用于回复频道内非机器人发布的内容,只要拿到对应内容的
message_id即可完成评论。 - 关联讨论组的ID可以通过将机器人加入讨论组后,在群组内发送任意消息,通过机器人的更新事件拿到对应群组的数字ID,不需要额外调用复杂接口。
内容的提问来源于stack exchange,提问作者DimaFich
相关产品推荐
相关产品推荐

