@crvouga/mockingbird-service-google-ads

中文文档
1.12.0发布于 2026/11/11MITTypeScriptES Module构建来源已验证近 30 天下载 3135

Google Ads v25和GA4模拟器:GAQL度量衡,预算突变,转换上传和分析事件/报告.

中文使用文档
文档目录8 节
  1. 安装
  2. 使用量
  3. 支助行动
  4. 谷歌与普通假设的不同之处
  5. 控制和失败
  6. API 密码
  7. 核查和范围
  8. 故意不模拟

@crvouga/ mockingbird-service-google-ads (中文(简体) )

本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .

A 类 阴道 google Ads API v25和Google Analytics 4. 便携式模拟器. 它提供了决定性的 GAQL 报告、运动预算变异、点击转换上传、计量协议活动 集合,并使用命名空间 SQLite 状态和注入时钟进行分析数据报告.

安装

bun add @crvouga/mockingbird-service-google-ads

使用量

import { OAuth2Client } from "google-auth-library"
import { DEFAULT_CUSTOMER, DEFAULT_TOKEN } from "@crvouga/mockingbird-service-google-ads"
import { createServer } from "@crvouga/mockingbird-service-google-ads/server"

const emulator = await createServer()

// Google publishes no Node client for the Ads API, so the application calls REST through
// google-auth-library. Only the base URL and the fixture token change.
const client = new OAuth2Client()
client.setCredentials({ access_token: DEFAULT_TOKEN })
const response = await client.request({
  url: `${emulator.url}/v25/customers/${DEFAULT_CUSTOMER}/googleAds:search`,
  method: "POST",
  data: { query: "SELECT campaign.id, campaign.name, metrics.clicks FROM campaign" },
})
console.log(response.data)

await emulator.close()

Ads和Analytics Data路由使用OAuth Bearer证书. 测量协议路线的使用 页:1 measurement_id 财务报告和审定财务报表 api_secret 查询参数。 导出默认值为合成并 安全测试。 配置 tokens客户、竞选活动、预算、转换行动、计量标准、, 和分析属性 createRuntime 选项,当套房需要不同的固定装置.

对于平行测试,请发送 x-mockingbird-namespace,使用共享 /__admin/ns/{namespace} 路径, 或向共享管理员API注册证书。 状态 相片 身份证 时钟, 断层,和resets被命名空间隔离.

支助行动

运行路线行为
搜索 Google 坐标POST /v25/customers/{customerId}/googleAds:searchGAQL 选择、过滤、订购、汇总、摘要行、 固定一万行页面、 绑定到查询的两小时的页面符号和仅验证请求
搜索结构 GoogleAdsPOST /v25/customers/{customerId}/googleAds:searchStream确定 JSON 批次和可选摘要行
变相Campaign预算POST /v25/customers/{customerId}/campaignBudgets:mutate创建、更新、去除、更新口罩、仅验证和原子或部分失败
上传 Click 转换POST /v25/customers/{customerId}:uploadClickConversions单击标识符、转换动作、重复检测、工作标识和部分失败
收集分析事件POST /mp/collect204号生产式空答复,已接受事件存档供报告
验证分析事件POST /debug/mp/collect不摄入的验证信件
运行分析报告POST /v1beta/properties/{propertyId}:runReport尺寸、度量、过滤器、定购、标记和报告滞后
批量运行分析报告POST /v1beta/properties/{propertyId}:batchRunReports至多5项报告要求

确切的要求和反应计划 openapi.yaml生成 支持矩阵在 SUPPORT.md。 。 。 .

