@koda-sl/baker-cli 0.386.0-dev.8b1f99042 → 0.387.0-dev.907d5a285

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -157,7 +157,7 @@ Use `--output` to change format:
157
157
 
158
158
  ### Ad Platforms (`baker ads`)
159
159
 
160
- Multi-platform ad commands. Google, Meta, and LinkedIn support both reads and **staged writes** (create/update campaigns, ad sets/ad groups, ads, creatives, audiences — applied on chat publish); X (Twitter) is read + analytics. TikTok is coming.
160
+ Multi-platform ad commands. Google, Meta, and LinkedIn support both reads and **staged writes** (create/update campaigns, ad sets/ad groups, ads, creatives, audiences — applied on chat publish); X (Twitter) is read + analytics; ChatGPT Ads is read + analytics + staged writes. TikTok is coming.
161
161
 
162
162
  ---
163
163
 
@@ -863,6 +863,41 @@ baker ads x targeting-constants --constant tv_shows --locale en-US
863
863
 
864
864
  ---
865
865
 
866
+ ### ChatGPT Ads (`baker ads chatgpt`)
867
+
868
+ Read the company's ChatGPT Ads account (OpenAI's ads inside ChatGPT conversations) and how it performs, and stage changes to it that apply when the chat is published. The company connects one account in the dashboard (Brain → Integrations → ChatGPT Ads) with an API key from its Ads Manager; the key stays in Baker and never reaches the CLI, so there is no account id to pass.
869
+
870
+ | Subcommand | What it returns |
871
+ |---|---|
872
+ | `account` | Name, currency, timezone, status, and the brand and account reviews that decide whether anything serves |
873
+ | `campaigns` | Campaigns: objective, daily or lifetime budget (currency units), schedule, locations, platforms, serving issues |
874
+ | `ad-groups` | Ad groups (`--campaign-id`): bid strategy, max bid, context hints, serving issues |
875
+ | `ads` | Ads (`--ad-group-id`): the card's copy, image, destination, review outcome, serving issues |
876
+ | `conversions` | Pixels (with the pixel id a landing page installs) and conversions, with the campaigns using each |
877
+ | `insights` | Impressions, clicks, spend, CTR, CPC, CPM, conversions, CPA, ROAS — per `--level account\|campaign\|ad_group\|ad`, over `--days N` or `--since/--until`, `--granularity`, `--segment country\|device\|platform\|product` |
878
+ | `campaigns create\|update\|pause\|resume` | Stage a campaign change: objective, daily or lifetime budget (currency units), schedule, countries, platforms, status, the conversions it measures (`--conversion-event-ids`) |
879
+ | `ad-groups create\|update\|pause\|resume` | Stage an ad group change: context hints, bid strategy, max bid, status |
880
+ | `ads create\|update\|pause\|resume` | Stage a chat card: title, body, landing page, image, status |
881
+ | `account update` | Stage the advertiser's brand name or icon (`--favicon-url`) |
882
+ | `conversions create` | Stage a conversion — a standard event (`lead_created`, `order_created`, …) or a custom one by name — counted from the account's pixel |
883
+ | `conversions events` | What the pixel delivered in the last ~15 minutes — proof a site sends the event |
884
+ | `draft` | Review the staged changes as a tree; `show`, `amend`, `remove`, `clear`. After a publish, what applied and what failed |
885
+
886
+ `--full` on the list commands returns ChatGPT Ads' own objects. ChatGPT Ads refuses some metric and breakdown combinations (CPA, conversion rate and sales cannot be broken down; conversions come daily or as one total); `insights` refuses them first and says why.
887
+
888
+ Writes need `BAKER_CHAT_ID`: they stage on the chat and reach ChatGPT Ads only when it is published. New entities are created paused unless `--status active`.
889
+
890
+ ```bash
891
+ baker ads chatgpt account
892
+ baker ads chatgpt insights --days 30 --granularity daily --level account
893
+ baker ads chatgpt insights --campaign-id cmpn_123 --level ad --sort spend
894
+ baker ads chatgpt campaigns create --name "Spring push" --objective clicks --daily-budget 20 --countries ES
895
+ baker ads chatgpt ad-groups create --campaign-id chatgpt_temp_ab12 --name "Rooftop owners" --context-hints "solar panels for my house" --max-bid 2.50
896
+ baker ads chatgpt draft
897
+ ```
898
+
899
+ ---
900
+
866
901
  ### Meta Ads (`baker ads meta`)
