Google Apps Script快速删除全部联系人:解决People API超时问题
解决Google Apps Script批量删除联系人超时问题
问题背景
现有约1500个Google联系人,使用People API单条删除时,6分钟仅删除250个就触发执行超时。需要实现批量获取所有联系人resourceName,并按500个一组批量删除,完成每日清空联系人后从CSV重新导入的需求。
关键优化点
- 完整获取所有联系人:People.Connections.list接口默认分页返回结果,需通过
nextPageToken循环获取全部联系人的resourceName - 批量删除接口复用:使用
People.People.batchDeleteContacts接口,单次最多可删除500个联系人,大幅提升效率 - 超时规避:拆分任务为多个小批量操作,避免单次执行时间超过Google Apps Script的6分钟限制
完整实现代码
// 主函数:清空所有联系人 function deleteAllContacts() { // 1. 获取所有联系人的resourceName const allResourceNames = getAllContactResourceNames(); if (allResourceNames.length === 0) { console.log("没有可删除的联系人"); return; } // 2. 按500个一组拆分,批量删除 const batchSize = 500; for (let i = 0; i < allResourceNames.length; i += batchSize) { const batch = allResourceNames.slice(i, i + batchSize); deleteContactBatch(batch); // 每次批量操作后短暂延迟,避免API调用过于频繁 Utilities.sleep(1000); } console.log(`已成功删除 ${allResourceNames.length} 个联系人`); } // 获取所有联系人的resourceName(处理分页) function getAllContactResourceNames() { let resourceNames = []; let pageToken = null; do { const options = { personFields: "names", // 必须指定至少一个person字段,这里选names即可 pageToken: pageToken, pageSize: 1000 // 单次请求最大返回1000条,提升获取效率 }; const response = People.People.Connections.list("people/me", options); if (response.connections) { resourceNames = resourceNames.concat(response.connections.map(conn => conn.resourceName)); } pageToken = response.nextPageToken; } while (pageToken); return resourceNames; } // 批量删除一组联系人 function deleteContactBatch(resourceNames) { try { const requestBody = { resourceNames: resourceNames }; People.People.batchDeleteContacts(requestBody); console.log(`已删除 ${resourceNames.length} 个联系人`); } catch (err) { console.log(`批量删除失败:${err.message}`); } }
使用说明
- 确保已在Google Apps Script编辑器中启用People API:依次点击「资源」→「高级Google服务」,找到People API并启用
- 首次运行会触发权限授权,需按照提示完成授权流程
- 若联系人数量极大(超过5000),可考虑将主逻辑拆分为多个小函数,通过时间驱动触发器分阶段执行,彻底避免超时
内容的提问来源于stack exchange,提问作者Thomas Guggler
相关产品推荐
相关产品推荐