运动预算与GAQL(FROM campaign_budget; 上传转换和 收集的事件通过下面的检查路线读取,事件也通过以下检查路线读取 分析数据报告. REST行使用 protobuf JSON 名 (costMicros, (中文(简体) ), conversionsValue, (中文(简体) ), conversionActionCategory)和 int64 值为字符串; GAQL 字段名保留为蛇 case.

谷歌 失败是一个 google.rpc.Status 谁 details 拿着 GoogleAdsFailure 与 业务活动 errorCode, (中文(简体) ), message, (中文(简体) ), location (单位:千美元) requestId 等于 request-id 响应头。 无法解析的 JSON 和每一次分析数据失败都是空虚状态,没有 Ads 细节和否 request-id 头曰.

谷歌与普通假设的不同之处

这些都跟Google的文档和封存的 googleapis 25个原型而不是什么 与旧合同相对应的客户可能会期待.

  • 搜索页面大小已固定 . Search 返回可达一万行的页并请求 套装 pageSize 以 requestError: PAGE_SIZE_NOT_SUPPORTED。通过再发送继续 相同的查询与 pageToken; 更改的查询是 INVALID_PAGE_TOKEN 和未使用的符号 两小时 EXPIRED_PAGE_TOKEN (单位:千美元)向导, (中文(简体) ), SearchGoogleAdsRequest) (中文(简体) ). 将模拟器的页面与 searchPageSize 设置 请求仍然无法选择.
  • /mp/collect 从未在 HTTP 上报告验证错误 . 它回答一个空 204 (单位:千美元) 坏的秘密,一个无法解冻的身体 或一个被拒绝的事件一样。 检查拒绝方式 POST /debug/mp/collect返回时 validationMessages 并存储什么,或与 GET /__admin/request-metadata,记录 accepted, (中文(简体) ), rejected, (中文(简体) ), duplicate 财务报告和审定财务报表 reasons 每个请求 (单位:千美元)验证指南) (中文(简体) ).
  • 超过72小时的时间戳被推翻,没有被拒绝, 除非请求设定 validation_behavior: "ENFORCE_RECOMMENDATIONS" (单位:千美元)发送向导) (中文(简体) ). 谷歌的文档没有未来时间戳的束缚,所以一分钟 futureToleranceMs 默认 是这个模拟者的测试政策,而不是供应商规则 null 来禁用它.
  • 只验证的预算突变只返回错误 . 有效的飞行前答案 {} 没有 results 写什么 (单位:千美元)MutateCampaignBudgetsRequest) (中文(简体) ).
  • 变异不取一能克. 重复警卫是Google自己的:共享预算 名称( e)campaignBudgetError: DUPLICATE_NAME),转换 orderId (单位:千美元)ORDER_ID_ALREADY_IN_USE),单击和转换时间(CLICK_CONVERSION_ALREADY_EXISTS, (中文(简体) ), 和网络 purchase 事件 transaction_id 每个用户.
  • developer-token 被接受和忽略. 被钉住的原型 标志着开发者脚趾 作为日落的错误; login-customer-id 仍在检查客户的经理.

控制和失败

特定服务控制由共享控制保护 x-mockingbird-admin-key 守护并活下来 除了共享健康,状态,时钟,日记,过失,重置,以及时间线终点.

控制权目的
GET /__admin/events检查存储分析事件, 最早
GET /__admin/conversions检查上传的转换, 最早
GET /__admin/budgets检查运动预算
GET /__admin/budget-mutations检查突变的审计线索: 请求ID, before 财务报告和审定财务报表 after 每笔
GET /__admin/request-metadata检查已编辑的请求元数据
POST /__admin/daily-metrics种子合成日报availableAt 延迟一行)
POST /__admin/page-tokens/expire过期所有当前 GAQL 页面符号
GET /__admin/settings读取 reportingLagMs, (中文(简体) ), pageTokenTtlMs, (中文(简体) ), futureToleranceMs 财务报告和审定财务报表 searchPageSize
PUT /__admin/settings更新这些决定性测试设置
改为:使用
提前报告日期POST /__admin/clock {"advance": "1d"} 或者说 {"set": "<ISO-8601>"}; GAQL 系统 DURING 范围和分析 today编号 :yesterday编号 :NdaysAgo 跟着它
延迟报告PUT /__admin/settings {"reportingLagMs": n} 隐藏新的事件,直到时间流逝
页面小固定PUT /__admin/settings {"searchPageSize": n} (1至10 000)
添加延迟页:1 slow_response 预设,或 POST /__admin/faults {"latencyMs": n, "count": 1}
一个请求失败页:1 server_error 或者说 network_reset 预设
喉咙页:1 quota_exhausted 或者说 rate_limited 预设; "count": n 节流阀n请求
看什么来了GET /__admin/requests (日记)和 GET /__admin/request-metadata

错误预设为 quota_exhausted, (中文(简体) ), rate_limited, (中文(简体) ), server_error, (中文(简体) ), network_reset, (中文(简体) ), slow_response, (中文(简体) ), ambiguous_budget_write, (中文(简体) ), partial_budget_failure,以及 partial_conversion_failure每次起火一次,除非 count 说不出来,被限制在 呼叫命名空间。 两节节奏预设答案 429 RESOURCE_EXHAUSTED 与 quotaError: RESOURCE_EXHAUSTED 或者说 RESOURCE_TEMPORARILY_EXHAUSTED 后退时 details.quotaErrorDetails.retryDelay在写东西之前.

