EMAX Studio Blog

如何设置 Meta Ads CLI:2026 年分步教程

Manuel Mrosek · 2026-06-16 · 浏览量

如何设置 Meta Ads CLI:2026 年分步教程

要设置 Meta Ads CLI,你需要在 Business Manager 中创建一个 System User,生成一个具有 ads_managementads_readbusiness_management 权限的永不过期 token,把你的 Ad Account 和 Page 作为资产关联进去,然后通过配置文件让 CLI 指向该 token。如果你拥有 Business Manager 的管理员权限、一个 Facebook Page,以及一个 Ad Account 上已验证的付款方式,整个流程大约需要 45 分钟。

这是我们关于用 AI agents 运营 Facebook Ads 概览文章的深度配套教程。那篇文章解释了为什么对任何运营多个广告活动的人来说,CLI 驱动的设置都比 Ads Manager 点击操作更有优势。本文则是动手指南:每一步、我们自己搭建栈时遇到的每一条错误信息,以及最后一个真实的首场广告活动演练。

Meta Ads CLI 到底做什么

"Meta Ads CLI" 不是单一的官方二进制程序。它是介于你的脚本与 Meta Marketing API 之间的一层薄薄的服务端自动化层。你写 Python 或 Node 代码,CLI 处理身份验证、请求签名以及长期有效的 System User token,然后你的广告活动通过 graph.facebook.com/v23.0/ 上线,完全不需要任何人点击 Ads Manager。

难点不在于封装代码——那只有大约一百行。难点在于 Business Manager 内部那个 7 步设置仪式,它会产出一个 Meta 真正接受用于生产流量的 token。这个仪式去除了基于浏览器的自动化最终都会遇到的 OAuth 刷新流程和 token 过期的痛苦。

回报是实实在在的。一旦 CLI 栈跑起来,你可以在 90 秒内启动包含 6 个广告变体的活动,通过 cron 在早上 7:00 自动把昨天的表现拉成日报,并自动暂停表现不佳的广告——完全不用登录 Ads Manager。

前提条件

开始之前,请确保以下这些都已就位。少了任何一项,后面都会让你掉进 2 小时的兔子洞。

你需要一个具有管理员权限的 Meta Business Manager 账户——个人 Facebook 账户无法用于 System User token。你需要一个你被列为管理员(而不仅是编辑)的 Facebook Page。你需要该 Business Manager 内部的一个 Meta Ad Account,带有已验证的付款方式,并至少有一个国家被批准用于计费。你需要为引流目标网站配置好一个 Pixel(在新术语里叫 "Dataset")。你还需要本地安装 Python 3.10+ 或 Node 18+ 并具备安装包的能力。

如果你还没有 Pixel,在继续之前先创建一个。即使你像我们一样只打算用 Conversions API (CAPI)——你仍然需要 Pixel ID 作为服务端事件的路由地址。

7 步设置

这些步骤是顺序的。每一步都解锁下一步。跳过会以难以调试的方式破坏整条链,因为 Meta 的错误信息常常具有误导性。

第 1 步:创建一个 Business Manager System User

进入 Business Settings → Users → System Users。点击 "Add" 创建一个新的 System User。名字对 API 不重要,但对你未来的理智很重要——给它起一个像 your-brand-agent 的名字,这样六个月后你还记得它在做什么。选择 "Admin" 角色(而不是 "Employee"),因为没有管理员权限的 System User 无法管理 Custom Conversions 或 Pixel events。

我们搭建自己的栈时,创建的是 emaxstudioagent。System User ID 会自动分配(15 位数字)。把它记下来。

第 2 步:创建一个带 Marketing API Use Case 的 Developer App

进入 developers.facebook.com → My Apps → Create App。如果下拉列表里有,就选 use case "Marketing API"。如果你只看到 "Other",也没关系——System User token 两种方式都能用。德语 UI 把这个标记为 "Werbeanzeigen mit Marketing API",而英语 UI 称之为 "Marketing API" 或 "Other"。两者都会产生完全相同的 token。

把 app 设为 Business 类型,而不是 Consumer。从左侧栏向 app 添加 Marketing API 产品。App 一开始处于 Development Mode。你必须把它切换到 Live Mode(下文有更多介绍),System User token 才会对真实广告生效。

要切换到 Live Mode,Meta 要求一个公开的隐私政策 URL 和一个 app 图标(1024×1024 PNG)。这两者都没有商量余地。App 图标不需要打磨——占位图也行——但 URL 需要真的能解析到一个隐私政策页面。我们的部署在主域名下的 /legal 路径。

