昨天,我們成功攻克了 Facebook API 的憑證設定,並讓 n8n 助理學會了如何在粉絲專頁上發布第一則「純文字」貼文。這是一次巨大的突破,證明了我們已經打通了對外廣播的渠道。
綜合前幾天的學習內容,我們可以將前幾天所提及的「新聞摘要」以及「高溫提醒訊息」串連到Facebook 節點,進行發文,以 Day 8 的Discord 天氣高溫提醒工作流為例,結合 FB 後的工作流如下:
執行完的結果如下:
你可能會發現時段有點多,如果想要合併連續的時段該怎麼做?我的話我會去調整 Code 節點去修改設定。
但在視覺內容當道的今天,一則沒有圖片的貼文,就像一道沒有擺盤的菜餚,總是少了點吸引力。如果我們的助理不只會寫字,還能看懂圖片,並根據圖片內容自動生成引人入勝的文案,那該有多酷?今天,我們就要來打造一座完整的「AI 視覺內容廚房」!
我們將從 Google Drive 的圖片庫中自動挑選素材,交給 AI 進行視覺分析與文案撰寫,最後將圖文並茂的貼文自動發布到 Facebook,並將處理過的檔案歸檔。這是一條從原料、加工、發布到倉儲的完整自動化生產線。
今天的文章你會學到:
準備好將你的「行銷小編」,升級為能獨立產出高品質圖文內容的「AI 內容總監」了嗎?讓我們開始吧!
啟用 Google Drive API 發布應用:
若尚未設定 GCP 專案,可參考 Day3 中Gmail API 設定的方式。
如果有記錄之前啟用 Gmail 用戶端時所提供的 Client id 以及 secret 的話,不需要再重新設定OAuth 2.0 用戶端 ID,只需要在 GCP 專案中啟用 Google Cloud Console 內的 Google Drive API 後,回到 n8n 建立 Google Drive Credentials
→ 貼上Client ID, secret → 登入即可
如果沒有記錄到Client id 以及 secret,可點選「API 和服務」→ 左側導航欄「OAuth 同意畫面」→ 左側導航欄「用戶端」→選取之前創過的 OAuth 2.0 用戶端 ID → 右下角「Add Secret」複製(Client ID 在Secret上面,會有完整的可以複製,但Client secret 有時效性,一段時間後就無法複製,只能新增)→ 回到 n8n → 新增 Credentials,貼上id, secret → 登入Google 帳號
也可以在 OAuth 2.0 用戶端 ID 那邊直接新增,設定方式與 Day3 相同。
目前,我們在 GCP 專案上的應用程式還是在測試狀態。測試狀態有一個缺點,他提供的憑證效期只有 7 天。為了讓自動化能長期穩定運作,不用每 7 天就重新登入一次更新憑證,因此這次可以嘗試將 Google Cloud Console 中的應用程式 『發布』,步驟如下:
應用程式使用對象的內外部分類,是以
Google Workspace
去做判斷,使用的 Google 帳號也是在同一個 Workspace, 那內部就可以,但一般的 google 帳號都是會被歸納在外不使用者。
正常來說,發布應用程式會需要 Google 去認證,需要填寫隱私權政策、服務條款、應用程式首頁…等資料,但因為我們只是要自己使用,所以這部分沒填不會影響,但是登入的時候會出現 Google 的警吿,警告畫面如下,不想出現的話按照 Google 的要求填寫相關資料送審即可:
建立 Google Drive 資料夾結構:
我們要發一個圖問並茂的貼文的話,需要有圖片來源。今天的範例中,我們選擇使用Google Drive 作為素材的來源,而且為了方便判斷哪些素材已經發過文,我們這邊創立兩個資料夾,一個是待發文、另一個是已發文。
下圖為今天建構的工作流完成圖
讓我們直接開始吧!
Schedule Trigger
:設定每天發文的時間。
Search Files in Folder
節點:
功能:搜尋待發布素材庫資料夾中,所有待處理的圖片。
設定:
'你的資料夾ID' in parents and mimeType != 'application/vnd.google-apps.folder' and trashed = false
(這串文字的目的是找出資料夾中的所有檔案)資料夾ID 可從 瀏覽器網址中,folders後面那串(有出現問號的話,就是Folder後、問號前的那串)
因為 Search File 節點會回傳所有資料夾中的檔案,因此我們需要去篩選出一個檔案,其實有很多種方法,但這邊我們利用我們以前提過的 Code 節點
Get 1 Item (Code)
節點:
功能:從上一步找到的多個檔案(即輸出的 item)中,隨機挑選一個來發文。
設定 (Code
節點):JavaScript
const items = $input.all(); if (items.length === 0) { return []; } const randomIndex = Math.floor(Math.random() * items.length); return [items[randomIndex]];
執行後會發現只篩選出一個了
Download file
節點:
File ID
直接從上一步的 Get 1 Item
節點中拖曳過來。當我們使用「Download」這類節點時,它輸出的數據格式比較特別。除了我們熟悉的
JSON
數據外,還多了一種稱為「二進位數據 (Binary Data)」。這兩者有什麼不同?我們可以用包裹來比喻:
- JSON 資料:就像是貼在包裹外面的運送標籤。
- 它用人類可讀的文字,記錄了檔案的「描述資訊」,例如:
{ "fileName": "rice.JPG", "fileSize": 1234567 }
。- 二進位數據 (Binary Data) :這就是包裹裡真正的物品——也就是那張照片、那份 PDF 文件本身。
- 它不是文字,而是檔案的原始、未經處理的內容,可供下一個節點讀取和處理。
當有這類資料出現時,在 n8n 節點的輸入/輸出畫面,你會看到JSON
和Binary
兩個分頁,它們分別對應著「標籤」和「物品」。
Analyze image (Gemini)
節點:
Text Input
:輸入你要給模型生成文案的提示詞。Input Type
: Binary File(s)
Input Data Field Name
: data
(指向 Download file
節點輸出的二進位資料欄位)。Merge
節點:
功能:將「圖片的二進位資料」和「AI 生成的文案」這兩份來自不同節點的資料,合併到同一個 Item 中,方便一起交給 Facebook 節點。
設定:
Input 1
: 連接到 Download file
節點。Input 2
: 連接到 Analyze image
節點。Mode
: Combine
。這是 Merge
節點的經典應用——合併來自不同處理分支的資料。
為什麼要用 Merge 節點?
在 n8n 裡,兩條資料流並不會「同時」完成 —— 系統是先跑完其中一條,再跑另一條。如果我們希望同一個時間點把兩個來源的結果(例如:AI 生成的文案 + Google Drive 抓到的圖片)組合在一起,就必須透過Merge 節點。
Merge 就像是一個「集合點」,它會等兩條支線都送出結果,再把它們合併成一個完整的輸出,這樣我們才能確保發文時同時擁有圖片與文字。
Facebook Graph API
節點:
Node
:粉專ID
(與昨天相同)Edge
:輸入 photos
(代表要發布圖片,與昨天不同)。HTTP Request Method
: 仍然是 POST
。Send Binary Data
:
source:data
(讓他可以獲得指向節點的 Download file
分支的二進位資料名稱欄位 source 則是FB Graph API 圖片來源的參數名稱)。Name
: caption
Value
: 從 Merge 節點結果拖曳 AI 生成的文案text
進來。Move file to processed Folder
節點:
Move File
節點File
:設定By ID
, 從 Download File
或Get 1 Item
節點拖曳 id
進來。(只要是你發的那張圖片的 id 都可以)Parent Folder
: 設定By ID
填入你「已處理」的資料夾 ID。Google Drive 在搜尋檔案、資料夾的時候,主要有提供三種方式:By URL 、By ID、From List。
URL 的話,就是分享檔案/資料夾連結時所複製的那個連結(要記得開檢視權限)
ID 的話,就是今天範例所使用的
From List 的話,當你憑證設定正確的話,他會自動去掃你有哪些資料夾、檔案,並提供一個下拉式選單供你選擇(也可以搜尋再選取)。
今天的工作流,其實可以拆解成三大流程:
pages_manage_posts
權限;確認 Token 是否有效、是否過期、權限是否開啟(不是短期 User Token)。data
)必須跟 Facebook node 裡設定的 Binary Property 名稱一致。節點若出現問題,可以善用回傳的錯誤訊息、錯誤代碼上官方文件或是 AI 來理解問題出現的原因並排除。
今天,你親手打造了一座全自動的 AI 視覺內容工廠。你的 n8n 助理,已經從一個只會轉發訊息的小編,進化成了一位能獨立看圖、思考、創作並發布高品質圖文內容的「AI 內容總監」!
我們學會了 Google Drive 節點的應用、利用 AI 撰寫相關文案,透過 Facebook Graph API 發文,並且在發文後自動將圖片歸檔。這是一個非常進階、同時極具商業價值的應用。
但 Facebook 只是開始。
如果,我們能把同一份內容,同步推送到 Instagram 這個以圖片為核心的平台呢?
如果,助理能一次管理多個社群平台,真正做到「一鍵多發」,是不是會更強大?
沒錯,這就是我們接下來的任務! 我們將進一步挑戰 Instagram,自動化生成並發布圖文貼文,正式踏入「跨平台社群經營」的新篇章。
準備好讓你的助理升級為「跨平台行銷專員」了嗎?我們明天見!