在體驗課程管理中,「課程行程管理」往往是教練和管理者最耗時的工作之一。
以潛水課程為例,每週可能有多堂課程,每位學員的報名時間、課程類型、付款狀態都不同。
如果依賴人工建立行事曆,容易出現以下問題:
這些問題不只浪費教練時間,也容易造成學員體驗下降。
本篇將示範如何利用n8n 自動化流程 + Google Calendar + LINE Bot,
將報名資料自動建立成課程行事曆事件,並自動提醒學員。
透過行事曆自動化,不僅集中管理課程行程,
也能與 CRM 系統整合,後續課程回饋與行銷分眾更方便。
完整流程可分為四個核心節點:
工具 | 功能 |
---|---|
LINE Bot / Flex Message | 報名入口、課前提醒、自動通知學員 |
Google Form | 收集報名資料 |
Google Sheet | 集中管理報名名單與付款狀態 |
Google Calendar | 集中管理課程行程、自動提醒 |
n8n | 自動化流程樞紐,將報名資料自動寫入 Sheet、建立 Calendar、觸發 LINE Bot |
潛水教練小明每週管理 3 堂潛水課程,每堂課約 5–10 名學員。傳統作法是:
問題:耗時、易出錯、資料分散。
學員報名
資料自動整理
自動建立 Google Calendar 事件
課前自動提醒
成效
圖1:流程圖
圖2:LINE Flex Message 「加入行事曆」按鈕
圖3:Google Calendar 自動建立事件
節點設計:
A. Webhook 監聽 LINE 表單提交
B. Google Sheet
C. Google Calendar
D. LINE Bot
{
"resource": "event",
"operation": "create",
"calendarId": "primary",
"summary": "潛水課程 - {{ $json.name }}",
"description": "集合地點:XX碼頭\n攜帶物品:潛水裝備",
"start": {
"dateTime": "{{ $json.courseDate }}T09:00:00",
"timeZone": "Asia/Taipei"
},
"end": {
"dateTime": "{{ $json.courseDate }}T12:00:00",
"timeZone": "Asia/Taipei"
}
}
{
"type": "button",
"action": {
"type": "uri",
"label": "加入行事曆",
"uri": "https://www.google.com/calendar/render?action=TEMPLATE&text=潛水課程-小明&dates=20250919T090000/20250919T120000&details=攜帶物品:潛水裝備"
}
}
表1:課程行事曆
timestamp | name | course | date | lineId | paid |
---|---|---|---|---|---|
2025/09/20 10:15:00 | 小明 | 進階潛水課程 | 2025-09-27 | U123456 | Y |
2025/09/20 11:30:00 | 小美 | 體驗潛水 | 2025-10-01 | U987654 | N |
2025/09/21 9:50:00 | 阿華 | 水肺證照課程 | 2025-10-02 | U888888 | N |
2025/09/21 10:20:00 | Lily | 體驗潛水 | 2025-10-03 | U777777 | N |
2025/09/21 11:00:00 | Jack | 進階潛水課程 | 2025-10-04 | U666666 | N |
2025/09/22 14:10:00 | 小強 | 體驗潛水 | 2025-10-05 | U555555 | N |
2025/09/22 15:45:00 | May | 水肺證照課程 | 2025-10-06 | U444444 | N |
2025/09/23 9:20:00 | Andy | 體驗潛水 | 2025-10-06 | U333333 | N |
2025/09/23 10:40:00 | Tina | 進階潛水課程 | 2025-10-07 | U222222 | N |
2025/09/24 13:30:00 | Oscar | 體驗潛水 | 2025-10-08 | U111111 | N |
code節點:產生 Google Calendar URI 並傳遞課程資料
// 原始值
const courseName = $input.first().json.course; // 課程名稱
const studentName = $input.first().json.name; // 姓名
const details = '攜帶物品:裝備、防曬、毛巾';
const date_ = $input.first().json.date; // 上課日期
const dateStart = $input.first().json.date.replace(/-/g,'') + 'T000000';
const dateEnd = $input.first().json.date.replace(/-/g,'') + 'T235900';
const paid = $input.first().json.paid; // 已付款 Y/N
// 只對 URI 中使用的值做 encode
const uri = `https://calendar.google.com/calendar/render?action=TEMPLATE&text=${encodeURIComponent(courseName)}(${encodeURIComponent(studentName)})&details=${encodeURIComponent(details)}&dates=${dateStart}/${dateEnd}`;
return [
{
json: {
uri,
courseName,
studentName,
details,
dateStart,
dateEnd,
paid,
date_
}
}
];
說明:
Flex Message 排版語法範例
{
"to": "USER_LINE_ID",
"messages": [
{
"type": "flex",
"altText": "上課提醒通知",
"contents": {
"type": "bubble",
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "text",
"text": "{{ $json.courseName }}",
"weight": "bold",
"size": "xl"
},
{
"type": "text",
"text": "{{ '日期:' + $json.date_ }}",
"wrap": true,
"margin": "md"
},
{
"type": "text",
"text": "集合地點:OO港",
"wrap": true,
"margin": "md"
},
{
"type": "text",
"text": "攜帶物品:裝備、防曬、毛巾",
"wrap": true,
"margin": "md"
},
{
"type": "button",
"style": "primary",
"action": {
"type": "uri",
"label": "加入行事曆",
"uri": "{{ $json.uri }}"
},
"margin": "lg"
}
]
}
}
}
]
}
透過課程行事曆自動化,你可以:
【我的小murmur】
明天預告:Day 13 我們將介紹課後回饋與 CRM 紀錄,
示範如何將課後問卷與資料自動整合到 CRM,提高學員滿意度與再報名率。
今天開始設計你的課程行事曆自動化流程,把繁瑣的行政工作交給自動化,專注在自己能產出的價值上吧!
【秘密小樹洞】
想偷偷告訴我你最頭痛的工作流程、AI、自動化問題嗎?
點這個小樹洞分享,我會給你免費資源或可實作解法
→樹洞問卷