教師研習|實作講義

60 分鐘,架一個
幫你記研習的 LINE 小秘書

研習公告傳給 LINE,它幫你抄進 Google 日曆,時間到了提醒你。全程免費,不用寫程式。

① 會架用自己的帳號架好一套
② 會用現場傳一則公告成功入曆
③ 會問卡關時知道怎麼請 Gemini 幫忙

上課前請準備

  • 筆電一台(用 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 分
第 1 關|拿鑰匙LINE 與 Gemini 各拿一把
步驟 1–3・約 15 分
第 2 關|搬進家具把程式放進 Google
步驟 4–7・約 15 分
第 3 關|接上電話線讓 LINE 找得到它
步驟 8–11・約 15 分
第 4 關|試用傳公告、看日曆
步驟 12・約 10 分
打個比方:小秘書要上班,需要一支電話(LINE 官方帳號)、一顆腦袋(Gemini AI)、一張辦公桌(Google Apps Script)。今天就是依序把這三樣準備好,再把電話線接到桌上。學有餘力,最後的進階篇教你用提示詞請 Gemini 從零寫出一支自己的小秘書。
等一下拿到的兩把「鑰匙」(Token、API key)就像家裡鑰匙:不要拍照上傳、不要貼到群組。整個過程只貼在你自己的 Google 專案裡。
0
第 0 關

學會問:卡關時請 Gemini 當你的程式小老師

約 5 分鐘

等一下的 Apps Script(GAS)畫面都是程式碼,看不懂很正常。先學會怎麼問 Gemini,後面看到藍色的「問 Gemini」框,就是提醒你這時可以拿哪一段提示詞來用。

0

先開好 Gemini 分頁

  1. Chrome 另開一個分頁到 gemini.google.com,用個人 Gmail 登入
  2. 這個分頁一直開著,等一下哪一步看不懂,就切過來問
這裡是「跟 Gemini 聊天」的網頁;第 3 步的 aistudio.google.com 是幫小秘書「拿 API key」的地方,兩個不一樣。

好提示詞=交代代課老師的四句話

① 角色你是誰
「你是很有耐心的 Apps Script 老師」
② 任務要做什麼
「告訴我這個錯誤怎麼解決」
③ 規則哪些不能做
「我不會寫程式,不確定就說不確定」
④ 格式交回什麼樣子
「一步一行,寫出要點哪個按鈕」
太模糊我的程式壞了怎麼辦?
→ 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 官方帳號(小秘書的電話)

  1. 電腦開 manager.line.biz,用你的 LINE 帳號登入
  2. 按 建立,帳號名稱填「研習小秘書」,業種隨意選(例如「教育」)
  3. 建好後進入這個帳號,按右上角 設定 → 左邊 Messaging API → 啟用 Messaging API
  4. 「服務提供者」選 建立新的,名稱填你的名字即可 → 同意 → 確定
畫面顯示 Channel ID、Channel secret,就代表啟用成功。
2

拿第一把鑰匙:Channel access token

  1. 同一頁點連結進入 developers.line.biz(LINE Developers),找到剛剛的 channel
  2. 上方分頁切到 Messaging API,捲到最下面 Channel access token
  3. 按 Issue,出現一長串英數字,按旁邊的複製圖示
  4. 先貼在電腦的「記事本」暫放,第 5 步會用到
LINE Developers ─ Messaging API
Channel access token (long-lived)
eyJhbGciOiJIUzI1NiJ9.xxxxxxxx…… Issue
順便在同一頁把 Auto-reply messages(自動回應訊息)設成「停用」,不然每次傳訊息,LINE 都會搶著回一句罐頭訊息。
3

拿第二把鑰匙:Gemini API key(小秘書的腦袋)

  1. 開 aistudio.google.com,用個人 Gmail 登入;第一次會要你同意條款
  2. 點 Get API key → Create API key(要選專案就選預設的)
  3. 複製那串 AIza… 開頭的字,一樣先貼到記事本
記事本裡現在有兩行:一行 LINE token、一行 AIza…。
免費方案不用綁信用卡。完整的 key 只會顯示一次,忘了複製的話,刪掉重建一個就好。
2
第 2 關

搬進家具:把程式放進 Google Apps Script

約 15 分鐘

Apps Script 是 Google 免費提供的「雲端小電腦」,程式放上去就會 24 小時待命,不用開著你的電腦。

4

建立專案,貼上程式

  1. 開 script.google.com → 左上角 新專案
  2. 點上方「未命名的專案」,改名為「研習小秘書」
  3. 編輯區已經有幾行預設程式碼:點進去按 Ctrl+A 全選,刪掉
  4. 另開分頁到 github.com/u8961310/training-bot → 點 docs → training-bot.gs,按程式碼右上角的 ⧉ Copy raw file 複製全部
  5. 回到 Apps Script 編輯區,按 Ctrl+V 貼上
  6. 按 Ctrl+S 存檔
第一行是 // ===== Config.js =====,存檔後沒有跳出紅色錯誤訊息。
這支程式是寫好的完整版,今天直接複製就好。想知道怎麼用提示詞請 Gemini 從零寫出來,看進階篇。
5

把兩把鑰匙放進保險箱(指令碼屬性)

  1. 左側點齒輪 ⚙ 專案設定
  2. 確認 時區 是「(GMT+08:00) 台北」,不是的話改過來
  3. 捲到最下面 指令碼屬性 → 新增指令碼屬性,照下表加兩行(左邊一字不差,大寫、底線都要對)
  4. 按 儲存指令碼屬性
專案設定 ─ 指令碼屬性
LINE_CHANNEL_ACCESS_TOKEN(第 2 步那串)
GEMINI_API_KEY(第 3 步 AIza… 那串)
鑰匙放在這裡,而不是寫在程式碼裡,這樣哪天要把程式分享給別人,也不會連鑰匙一起送出去。
6

執行 setup,讓它自己建日曆與試算表

  1. 回到 <> 編輯器,上方工具列的函式下拉選單選 setup → 按 ▷ 執行
  2. 跳出「需要授權」→ 審查權限 → 選你的 Gmail
  3. 看到「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,確認腦袋會動

  1. 下拉選單改選 testExtract → ▷ 執行
  2. 等 3–10 秒,看下方執行記錄
記錄裡出現一段有 "title"、"date"(9 月 28 日)、"start": "19:00" 的文字,就代表 Gemini 讀得懂公告。
如果出現 API key not valid:回第 5 步檢查 GEMINI_API_KEY 有沒有貼完整、前後有沒有多空白。
出現其他紅字看不懂?用求救提示詞,把執行記錄的紅字貼給 Gemini(先刪掉裡面的鑰匙)。
3
第 3 關

接上電話線:讓 LINE 找得到小秘書

約 15 分鐘
8

部署成「網頁應用程式」,拿到門牌網址

  1. 編輯器右上角 部署 → 新增部署作業
  2. 「選取類型」旁的齒輪 → 選 網頁應用程式
  3. 執行身分:我;誰可以存取:所有人 → 部署
  4. 複製畫面上的「網頁應用程式」網址(https://script.google.com/macros/s/……/exec)
把網址貼到瀏覽器新分頁打開,畫面只出現一行 training-bot OK。
「所有人」是為了讓 LINE 伺服器打得進來。這個網址等於小秘書的門牌,不要公開分享;陌生人就算知道,第 11 步的白名單也會擋住。
9

把門牌填到 LINE(Webhook)

  1. 回 LINE Developers → 你的 channel → Messaging API 分頁
  2. Webhook URL 按 Edit,貼上第 8 步的網址 → Update
  3. 把下面的 Use webhook 開關打開(變綠色)
旁邊的 Verify 按下去可能顯示錯誤(Google 會多轉一次網址),不用理它,以第 10 步實測為準。
10

手機加好友,問出你的 userId

  1. 同一頁上方有 QR code,用手機 LINE 掃描 → 加入好友
  2. 傳一句「你好」給小秘書
你好
🔧 設定模式
你的 userId:
U1a2b3c4d5e6f……

把它填進指令碼屬性 ALLOWED_USER_IDS 就能開始用。
收到「🔧 設定模式」這則回覆,代表電話線接通了!
傳了沒反應?九成是第 9 步的 Use webhook 沒打開,或第 2 步的自動回應訊息沒關。
11

把自己加進白名單

  1. 在手機上長按那串 U…… 複製,用 LINE 傳給自己的電腦版,或直接在電腦版 LINE 複製
  2. 回 Apps Script → ⚙ 專案設定 → 指令碼屬性 → 新增第三行:
    ALLOWED_USER_IDSU1a2b3c4d5e6f……
  3. 儲存。不用重新部署,馬上生效
要讓家人也能用?多個 userId 用半形逗號隔開。不過大家的研習都會寫進同一本日曆,建議每個人各自架一套。
4
第 4 關

試用:傳第一則公告,看它進日曆

約 10 分鐘
12

傳公告 → 看卡片 → 按 ✅ → 開日曆

  1. 把你準備的研習公告全文複製,貼給小秘書(掃描檔或臉書貼文複製不了的話,就截圖傳過去)
  2. 幾秒後會收到確認卡片,對照原公告看日期、時間,沒問題按 ✅ 入曆
  3. 手機打開 Google 日曆 → 左上角選單 → 勾選「研習」日曆
【研習公告】資訊素養增能研習
10/15(三)14:00–16:00 線上……
📋 請確認研習資訊
💻 資訊素養增能研習
時間 10/15(三)14:00–16:00
報名截止 2026-10-08
時數 2
✅ 入曆 ❌ 丟掉

↑ 示意畫面,內容為虛構範例

日曆上出現「💻 資訊素養增能研習」,報名截止那天也多了一個「⏰ 報名截止」的全天事件。恭喜,完成了!

之後每天怎麼用

它會在這兩個時間提醒你

什麼時候怎麼提醒
開課前 30 分鐘手機 Google 日曆跳通知,點開就有地址或會議連結
當天早上 7:30 左右LINE 早報:今天的研習,附上明天的和 3 天內報名截止的。當天沒研習就不發(假日也一樣)
想把早報改成別的時間、提醒提早 1 小時?用進階篇的改設定提示詞問該改哪裡。

隨時可以問它(不花推播額度,想問幾次都行)

本週未來 7 天的研習
下一場最近一場的時間地點
時數本學年累計研習時數
說明用法提示
+
進階篇・第二堂課或回家練習

用提示詞,請 Gemini 從零生出一支小秘書

約 60 分鐘

今天複製的 training-bot.gs 有將近 900 行,一段提示詞叫 Gemini 一次寫完不切實際。訣竅是先講好共同規格,再分 4 段慢慢加,每一段都能跑、都有檢查點,壞了也知道壞在哪一段。

開始前準備(跟主線共用鑰匙,但另開一個專案)

  1. script.google.com → 新專案,改名「小秘書(自己生)」;專案設定的時區一樣改成台北
  2. 指令碼屬性照第 5 步加 LINE_CHANNEL_ACCESS_TOKEN、GEMINI_API_KEY,ALLOWED_USER_IDS 先不要填,第 1 段要用設定模式測試
  3. Gemini 開一段新對話,4 段提示詞都在同一段對話裡接著貼,它才記得前面寫過什麼
一個 LINE 官方帳號只能接一個 Webhook 網址。練習時把 Webhook 換成新專案的網址,主線的小秘書會暫停;練完記得換回第 8 步的網址。想兩支同時用,就再開一個 LINE 官方帳號。

每一段貼好之後:更新部署

主線只部署一次,但這裡每段都會改程式,改完要發布新版本,LINE 才會用到新程式:

  1. 第一次(第 1 段):照第 8 步 新增部署作業,再照第 9 步把新網址填進 LINE Webhook
  2. 之後每段:部署 → 管理部署作業 → 右上鉛筆(編輯)→ 版本選 新版本 → 部署。網址不會變,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 會要求哪些權限,各是做什麼用的。

程式寫好之後

授權畫面看一眼它要的權限:只是寄信給自己,卻要「刪除雲端硬碟檔案」這種不相關的權限,就先別按允許,回去問 Gemini 為什麼需要。會刪除、會大量寄信給別人的程式,一定要先用 test 函式跑過。

沒架小秘書也能用:直接在 Gemini/ChatGPT 整理研習

小秘書的腦袋,其實就是一段事先寫好的提示詞。下面這幾段直接貼到 Gemini 或 ChatGPT 網頁就能用,黃底的地方換成你的內容;公告是圖片或 PDF 的話,把檔案一起丟進去。

公告整理提示詞(兩邊都能用)
你是學校教務處的行政助理。請把下面的研習公告整理成表格。

規則:
1. 今天是 2026 年 10 月 1 日,公告沒寫年份就用這個推算;民國年請換成西元年。
2. 原文沒寫的欄位一律寫「未提及」,不要推測,尤其是結束時間和網址。
3. 多天或多場次的研習,每一場各寫一列。
4. 網址只能照抄原文,不可以自己編。

表格欄位:研習名稱|日期(星期)|時間|實體/線上|地點或會議連結|報名截止|研習時數|要注意的事

---- 公告全文 ----
(貼上公告)
整理好之後,對照原公告看一次日期和時間,跟按小秘書的 ✅ 前一樣。

寫進日曆提示詞(Gemini 限定)

  1. 開 gemini.google.com,用個人 Gmail 登入(跟日曆同一個帳號)
  2. 第一次用先到 設定 → 應用程式,確認 Google Workspace(含日曆)是開啟的
  3. 貼上公告整理的結果或公告原文,再接著輸入:
寫進日曆提示詞
@Google 日曆 把上面這場研習加到我的「研習」日曆,
標題用研習名稱,說明欄放地點或會議連結。
報名截止那天另外加一個全天事件,標題是「⏰ 報名截止:研習名稱」。
加之前先列出你要建立的內容讓我確認。
最後一句「先列出來讓我確認」很好用:它會先給你看,你回「好」才真的寫進去。ChatGPT 沒辦法直接寫進 Google 日曆,整理好之後自己新增就好。

講義摘要提示詞|研習講義 → 重點+帶回教室

講義摘要提示詞(先上傳講義 PDF 或簡報截圖)
你是有 10 年經驗的國小老師。請讀完這份研習講義,幫我:
1. 用 5 點條列講義重點,每點不超過 30 字。
2. 設計 2 個可以在五年級課堂用的活動,每個 15 分鐘內完成,寫出步驟和需要的材料。
3. 列出講義提到、但我還要自己查的名詞或工具。
只根據講義內容回答;講義沒提到、你另外補充的,請標註「延伸建議」。

心得提示詞|研習心得/回饋單草稿

心得提示詞(先寫三句自己的感想)
幫我把下面的筆記寫成約 300 字的研習心得,語氣自然、像老師自己寫的,
不要加入我沒提到的經驗或數據。

研習名稱:資訊素養增能研習
我的筆記:
- 印象最深:……
- 我想試試:……
- 還有疑問:……
一定要先給自己的三句話。什麼都不給,AI 就會寫出一篇誰都能交的「罐頭心得」。

Gemini 和 ChatGPT 怎麼選

GeminiChatGPT
網址gemini.google.comchatgpt.com
讀圖片/PDF可以可以;免費版每天上傳檔案的次數有限
直接寫進日曆可以(寫進日曆提示詞)不行,整理好自己貼
適合本來就用 Gmail、Google 日曆的人;寫 Apps Script寫心得、改寫文字、問問題

下提示詞的三個好習慣

  1. 不滿意就接著說,不用重來:「第二場的時間再對一次原文」「改成條列」「再短一點」,AI 會在同一段對話裡修改
  2. 貼全文,不要只貼網址:臉書、校內系統要登入才看得到,AI 讀不到就會亂猜
  3. 個資不要貼:學生名單、成績、身分證字號都別丟進去,跟使用小秘書的規矩一樣
?
附錄

卡關了?對照這張表

表上找不到的狀況,用第 0 關的求救提示詞把錯誤訊息丟給 Gemini,記得先刪掉裡面的鑰匙。

狀況最可能的原因怎麼解
第 6 步按執行,一直跳錯用了學校帳號登出,改用個人 Gmail 重做第 4 步起
第 7 步出現 API key not validGemini key 貼錯回第 5 步檢查,前後不要有空白
第 7 步出現 429 或 quota免費額度一分鐘內用太多次等 1 分鐘再試(現場大家同時跑偶爾會遇到)
傳「你好」完全沒反應Webhook 沒開、網址貼錯第 9 步重檢查:網址要以 /exec 結尾、Use webhook 是綠色
會回罐頭訊息,但沒有設定模式自動回應沒關第 2 步的小提醒:停用自動回應訊息
加了白名單後傳公告沒反應userId 複製不完整把 ALLOWED_USER_IDS 清空 → 再傳「你好」→ 重新複製
日曆上看不到研習「研習」日曆沒勾選Google 日曆左側「我的日曆」勾選「研習」
時間差了 8 小時專案時區不對第 5 步把時區改成台北
日期抓錯AI 看錯了按 ❌ 丟掉重傳;或入曆後直接在 Google 日曆改
進階篇改了程式,LINE 還是舊反應沒發布新版本管理部署作業 → 編輯 → 版本選「新版本」→ 部署

使用安全三件事

  1. 含個資的內容不要傳(學生名單、身分證字號)。公告會送到 Gemini 免費方案處理,免費方案的資料可能被拿去改進模型。一般研習公告本來就是公開資訊,沒關係
  2. 鑰匙和門牌網址不外流:Token、API key、Web app 網址都只放在自己的專案裡
  3. 按 ✅ 前看一眼日期時間:這是整套流程裡最重要的一個動作

為什麼可以全免費

角色用什麼費用
電話LINE 官方帳號免費方案每月 200 則「主動推播」;你問它答的「回覆」不算。只有早報用推播,超過 150 則會自動改寄 Email
腦袋Google Gemini免費方案,個人用量綽綽有餘
辦公桌Google Apps Script個人 Gmail 免費
記事本Google 日曆、試算表免費;時數從試算表計算