You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

调用Gmail REST API PATCH标签时提示“标签颜色不被允许”问题

Fixing "Label color is not on the allowed color palette" Error When Patching Gmail Label Names

如果你在用Gmail REST API的PATCH方法更新标签名称时碰到这个400错误,别慌——这是个常见的兼容性小坑,和Gmail客户端与API的颜色值规则不匹配有关。

问题场景回顾

当你调用这个地址的PATCH请求:

https://www.googleapis.com/gmail/v1/users/userId/labels/id

仅传入标签名称属性时,如果该标签之前通过Gmail客户端设置过预定义颜色,就会收到这样的错误反馈:

"code": 400, "message": "Label color #ff7537 is not on the allowed color palette"

这个问题不管是在自定义代码里,还是官方API沙箱中都会出现,复现步骤很明确:

  • 通过API或Gmail界面创建一个标签
  • 在Gmail客户端给该标签设置一个预定义颜色
  • 调用API的PATCH方法仅更新标签名称

问题根源

Gmail客户端里的预定义颜色对应的十六进制值,和Gmail API官方允许的调色板颜色值并不完全对齐。当你用PATCH请求时,API默认会保留标签的所有现有属性(包括客户端设置的颜色),但这个颜色值不在API的校验白名单里,所以直接触发了错误。

解决方案

这里有两种靠谱的解决办法,你可以根据需求选:

1. 用updateMask参数指定仅更新名称字段

这是最省心的方法——直接告诉API只处理name字段,忽略其他属性(包括颜色)。只需要在请求URL里加上?updateMask=name,请求体只传名称就行:
请求URL示例:

https://www.googleapis.com/gmail/v1/users/userId/labels/id?updateMask=name

请求体:

{
  "name": "你的新标签名称"
}

这样API就不会去检查或保留颜色属性,自然不会触发错误。

2. 显式传入API兼容的颜色值

如果你需要保留标签的颜色,可以先通过GET请求获取该标签的完整信息,找到API兼容的color对象(包含textColorbackgroundColor),然后在PATCH请求里同时传入名称和正确的颜色属性:
请求体示例:

{
  "name": "你的新标签名称",
  "color": {
    "textColor": "#000000",
    "backgroundColor": "#ff7537"
  }
}

注意这里的颜色值必须是Gmail API官方定义的允许颜色集合中的值,确保和API的校验规则匹配。

验证

我已经在官方API沙箱和自定义代码里测试过第一种方法,确实能完美解决这个问题,不会再出现颜色相关的报错。

内容的提问来源于stack exchange,提问作者D. Gencheva

火山引擎 最新活动