867
902
 
868
903
  Meta Marketing API (Facebook + Instagram). Connect via OAuth in the dashboard, pick which ad accounts to scope to, then call from the CLI. Account ID via `--account-id act_123` or `BAKER_META_AD_ACCOUNT_ID` env var.
@@ -954,6 +989,11 @@ Chain a full ad from scratch with `meta_temp_*` refs (each create returns one):
954
989
  # 1. (optional) upload creative media from the Baker library → publishes an image hash
955
990
  baker ads meta media upload --account-id act_123 --kind image --image-id <bakerImageId> # → meta_temp_img
956
991
 
992
+ # For on-ad leads, choose a Page with this account in promotingAccountIds and hasPageAccessToken: true
993
+ baker ads meta lead-forms create --account-id act_123 --page-id 555 --name "Free audit" \
994
+ --questions FULL_NAME,EMAIL,PHONE --privacy-policy-url https://example.com/privacy \
995
+ --follow-up-url https://example.com # → meta_temp_form
996
+
957
997
  # 2. campaign → ad set → creative → ad
958
998
  baker ads meta campaigns create --account-id act_123 --name "Q3 Prospecting" --objective OUTCOME_LEADS --daily-budget 50 # → meta_temp_camp
959
999
  baker ads meta adsets create --account-id act_123 --campaign meta_temp_camp --name "US 25-54" \
@@ -20,9 +20,9 @@ import {
20
20
  shouldEscalate
21
21
  } from "./chunk-HJEMOSPH.js";
22
22
 
23
- // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/766ad107c42df28eeadaf0ac2f9089c8a9e200f6ba0b2b1a817b8d536cbdcc49/node_modules/safe-stable-stringify/index.js
23
+ // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/509a695c9237c6e3727f1f1f99169917f329e3ff3f7877be290b684e24bf153d/node_modules/safe-stable-stringify/index.js
24
24
  var require_safe_stable_stringify = __commonJS({
25
- "../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/766ad107c42df28eeadaf0ac2f9089c8a9e200f6ba0b2b1a817b8d536cbdcc49/node_modules/safe-stable-stringify/index.js"(exports, module) {
25
+ "../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/509a695c9237c6e3727f1f1f99169917f329e3ff3f7877be290b684e24bf153d/node_modules/safe-stable-stringify/index.js"(exports, module) {
26
26
  "use strict";
27
27
  var { hasOwnProperty } = Object.prototype;
28
28
  var stringify = configure2();
@@ -1123,7 +1123,7 @@ function resolveAdaptFormats(params) {
1123
1123
  return params.formats ?? [];
1124
1124
  }
1125
1125
 
1126
- // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/766ad107c42df28eeadaf0ac2f9089c8a9e200f6ba0b2b1a817b8d536cbdcc49/node_modules/safe-stable-stringify/esm/wrapper.js
1126
+ // ../../.pnpm-store/v10/links/@/safe-stable-stringify/2.5.0/509a695c9237c6e3727f1f1f99169917f329e3ff3f7877be290b684e24bf153d/node_modules/safe-stable-stringify/esm/wrapper.js
1127
1127
  var import__ = __toESM(require_safe_stable_stringify(), 1);
1128
1128
  var configure = import__.default.configure;
1129
1129
  var wrapper_default = import__.default;
@@ -9986,4 +9986,4 @@ export {
9986
9986
  defaultRegistry,
9987
9987
  createEngineFromEnv
9988
9988
  };
9989
- //# sourceMappingURL=chunk-CHJOTJTZ.js.map
9989
+ //# sourceMappingURL=chunk-JHKW6IDX.js.map