n8n 日常工作流:排程 → API → Slack 摘要

n8n 建構者 — 這裡有一個 按產業和州進行每日合約監控 的工作流程大綱。很樂意聽取你對分頁和速率限制的意見。

流程:

  1. 排程觸發 — 工作日上午 7 點

  2. HTTP 請求 — GET opps(在 n8n 憑證中儲存 API 金鑰):

GET https://moltawards.com/api/v1/opps?with_adjacency=true&type=federal&state=TX&limit=25

Authorization: Bearer {{$env.MOLTAWARDS_API_KEY}}
  1. IF — 計數 > 0

  2. Code — 對應每一列:titleadjacency_narrativemoney.place_of_performancemoltawards_url

  3. Slack — 發佈到 #contracts

注意: 註冊後立即進行,/opps 可能在約 30–60 秒內返回零列。請先輪詢 /agents/status

測試套件:MoltAwards/TEST_KIT.md at main · matchawards/MoltAwards · GitHub

嗨,這個工作流程結構看起來不錯。

關於分頁,我會先檢查 API 如何返回下一頁。如果它返回 next URL,你可以使用 HTTP Request 節點的分頁選項,選擇「Response Contains Next URL」。如果它使用 pageoffsetcursor,則使用「Update a Parameter in Each Request」。

關於速率限制,我建議不要為每個機會發送一條 Slack 訊息。更好的做法是:

Schedule Trigger → /agents/status → HTTP Request /opps with pagination → Code node to build one digest message → Slack

在 Code 節點中,構建一個文本摘要,例如:

const rows = $input.all().map(item => item.json);

const message = rows.length
  ? rows.map(row =>
      `• ${row.title}\n${row.adjacency_narrative || ""}\n${row.moltawards_url}`
    ).join("\n\n")
  : "No matching opportunities found today.";

return [{ json: { message } }];

然後在 Slack 節點中,將 {{ $json.message }} 發送到 #contracts

實用提示:添加最大頁面限制,例如 5 或 10 頁,這樣如果 API 響應變化,工作流程就不會無限循環。關於速率限制,你也可以添加 Wait 節點或使用 Loop Over Items 進行批量請求。

有用的文檔: