跳至主要內容

里程碑

🍑 英桃派 |用 n8n 打造我的 LINE 英文學習小精靈!

ㄊㄊ @tingchacha發布於 已編輯

每天都想學英文,卻常常因為課業忙碌、沒有時間安排進度,最後就忘記複習了嗎?

這次我利用 n8n × LINE Bot × OpenAI,製作了一個會主動找我學英文的小精靈——「英桃派」🍑!

它不只會每天自動出文法題目,還會推播英文單字、提供例句,甚至能記錄已經學過的內容,盡量避免重複出題。

希望透過這個小工具,讓英文學習變得更輕鬆,也更容易養成習慣!


💡 1. 創作動機|讓英文學習主動找上門

一開始,我想要做一個簡單的翻譯小精靈,就是簡單的我傳英文單字或句子給小精靈,他就會傳中文解釋給我,並且告訴我哪裡可以修改得更自然。或是傳中文給他,他就會傳給我英文翻譯和其他意思相似但是詞性不同的中文給我。

做完後,我發現好像功能有點單一,然後就想到我的家教學生最近剛好準備段考,我就想說可以試試看新增他們可以用的功能,然後推(強)薦(迫)他們使用,於是我想到每天早上傳一則英文文法題給用戶,讓用戶作答後可以知道自己有沒有答對,以及為什麼會答對or答錯。

