Ichigowa

無論您是進行交易,或只是持有以美元計價的資產,您應該都已熟悉這個流程:FOMC 決策、CPI 數據與 NFP 發布在幾秒內就能帶動市場,而您唯一能收到的警告,就是您碰巧開著的那個分頁。這篇文章將帶您建立一個小型 n8n 工作流程,每早輪詢經濟日曆,並將高影響力的美元事件直接推送到 Telegram。總建置時間約 15 分鐘,免費方案下總成本為 $0。

手動查閱 ForexFactory 的問題

ForexFactory 的日曆是零售交易者的事實標準,但它是為人類而非機器設計的:

  • 沒有官方 API。 日曆以 HTML 渲染,時區處理在客戶端完成。雖然有非官方的每週 XML 摘要,但解析度粗略、會快取,且過去曾無預警中斷。
  • 手動查閱無法擴展。 您可能連續一週都勤勞查閱,卻因為某天沒看而錯過了那一次重要的 CPI 發布。
  • 自行爬取很麻煩。 該網站使用 Cloudflare、依賴 session 的時區 cookie,且標記經常變動,天真的爬蟲需要經常維護。

您可以付費訂閱商業經濟日曆 API——大多數提供預測/前值資料的方案每月約需 $30–100。如果您只想要「有大事發生時通知我」,這就太過頭了。

這個 Actor

先聲明:我建立了本教學使用的 Actor,請自行斟酌參考。

economic-calendar-pro 是一個 Apify Actor,負責爬取 ForexFactory 日曆並回傳乾淨的 JSON。它處理了麻煩的部分(時區、session cookie、標記偏移),並提供貨幣與影響力等級的篩選,以及選用的 webhook 通知。每個事件輸出格式如下:

{
  "title": "CPI m/m",
  "country": "USD",
  "currency": "USD",
  "impact": "High",
  "date_utc": "2026-08-12T12:30:00Z",
  "forecast": "0.2%",
  "previous": "0.3%",
  "actual": "",
  "week": "this",
  "source": "forexfactory"
}

進入全螢幕模式 離開全螢幕模式

因為它在 Apify 上執行,您無需自行託管——只要呼叫一個 HTTP 端點,就能同步取得資料集項目。

我們要建立的內容

排程(平日 07:00)
  → HTTP Request(執行 actor,取得本週高影響力美元事件)
  → Filter(雙重保險:impact == high, currency == USD)
  → Telegram(每個事件一則訊息)

進入全螢幕模式 離開全螢幕模式

若沒有符合條件的事件,篩選器會捨棄所有項目,不會發送任何訊息。平靜的日子就保持平靜。

先決條件

  • 一台 n8n 實例(雲端或自架——docker run -p 5678:5678 n8nio/n8n 即可)
  • 一個免費的 Apify 帳戶——請從 設定 → 整合 取得 API token
  • 一個 Telegram bot:傳訊息給 @BotFather,輸入 /newbot,儲存 token。接著傳訊息給您的 bot,並從 https://api.telegram.org/bot<TOKEN>/getUpdates 取得 chat ID

步驟 1:排程觸發器

加入一個 Schedule Trigger 節點,將其切換為 cron 運算式:

0 7 * * 1-5

進入全螢幕模式 離開全螢幕模式

這代表每個平日 07:00 觸發,會比 08:30 ET 的發布(CPI、NFP)以及下午的 FOMC 聲明都早。請在 n8n 設定中設定實例時區(若尚未設定)——cron 會以實例時間執行。

步驟 2:以 HTTP Request 節點呼叫 actor

加入一個 HTTP Request 節點(typeVersion 4.x):

  • 方法: POST
  • URL:
https://api.apify.com/v2/acts/ichigowa~economic-calendar-pro/run-sync-get-dataset-items

進入全螢幕模式 離開全螢幕模式

  • 標頭:
Authorization: Bearer YOUR_APIFY_TOKEN
Content-Type: application/json

進入全螢幕模式 離開全螢幕模式

  • Body (JSON):
{
  "weeks": ["this"],
  "currencies": ["USD"],
  "impacts": ["High"]
}

進入全螢幕模式 離開全螢幕模式

run-sync-get-dataset-items 端點在此處最實用:它會啟動 actor、等待其完成,並直接在回應本文中回傳資料集項目。無需輪詢執行狀態,也無需第二次請求即可取得結果。請將節點逾時時間調高至約 120 秒,因為冷啟動的 actor 可能需要 30–60 秒。

