使用google-ads-node获取谷歌广告曝光量遇客户ID无效问题求助
排查Google Ads API Invalid Customer ID问题
我来帮你捋捋这个INVALID_ARGUMENT: Invalid customer ID的问题,这种错误我之前踩过类似的坑,大概率是格式或权限相关的问题,咱们一步步来分析:
1. 优先检查客户ID的格式
Google Ads API对客户ID的格式有严格要求:
- 必须是10位纯数字,或者是带横杠的规范格式(比如
123-456-7890) - 绝对不能包含空格!你的错误提示里显示
'... .... ...',看起来明显带有空格,这肯定会触发无效参数错误。
解决方法:
- 直接修正环境变量
CUSTOMER_ID的值,把里面的空格全部去掉,比如把123 456 7890改成1234567890或者123-456-7890 - 也可以在代码里手动清理格式,避免环境变量配置失误:
const cleanCustomerId = process.env.CUSTOMER_ID.replace(/[-\s]/g, ''); // 去掉空格和横杠,转成纯数字格式 request.setCustomerId(cleanCustomerId);
2. 验证账号访问权限
就算客户ID格式正确,用来认证的Google账号(也就是你通过authenticateGoogle获取token的那个账号)可能没有访问该广告账户的权限:
- 登录Google Ads后台,进入工具与设置 > 访问与权限,确认该账号已经被添加到账户中,并且至少拥有「标准」权限
- 再检查工具与设置 > 设置 > API设置,确保API访问已开启,且该账号被允许调用API
3. 确认环境变量是否正确加载
有时候环境变量可能没被正确读取,导致传递的客户ID是错误值(比如空串、乱码)。建议在代码里加一行日志,打印实际传递的ID:
console.log("当前使用的客户ID:", process.env.CUSTOMER_ID);
运行代码后看日志,确认输出的是你预期的正确格式ID。
4. 尝试简化测试排查
你可以先改用非流式的search方法测试,排除流式请求的潜在问题:
// 替换原来的流式请求代码 const response = await service.search({ customerId: cleanCustomerId, query: `SELECT campaign.resource_name, metrics.impressions, segments.date FROM campaign WHERE segments.date BETWEEN "2019-01-01" AND "2020-01-01"` }); console.log(response.results);
如果这个请求能成功,那可能是流式请求的配置有问题,可以尝试更新google-ads-node到最新版本:
npm update google-ads-node
内容的提问来源于stack exchange,提问作者user11847513
相关产品推荐
相关产品推荐