後來做完文法題後,我又想到可以每天下午傳5個單字給用戶,附上中文、詞性、例句,並且用愛的語氣請用戶把他背起來(?

🎨 2. 設計理念|每天一點點,讓學習變成日常

我把這個機器人命名為 「英桃派 」🍑。

希望它給人的感覺不是嚴肅的考試系統,而是一個每天陪大家累積英文能力的可愛小生物

目前主要設計了兩個功能:

📖 功能一:每日文法挑戰(08:00)

每天早上 8 點,英桃派會自動發送一道英文文法選擇題。

使用者可以直接點擊 LINE 訊息中的選項作答,不需要另外輸入答案。

作答後,機器人會自動判斷正確與否,並提供文法解析,幫助使用者理解答案背後的原因。

我希望它不只是告訴大家「答案是 B」,而是能讓大家知道為什麼要選 B,以及其他選項為什麼不適合。

📚 功能二:每日五個英文單字(17:00)

每天下午 5 點,英桃派會自動推播五個英文單字。

每個單字都包含:

  • 英文單字與詞性
  • 中文意思
  • 英文例句
  • 例句的中文翻譯

單字來源使用大考中心公布的高中英文參考詞彙表,並選擇第 3~6 級的詞彙,總共建立了 3,800 筆單字資料。

另外,我也設計了單字紀錄機制,讓機器人知道哪些單字已經推薦過,避免每天一直抽到相同的內容。

等到一輪單字快用完時,也能自動從之前推薦過的單字中挑選,開始下一輪複習。


⚙️ 3. n8n 結構|讓 LINE、AI 和資料庫一起工作

這次主要使用的工具有:

工具用途
n8n串接並自動化整個流程
LINE Messaging API發送訊息、接收使用者回答
OpenAI(gpt-5-mini)產生文法題目、解析與單字例句
n8n Data Tables儲存題目答案、解析和單字學習紀錄
JavaScript Code Nodes處理隨機抽題、資料格式與答案判斷

整個 Workflow 可以分成三個主要部分。

🌞 A. 每日文法題目產生與推播

流程:

Schedule Trigger → Code → AI Agent → Edit Fields → Code → Data Table → LINE Broadcast

運作方式:

  1. Schedule Trigger:設定每天早上 8 點自動啟動。
  2. Code(JavaScript):隨機決定今天要考的文法主題,並調整正確答案的位置,避免答案總是固定在同一個選項。
  3. AI Agent:使用 OpenAI 模型產生英文文法題目、四個選項、正確答案及解析。
  4. Edit Fields:替每一道題目建立專屬的 quizId,方便之後辨識。
  5. Code(JavaScript):把 AI 產生的內容整理成符合 LINE Messaging API 的訊息格式,包含四個可以點擊的作答按鈕。
  6. Data Table:將題目的正確答案和解析儲存到 EnglishQuiz。
  7. HTTP Request:透過 LINE Broadcast API 將題目發送出去。

這樣每天的題目就不需要人工準備,系統可以自動完成出題與推播。

💬 B. 使用者作答與自動批改

流程:

LINE Webhook → Switch → Edit Fields → Data Table → Code → LINE Reply API

這部分是整個機器人比較有互動性的地方!

當使用者點擊文法題目的選項時:

  1. LINE 會透過 Webhook 將使用者的作答資訊傳回 n8n。
  2. Switch 判斷收到的訊息類型,將文法作答事件導向正確的處理流程。
  3. Edit Fields 整理題目編號與使用者選擇的答案。
  4. Data Table 根據 quizId 找出當初儲存的正確答案與解析。
  5. Code(JavaScript) 比對答案,判斷使用者是否答對,並組合回覆內容。
  6. LINE Reply API 將批改結果傳回使用者的 LINE。

這樣就能做到:

出題 → 點擊作答 → 自動判斷 → 查看解析

而且不需要每次回答都重新請 AI 判斷正確答案,因為答案在出題時就已經儲存好了。

🌷 C. 每日單字推播與學習紀錄

流程:

Schedule Trigger → Get row(s) → Code → AI Agent → Code → LINE Broadcast → Code → Update row(s)

這部分是我花了不少時間處理的功能,因為除了發送單字,還需要考慮如何避免重複。

運作方式:

  1. Schedule Trigger:設定每天台灣時間下午 5 點啟動。
  2. Get row(s):從 EnglishVocabulary 讀取 3,800 筆單字。
  3. Code(JavaScript):優先從尚未推薦過的單字中,隨機選出五個。
  4. AI Agent:根據抽出的單字產生中文意思、英文例句與中文翻譯。
  5. Code(JavaScript):檢查 AI 的輸出內容,並整理成 LINE 可以接收的 JSON 格式。
  6. HTTP Request:透過 LINE Broadcast API 發送當天的五個單字。
  7. Code(JavaScript):取得當天抽出的五個單字 ID,並產生當天日期。
  8. Update row(s):將這五筆資料的 lastSentDate 更新為當天日期。

其中,lastSentDate 是我用來判斷單字是否已經推薦過的欄位。

如果是 null 或空白,就代表還沒推薦過;如果有日期,就代表已經發送過。

這個設計讓英桃派不只是隨機發送單字,而是有一個簡單的學習進度管理機制。


🧩 4. 遇到的困難|原來自動化有這麼多細節!

這次製作過程中,遇到不少問題,也讓我更了解自動化工具實際運作的方式。

① LINE 訊息格式比想像中複雜

一開始以為只要讓 AI 產生文字,再傳送給 LINE 就好了。

但實際操作才發現,LINE Messaging API 對 JSON 格式有明確要求,尤其是文法題目中的互動按鈕,需要正確設定訊息結構和 postback 資料。

後來透過 JavaScript Code Node 整理資料,才成功讓使用者可以直接點選答案。

② AI 產生的內容,需要再經過程式處理

AI 雖然很方便,但它產生的內容不一定能直接交給下一個節點使用。

因此,我學會在 AI Agent 前後加入 Code Node,先整理輸入資料,再檢查輸出內容,避免格式錯誤影響 LINE 推播。

這讓我發現,AI 負責產生內容,程式則負責讓整個流程穩定運作,兩者需要互相配合。

③ 如何避免每天抽到重複單字?

原本只要隨機抽出五個單字就能完成推播,但如果沒有紀錄,可能會連續幾天抽到相同單字。

所以我加入 lastSentDate 欄位,並使用 JavaScript 判斷哪些單字還沒推薦過。

另外,也要考慮當剩餘單字不足五個時該怎麼辦,因此設計了自動進入下一輪的抽選邏輯。

④ 測試成功,不代表整個流程就沒有問題

這是我覺得最有收穫的一點。

有時候單獨執行某個節點會成功,但整條流程接起來之後,可能因為資料格式或執行順序不同而出現問題。

例如 LINE 已經成功收到訊息,但還需要確認資料庫是否真的更新,否則隔天的抽選結果就可能受到影響。

因此,我學會分別測試節點,再進行完整流程測試,也更了解資料在各個節點之間是怎麼傳遞的。


🎉 5. 成果展示

1 個愛心0 則留言

登入並驗證手機後就能留言。登入