第 3 步:生成一个永不过期的 System User token

回到 Business Settings → System Users → [你的 System User] → 点击 "Generate New Token"。选择你在第 2 步刚创建的 app。然后选择权限:

  • ads_management —— 创建、编辑和暂停广告活动所必需
  • ads_read —— 拉取 insights 和报告数据所必需
  • business_management —— 管理资产和 custom conversions 所必需

把过期时间设为 "Never"。System User token 是唯一真正永不过期的 Meta token——User Access Token 最长 60 天,Page Token 取决于它派生自的 User Token。这就是为后端自动化使用 System User 而非 OAuth 的全部意义所在。

立刻复制 token。Meta 只显示一次。把它存到 secrets manager 或一个带 chmod 600.env 文件里。永远不要提交到 git。

第 4 步:把 Ad Account 和 Page 作为资产关联

System User 存在了,但目前还没有访问任何东西的权限。你必须显式分配资产。在 Business Settings → System Users → [你的 System User] → 点击 "Add Assets"。

把你的 Ad Account 以完整权限分配进去("Manage Campaigns" + "Manage Performance")。把你的 Page 以完整权限分配进去。把你的 Pixel/Dataset 以完整权限分配进去。如果你有多个 Ad Account 并且希望 CLI 全部管理,把每一个都分配进去。

我们设置时,把 act_975780295197610(我们的 Ad Account)和 Page 1113585798495892(我们的 EMAX Studio 页面)以及 Pixel 1464075091373537 都分配了进去。Ad Account ID 上的 act_ 前缀在你调用 API 时是必需的——它是真实 ID 的一部分,不是格式约定。

第 5 步:分配 "Page verwalten" / "Manage Page" 权限

这一步几乎是每个初次设置的人都会踩的坑。第 4 步把 Page 作为资产分配了进去,但默认权限级别是 "Anzeigen erstellen" / "Create Ads"——这不够。System User 需要 "Page verwalten" / "Manage Page" 权限,才能发布引用该 Page 的广告 creative。

如果你跳过这一步,每次创建广告的 API 调用都会返回一个通用的 "permission denied" 错误,且不提及 Page。你会花数小时检查你的 token scopes 和 Ad Account permissions,而真正的问题其实只在 Page 资产设置里点一下就能解决。

在资产列表中点击该 Page,滚动到权限部分,为 System User 打开 "Manage Page"。保存。

第 6 步:安装 CLI 并创建配置文件

对于 Python,安装官方 SDK:

pip install facebook-business

对于 Node,使用社区维护的客户端:

npm install facebook-nodejs-business-sdk

~/.meta-ads/config.json(或你的栈存放 secrets 的任何位置)创建一个配置文件:

{
  "access_token": "EAA...your-system-user-token",
  "app_id": "910292175368026",
  "app_secret": "your-app-secret",
  "ad_account_id": "act_975780295197610",
  "page_id": "1113585798495892",
  "pixel_id": "1464075091373537",
  "api_version": "v23.0"
}

设置权限:chmod 600 ~/.meta-ads/config.json。对于 System User token,app_secret 是可选的,但它能启用 appsecret_proof 签名,Meta 推荐在生产中使用。

第 7 步:运行第一次测试命令

通过列出你的 campaigns 来验证一切正常。在 Python 中:

from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adaccount import AdAccount
import json

cfg = json.load(open("/path/to/config.json"))
FacebookAdsApi.init(access_token=cfg["access_token"])
account = AdAccount(cfg["ad_account_id"])
campaigns = account.get_campaigns(fields=["name", "status", "objective"])
for c in campaigns:
    print(c["name"], c["status"], c["objective"])

如果返回一个列表(哪怕是空列表,前提是你还没有任何活动),就完成了。如果抛出 OAuthExceptionPermission denied,回到下面的错误表。

常见设置错误及修复方法

下面是我们在搭建过程中遇到的 8 个错误。每一个都耗费了真实的时间。请避开这些坑。

