# 廣告跑了一整天，只花了一塊錢

- URL: https://justfly.idv.tw/%e5%bb%a3%e5%91%8a%e8%b7%91%e4%ba%86%e4%b8%80%e6%95%b4%e5%a4%a9%ef%bc%8c%e5%8f%aa%e8%8a%b1%e4%ba%86%e4%b8%80%e5%a1%8a%e9%8c%a2/
- 日期: 2026-06-11
- 分類: WEB&amp;RIA
- 標籤: api, JSON, 神島

![廣告跑了一整天，只花了一塊錢]

花費欄位顯示 NT$1。廣告狀態：啟用。審核：通過。

##### 技術環境

Node.js 後端整合 Meta Marketing API（Facebook Ads API v21.0）。建立廣告流程：Campaign → AdSet → Ad Creative → Ad。`daily_budget` 欄位在 AdSet 建立時傳入，同步呼叫，API 回傳 200 即視為成功。問題模式與語言框架無關——任何直接傳入面值整數、未轉換為最小貨幣單位的廣告 API 整合，都會複現相同行為。

不是帳戶餘額不足，不是受眾設定太窄，也不是排程問題。廣告確實在跑，只是每天的預算是一塊台幣。

這有點像在 ibon 訂票，金額欄輸入 1000，系統回傳「訂票成功」——但到了現場才發現票面是 NT$10，因為那個欄位的計量單位是「分」，不是「元」。差異不在邏輯，在單位。

##### 問題出在哪裡

Meta Marketing API 的 `daily_budget`（以及 `lifetime_budget`）以最小貨幣單位計算。對台幣來說，1 元等於 100 分，所以 NT$100/天要填的值是 10000，不是 100。

填了 100，系統認的是 NT$1。數字本身是合法值，API 不會報錯，Campaign 正常建立，AdSet 狀態也顯示啟用。錯的不是程式，是你和 API 對「100」這個數字的定義對不上。

這種設計在第三方支付和廣告 API 裡很普遍。Stripe 處理金額也是同樣邏輯，100 代表 $1.00 美元，而非 $100。文件裡通常有一行說明，但在建立整套 Campaign → AdSet → Creative 架構時，那行說明很容易被跳過。

##### 錯誤傳染鏈（時序）

```
Code                 Meta API             Ads Manager
  |                      |                    |
  |── POST /adsets ─────>|                    |
  |   daily_budget: 100  |                    |
  |   (intent: NT$100)   |                    |
  ||
  |                      |   budget: NT$1/day |
  |                      ||                    |
  |   daily_budget: 100  |                    |
  |   (intent: NT$100)   |                    |
  ||
  |                      |   budget: NT$1/day |
  |                      |
