iT邦幫忙

2025 iThome 鐵人賽

DAY 17
1
AI & Data

為你自己學 n8n系列 第 17

[為你自己學 n8n] 第 17 天,我的 Line 機器人會記帳!(中)

  • 分享至 

  • xImage
  •  

Yes

影片連結:https://www.youtube.com/watch?v=q2qZn-pMc5o
YouTube 頻道:https://www.youtube.com/c/kaochenlong

在上一集,我們已經成功讓 AI Agent 和 Google Sheets 串起來了。整個流程是這樣的:

輸入訊息 → AI Agent → 解讀訊息 → 寫到 Google Sheets

這一集我們要把 LINE 也加進來!

整合 Webhook

還記得之前我們在串接 LINE 的時候是怎麼做的嗎?我們用了一個 Webhook 節點,讓 LINE 的 Messaging API 把資料打進來。所以第一步,我們要把這個 Webhook 節點加到現在的工作流程裡。

你可以重新建立一個 Webhook 節點,但因為在之前已經做過一次了,所以也可以從之前的專案複製過來比較快,反正設定是一樣的。找到那個 Webhook 節點,把它複製起來(Ctrl+C),然後回到現在的工作流程貼上(Ctrl+V)。

貼上之後把 Webhook 節點連接到 AI Agent 照理說就能用了,但是要先處理一個問題。原本的 AI Agent 是綁在一個 Chat Trigger(聊天觸發器)上的,但現在我們的訊息是從 Webhook 進來的,所以待會要調整一下 AI Agent 接收訊息的方式。

資料整理用的 Edit Field (SET) 節點

剛好趁這個機會跟大家介紹一個我在 n8n 裡面很常用、也很好用的節點:Edit Field,也叫做 SET 節點。

為什麼要用這個節點?當 LINE 的 Messaging API 把訊息打進來時,資料結構有點複雜,裡面有一大堆欄位。例如:User Agent、Line Bot Webhook 2.0 等等一堆我們用不到的資訊。如果直接從這個複雜的資料結構去拉資料會有點麻煩,階層太複雜了

這並不是一個必要的節點,但 Edit Field 這個節點可以幫助我們把資料整理得更清楚,所以我想趁這個機會跟大家介紹這個好用的節點。

需要哪些欄位?

在這個記帳機器人裡,我們需要三個關鍵資料:

  1. Message:使用者輸入的訊息內容(例如「排骨飯 100 塊」)
  2. Reply Token:用來回覆訊息給使用者的憑證
  3. User ID:識別是哪個使用者傳送訊息的 ID

等等,為什麼需要 User ID?

User ID

想像一下,這個記帳機器人也許不只你一個人用,也許會有其他朋友加進來。如果我說「我吃了排骨飯」,你也說「我吃了排骨飯」,那我們要怎麼知道這筆帳是誰的?

這就是為什麼我們需要把 User ID 也記錄下來,並且寫進 Google Sheets 裡。這樣一來,每筆記帳資料都會有對應的使用者 ID,未來要查詢「九月份的帳」或「十月份的帳」時,系統就知道要查的是誰的帳,而不會把別人的記錄也拿出來。

設定 Edit Field 節點

