影片連結:https://www.youtube.com/watch?v=q2qZn-pMc5o
YouTube 頻道:https://www.youtube.com/c/kaochenlong
在上一集,我們已經成功讓 AI Agent 和 Google Sheets 串起來了。整個流程是這樣的:
輸入訊息 → AI Agent → 解讀訊息 → 寫到 Google Sheets
這一集我們要把 LINE 也加進來!
還記得之前我們在串接 LINE 的時候是怎麼做的嗎?我們用了一個 Webhook 節點,讓 LINE 的 Messaging API 把資料打進來。所以第一步,我們要把這個 Webhook 節點加到現在的工作流程裡。
你可以重新建立一個 Webhook 節點,但因為在之前已經做過一次了,所以也可以從之前的專案複製過來比較快,反正設定是一樣的。找到那個 Webhook 節點,把它複製起來(Ctrl+C),然後回到現在的工作流程貼上(Ctrl+V)。
貼上之後把 Webhook 節點連接到 AI Agent 照理說就能用了,但是要先處理一個問題。原本的 AI Agent 是綁在一個 Chat Trigger(聊天觸發器)上的,但現在我們的訊息是從 Webhook 進來的,所以待會要調整一下 AI Agent 接收訊息的方式。
剛好趁這個機會跟大家介紹一個我在 n8n 裡面很常用、也很好用的節點:Edit Field,也叫做 SET 節點。
為什麼要用這個節點?當 LINE 的 Messaging API 把訊息打進來時,資料結構有點複雜,裡面有一大堆欄位。例如:User Agent、Line Bot Webhook 2.0 等等一堆我們用不到的資訊。如果直接從這個複雜的資料結構去拉資料會有點麻煩,階層太複雜了
這並不是一個必要的節點,但 Edit Field 這個節點可以幫助我們把資料整理得更清楚,所以我想趁這個機會跟大家介紹這個好用的節點。
在這個記帳機器人裡,我們需要三個關鍵資料:
等等,為什麼需要 User ID?
想像一下,這個記帳機器人也許不只你一個人用,也許會有其他朋友加進來。如果我說「我吃了排骨飯」,你也說「我吃了排骨飯」,那我們要怎麼知道這筆帳是誰的?
這就是為什麼我們需要把 User ID 也記錄下來,並且寫進 Google Sheets 裡。這樣一來,每筆記帳資料都會有對應的使用者 ID,未來要查詢「九月份的帳」或「十月份的帳」時,系統就知道要查的是誰的帳,而不會把別人的記錄也拿出來。
我們在 Webhook 後面加入一個 Edit Field 節點,然後開始整理欄位:
Message
replyToken
)userId
經過這樣整理之後,執行結果會非常清楚:
{
"userId": "U1234567890abcdef...",
"message": "排骨飯 100 塊"
"replyToken": "abc123...",
}
有沒有覺得這樣看起來很乾淨、很漂亮?好啦,至少我覺得有!
現在資料整理好了,我們要把這些資料餵給 AI Agent。但問題來了:AI Agent 原本是綁著 Chat Trigger 的,現在我們的資料是從 Webhook 來的,該怎麼辦?
答案很簡單:把 AI Agent 的輸入方式改成 Define Below(自訂輸入)。
在 AI Agent 節點的設定裡,把輸入來源從原本的 Chat Trigger 改成 Define Below,然後在輸入欄位裡這樣寫:
user id: {{ $json.userId }}
message: {{ $json.message }}
這樣做的目的是什麼?我們要讓 AI Agent 同時知道兩件事:
這樣 AI Agent 就能正確地處理這些資訊。
現在 AI Agent 會收到包含 User ID 的訊息了,但我們還需要告訴它怎麼處理這個 User ID。我們要在 Structured Output Parser(結構化資料輸出解析器)裡加入 ID 欄位:
{
"id": "USER ID",
"item": "排骨飯",
"category": "飲食",
"amount": -200,
"date": "2025/9/30"
}
你可能會好奇「它怎麼知道要把 User ID 填進去?」別擔心,它是 AI Agent,是偉大的大模型耶。我們只要在提示詞裡說明「ID: 使用者ID」,它就知道該怎麼處理了。
現在 AI Agent 會輸出包含 ID 的結構化資料了,我們也要相對應的調整 Google Sheets 的欄位。我在 Google Sheets 試算表裡加入一個新的 ID
欄位。不一定要叫這個名字,你也可以叫 UserID
、User Id
都好,只要你知道自己在做什麼就好。
然後,回到 n8n 的 Google Sheets 節點,重新整理並設定對應欄位就行了
不出意外的話,測試應該就是成功了。資料成功寫進 Google Sheets,而且 ID 欄位也有資料了。
現在整個記帳流程已經可以運作了,但還差最後一步:我要讓 AI Agent 在記完帳後,回覆一個訊息給使用者,告訴使用者「已記帳」。
還記得之前 LINE 串接的專案嗎?我們當時有用了一個藍色地球(HTTP Request)節點把訊息打回 Messaging API,然後 LINE 對話框就會收到訊息。同樣,如果你懶得重新再設定一次,也可以從之前的工作流把那顆地球複製過來。
把之前做 LINE 串接的工作流的那顆藍色的地球(HTTP Request)複製過來接上去,把裡面的訊息改成:
{
"replyToken": "{{ $('資料整理').item.json.replyToken }}",
"messages": [
{
"type": "text",
"text": "{{ $('AI Agent').item.json.output.item }},已記帳!"
}
]
}
這樣,當使用者輸入「我吃了排骨飯 100 塊」時,機器人就會回覆「排骨飯,已記帳」。
現在整個流程都設定好了,我們要把它正式啟動起來。在測試階段,我們都是手動執行,每次都要開開關關的,很麻煩。現在要讓它自動運作,就像一個真正的服務一樣。
點擊右上角的開關,把工作流程啟動(Active)。系統會跳出一些確認訊息,問你是否確定要啟動,點確定就可以了。
啟動之後,這個工作流程裡的 Webhook 就會開始監聽了。注意,啟動後 Webhook 的 Production URL(正式環境網址)才會生效。
記得之前在 LINE Developer Console 設定的 Webhook URL 嗎?當時為了測試,我們用的是帶有 -test
的測試網址。現在工作流程可以正式啟用了,我們要把 Webhook URL 改成正式版的。
-test
拿掉驗證成功!這樣,LINE 就會把訊息打到我們正式的 Webhook 網址了。
記帳的資料都有正確解讀出來,而且 User ID 也有正確記錄下來。未來我們要做查帳功能時,就可以透過這個 User ID 去篩選,只查詢這個人的記帳記錄,不會把別人的資料也翻出來。
細節可能看影片操作會更清楚一些。
這一集我們已經把 LINE Bot、AI Agent 和 Google Sheets 三個服務整合在一起,下一集,也就是 LINE 記帳機器人系列的最後一集,我們會來做查帳功能,讓使用者可以查詢自己的記帳資料。