前天我們成功為 LINE Bot 建立了第一個「大腦」── Google Cloud Firestore,並完成了必要的設定與憑證準備。現在,我們要讓 Bot 讀懂使用者資訊了!
今天我們要在 n8n 新增幾個節點,讓 Bot 能夠接收使用者的訂閱指令,以便之後儲存到 Firestore 資料庫中。
在沒有資料庫之前, LINE Bot 每次收到訊息都是一個獨立的事件。
它無法「記得」誰是誰,也無法「記得」某位使用者過去做了什麼;它不會建立記憶庫,不會像 ChatGPT 一樣記得你之前說過的話。
透過將使用者 ID 和他們的偏好(例如訂閱的主題)寫入資料庫,你的 Bot 就擁有了記憶。這將為所有個人化功能打下基礎,例如:
這個工作流程的目的很簡單,當使用者輸入「訂閱」相關訊息時,就將他們的 LINE ID 和訂閱主題儲存到 記下來。
新增 Webhook
節點(負責接收來自 LINE 的訊息) 。
Switch
節點來判斷訊息把 Switch
節點接在 Webhook
節點後面。
我們需要判斷使用者傳來的訊息內容,字是否包含「訂閱」這個關鍵詞。
{{ $json.message.text }}
(取得使用者輸入的訊息文字)String
→ Contains
訂閱
(當文字包含「訂閱」時,就執行後續流程)Webhook
節點,開始「監聽」。events
底下的 text
會顯示你剛剛傳的文字。Code
節點解析主題雖然我們可以用多個 Switch
節點來判斷「訂閱國際」、「訂閱財經」等,
但一個更有效率的做法是使用 Code
節點,用程式碼來解析使用者輸入的文字,從中提取出主題關鍵字。
新增 Code
節點
輸入以下程式碼:
const userMessage = $input.first().json.body.events[0].message.text;
const parts = userMessage.split('訂閱');
// 將訊息用訂閱分割
let subscribedTopic = '未指定';
// 檢查分割後是否有第二個部分,並且該部分不是空字串
if (parts.length > 1 && parts[1].trim() !== '') {
// 將第二個部分(主題)賦予變數,並移除前後的空格
subscribedTopic = parts[1].trim();
}
// 將主題和使用者的 LINE ID 傳遞給下一個節點
return [{
json: {
userId: $input.first().json.body.events[0].source.userId,
subscribedTopic: subscribedTopic
}
}];
這串程式碼會將使用者傳送的訊息分析並擷取需要的資訊。
明天(Day 16)開始使用 Google Cloud Firestore,讓 LINE Bot 能夠「記住」使用者。