我們在 Webhook 後面加入一個 Edit Field 節點,然後開始整理欄位:

  1. 加入 message 欄位:從 Webhook 的資料裡,把使用者的訊息內容拉進來,命名為 Message
  2. 加入 replyToken 欄位:把 Reply Token 也拉進來(把前面的路徑前綴刪掉,只留 replyToken
  3. 加入 userID 欄位:找到 Source 裡的 User ID,拉進來命名為 userId

經過這樣整理之後,執行結果會非常清楚:

{
  "userId": "U1234567890abcdef...",
  "message": "排骨飯 100 塊"
  "replyToken": "abc123...",
}

有沒有覺得這樣看起來很乾淨、很漂亮?好啦,至少我覺得有!

調整 AI Agent 的輸入方式

現在資料整理好了,我們要把這些資料餵給 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 同時知道兩件事:

  1. 使用者是誰(User ID)
  2. 使用者說了什麼(訊息內容)

這樣 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」,它就知道該怎麼處理了。

修改 Google Sheets 設定

現在 AI Agent 會輸出包含 ID 的結構化資料了,我們也要相對應的調整 Google Sheets 的欄位。我在 Google Sheets 試算表裡加入一個新的 ID 欄位。不一定要叫這個名字,你也可以叫 UserIDUser Id 都好,只要你知道自己在做什麼就好。

然後,回到 n8n 的 Google Sheets 節點,重新整理並設定對應欄位就行了

不出意外的話,測試應該就是成功了。資料成功寫進 Google Sheets,而且 ID 欄位也有資料了。

加入 LINE 回覆功能

現在整個記帳流程已經可以運作了,但還差最後一步:我要讓 AI Agent 在記完帳後,回覆一個訊息給使用者,告訴使用者「已記帳」。

還記得之前 LINE 串接的專案嗎?我們當時有用了一個藍色地球(HTTP Request)節點把訊息打回 Messaging API,然後 LINE 對話框就會收到訊息。同樣,如果你懶得重新再設定一次,也可以從之前的工作流把那顆地球複製過來。

設定 LINE Reply 節點

把之前做 LINE 串接的工作流的那顆藍色的地球(HTTP Request)複製過來接上去,把裡面的訊息改成:

{
  "replyToken": "{{ $('資料整理').item.json.replyToken }}",
  "messages": [
    {
      "type": "text",
      "text": "{{ $('AI Agent').item.json.output.item }},已記帳!"
    }
  ]
}

這樣,當使用者輸入「我吃了排骨飯 100 塊」時,機器人就會回覆「排骨飯,已記帳」。

啟用工作流程

現在整個流程都設定好了,我們要把它正式啟動起來。在測試階段,我們都是手動執行,每次都要開開關關的,很麻煩。現在要讓它自動運作,就像一個真正的服務一樣。

啟用 n8n Workflow

點擊右上角的開關,把工作流程啟動(Active)。系統會跳出一些確認訊息,問你是否確定要啟動,點確定就可以了。

啟動之後,這個工作流程裡的 Webhook 就會開始監聽了。注意,啟動後 Webhook 的 Production URL(正式環境網址)才會生效。

更新 LINE Developer Console 設定

記得之前在 LINE Developer Console 設定的 Webhook URL 嗎?當時為了測試,我們用的是帶有 -test 的測試網址。現在工作流程可以正式啟用了,我們要把 Webhook URL 改成正式版的。

  1. 打開 LINE Developers
  2. 進入你的 Messaging API 頻道
  3. 找到 Webhook 設定區塊
  4. 編輯 Webhook URL,把網址裡的 -test 拿掉
  5. 儲存設定
  6. 點擊 Verify(驗證)按鈕,確認設定正確

驗證成功!這樣,LINE 就會把訊息打到我們正式的 Webhook 網址了。

記帳的資料都有正確解讀出來,而且 User ID 也有正確記錄下來。未來我們要做查帳功能時,就可以透過這個 User ID 去篩選,只查詢這個人的記帳記錄,不會把別人的資料也翻出來。

細節可能看影片操作會更清楚一些。

這一集我們已經把 LINE Bot、AI Agent 和 Google Sheets 三個服務整合在一起,下一集,也就是 LINE 記帳機器人系列的最後一集,我們會來做查帳功能,讓使用者可以查詢自己的記帳資料。


上一篇
[為你自己學 n8n] 第 16 天,我的 Line 機器人會記帳!(上)
下一篇
[為你自己學 n8n] 第 18 天,我的 Line 機器人會記帳!(下)
系列文
為你自己學 n8n21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言