前情提要
收集層(RSS 抓資料)和處理層(Gemini 整理週報)都跑通了,接下來要實作輸出層:把 AI 整理好的內容自動發布到社群媒體。
這篇記錄從「選哪個平台」到「拿到 Instagram Long-lived Token」的完整過程,包含踩到的坑和解法。
平台選擇
想把 AI 週報自動發布到社群媒體,先評估三個選項:
| 平台 | 純文字 | API | 帳號門檻 | 難度 |
|---|---|---|---|---|
| 不行(必須圖片) | 有 | Business 或 Creator | 高 | |
| YouTube 影片 | 不行(必須影片) | 有 | 普通 Google 帳號 | 最高 |
| YouTube Community | 可以 | 無 | 500+ 訂閱 | — |
| 可以 | 有(需審查) | 需要 Page | 中 | |
| Telegram 公開頻道 | 可以 | 最簡單 | 無 | 低 |
最終決定:Instagram。不是因為它最簡單——Telegram 才是——而是因為這是我實際在用的平台,想把週報發在自己的帳號上。但 IG 必須有圖片,輸出層要加圖片生成步驟。
IG 帳號準備
Instagram API 發文需要 Business 或 Creator 帳號。個人帳號的 Basic Display API 已於 2024 年 12 月關閉。
切換 Creator 帳號(免費,不需要 Facebook Page):
1 | IG App → 設定和隱私 → 帳號類型和工具 → 切換為專業帳號 → 創作者 |
切換後保留所有粉絲和貼文,只是解鎖 API 權限。
Facebook Developer App 設定
App 類型要選對
建 App 時類型有坑:
- Consumer:給舊版 Basic Display API 用,已關閉,選了找不到 Instagram Graph API
- Business:正確選項,支援 Instagram Graph API content publishing
前往 developers.facebook.com/apps/create,選 Business。
Instagram API 流程選擇
進 App 後找 Instagram 產品,有兩種 API 流程:
| Instagram Login | Facebook Login | |
|---|---|---|
| 支援 Creator 帳號 | 是 | 需要連 FB Page |
| 需要 Facebook Page | 不需要 | 需要 |
選 API setup with Instagram business login(Instagram Login 流程)。
加 Tester 帳號
Step 1 要先在 Roles 頁籤加 Instagram Tester:
- 左側選單 → App Roles → Instagram Testers
- 輸入 IG username 送出邀請
- 在畫面下方找到連結,點開到
https://www.instagram.com/accounts/manage_access/接受邀請
踩雷筆記:OAuth 黑/白畫面 bug
點 Generate token 後,Instagram 授權頁面出現黑畫面或白畫面,token 無法顯示。
這是 Instagram Developer Console 已知的 rendering bug。OAuth 授權其實已完成,authorization code 在 redirect URL 裡,只是 UI 沒渲染出來。
解法:webhook.site 當臨時 Redirect URI
步驟一:前往 webhook.site,取得唯一 URL,例如:
1 | https://webhook.site/98ec2192-c62e-459e-848a-334b370887f0 |
步驟二:加到 Instagram App → Step 3 → OAuth Redirect URLs。
步驟三:手動打開授權 URL(替換 YOUR_WEBHOOK_URL):
1 | https://www.instagram.com/oauth/authorize?client_id=APP_ID&redirect_uri=YOUR_WEBHOOK_URL&response_type=code&scope=instagram_business_basic,instagram_business_content_publish |
步驟四:Instagram 授權後 redirect 到 webhook.site,從 URL 取得 code= 後面的值。
步驟五:馬上換 short-lived token(code 幾分鐘過期):
1 | curl -X POST https://api.instagram.com/oauth/access_token \ |
步驟六:換 long-lived token(有效 60 天):
1 | curl -X GET "https://graph.instagram.com/access_token?grant_type=ig_exchange_token&client_secret=APP_SECRET&access_token=SHORT_LIVED_TOKEN" |
回傳範例:
1 | { |
Token 更新(60 天到期前跑一次即可):
1 | curl -X GET "https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token=LONG_LIVED_TOKEN" |
加速解: IG Token Generator 工具
OAuth 流程太繁瑣,自製工具放在 demo.marsen.me/admin/tools/ig-token,下次取 token 不需要手動操作。
目前只有我能使用,如果有人有興趣可以與我聯絡我再視情況開放工具,具體還是希望 Bug 可以修複
技術棧:Next.js 16 App Router
流程設計:
1 | 使用者輸入 App ID + App Secret |
App Secret 全程只在 server-side 流通,不暴露給客戶端。
待改進項目
- 範例資料不用真實值:截圖或 UI 展示時,input 欄位的 placeholder 不應出現真實 App ID,用假資料代替
- Input 欄位短暫快取:App ID 和 App Secret 用
sessionStorage快取 15~30 分鐘,避免每次授權都要重填(注意 App Secret 快取有資安風險,要考慮清楚) - Token 長期快取 90 天:取得 long-lived token 後存到
localStorage,90 天內重開頁面自動顯示,不需重新授權
踩雷筆記:Vercel 部署的 prebuilt 限制
這個專案用 GitHub Actions 做 CI/CD,採 vercel build --prebuilt 方案:
1 | # GitHub Actions |
更新 Vercel 環境變數後,不能直接 Redeploy,因為 Vercel 沒有原始碼可重新 build。必須 push 新 commit 觸發 GitHub Actions 重新 build 才能套用新設定:
1 | git commit --allow-empty -m "chore: trigger redeploy" |
prebuilt 的好處是 CI 與 deploy 分離,確保 lint/type-check/test 通過才部署;代價是 env var 更新要重新 build。
踩雷筆記:Meta 廣告帳號被限制
20260427 處理中
測試期間收到 Meta 通知:「Your professional ad account is restricted from advertising」。
第一反應是懷疑跟自動化發文有關,查了一下:這個限制針對的是廣告功能(投放廣告、Meta Pixel、推廣貼文),不影響 Content Publishing API。用官方 API 發文是 Meta 明確允許的行為,沒有違規。
推測原因:新開 Business App 首次觸發系統自動審查,誤判。已按「Request a Review」申訴中。
API 發文功能在申訴期間不受影響,繼續正常運作。
20260429 通過,帳號恢復正常
參考
- 個人自動化平台(一) n8n & GCP VM
- 個人自動化平台(二) Cloudflare Access & Cloudflare Tunnel
- 個人自動化平台(三) 收集、處理、輸出:三層可插拔管道設計
- 個人自動化平台(番外) 拆掉重建 GCP VM & Cloudflared Tunnel & Cloudflare Access
- 個人自動化平台(四) n8n 實作:收集層,RSS 資料來源
- 個人自動化平台(五) n8n 實作:處理層,Aggregate + Gemini 週報整理
- 個人自動化平台(番外) Google OAuth redirect_uri_mismatch 除錯記錄
小結
- IG API 只支援 Business 或 Creator 帳號,個人帳號的 Basic Display API 已關閉
- Facebook Developer App 類型要選 Business,流程選 Instagram Login(不需要 FB Page)
- Developer Console 的 token generator 有 bug,用 webhook.site 當臨時 redirect URI 繞過
- Long-lived token 有效 60 天,到期前用 refresh API 更新即可
- 自製工具把 OAuth 流程自動化,之後取 token 一鍵搞定
(待補:圖片生成 + 實際 IG 發文流程)
(fin)