教師研習|實作講義
60 分鐘,架一個
60 分鐘,架一個
幫你記研習的 LINE 小秘書
研習公告傳給 LINE,它幫你抄進 Google 日曆,時間到了提醒你。全程免費,不用寫程式。
① 會架用自己的帳號架好一套
② 會用現場傳一則公告成功入曆
③ 會問卡關時知道怎麼請 Gemini 幫忙
【研習公告】資訊素養增能研習
10/15(三)14:00–16:00 線上,研習時數 2 小時,10/8 前報名……
10/15(三)14:00–16:00 線上,研習時數 2 小時,10/8 前報名……
- 時間
- 10/15(三)14:00–16:00
- 形式
- 線上
- 截止
- 2026-10-08
- 時數
- 2
✅ 入曆❌ 丟掉
1510 月・星期三
Google 日曆
Google 日曆
💻 資訊素養增能研習14:00–16:00・研習
⏰ 報名截止10/8(三)全天
開課前 30 分鐘提醒
上課前請準備
- 筆電一台(用 Chrome 瀏覽器)
- 手機,裝好 LINE
- 個人 Gmail 帳號與密碼
- 一則真實的研習公告(等一下測試用)
程式碼放在 GitHub
只有一個檔 training-bot.gs,第 4 步整個複製貼上:
github.com/u8961310/training-bot
→ 點 docs 資料夾 → training-bot.gs
講義線上版:u8961310.github.io/training-bot
為什麼要個人 Gmail?學校帳號常被管理者擋掉「外部網頁應用程式」,做到第 8 步會卡住。
今天的路線圖
第 0 關|學會問開好 Gemini、學會求救
步驟 0・約 5 分
步驟 0・約 5 分
第 1 關|拿鑰匙LINE 與 Gemini 各拿一把
步驟 1–3・約 15 分
步驟 1–3・約 15 分
第 2 關|搬進家具把程式放進 Google
步驟 4–7・約 15 分
步驟 4–7・約 15 分
第 3 關|接上電話線讓 LINE 找得到它
步驟 8–11・約 15 分
步驟 8–11・約 15 分
第 4 關|試用傳公告、看日曆
步驟 12・約 10 分
步驟 12・約 10 分
打個比方:小秘書要上班,需要一支電話(LINE 官方帳號)、一顆腦袋(Gemini AI)、一張辦公桌(Google Apps Script)。今天就是依序把這三樣準備好,再把電話線接到桌上。學有餘力,最後的進階篇教你用提示詞請 Gemini 從零寫出一支自己的小秘書。
等一下拿到的兩把「鑰匙」(Token、API key)就像家裡鑰匙:不要拍照上傳、不要貼到群組。整個過程只貼在你自己的 Google 專案裡。
0
第 0 關
約 5 分鐘學會問:卡關時請 Gemini 當你的程式小老師
等一下的 Apps Script(GAS)畫面都是程式碼,看不懂很正常。先學會怎麼問 Gemini,後面看到藍色的「問 Gemini」框,就是提醒你這時可以拿哪一段提示詞來用。
0
先開好 Gemini 分頁
- Chrome 另開一個分頁到
gemini.google.com,用個人 Gmail 登入 - 這個分頁一直開著,等一下哪一步看不懂,就切過來問
這裡是「跟 Gemini 聊天」的網頁;第 3 步的
aistudio.google.com 是幫小秘書「拿 API key」的地方,兩個不一樣。好提示詞=交代代課老師的四句話
① 角色你是誰
「你是很有耐心的 Apps Script 老師」
「你是很有耐心的 Apps Script 老師」
② 任務要做什麼
「告訴我這個錯誤怎麼解決」
「告訴我這個錯誤怎麼解決」
③ 規則哪些不能做
「我不會寫程式,不確定就說不確定」
「我不會寫程式,不確定就說不確定」
④ 格式交回什麼樣子
「一步一行,寫出要點哪個按鈕」
「一步一行,寫出要點哪個按鈕」
太模糊我的程式壞了怎麼辦?
→ Gemini 不知道你在哪一步、出了什麼錯,只能給一堆通用建議。
→ Gemini 不知道你在哪一步、出了什麼錯,只能給一堆通用建議。
四句話都有你是 Apps Script 老師,我執行 setup 出現下面的錯誤,我不會寫程式,請一步一步告訴我在畫面上點哪裡。
→ 回答具體,照著做就好。
→ 回答具體,照著做就好。
最重要的是第 ③ 句。AI 最常犯的錯是「很有自信地亂編」,先說清楚你的程度、要它不確定就講,能少掉一大半麻煩。
求救提示詞|執行出現紅字時
求救提示詞(第 6、7 步最常用到)
你是很有耐心的 Google Apps Script 老師,我是完全不會寫程式的老師。 我在 Apps Script 執行「setup」函式時出現下面的錯誤。 請你: 1. 用一句白話說明這個錯誤是什麼意思。 2. 一步一行,告訴我在畫面上要點哪裡、改什麼。 3. 除非真的必要,不要叫我改程式碼;要改的話,告訴我改哪一行、整行改成什麼。 4. 不確定原因就直接說不確定,不要亂猜。 ---- 錯誤訊息 ---- (把執行記錄裡的紅字整段複製貼上)
貼給 Gemini 之前看一眼:錯誤訊息裡如果有 Token、
AIza… 開頭的 key,先刪掉再貼。鑰匙只放在指令碼屬性,不給任何人,AI 也一樣。解說提示詞|想看懂一段程式
解說提示詞
你是 Google Apps Script 老師。下面是一段程式,請用老師聽得懂的話,
分段說明每一塊在做什麼,每段不超過兩句。只要解釋,不要修改程式。
(在 Apps Script 反白一個函式,例如 function setup() { … } 整段,複製貼上)想改早報時間、請 Gemini 寫新工具,或用提示詞從零生出一支小秘書,都在最後的進階篇。
1
第 1 關
約 15 分鐘拿鑰匙:幫小秘書辦電話、裝腦袋
1
開一個 LINE 官方帳號(小秘書的電話)
- 電腦開
manager.line.biz,用你的 LINE 帳號登入 - 按 建立,帳號名稱填「研習小秘書」,業種隨意選(例如「教育」)
- 建好後進入這個帳號,按右上角 → 左邊 → 啟用 Messaging API
- 「服務提供者」選 ,名稱填你的名字即可 → 同意 → 確定
畫面顯示 Channel ID、Channel secret,就代表啟用成功。
2
拿第一把鑰匙:Channel access token
- 同一頁點連結進入
developers.line.biz(LINE Developers),找到剛剛的 channel - 上方分頁切到 ,捲到最下面
- 按 Issue,出現一長串英數字,按旁邊的複製圖示
- 先貼在電腦的「記事本」暫放,第 5 步會用到
Channel access token (long-lived)
eyJhbGciOiJIUzI1NiJ9.xxxxxxxx…… Issue順便在同一頁把 設成「停用」,不然每次傳訊息,LINE 都會搶著回一句罐頭訊息。
3
拿第二把鑰匙:Gemini API key(小秘書的腦袋)
- 開
aistudio.google.com,用個人 Gmail 登入;第一次會要你同意條款 - 點 → Create API key(要選專案就選預設的)
- 複製那串
AIza…開頭的字,一樣先貼到記事本
記事本裡現在有兩行:一行 LINE token、一行
AIza…。免費方案不用綁信用卡。完整的 key 只會顯示一次,忘了複製的話,刪掉重建一個就好。
2
第 2 關
約 15 分鐘搬進家具:把程式放進 Google Apps Script
Apps Script 是 Google 免費提供的「雲端小電腦」,程式放上去就會 24 小時待命,不用開著你的電腦。
4
建立專案,貼上程式
- 開
script.google.com→ 左上角 新專案 - 點上方「未命名的專案」,改名為「研習小秘書」
- 編輯區已經有幾行預設程式碼:點進去按 Ctrl+A 全選,刪掉
- 另開分頁到
github.com/u8961310/training-bot→ 點docs→training-bot.gs,按程式碼右上角的 ⧉ Copy raw file 複製全部 - 回到 Apps Script 編輯區,按 Ctrl+V 貼上
- 按 Ctrl+S 存檔
第一行是
// ===== Config.js =====,存檔後沒有跳出紅色錯誤訊息。這支程式是寫好的完整版,今天直接複製就好。想知道怎麼用提示詞請 Gemini 從零寫出來,看進階篇。
5
把兩把鑰匙放進保險箱(指令碼屬性)
- 左側點齒輪
- 確認 是「(GMT+08:00) 台北」,不是的話改過來
- 捲到最下面 → 新增指令碼屬性,照下表加兩行(左邊一字不差,大寫、底線都要對)
- 按 儲存指令碼屬性
| LINE_CHANNEL_ACCESS_TOKEN | (第 2 步那串) |
| GEMINI_API_KEY | (第 3 步 AIza… 那串) |
鑰匙放在這裡,而不是寫在程式碼裡,這樣哪天要把程式分享給別人,也不會連鑰匙一起送出去。
6
執行 setup,讓它自己建日曆與試算表
- 回到 ,上方工具列的函式下拉選單選
setup→ 按 ▷ 執行 - 跳出「需要授權」→ 審查權限 → 選你的 Gmail
- 看到「Google 尚未驗證這個應用程式」→ 點左下 → → 允許
為什麼寫「不安全」?因為這支程式是你自己的,沒送 Google 審查。它要的權限(日曆、試算表、雲端硬碟、寄信、連外網)都是給你自己的小秘書用的。
已建立日曆:研習
已建立試算表:https://docs.google.com/spreadsheets/d/……
已建立講義資料夾:https://drive.google.com/drive/folders/……
早報觸發器:每天 7:30 左右
⚠️ 還沒設定:ALLOWED_USER_IDS
看到上面五行就對了。最後一行的 ⚠️ 是正常的,第 11 步才會補上。
想知道
setup 到底做了什麼?在編輯區反白整個 function setup() { … },用解說提示詞請 Gemini 解釋。執行跳紅字就用求救提示詞。7
執行 testExtract,確認腦袋會動
- 下拉選單改選
testExtract→ ▷ 執行 - 等 3–10 秒,看下方執行記錄
記錄裡出現一段有
"title"、"date"(9 月 28 日)、"start": "19:00" 的文字,就代表 Gemini 讀得懂公告。如果出現
API key not valid:回第 5 步檢查 GEMINI_API_KEY 有沒有貼完整、前後有沒有多空白。出現其他紅字看不懂?用求救提示詞,把執行記錄的紅字貼給 Gemini(先刪掉裡面的鑰匙)。
3
第 3 關
約 15 分鐘接上電話線:讓 LINE 找得到小秘書
8
部署成「網頁應用程式」,拿到門牌網址
- 編輯器右上角 部署 →
- 「選取類型」旁的齒輪 → 選
- 執行身分:我;誰可以存取:所有人 → 部署
- 複製畫面上的「網頁應用程式」網址(
https://script.google.com/macros/s/……/exec)
把網址貼到瀏覽器新分頁打開,畫面只出現一行
training-bot OK。「所有人」是為了讓 LINE 伺服器打得進來。這個網址等於小秘書的門牌,不要公開分享;陌生人就算知道,第 11 步的白名單也會擋住。
9
把門牌填到 LINE(Webhook)
- 回 LINE Developers → 你的 channel → 分頁
- 按 Edit,貼上第 8 步的網址 → Update
- 把下面的 開關打開(變綠色)
旁邊的 Verify 按下去可能顯示錯誤(Google 會多轉一次網址),不用理它,以第 10 步實測為準。
10
手機加好友,問出你的 userId
- 同一頁上方有 ,用手機 LINE 掃描 → 加入好友
- 傳一句「你好」給小秘書
你好
🔧 設定模式
你的 userId:
U1a2b3c4d5e6f……
把它填進指令碼屬性 ALLOWED_USER_IDS 就能開始用。
你的 userId:
U1a2b3c4d5e6f……
把它填進指令碼屬性 ALLOWED_USER_IDS 就能開始用。
收到「🔧 設定模式」這則回覆,代表電話線接通了!
傳了沒反應?九成是第 9 步的 Use webhook 沒打開,或第 2 步的自動回應訊息沒關。
11
把自己加進白名單
- 在手機上長按那串
U……複製,用 LINE 傳給自己的電腦版,或直接在電腦版 LINE 複製 - 回 Apps Script → → 指令碼屬性 → 新增第三行:
ALLOWED_USER_IDS U1a2b3c4d5e6f…… - 儲存。不用重新部署,馬上生效
要讓家人也能用?多個 userId 用半形逗號隔開。不過大家的研習都會寫進同一本日曆,建議每個人各自架一套。
4
第 4 關
約 10 分鐘試用:傳第一則公告,看它進日曆
12
傳公告 → 看卡片 → 按 ✅ → 開日曆
- 把你準備的研習公告全文複製,貼給小秘書(掃描檔或臉書貼文複製不了的話,就截圖傳過去)
- 幾秒後會收到確認卡片,對照原公告看日期、時間,沒問題按 ✅ 入曆
- 手機打開 Google 日曆 → 左上角選單 → 勾選「研習」日曆
【研習公告】資訊素養增能研習
10/15(三)14:00–16:00 線上……
10/15(三)14:00–16:00 線上……
📋 請確認研習資訊
💻 資訊素養增能研習
時間 10/15(三)14:00–16:00
報名截止 2026-10-08
時數 2
✅ 入曆 ❌ 丟掉
💻 資訊素養增能研習
時間 10/15(三)14:00–16:00
報名截止 2026-10-08
時數 2
✅ 入曆 ❌ 丟掉
↑ 示意畫面,內容為虛構範例
日曆上出現「💻 資訊素養增能研習」,報名截止那天也多了一個「⏰ 報名截止」的全天事件。恭喜,完成了!
之後每天怎麼用
- 看到公告就丟給它:文字或截圖都可以。只貼網址不行(臉書要登入才看得到,它讀不到)
- 卡片標題的圖示:🏫 實體、💻 線上、🔀 混合;公告沒寫的欄位會空著,AI 不會自己猜
- 看到紅字「⚠️ 日期時間信心偏低」:AI 不太確定,一定要對照原文再按 ✅
- 它只負責抄,不會幫你報名,報名連結還是要自己點
- 研習後把講義檔或連結丟給它:點選是哪一場,就會存進雲端硬碟「研習講義」資料夾(Google 簡報/文件連結會另存 PDF 備份);之後輸入
講義 關鍵字就找得到
它會在這兩個時間提醒你
| 什麼時候 | 怎麼提醒 |
|---|---|
| 開課前 30 分鐘 | 手機 Google 日曆跳通知,點開就有地址或會議連結 |
| 當天早上 7:30 左右 | LINE 早報:今天的研習,附上明天的和 3 天內報名截止的。當天沒研習就不發(假日也一樣) |
想把早報改成別的時間、提醒提早 1 小時?用進階篇的改設定提示詞問該改哪裡。
隨時可以問它(不花推播額度,想問幾次都行)
本週未來 7 天的研習
下一場最近一場的時間地點
時數本學年累計研習時數
說明用法提示
+
進階篇・第二堂課或回家練習
約 60 分鐘用提示詞,請 Gemini 從零生出一支小秘書
今天複製的 training-bot.gs 有將近 900 行,一段提示詞叫 Gemini 一次寫完不切實際。訣竅是先講好共同規格,再分 4 段慢慢加,每一段都能跑、都有檢查點,壞了也知道壞在哪一段。
開始前準備(跟主線共用鑰匙,但另開一個專案)
script.google.com→ 新專案,改名「小秘書(自己生)」;專案設定的時區一樣改成台北- 指令碼屬性照第 5 步加
LINE_CHANNEL_ACCESS_TOKEN、GEMINI_API_KEY,ALLOWED_USER_IDS先不要填,第 1 段要用設定模式測試 - Gemini 開一段新對話,4 段提示詞都在同一段對話裡接著貼,它才記得前面寫過什麼
一個 LINE 官方帳號只能接一個 Webhook 網址。練習時把 Webhook 換成新專案的網址,主線的小秘書會暫停;練完記得換回第 8 步的網址。想兩支同時用,就再開一個 LINE 官方帳號。
每一段貼好之後:更新部署
主線只部署一次,但這裡每段都會改程式,改完要發布新版本,LINE 才會用到新程式:
- 第一次(第 1 段):照第 8 步 ,再照第 9 步把新網址填進 LINE Webhook
- 之後每段:部署 → → 右上鉛筆(編輯)→ 版本選 → 部署。網址不會變,LINE 不用重設
共同規格|第一則先貼這段
共同規格提示詞
你是 Google Apps Script 老師,我是不會寫程式的老師。接下來我會分 4 段,請你幫我寫一支「研習 LINE 小秘書」: 老師把研習公告傳給 LINE 官方帳號,AI 整理成卡片,按確認後寫進 Google 日曆,並在早上提醒。 這一則先不要寫程式,記住下面的共同規格,回我「了解」就好。 【共同規格】 1. 全部寫在同一個 .gs 檔,不使用外部函式庫。 2. 金鑰和設定一律從「指令碼屬性」讀,絕對不可以寫在程式碼裡。屬性名稱固定: LINE_CHANNEL_ACCESS_TOKEN、GEMINI_API_KEY、ALLOWED_USER_IDS(多個用半形逗號分隔)、CALENDAR_ID、SHEET_ID 3. 時區一律 Asia/Taipei。 4. 這些函式名稱固定、一字不差:doGet、doPost、lineReply、geminiExtract、testExtract、setup、dailyDigest、setupTrigger。 5. 回覆 LINE 用 reply API(https://api.line.me/v2/bot/message/reply);只有 dailyDigest 可以用 push API。 6. 每一段都在前一段的程式上「增加功能」,每次都給我「完整的程式碼」,我會全選覆蓋貼上。 7. 每一段加中文註解,重要步驟用 console.log 印出進度。
1第 1 段|骨架:接上 LINE、擋住陌生人
第 1 段提示詞
【第 1 段:骨架】請照共同規格寫:
1. doGet:瀏覽器打開網址時,回傳純文字「training-bot OK」。
2. doPost:接收 LINE Messaging API 的 webhook,逐一處理 events;不管成功失敗,最後都回傳文字「OK」。錯誤用 console.error 記錄,不要讓程式整個停掉。
3. lineReply(replyToken, messages):共用的回覆函式,messages 可以是一則或多則。
4. 白名單:讀 ALLOWED_USER_IDS。
- 如果是空的:不論對方傳什麼,都回覆
「🔧 設定模式
你的 userId:
(對方的 userId)
把它填進指令碼屬性 ALLOWED_USER_IDS 就能開始用。」
- 不在名單裡:不回覆,直接忽略。
- 在名單裡:先回覆「收到:」加上對方傳的文字(之後的段落會換成真正的功能)。貼上存檔 → 照第 8 步部署、第 9 步換 Webhook → 瀏覽器開網址看到
training-bot OK → LINE 傳「你好」收到「🔧 設定模式」→ 把 userId 填進 ALLOWED_USER_IDS → 再傳「測試」收到「收到:測試」。2第 2 段|腦袋:請 Gemini 讀懂公告
第 2 段提示詞
【第 2 段:腦袋】請在目前的程式上加入: 1. 程式最上面加常數 GEMINI_MODEL = 'gemini-3.5-flash-lite',不要自己改成別的模型名稱。 2. geminiExtract(text):用 UrlFetchApp 呼叫 https://generativelanguage.googleapis.com/v1beta/models/(GEMINI_MODEL):generateContent 金鑰放在 header「x-goog-api-key」。temperature 設 0,用 responseMimeType: 'application/json' 搭配 responseSchema,讓它只回 JSON。 欄位:is_training(是不是研習公告)、title、sessions(陣列,每場有 date:YYYY-MM-DD、start:HH:mm、end:HH:mm)、 mode(onsite/online/hybrid/unknown)、location、online_url、register_url、register_deadline(YYYY-MM-DD)、hours、notes、confidence(0~1,對日期時間的信心)。 3. 給 Gemini 的指示要包含:今天的日期(台北時間),用來推算沒寫年份的日期;民國年加 1911 換成西元年; 原文沒寫的欄位一律 null,禁止推測,尤其是結束時間和網址;網址只能照抄原文;多天或多場次每場各一筆 sessions。 4. testExtract():用下面這段範例公告呼叫 geminiExtract,把結果用 console.log(JSON.stringify(結果, null, 2)) 印出來: 「中秋節 & 教師節 教師AI 底層能力雙講堂 講師:數位敘事力期刊 吳奇 9/28(一)19:00 直播連結在貼文留言區」 5. 白名單內的人傳文字時,改成:呼叫 geminiExtract,暫時用文字回覆研習名稱和每一場的日期時間; is_training 是 false 或沒有場次,就回「🤔 看不出研習的日期時間。」
貼上存檔 → 下拉選單選
testExtract 執行(第一次會要授權)→ 記錄出現 "title"、"date"(9 月 28 日)、"start": "19:00" → 更新部署新版本 → LINE 傳一則公告,收到研習名稱和日期時間。3第 3 段|入曆:確認卡片+寫進日曆
第 3 段提示詞
【第 3 段:入曆】請在目前的程式上加入:
1. setup():
- 沒有 CALENDAR_ID 就建立名為「研習」的日曆(時區 Asia/Taipei),把 id 存回指令碼屬性,console.log「已建立日曆:研習」。
- 沒有 SHEET_ID 就建立試算表「研習小秘書資料」,第一列表頭:id、created_at、status、title、hours、data_json,
把 id 存回指令碼屬性,console.log「已建立試算表:」加網址。
- 最後檢查 LINE_CHANNEL_ACCESS_TOKEN、GEMINI_API_KEY、ALLOWED_USER_IDS,有缺的用「⚠️ 還沒設定:」列出,都有就印「✅ 設定完成」。
2. 收到公告 → geminiExtract → 在試算表新增一列(status = pending,完整結果存在 data_json)→ 回覆一張 Flex Message 確認卡片:
- 上方小字「📋 請確認研習資訊」,下面是研習名稱,名稱前加圖示:實體 🏫、線上 💻、混合 🔀、不明 📌
- 內容列出時間、形式、地點、報名截止、時數,沒有的欄位就不顯示
- confidence 小於 0.7 時,加一行紅字「⚠️ 日期時間信心偏低,請對照原文」
- 底部兩個 postback 按鈕:「✅ 入曆」(data:action=confirm&id=這一列的 id)、「❌ 丟掉」(data:action=discard&id=這一列的 id)
3. 處理 postback:
- confirm:每一場在「研習」日曆建立事件,標題是圖示加研習名稱;沒寫結束時間就先抓 2 小時;每個事件設開始前 30 分鐘跳通知;
有報名截止日就另外建全天事件「⏰ 報名截止:研習名稱」。status 改 confirmed,回覆「✅ 已寫進「研習」日曆:研習名稱」。
- discard:status 改 discarded,回覆「🗑️ 已丟掉:研習名稱」。
- 同一筆已經處理過,就回覆「這筆已經處理過了」,不要重複寫入。貼上存檔 → 執行
setup(會再要一次授權),記錄出現「已建立日曆:研習」「已建立試算表」→ 更新部署新版本 → LINE 傳公告收到確認卡片 → 按 ✅ → Google 日曆出現事件和報名截止。不想多一本「研習」日曆?執行
setup 前,先把主線專案指令碼屬性裡的 CALENDAR_ID 複製到新專案,它就會沿用同一本。4第 4 段|提醒與指令
第 4 段提示詞
【第 4 段:提醒與指令】請在目前的程式上加入: 1. 文字指令,一律用 reply 回覆(不耗推播額度): - 「本週」:列出「研習」日曆未來 7 天的研習(不含「⏰ 報名截止」事件),每行「M/d(星期幾)HH:mm 標題」,沒有就回「(沒有)」 - 「下一場」:半年內最近一場研習的時間、標題、地點 - 「時數」:從這個學年的 8 月 1 日起(1~7 月問的話,就從前一年的 8 月 1 日算),試算表中 status = confirmed 的研習時數加總 - 「說明」:列出以上用法 2. dailyDigest():今天「研習」日曆有研習才推播(假日也一樣),沒有就什麼都不做。 內容:「☀️ 研習早報」、今天的研習、明天的研習、3 天內的報名截止。推播給 ALLOWED_USER_IDS 裡的每一個人。 3. setupTrigger():先刪掉舊的 dailyDigest 觸發器,再建立每天 7 點 30 分左右執行 dailyDigest 的觸發器(時區 Asia/Taipei), console.log「早報觸發器:每天 7:30 左右」。setup() 的最後也呼叫 setupTrigger()。
貼上存檔 → 執行
setupTrigger,記錄出現「早報觸發器」→ 更新部署新版本 → LINE 輸入「本週」「時數」都有回覆。想馬上看早報長怎樣,在當天有研習時直接執行 dailyDigest。整合檢查|4 段都做完後貼一次
整合檢查提示詞
下面是我目前完整的程式。請幫我檢查,先不要重寫:
1. 有沒有同名的函式(重複定義時,後面的會蓋掉前面的)。
2. 共同規格第 4 點的函式是不是都在、名稱一字不差。
3. 有沒有把金鑰直接寫在程式碼裡。
4. 有沒有在 dailyDigest 以外的地方用了 push API。
有問題的話,列出「在哪個函式、為什麼、要改成什麼」,等我同意再給修改後的完整程式。
---- 程式碼 ----
(在 Apps Script 按 Ctrl+A 全選、複製貼上)自己生的版本和今天的完整版差在哪
| 功能 | 4 段提示詞版 | 完整版 training-bot.gs |
|---|---|---|
| 文字公告 → 卡片 → 入曆 | 有 | 有 |
| 截圖辨識公告 | 沒有(可以再請 Gemini 加) | 有 |
| 早報 | 有 | 有,推播額度快用完時自動改寄 Email |
| 研習講義收納 | 沒有 | 有,存進雲端硬碟+講義 關鍵字 查詢 |
| 「對方正在輸入」動畫 | 沒有 | 有 |
Gemini 每次寫出來的程式都不太一樣,跟別人的長得不同很正常,檢查點有過就好。某一段一直卡住,把錯誤訊息用求救提示詞貼回同一段對話;真的救不回來,也可以拿完整版裡同名的函式來對照(用解說提示詞請 Gemini 說明差在哪)。
+
進階篇
隨時查更多提示詞:調整小秘書、寫小工具、整理研習
改設定提示詞|想調整小秘書時
改設定提示詞
你是 Google Apps Script 老師。下面是我這支程式最上面的設定說明。 我想要把每天早報改到 6:30 發送。 請先讀設定說明再回答: 1. 能不能只改「指令碼屬性」就做到?能的話,告訴我屬性名稱和要填的值。 2. 改完還要不要重新執行哪個函式、或重新部署? 3. 如果一定要改程式碼,先告訴我會改到哪裡、有什麼風險,等我同意再給程式碼。 ---- 設定說明 ---- (貼上 training-bot.gs 最上面 /** 設定都放「指令碼屬性」… */ 那一整段註解)
以早報時間為例,正確答案是:指令碼屬性加
DIGEST_HOUR = 6、DIGEST_MINUTE = 30,再執行一次 setupTrigger,不用改程式碼。拿這題試試 Gemini 答得對不對。小工具提示詞|請 Gemini 寫一支新的 Apps Script
需求講清楚,再加上幾條安全規則,就能請 Gemini 寫出小秘書沒有的功能:
小工具提示詞(範例:每週研習清單)
你是 Google Apps Script 老師,我是不會寫程式的老師。請幫我寫一支 Apps Script:
【我要做什麼】
每週日晚上 8 點,寄一封 Email 給我自己,列出下週「研習」日曆裡的所有研習(日期、時間、標題)。下週沒有研習就不要寄。
【規則】
1. 只用 Apps Script 內建功能(例如 CalendarApp、GmailApp),不要用需要 API key 的外部服務。
2. 會改動的設定(日曆名稱、收件人、寄信時間)集中放在程式最上面,用中文註解說明。
3. 另外寫一個 test 函式:只把結果印在執行記錄,不寄信、不刪除任何東西,讓我先測試。
4. 每一段加中文註解。
【交回格式】
1. 完整程式碼(一整段,我會全選貼上)。
2. 一步一行的操作說明:貼在哪、先執行哪個函式、怎麼設定每週自動執行的觸發器。
3. 執行時 Google 會要求哪些權限,各是做什麼用的。程式寫好之後
- 貼進 Apps Script:新專案 → 全選刪掉預設程式 → 貼上 → 存檔,跟第 4 步一樣
- 先跑 test 函式:下拉選單選 test 開頭的函式 → 執行 → 授權,跟第 6、7 步一樣
- 有紅字:用求救提示詞把錯誤貼回同一段對話,請它給修正後的完整新版
- 想改功能:接著說「改成寄到另一個信箱」「多列出地點」,改好整段重貼,不要只貼一半
授權畫面看一眼它要的權限:只是寄信給自己,卻要「刪除雲端硬碟檔案」這種不相關的權限,就先別按允許,回去問 Gemini 為什麼需要。會刪除、會大量寄信給別人的程式,一定要先用 test 函式跑過。
沒架小秘書也能用:直接在 Gemini/ChatGPT 整理研習
小秘書的腦袋,其實就是一段事先寫好的提示詞。下面這幾段直接貼到 Gemini 或 ChatGPT 網頁就能用,黃底的地方換成你的內容;公告是圖片或 PDF 的話,把檔案一起丟進去。
公告整理提示詞(兩邊都能用)
你是學校教務處的行政助理。請把下面的研習公告整理成表格。 規則: 1. 今天是 2026 年 10 月 1 日,公告沒寫年份就用這個推算;民國年請換成西元年。 2. 原文沒寫的欄位一律寫「未提及」,不要推測,尤其是結束時間和網址。 3. 多天或多場次的研習,每一場各寫一列。 4. 網址只能照抄原文,不可以自己編。 表格欄位:研習名稱|日期(星期)|時間|實體/線上|地點或會議連結|報名截止|研習時數|要注意的事 ---- 公告全文 ---- (貼上公告)
整理好之後,對照原公告看一次日期和時間,跟按小秘書的 ✅ 前一樣。
寫進日曆提示詞(Gemini 限定)
- 開
gemini.google.com,用個人 Gmail 登入(跟日曆同一個帳號) - 第一次用先到 → ,確認 Google Workspace(含日曆)是開啟的
- 貼上公告整理的結果或公告原文,再接著輸入:
寫進日曆提示詞
@Google 日曆 把上面這場研習加到我的「研習」日曆,
標題用研習名稱,說明欄放地點或會議連結。
報名截止那天另外加一個全天事件,標題是「⏰ 報名截止:研習名稱」。
加之前先列出你要建立的內容讓我確認。最後一句「先列出來讓我確認」很好用:它會先給你看,你回「好」才真的寫進去。ChatGPT 沒辦法直接寫進 Google 日曆,整理好之後自己新增就好。
講義摘要提示詞|研習講義 → 重點+帶回教室
講義摘要提示詞(先上傳講義 PDF 或簡報截圖)
你是有 10 年經驗的國小老師。請讀完這份研習講義,幫我: 1. 用 5 點條列講義重點,每點不超過 30 字。 2. 設計 2 個可以在五年級課堂用的活動,每個 15 分鐘內完成,寫出步驟和需要的材料。 3. 列出講義提到、但我還要自己查的名詞或工具。 只根據講義內容回答;講義沒提到、你另外補充的,請標註「延伸建議」。
心得提示詞|研習心得/回饋單草稿
心得提示詞(先寫三句自己的感想)
幫我把下面的筆記寫成約 300 字的研習心得,語氣自然、像老師自己寫的, 不要加入我沒提到的經驗或數據。 研習名稱:資訊素養增能研習 我的筆記: - 印象最深:…… - 我想試試:…… - 還有疑問:……
一定要先給自己的三句話。什麼都不給,AI 就會寫出一篇誰都能交的「罐頭心得」。
Gemini 和 ChatGPT 怎麼選
| Gemini | ChatGPT | |
|---|---|---|
| 網址 | gemini.google.com | chatgpt.com |
| 讀圖片/PDF | 可以 | 可以;免費版每天上傳檔案的次數有限 |
| 直接寫進日曆 | 可以(寫進日曆提示詞) | 不行,整理好自己貼 |
| 適合 | 本來就用 Gmail、Google 日曆的人;寫 Apps Script | 寫心得、改寫文字、問問題 |
下提示詞的三個好習慣
- 不滿意就接著說,不用重來:「第二場的時間再對一次原文」「改成條列」「再短一點」,AI 會在同一段對話裡修改
- 貼全文,不要只貼網址:臉書、校內系統要登入才看得到,AI 讀不到就會亂猜
- 個資不要貼:學生名單、成績、身分證字號都別丟進去,跟使用小秘書的規矩一樣
?
附錄
卡關了?對照這張表
表上找不到的狀況,用第 0 關的求救提示詞把錯誤訊息丟給 Gemini,記得先刪掉裡面的鑰匙。
| 狀況 | 最可能的原因 | 怎麼解 |
|---|---|---|
| 第 6 步按執行,一直跳錯 | 用了學校帳號 | 登出,改用個人 Gmail 重做第 4 步起 |
第 7 步出現 API key not valid | Gemini key 貼錯 | 回第 5 步檢查,前後不要有空白 |
第 7 步出現 429 或 quota | 免費額度一分鐘內用太多次 | 等 1 分鐘再試(現場大家同時跑偶爾會遇到) |
| 傳「你好」完全沒反應 | Webhook 沒開、網址貼錯 | 第 9 步重檢查:網址要以 /exec 結尾、Use webhook 是綠色 |
| 會回罐頭訊息,但沒有設定模式 | 自動回應沒關 | 第 2 步的小提醒:停用自動回應訊息 |
| 加了白名單後傳公告沒反應 | userId 複製不完整 | 把 ALLOWED_USER_IDS 清空 → 再傳「你好」→ 重新複製 |
| 日曆上看不到研習 | 「研習」日曆沒勾選 | Google 日曆左側「我的日曆」勾選「研習」 |
| 時間差了 8 小時 | 專案時區不對 | 第 5 步把時區改成台北 |
| 日期抓錯 | AI 看錯了 | 按 ❌ 丟掉重傳;或入曆後直接在 Google 日曆改 |
| 進階篇改了程式,LINE 還是舊反應 | 沒發布新版本 | 管理部署作業 → 編輯 → 版本選「新版本」→ 部署 |
使用安全三件事
- 含個資的內容不要傳(學生名單、身分證字號)。公告會送到 Gemini 免費方案處理,免費方案的資料可能被拿去改進模型。一般研習公告本來就是公開資訊,沒關係
- 鑰匙和門牌網址不外流:Token、API key、Web app 網址都只放在自己的專案裡
- 按 ✅ 前看一眼日期時間:這是整套流程裡最重要的一個動作
為什麼可以全免費
| 角色 | 用什麼 | 費用 |
|---|---|---|
| 電話 | LINE 官方帳號 | 免費方案每月 200 則「主動推播」;你問它答的「回覆」不算。只有早報用推播,超過 150 則會自動改寄 Email |
| 腦袋 | Google Gemini | 免費方案,個人用量綽綽有餘 |
| 辦公桌 | Google Apps Script | 個人 Gmail 免費 |
| 記事本 | Google 日曆、試算表 | 免費;時數從試算表計算 |