错误 实际含义 修复
Cannot use Custom Conversion with 0 events as promoted_object 你的 Custom Conversion 还没有触发过,所以 Meta 拒绝为它优化 先优化 LANDING_PAGE_VIEWS;在 50+ 个 events 触发后切换到 OFFSITE_CONVERSIONS
App must be Live, not Development 你生成了 token,但从未把 app 切换到 Live Mode 添加隐私政策 URL + app 图标,然后在 app dashboard 中切换 App Review → Live
Use Case must be Marketing API, not Other(UI 不同) 德语 UI 标签 "Werbeanzeigen mit Marketing API" 对应英语 "Marketing API"。两者对 System User Token 都有效。 任一 use case 都可以;忽略下拉列表名称继续即可
Instagram requires EU Pay-or-Consent + Page Linkage 如果你的 IG 账户没有关联到一个设置了 Pay-or-Consent 的 Page,投放到 Instagram 的广告对 EU 流量会以 HARD_ERROR 失败 在 Business Settings → Accounts → Instagram 中把你的 Instagram Business 账户关联到一个 Page
bid_strategy is required Ad Set 创建缺少 bid_strategy 字段 在 Ad Set payload 中加入 "bid_strategy": "LOWEST_COST_WITHOUT_CAP"
targeting_automation.advantage_audience is required 新的 v23.0 字段是强制的 添加 "targeting_automation": {"advantage_audience": 1}(或 0)
video_feeds placement is deprecated 这个 placement 在 v23.0 中被移除 video_feeds 从你的 placement 列表中移除;改用 feedinstagram_reels
image_hash is required for video_data Video creatives 需要一个注册为 hash 的缩略图 ffmpeg -i video.mp4 -ss 00:00:01.5 -frames:v 1 thumb.jpg 提取一帧,通过 /adimages 上传,使用返回的 hash

Custom Conversion 那条最阴险,因为错误信息从字面上告诉你哪里错了,但解决办法却不直观。一个全新的 Custom Conversion 在 Meta 系统里是零 events。Meta 拒绝为它没有历史数据的目标进行优化。诀窍是先把 campaign 设为优化 Landing Page Views,让 50+ 转化通过 CAPI 触发,然后把 Ad Set 的 promoted_object 切换到 OFFSITE_CONVERSIONS,带上你的 Custom Conversion ID。之后优化才会真正生效。

一次真实的首场广告活动演练

下面是我们作为第一次实战测试运行的内容。真实数值、真实流程、真实结果。

创建 Campaign。 Objective:OUTCOME_TRAFFIC(等我们有了转化数据后切换到 OUTCOME_SALES)。Status:最初设为 PAUSED,这样可以在下面先创建 Ad Set 和 Ads,再一步把所有东西切到 ACTIVE。在我们的设置中预算放在 Ad Set 级别。

创建 Ad Set。 Daily budget:1000(单位:分 = $10/天)。Optimization:LANDING_PAGE_VIEWS。Bid strategy:LOWEST_COST_WITHOUT_CAP。Targeting:countries ["US", "GB", "CA"]、年龄 25 到 55、语言英语。Placements:feedinstagram_reelsstoriesmarketplace。Targeting automation:{"advantage_audience": 1}

构建 Creatives。 三个图片 creative 和三个视频 creative——总共六个广告。对于图片,我们使用了自己 EMAX Studio 的输出(吃自己的狗粮):三个 hook、三个品牌色背景,全部 1080×1080。对于视频,三个 15 秒竖屏 Reels,带逐词字幕和 AI 配音,通过我们自己的 pipeline 生成(在如何分步创建 AI 营销活动中详述)。每个视频 creative 都需要一个 image_hash 作为缩略图——用 ffmpeg 在 1.5 秒处提取一帧,上传到 /adimages,然后在 video_data 块内使用返回的 hash。

激活。 把 Campaign、然后 Ad Set、然后所有六个 Ads 全部切换到 ACTIVE。Meta 审核通常会在 15 到 30 分钟内通过。被拒绝的广告会通过 ad.get('effective_status') 在每个广告级别浮现出来。

日报。 一个 meta_daily_report.py 脚本通过 cron 在柏林时间早上 7:00 运行。它拉取 insights,把 spend / CTR / CPM / conversions 格式化成 Telegram 消息,并自动暂停 100+ 曝光后 CTR 低于 0.5% 的任何广告。前 48 小时产生了 4,200 次曝光、78 次点击(CTR 1.86%),以及 12 次 Quick Scan 完成,每次转化 $1.67——足以在第三天把优化目标从 Landing Page Views 切换到 OFFSITE_CONVERSIONS,针对 QuickScanComplete Custom Conversion。

需要规避的陷阱

有几样东西会让你吃苦头。我们每一个都是用艰难的方式学到的。

