Google People API创建联系人遇QUOTA_EXCEEDED/FBS配额超限求助
你之前靠Google People API正常创建联系人,现在突然碰上个HttpError 429,提示FBS quota limit exceeded,但查询联系人完全没问题,而且你提到之前已经建了26888个联系人,当初是通过文档快速启动创建的项目,现在在控制台找不到它。结合这些细节,咱们一步步拆解问题:
一、先搞懂FBS配额到底是什么
FBS配额不是API调用次数的限制,而是Google Contacts的总存储配额——你已经建了近2.7万个联系人,这个量级大概率触达了个人Google账号的联系人存储上限。虽然官方没公开具体数值,但不少用户反馈当联系人数量逼近2-3万时,就会触发这类存储配额限制,刚好和你现在的情况匹配:查询不需要新增存储所以正常,创建要写入存储就直接触发限制。
二、怎么确认是不是存储配额满了
你说项目不在控制台?其实通过快速启动生成的项目肯定存在,只是你没找对地方:
- 打开Google Cloud控制台,点左上角的项目选择器,翻一遍所有关联你账号的项目,大概率能找到名字类似
Quickstart-xxx的项目(就是当初快速启动自动创建的那个) - 进入项目后,去IAM与管理 > 配额页面,搜索
People API相关配额,重点找和「Total contacts」相关的存储配额;要是找不到,直接去Google Contacts网页版手动加个联系人试试——如果手动都加不了,那百分百是存储配额满了
三、具体解决方案
1. 清理冗余联系人腾空间
如果是存储配额满了,最直接的办法就是清理没用的联系人:
- 打开Google Contacts网页版,用「查找重复项」功能批量合并或删掉重复的联系人
- 先导出要保留的联系人做备份,再批量删除老旧、无效的条目,腾出存储空间
2. 确认API调用频率(辅助排查)
你的调用频率是每3秒1个,每天最多200个,远低于People API默认的调用配额(每分钟100次,每天10万次),所以基本可以排除调用次数超限的问题。不过要是放心不下,可以去Cloud控制台的API与服务 > 仪表盘看一下People API的调用统计,确认有没有异常峰值。
3. 再核对下授权范围
你说已经改了授权范围,但还是再确认下:创建联系人需要的是https://www.googleapis.com/auth/contacts这个写入权限,要是之前用的是只读范围,哪怕刷新凭证也没写入权限,但你之前能创建,所以这个可能性很低,不过还是核对下代码里的SCOPES变量更稳妥。
4. 迁移到Workspace账号(如果需要存大量联系人)
要是你的业务需要存超过3万的联系人,个人账号的配额肯定不够,建议迁移到Google Workspace(企业版)账号,Workspace的联系人存储配额更高,还支持更多批量操作。
四、给你的代码加个错误处理优化
虽然现在问题出在配额,但给代码加个错误处理能避免程序直接崩溃,还能更清晰地捕获问题:
def main(): creds = None # 凭证加载逻辑保持不变... service = build('people', 'v1', credentials=creds) print('trying') for i in df_banco_linhas[:2]: if i[1] not in df_csv_linhas: time.sleep(3) try: service.people().createContact( body={ "names": [{"givenName": i[0]}], "phoneNumbers": [{'value': i[1]}] }).execute() print('create: ' + i[0]) except HttpError as err: if err.resp.status == 429: print(f"配额超限,无法创建联系人{i[0]}: {err}") # 这里可以加重试逻辑,或者直接终止循环 break else: print(f"创建联系人{i[0]}失败: {err}") time.sleep(3) else: print('NO') if __name__ == '__main__': main()
内容的提问来源于stack exchange,提问作者Leonardo Henriques

