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

纯Python无框架向Telegram发送相册多图遇400错误求解决

Telegram Bot sendMediaGroup接口400错误排查与修复

问题根源

你遇到的Bad Request: can't parse media JSON object错误,核心原因有两个:

  1. 手动拼接JSON字符串不规范:用str(files_content_to_send).replace("'", '"')生成的字符串并非标准JSON格式,一旦文件名或描述包含空格、引号等特殊字符,就会导致API无法解析。
  2. caption参数违反API规则:sendMediaGroup接口中,只有媒体组的第一个元素的caption和parse_mode会生效,给每个元素都添加这两个参数属于冗余操作,还可能干扰解析逻辑。

修复方案

  1. 使用json.dumps()序列化media列表,生成标准JSON字符串,替代手动拼接的方式。
  2. 仅给第一个媒体对象添加caption和parse_mode,其余对象只保留type和media字段。
  3. 优化文件标识:用简洁的序号命名(如photo_0)作为attach的键,避免文件名含特殊字符导致的匹配失败。

修正后的代码

import json
import requests

def sendMediaGroup(pict_full_filename__list, description, to_whom=None, silent=True):
    command = (T_url + "sendMediaGroup")

    sent_picture__dict = dict()
    files_content_to_send = list()

    for idx, one_pict in enumerate(pict_full_filename__list):
        # 用序号作为attach标识,规避文件名特殊字符问题
        attach_key = f"photo_{idx}"
        sent_picture__dict[attach_key] = open(one_pict, 'rb')
        
        media_item = {
            'type': 'photo',
            'media': f'attach://{attach_key}'
        }
        # 仅第一个媒体对象设置caption和解析模式
        if idx == 0:
            media_item['caption'] = description
            media_item['parse_mode'] = 'HTML'
        
        files_content_to_send.append(media_item)

    parameters = {
        "chat_id": str(to_whom),
        "media": json.dumps(files_content_to_send),  # 正确序列化JSON
        "disable_notification": silent
    }

    response = requests.post(command,
                             data=parameters,
                             files=sent_picture__dict)

    response_data = json.loads(response.text)
    if not response_data["ok"]:
        print('FAILED')
        print(f'Recipient: {to_whom}')
        print(f'Reply: {response.text}')
        print()

    # 统一关闭文件句柄
    for f in sent_picture__dict.values():
        f.close()

额外说明

  • 确保T_url已正确配置为Telegram Bot API基础地址(格式为https://api.telegram.org/bot<你的BotToken>/)。
  • 若发送视频、文档等其他媒体,只需修改type字段为对应值(如video、document),规则与图片一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:45:36