400 '$.payload.messages.text' length must be less or equal than 1048576; (reques...

2026年08月22日 20:01 27.76 秒 success

错误信息

API Error: 400 '$.payload.messages.text' length must be less or equal than 1048576; (request id: 20260822115420030318246c14228f5Z37haJwp)

AI 解决方案

🔍 错误分析

1. 🌐 错误翻译


原文:API Error: 400 '$.payload.messages.text' length must be less or equal than 1048576;  (request id: 20260822115420030318246c14228f5Z37haJwp)
译文:API错误:400 '$.payload.messages.text' 的长度必须小于或等于1048576;(请求ID:20260822115420030318246c14228f5Z37haJwp)

2. 🎯 原因分析


该错误是API请求参数校验失败导致的,核心原因在于 payload.messages.text 字段的内容长度超出了API规定的上限。具体表现为文本内容超过了 1,048,576 字节(即1MB),触发了接口的参数长度限制校验,导致400错误。

3. 💡 解决方案


需要对 payload.messages.text 中的文本内容进行截断或分块处理,确保单段文本长度不超过1,048,576字节。以下是Python示例代码,实现文本自动截断:
def truncate_text_by_bytes(text, max_bytes=1048576, encoding='utf-8'):
    """
    将文本截断至指定字节数内
    :param text: 原始文本
    :param max_bytes: 最大允许字节数
    :param encoding: 编码格式
    :return: 截断后的文本
    """
    try:
        # 先将文本编码为字节,检查是否超过限制
        encoded_bytes = text.encode(encoding)
        if len(encoded_bytes) <= max_bytes:
            return text
        
        # 从后向前截断,保留最大允许长度,确保截断点在字符边界
        return encoded_bytes[:max_bytes].decode(encoding, errors='ignore')
    except Exception as e:
        # 编码异常时的兜底处理,直接按字节截断后忽略错误解码
        return text[:max_bytes]

# 使用示例:对payload中需要发送的文本进行处理
original_text = "这里是超长的待发送文本内容..."  # 替换为实际要发送的文本
truncated_text = truncate_text_by_bytes(original_text, max_bytes=1048576)

# 构造符合要求的payload(根据实际情况调整字段结构)
payload = {
    "messages": [
        {
            "text": truncated_text  # 使用截断后的文本
        }
    ]
}

4. 🛡️ 预防措施


  • 发送前预校验:每次发送API请求前,通过代码主动检查关键文本字段的字节长度,避免请求发送后才触发校验失败;

  • 文本分块策略:若业务需要发送超长文本,优先采用分块发送(将大文本拆分为多个符合长度限制的片段,按顺序发送),而非强行截断导致内容丢失;

  • 工具辅助检查:可使用字节长度计算工具或在开发调试阶段打印文本字节长度(如Python中 len(text.encode('utf-8'))),提前发现潜在超长内容。