ambiguous_budget_write 执行下一个预算突变后返回 503这样 重试逻辑可以通过不确定的结果进行测试. 只有验证的飞行前执行 无所不用其极:错在于等待下面的真正呼唤。 调试前 重放: 该 503 携带一个 request-id 页眉,以及 GET /__admin/budget-mutations 列出 根据该请求写入预算编号 before 财务报告和审定财务报表 after。 。 。 .

敏感事件和转换有效载荷被密封在州内;期刊和检查元数据 仅包含断言所需的字段.

API 密码

便携式根导出 GoogleAdsAPI, (中文(简体) ), createRuntime, (中文(简体) ), document, (中文(简体) ), supportedOperationIds, (中文(简体) ), GOOGLE_ADS_NAMESPACE, (中文(简体) ), GOOGLE_ADS_PRESETS, (中文(简体) ), DEFAULT_ADMIN_KEY, (中文(简体) ), DEFAULT_TOKEN, (中文(简体) ), DEFAULT_CUSTOMER, (中文(简体) ), DEFAULT_CUSTOMERS, (中文(简体) ), DEFAULT_BUDGETS, (中文(简体) ), DEFAULT_CAMPAIGNS, (中文(简体) ), DEFAULT_ACTIONS, (中文(简体) ), DEFAULT_PROPERTY, (中文(简体) ), DEFAULT_MEASUREMENT, (中文(简体) ), DEFAULT_API_SECRET, (中文(简体) ), createVaultKey, (中文(简体) ), fingerprint, (中文(简体) ), 以及公共固定/运行时间选项类型。 节点 ./server 进口 createServer, (中文(简体) ), DEFAULT_PORT,以及服务器类型. mockingbird-google-ads serve 开始一个听众.

核查和范围

接受测试包括GAQL精度和呼号、预算飞行前和部分书写、转换 分解、GA4事件验证和报告、OAuth范围/过期行为、加密状态、, 命名空间、重置、断层恢复和未修改 google-auth-library 11.1.0 HTTP 签名 路径。 运行时间测试驱动上方的每个控制 /__admin. 财产测试 实现对等操作,并证明确定检测到不同的运输方式.

test/consumer.ts 是原始服务请求中描述的原始流量的端口. 这不是请求软件的客户端,其来源不在这个寄存器中,所以没有测试 在此运行未修改的客户端 .

故意不模拟

模拟器执行一个有界限的子集。 它不模拟完整的 Google Ads 资源 图表,每个 GAQL 函数, GAQL 字段相容性规则在段和度量之间 分析维度或度量,真实的Google身份,生产配额分配,计费, 仪表板,归属处理,或无证后端行为. 上传的转换没有 种子 metrics.conversions;种子那些有日用度量的. 正常操作为本地操作, 不 联系Google; 只有明确的等同命令使用通过 .env.local 或 GitHub 动作秘密 .

版本与发布记录

@crvouga/mockingbird-service-google-ads 共发布 23 个版本,首次发布于 2026/10/05;过去 12 个月发布了 23 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.12.0latest2026/11/11今天
1.11.92026/11/038 天前
1.11.82026/11/038 天前
1.11.72026/11/038 天前
1.11.62026/11/038 天前
1.11.52026/11/038 天前

关于 @crvouga/mockingbird-service-google-ads 的常见问题

@crvouga/mockingbird-service-google-ads 是什么?

Google Ads v25和GA4模拟器:GAQL度量衡,预算突变,转换上传和分析事件/报告.

如何安装 @crvouga/mockingbird-service-google-ads?

在项目目录运行 npm install @crvouga/mockingbird-service-google-ads,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-google-ads,可以用 npx mockingbird-google-ads 直接运行。

@crvouga/mockingbird-service-google-ads 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@crvouga/mockingbird-service-google-ads 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@crvouga/mockingbird-service-google-ads 可以商用吗?

@crvouga/mockingbird-service-google-ads 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@crvouga/mockingbird-service-google-ads 的下载量有多少?

根据 npm 官方下载统计,@crvouga/mockingbird-service-google-ads 在 2026/10/11 – 2026/11/09 这 30 天内被下载 3,135 次,日均约 105 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@crvouga/mockingbird-service-google-ads 还在维护吗?

最新版本 1.12.0 发布于 2026/11/11(今天);至今共发布 23 个版本,其中过去 12 个月发布了 23 个;首次发布于 2026/10/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。