不要把 token 硬编码在 git 里。即使是私有 repo 也不行。token 会通过 CI 日志、意外公开的 fork,以及在 repo 可见性变更前所做的提交而泄漏。永远从环境变量或 repo 之外的 chmod-600 配置文件读取。

不要跳过第 5 步的 Page Manage 权限。你得到的错误看起来像是关于 Ad Account 或 token 的问题。它们不是。每当你在 creative 创建时看到含糊的 "permission denied" 时,先重新检查 Page 资产权限。

不要在 developer app 仍处于 Development Mode 时部署。Token 对创建者本人有效,但对任何其他 System User 上下文会静默失败。在服务器上运行任何东西之前,先切换到 Live Mode。

不要忘了视频 creative 的 image_hash。没有它,整个 Ad 创建都会以一条关于 video_data 的误导性错误失败。

如果你打算扩展规模,不要跳过 CAPI。Browser pixels 会因 iOS ATT、广告拦截器和跟踪防护而损失 30 到 50% 的 events。Server-side Conversions API 把它们大部分找回来——一周末的工作,扩大广告支出的第一周就能回本。

常见问题

设置 Meta Ads CLI 需要花多少钱?

设置本身是免费的。Marketing API、System User token、Business Manager 以及所有开发者工具都是零成本——你只为实际投放的广告付费。预计第一次设置需要 4 到 6 个小时,之后任何时候 30 分钟。

我可以用一个 CLI 安装运行多个广告账户吗?

可以,这是 agencies 使用 System User token 的主要原因之一。在 Business Settings 中把每个 Ad Account 都添加为资产,然后通过更改配置中的 ad_account_id 或作为参数传入,就可以对其中任何一个进行操作。如果权限到位,一个 System User token 可以管理跨多个 Business Manager 的数百个 Ad Account。

那 Google Ads CLI 呢——设置方式类似吗?

概念类似,但 Google 的设置更粗糙。Google 需要一个 developer token 审批,可能需要 7 到 21 天;OAuth2 refresh token 会定期过期;还有 MCC(Manager Account)权限的额外一层。Meta 的 System User token 确实是两套系统中较简单的。如果你同时运营两个平台,先设置 Meta 来学习这些模式。

如果有一个 token 被泄露,我如何安全地轮换 token?

生成一个新的 System User token(同样的权限、同样的 "Never" 过期时间),更新你的配置,测试新 token 是否工作,然后撤销旧 token。Meta 允许你为同一个 System User 同时保留多个 active token,所以你可以无停机地滚动更换。如果某个 token 被泄露,立刻撤销,并通过 API 审计最近的广告支出,看看有没有未经授权的活动。

Conversions API (CAPI) 如何融入这个设置?

CAPI 是一个独立但互补的系统。Meta Ads CLI 管理 campaigns、ad sets 和 ads。CAPI 发送 server-side 转化事件,这些广告就针对这些事件进行优化。两者使用同一个 Pixel ID。CAPI events 独立于任何 browser pixel 流动——它们是 GDPR-clean tracking 的基石,因为不涉及任何 cookies,PII 在传输前被 hash。AI Facebook Ads with AI agents 概览讲述了 CAPI 如何融入更大的自动化栈。

诚实的底线

Meta Ads CLI 不是魔法。它是一种有纪律的方式,从你的工作流中去掉三件事:OAuth token 刷新、手动 Ads Manager 登录,以及每次启动广告时点击 14 个设置带来的人为错误成本。一旦它跑起来,你用 90 秒就能完成过去 30 分钟才能做完的事情。

设置之所以繁琐,是因为 Meta 的工具就是繁琐。但步骤是确定性的。严格按照 7 步设置走,留意表格里的 8 个错误,你就能在下午结束前拥有一个生产级的广告栈。要了解 CLI 如何与 AI creative 和日报联系到更大的图景,请看我们关于用 AI agents 运营 Facebook Ads 的概览,以及 2026 年第 18 周 AI 新闻,了解今年广告生态正在发生的变化。

CLI 上线后,问题就变成了向它喂什么 creative。在 emax.studio 上用免费的 90 秒 AI-readiness scan 跑一下你的 landing page——你会在两分钟内得到一个分数、一份转化缺口清单,以及一份可直接运行的广告活动 brief。


关注 EMAX Studio:Instagram | YouTube | Facebook

分享:

准备好创建您的AI视频了吗?

5积分免费。无需信用卡。

免费开始