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

如何通过媒体组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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:30:59