配额与限频

限制分两层:协议层硬限制(消息大小、频率、成员数等,来自冻结契约)与应用层配额/开关(控制台按应用配置,未开通返回 1021)。本页把两层放在一起,方便做容量与错误处理设计。

协议层硬限制​

限制项值
消息体5120 字节
文本长度5000 字符
单用户发送频率120 条/分钟
输入状态频率60 条/分钟
每会话离线消息500 条
历史分页默认 20 / 最大 100
普通群成员3000
超级群成员100000
聊天室在线5000
撤回窗口120000ms
在线状态批量 / 订阅100 / 500
已读明细分页默认 50
合并转发标题 64 字符 / 条目 100 / 正文 16384 字节

应用层配额与开关​

服务开通、功能开关与配额在控制台管理(服务开通 / 配额 / 功能配置)。关闭服务后,对应接口返回 1021;超出配额返回 1025。

项行为错误码
服务未开通接口拒绝,提示开通1021
功能开关关闭该能力不可用(如关闭群能力后建群失败)1021 / 1003
配额超限调用被拒绝;可重试但需提额或降量1025
发送频率超限按窗口限流;响应可带 Retry-After1008

限频相关 HTTP 行为​

项值
状态码HTTP 429
业务码1008(可重试)
响应头Retry-After: 1(秒)
默认限频未配置时不做额外限频;客户端仍受协议层 120 条/分钟约束
按 operation 覆盖控制台「接口调频」可按 operationId 设置 QPS
JavaScript
// 统一处理限频:优先尊重 Retry-After,再指数退避
async function callWithBackoff(fn, maxAttempts = 4) {
  for (let attempt = 0; ; attempt++) {
    try {
      return await fn();
    } catch (error) {
      const rateLimited = error?.status === 429 || error?.code === 1008;
      if (!rateLimited || attempt >= maxAttempts) throw error;
      const retryAfter = Number(error?.headers?.['retry-after'] || 1) * 1000;
      await new Promise((r) => setTimeout(r, retryAfter * 2 ** attempt));
    }
  }
}

容量与配额的关系​

  • 协议限制决定“单条消息/单用户”的上限;应用配额决定“整个应用”的上限;两者都要过。
  • 限频是保护服务端的手段,不是业务特性:客户端必须做本地节流,不要靠捕获 1008 来限速。
  • 配额规划见 性能与容量:先算峰值入站/扇出,再核对配额与集群能力。

相关页面​