點擊 執行步驟。在有 CPI 發布的日子,您會收到類似以下的結果:

[
  {
    "title": "CPI m/m",
    "currency": "USD",
    "impact": "High",
    "date_utc": "2026-08-12T12:30:00Z",
    "forecast": "0.2%",
    "previous": "0.3%"
  },
  {
    "title": "Core CPI m/m",
    "currency": "USD",
    "impact": "High",
    "date_utc": "2026-08-12T12:30:00Z",
    "forecast": "0.3%",
    "previous": "0.3%"
  }
]

進入全螢幕模式 離開全螢幕模式

n8n 會自動將陣列拆成每個事件一個項目,這正是我們在後續步驟需要的格式。

步驟 3:Filter(雙重保險)

Actor 已在伺服器端完成篩選,但我還是建議在此加入一個 Filter 節點——如果之後您將 actor 輸入擴大到所有貨幣,卻忘記這個工作流程會推送到 Telegram,這能保護您。兩個條件以 AND 結合:

  • {{ $json.impact }} 等於 High
  • {{ $json.currency }} 等於 USD

零成本的保險。

步驟 4:Telegram 訊息

加入一個 Telegram 節點,操作選擇 Send Message,使用您先前建立的 bot 憑證。設定 chat ID,啟用 Markdown 解析模式,並使用以下範本:

🔔 *{{ $json.title }}*
Currency: {{ $json.currency }} | Impact: {{ $json.impact }}
Time (UTC): {{ $json.date_utc }}
Forecast: {{ $json.forecast || 'n/a' }} | Previous: {{ $json.previous || 'n/a' }}

進入全螢幕模式 離開全螢幕模式

因為篩選器會為每個事件輸出一個項目,您會收到每事件一則訊息。在 FOMC 發布日,通常會收到兩到三則訊息(利率決策、聲明、記者會);大多數日子則是零或一則。

執行

先手動執行整個工作流程一次以確認無誤,然後將其切換為 Active。Telegram 範例輸出:

🔔 Consumer Price Index (CPI) m/m
Currency: USD | Impact: High
Time (UTC): 2026-08-12T12:30:00Z
Forecast: 0.2% | Previous: 0.3%

成本分析

  • n8n: 自架免費;雲端方案起價約 €20/月,但這個工作流程適用於任何等級。
  • Apify: 免費方案每月提供 $5 平台額度。這個 actor 每天執行一次只需幾分錢——平日早上的排程完全在免費額度內。無需信用卡。
  • Telegram: 免費。

疑難排解

使用此設定時,我曾見過幾個常見的失敗情境:

  • Apify 回傳 HTTP 401。 標頭必須寫成 Authorization: Bearer apify_api_xxx...——常見錯誤是貼上 token 時忘了加 Bearer 前綴,或是使用了帳戶密碼而非 API token。
  • HTTP 408 / sync 端點逾時。 run-sync-get-dataset-items 最長等待 300 秒。若 actor 執行時間超過 HTTP 節點逾時時間,請先調高節點逾時時間;actor 本身很少超過一分鐘。
  • 預期有事件卻回傳空陣列。 weeks 參數會抓取整個日曆週("this"、"next"、"last"),空結果通常代表您的篩選條件過嚴——例如在只有中影響力美元事件的週次設定 impacts: ["High"]。影響力值需大寫:HighMediumLowHoliday
  • Telegram 沒有發送訊息,也沒有錯誤。 通常是 bot 尚未先收到訊息(bot 無法主動發起對話),或是 chat ID 是缺少前導 - 的群組 ID。
  • 編輯後出現重複通知。 若重新啟用工作流程,n8n 可能會視設定執行補發;若收到半夜 2 點的意外訊息,請檢查 Workflow Settings → Timezone/Execution

值得嘗試的變化

  • 更廣泛的監控: 設定 "currencies": ["USD", "EUR", "GBP"] 並移除篩選器的貨幣條件。
  • 同小時提醒: 加入第二個每 30 分鐘執行的排程,以及類似 {{ $json.date_utc }} 在下一小時內的篩選條件,讓您在發布前收到提醒,而非只在早餐時收到。
  • 不同通知管道: 將 Telegram 節點換成 Discord/Slack——actor 輸出不會改變。
  • 推播而非輪詢: actor 原生支援 webhook 通知,若您想跳過排程,可直接使用 n8n Webhook trigger。

連結

若有疑問或遇到邊緣案例,歡迎在留言區提出——此 actor 持續維護,問題回報確實有幫助。