里程碑
7/27 Day5作業-喝水小精靈
我是阿力 @kobey1234發布於 已編輯
📝 Day 5 學習筆記:喝水小精靈
一、今天主題:讓 AI 小精靈開始有「資料庫能力」
今天的重點不是單純讓 Line Bot 回話,而是讓喝水小精靈開始具備:
- 會判斷使用者訊息
- 會記錄喝水量
- 會把資料寫進 Google Sheet
- 會讀取 Google Sheet
- 會判斷不同使用者身份
- 會定時提醒
- 會加總飲水量
- 會做三天小匯報
- 會用 Flex Message 做漂亮的進度卡片
整體來說,今天的小精靈已經不只是聊天機器人,而是開始有一點「小助理系統」的感覺了。
二、Reply Token 與 Push Message
今天再次確認 Line 訊息機制:
Reply Token
- 30 秒內回覆免費
- Reply Token 只能用一次
- 適合使用者傳訊息後,立刻回覆
Push Message
- Push Message 是主動推播
- Line 官方給 200 次內免費
- 超過免費次數就要付費
- 適合用在:
- 定時提醒喝水
- 每三天小匯報
- 主動推播通知
Reply 改 Push 的重點
如果要從 Reply Message 改成 Push Message:
- Line API 網址直接從
reply改成push - 原本的
replyToken要改成userId - 因為 Push Message 是主動找人,所以一定要知道要推給哪一個使用者
三、API 使用:NVIDIA NIM 與 OpenAI API
今天筆記有整理兩種 AI API:
NVIDIA NIM 免費 API
OpenAI API 付費 API
目前喝水小精靈使用 NVIDIA NIM 來處理訊息判斷與 JSON 轉換。
例如:
- 判斷使用者是不是在記錄喝水
- 從訊息中抓出 ml 數字
- 把使用者自然語言轉成可用的 JSON 格式
- 判斷使用者只是聊天,還是真的要記錄資料
實際免費額度與限制,仍以官方平台當下設定為準。
四、Switch 節點:用 contains 做分流
今天有用到 Switch 節點做訊息分流。
筆記重點:
switch → string → contains ( 包含 )也就是透過文字是否包含某些關鍵內容來判斷下一步。
例如:
- 包含喝水量 → 進入記錄流程
- 包含一般文字 → 進入聊天回覆
- 包含特定 JSON 欄位 → 進入資料處理
Switch 就像小精靈的路口判斷器,決定訊息接下來要走哪一條路。
五、資料處理原則:先寫 JSON,再分析
今天有一個很重要的觀念:
先寫 JSON,再分析也就是不要讓資料亂跑,而是先讓 AI 把使用者的話整理成固定格式,後面才比較好判斷、寫入或加總。
JSON.stringify
注意:
"text": "{{ JSON.stringify($json.output) }}"但實作時要注意:
如果字串有 \n,記得 JSON 指令要把雙引號拿掉也就是避免因為多包了一層雙引號,導致 Line API 或 HTTP Request 送出格式錯誤。
六、資料庫概念:CRUD
今天開始把 Google Sheet 當作簡易資料庫使用。
資料庫基本操作:
create 建立資料
read 讀取資料
update 更新資料
delete 刪除資料
在 n8n 中實作時,主要用到:
1. Append row in sheet
用來新增一筆資料。
例如:
- 新增喝水紀錄
- 新增使用者資訊
- 新增每日資料
2. Get row(s) in sheet
用來讀取資料。
例如:
- 讀取今日喝水量
- 讀取使用者資料
- 讀取過去三天紀錄
3. Append or Update row in sheet
用來新增或更新資料。
這個在身份確認很重要,因為有些使用者資料可能已經存在,有些還沒有。
七、身份確認:Display Name 與 userId
今天很重要的一段是做身份確認。
邏輯是:
再收集 Display Name(顯示名稱)→ 在 webhook 後面加 HTTP → 網址後面接 profile / userId
→ 從 POST 改 GET → 沒有 body也就是:
Webhook 收到 Line 訊息
→ 從訊息裡抓 userId
→ 用 HTTP Request 呼叫 Line profile
→ 取得 Display Name為什麼不能只用 Display Name?
因為:
有可能相同 Display Name所以真正要判斷不同人,要用:
userIdDisplay Name 比較適合拿來顯示名字,但不適合當唯一身份。
八、If 判斷:有資料就繼續,沒有資料就新增或更新
這段邏輯是:
If:
如果比對到……繼續(exist)
如果沒有……Append or Update row in sheet意思是:
- 如果在 Google Sheet 裡面已經比對到這個使用者:
- 代表使用者已經存在
- 流程繼續往下走
- 如果沒有比對到:
- 就用 Append or Update row in sheet
- 把使用者資料新增或更新到資料表
這裡判斷依據要用:
userId而不是 Display Name。
九、身份確認容易踩坑:Always Output Data
如果資料沒有查到,流程可能會中斷。
所以特別提醒:
身份確認
→ 如果沒有資料
→ 到 Setting
→ Always Output Data也就是要開啟 Always Output Data,讓流程就算沒找到資料也可以繼續往下跑。
十、喝水紀錄流程
使用者輸入:
我喝了300ml或:
我喝了700ml流程大概是:
Webhook
→ Line User Information
→ AI Agent
→ Switch
→ 轉換資料格式
→ Append row in sheet
→ HTTP Request 回覆 Line回覆範例:
已紀錄完成!喝了300 ml的水 讚啦~這裡的關鍵是:
- AI 要能判斷這是喝水紀錄
- 要抓出 ml 數字
- 要寫入 Google Sheet
- 最後再回覆使用者已紀錄完成
十一、讀取資料與加總
除了寫入資料,也要能讀取資料並加總。
用到的節點:
- Get row(s) in sheet
- Code
- Run Once
- Run Once for Items
- HTTP Request
今天確認的觀念:
Run once for Items:全部加總適合用在:
- 加總今日喝水量
- 加總過去三天喝水量
- 算出還差多少 ml
例如:
1500 - $json.totalML用來算距離目標還差多少。
十二、定時提醒喝水:Schedule Trigger
今天設定了三個提醒時間:
| 時間 | 提醒條件 |
| 早上 9:00 | 喝水量小於 1000 ml |
| 中午 12:00 | 喝水量小於 1500 ml |
| 下午 3:00 | 喝水量小於 2000 ml |
流程概念:
Schedule Trigger
→ Get row(s) in sheet
→ 所有 ml 數量加總
→ IF / Switch 判斷是否低於目標
→ Push Message 主動提醒提醒範例:
你目前總共喝了700 ml的水,還差800 ml的水,加油~或:
你目前總共喝了700 ml的水,還差1300 ml的水,加油~十三、三天小匯報
今天也做了「過去三天的飲水報告」。
重點:
每三天會有提醒的小匯報流程:
3 Days
→ Get row(s) in sheet
→ Filter
→ 所有 ml 數量加總
→ HTTP Request
→ Push Message 推播給使用者Filter 條件
還有:
minus(2, 'days')
is after or equal to用來抓最近三天的資料。
匯報範例
這是過去三天的飲水報告:
2026-07-26:300 ml
2026-07-27:600 ml
2026-07-28:100 ml
總飲用水量:1000 ml十四、Excel / Google Sheet 日期判斷
今天也有記到日期判斷公式。
等於今天
=$A1=TODAY()代表判斷 A1 是否是今天。
不等於今天
=$A2<>TODAY()代表判斷 A2 是否不是今天。
用途:
- 判斷資料是不是今天
- 篩選今日資料
- 排除非今日資料
十五、Flex Message:讓回覆變漂亮
今天也做了 Flex Message 版的喝水進度卡片。
原本只是純文字提醒,Flex Message 可以做成比較漂亮的卡片,例如:
今日飲水進度
小口多次,穩穩達標
目前已喝:100 ml
目標:2000 ml
進度:5%
還差:1900 ml
今日目標:還沒達標,繼續補水做法:
Flex Message → 直接用 GPT 下去改比較漂亮也就是 Flex Message 的 JSON 結構比較複雜,可以先用 GPT 產生初版,再放到 Line 或 n8n 裡面調整。
十六、今天成果整理
今天完成的喝水小精靈功能:
| 功能 | 狀態 |
| Line Webhook 接收訊息 | 完成 |
| AI 判斷喝水訊息 | 完成 |
| Switch 分流 | 完成 |
| JSON 格式轉換 | 完成 |
| 寫入 Google Sheet | 完成 |
| 讀取 Google Sheet | 完成 |
| 加總今日飲水量 | 完成 |
| 使用者身份確認 | 完成 |
| 取得 Display Name | 完成 |
| 使用 userId 判斷不同人 | 完成 |
| 早中下午定時提醒 | 完成 |
| Push Message 推播 | 完成 |
| 三天飲水小匯報 | 完成 |
| Flex Message 進度卡 | 完成 |
十七、今日踩坑與提醒
今天比較容易踩坑的地方:
- Reply Token 只能 30 秒內用,且只能用一次
- Push Message 要改用 userId,不是 replyToken
- Push Message 官方 200 次內免費,超過要付費
- Line API 網址要從 reply 改 push
- Display Name 可能重複,不適合當唯一識別
- 身份判斷要用 userId
- 如果沒有資料,記得開 Always Output Data
- JSON.stringify 如果有換行或格式問題,要注意雙引號
- Run once for Items 可以用來做全部加總
- Flex Message JSON 比較複雜,可以先用 GPT 產生,再微調
0 個愛心0 則留言
登入並驗證手機後就能留言。登入