如何通过媒体组ID发送Telegram机器人的媒体组?
问题原因及解决方案
你的代码无效是因为Telegram Bot API不支持直接通过媒体组ID发送整个媒体组。媒体组ID只是用来标记一组关联的媒体消息,无法直接作为文件标识使用。attach_photo需要的是单个媒体文件的file_id,而不是媒体组ID。
正确的处理流程
1. 接收媒体组时的存储逻辑
收到媒体组消息时,不要只存媒体组ID,需要把该组内每个媒体文件的file_id和类型(照片/视频/文档)与媒体组ID关联,一起存入数据库。
示例接收逻辑:
# 处理收到的媒体组消息 if message.media_group_id: media_type = None file_id = None if message.photo: media_type = "photo" # 取最高分辨率照片的file_id file_id = message.photo[-1].file_id elif message.video: media_type = "video" file_id = message.video.file_id elif message.document: media_type = "document" file_id = message.document.file_id # 将媒体组ID、类型、file_id关联存入数据库 # 示例:db.save_media_item(message.media_group_id, media_type, file_id)
2. 发送媒体组的代码实现
从数据库中根据媒体组ID取出所有关联的媒体条目,按类型逐个添加到MediaGroup中:
# 从数据库获取该媒体组的所有媒体条目 # 示例:media_items = db.get_media_items_by_group_id(data[0][6]) # 每个条目结构:{'type': 'photo', 'file_id': 'xxx'} media = types.MediaGroup() for item in media_items: if item['type'] == 'photo': media.attach_photo(photo=item['file_id']) elif item['type'] == 'video': media.attach_video(video=item['file_id']) elif item['type'] == 'document': # 文档加入媒体组需符合Telegram规则(如同组内文档类型一致) media.attach_document(document=item['file_id']) await bot.send_media_group(callback_query.message.chat.id, media=media)
关键注意事项
- 媒体组内的媒体类型需符合Telegram限制:比如照片和视频可以同组,但照片和普通文档不能混合。
file_id是API识别文件的唯一标识,必须保存;媒体组ID仅用于分组关联,不能直接调用。
内容的提问来源于stack exchange,提问作者auem
相关产品推荐
相关产品推荐

