首頁/AI 講義/數位工具・自動化

數位工具・自動化 · Workspace+GAS+Gemini約 12 分鐘Automation

GAS×Gemini 收信自動生成回覆草稿

GAS×Gemini 收信自動生成回覆草稿 — 賴家榮 AI 教學

Overview這一課你會做出什麼

你會做出一個回信助理:程式定時撈出需要回覆的新信,把內容交給 Gemini 寫一封語氣得體的回覆,再用 GmailApp 的 createDraft 建立成 Gmail 草稿,你只要打開草稿檢查、微調就能送出。

Key Takeaways

  • 用 GmailApp 撈出需要回覆的新進信件
  • 把來信內容交給 Gemini,請它生成合適的回覆
  • 在提示詞裡設定語氣與署名,讓草稿更貼近你的風格
  • 用 createDraft 建立草稿而非直接寄出,保留人工把關
  • 金鑰放 PropertiesService 安全保管,不寫死在程式裡
  • 設定時間觸發器,新信進來就自動備好草稿

這套流程特別適合每天要回很多信、但內容又大同小異的人,例如客服、報名確認、詢價回覆。AI 先把草稿寫好,你不必從零打字,只要檢查修改就能送出,既省時又保留最後的人工把關,避免 AI 說錯話直接寄出。

Why先看情境:這解決什麼問題

回信其實很花時間。多數信件的回覆結構很像:先禮貌問候、回應對方問題、給出下一步、最後署名。但因為每封來信內容不同,你還是得一封封讀、一封封想怎麼回,光是打開空白回覆框開始想第一句話,就常常卡住,一個上午就這樣耗掉大半。

有了 GAS 加上 Gemini,這個「從零開始寫」的痛點可以被解決。程式撈出需要回覆的信,把內容交給 Gemini 生成一封合適的回覆草稿,並用 createDraft 存成 Gmail 草稿。注意,它是建立草稿而不是直接寄出,你打開草稿看過、改過確認無誤才送出。這樣既省下最花力氣的起草階段,又保留人工最後把關,AI 幫你跑第一哩路,你負責確保品質與分寸。

Prepare動手前準備

Checklist

  • 一個可正常使用的 Google 帳號(Gmail 就是要回覆的信箱)
  • 一組 Gemini API 金鑰:到 ai.google.dev 登入後建立並複製備用
  • 想好回信的語氣與署名,例如「親切專業」與你的名字或公司名
  • 信箱裡有一些需要回覆的新信可供測試
  • 決定要處理哪一類信,例如貼過某標籤或未讀的信

Steps一步一步實作

1建立獨立的 Apps Script 專案

動作打開 script.google.com 點「新增專案」,這類定時工作用獨立專案最單純。

常見地雷別從表單進入,這課要能被時間觸發器定時執行的獨立專案。

2設定 Gemini 金鑰

動作左側齒輪「專案設定」,到「指令碼屬性」新增:名稱 GEMINI_API_KEY,值貼上金鑰,按儲存。

常見地雷金鑰前後別留空白,儲存後再回編輯區,否則程式讀不到金鑰。

3貼上 askGemini 共用函式

動作刪掉預設程式碼,貼上本文的 askGemini 函式,負責呼叫 Gemini 並回傳文字。

常見地雷模型網址與 key 參數保持原樣,改動容易造成呼叫失敗。

4撰寫主流程函式

動作貼上 autoDraftReply 主函式,它會撈出待回信件、請 AI 生成回覆、用 createDraft 建立草稿。

常見地雷務必用 createDraft 而非 send,避免未經檢查的內容直接寄出去。

5第一次授權

動作上方函式選 autoDraftReply 按「執行」,跳出授權時選帳號、進階、允許存取 Gmail 與網路。

常見地雷出現未驗證警告屬正常,這是你自己的專案,往下點允許即可。

6先手動執行確認草稿

動作按「執行」後,到 Gmail 左側「草稿」匣,確認針對來信是否已生成回覆草稿、語氣是否合適。

常見地雷若草稿沒出現,先看「執行項目」錯誤紀錄,通常是金鑰或搜尋條件問題。

7建立時間觸發器

動作左側鬧鐘「觸發條件」,新增觸發,函式選 autoDraftReply,來源「時間驅動」,選「小時計時器」。

常見地雷間隔別太密,草稿是給你檢查用的,每小時或每幾小時備好一批即可。

以下兩段程式碼是核心。第一段 askGemini 為共用 AI 呼叫函式,請原樣照抄;第二段 autoDraftReply 負責撈信、生成回覆並建立草稿。特別留意程式用 thread.createDraftReply 建立「回覆草稿」,會自動接在原對話串上、帶好收件者與主旨,你只要檢查送出即可。

function askGemini(prompt) {
  const key = PropertiesService.getScriptProperties().getProperty('GEMINI_API_KEY');
  const url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=' + key;
  const payload = { contents: [{ parts: [{ text: prompt }] }] };
  const res = UrlFetchApp.fetch(url, { method:'post', contentType:'application/json', payload: JSON.stringify(payload), muteHttpExceptions:true });
  return JSON.parse(res.getContentText()).candidates[0].content.parts[0].text.trim();
}
function autoDraftReply() {
  const signature = '祝 順心\n家榮 敬上'; // 你的署名,可自行修改
  const doneLabel = getOrCreateLabel('已備草稿'); // 標記已處理的信

  // 1. 撈出未讀、尚未備草稿的信,最多 10 封避免超時
  const threads = GmailApp.search('is:unread -label:已備草稿', 0, 10);

  threads.forEach(function(thread) {
    const msg = thread.getMessages()[0];
    const from = msg.getFrom();
    const subject = msg.getSubject();
    const plain = msg.getPlainBody().slice(0, 2000);

    // 2. 請 Gemini 依語氣要求寫一封回覆
    const prompt = '你是專業客服助理。請針對以下來信,用繁體中文寫一封親切且專業的回覆,' +
      '直接給出信件本文即可,不要加主旨、不要加開頭問候以外的多餘說明。\n\n' +
      '來信寄件者:' + from + '\n來信主旨:' + subject + '\n來信內容:\n' + plain;
    const replyBody = askGemini(prompt) + '\n\n' + signature;

    // 3. 建立回覆草稿(自動帶收件者與主旨,接在原對話串上)
    thread.createDraftReply(replyBody);

    // 4. 貼上「已備草稿」避免下次重複處理
    thread.addLabel(doneLabel);
  });
}

// 依名稱取得標籤,沒有就建立
function getOrCreateLabel(name) {
  return GmailApp.getUserLabelByName(name) || GmailApp.createLabel(name);
}

Flow一張圖看懂流程

自動生成回覆草稿流程
1時間觸發器定時啟動 autoDraftReply
2搜尋未讀且尚未備草稿的信件
3逐封取出寄件者、主旨與內文
4請 Gemini 依指定語氣寫一封回覆
5在回覆末尾加上你的署名
6用 createDraftReply 建立 Gmail 草稿
7貼上「已備草稿」標籤避免重複處理

用文字描述就是:時間觸發器定時啟動程式,程式搜尋還沒被貼上「已備草稿」的未讀信;接著逐封把寄件者、主旨與內文交給 Gemini,請它依你指定的語氣寫一封回覆;程式在回覆末尾補上你的署名後,用 createDraftReply 建立成 Gmail 草稿(會自動接在原對話串、帶好收件者與主旨),最後貼上「已備草稿」標籤,下次就不會重複生成。你只要到草稿匣檢查、微調就能送出。

Tips常見錯誤與優化

FAQ常見問題 Q&A

常見問題 FAQ

這個程式會不會自動把 AI 寫的信直接寄出去?

不會,這是刻意的設計。程式用的是 createDraftReply,只建立草稿,不會送出。所有草稿都會躺在你的 Gmail 草稿匣,等你親自打開檢查、修改後按下送出才會寄出。這道人工把關非常重要,能避免 AI 偶爾理解錯誤或用詞不當就直接送到對方面前。自動化幫你省下起草時間,但最後決定權始終在你手上。

為什麼要用 createDraftReply 而不是自己組一封新信?

因為 createDraftReply 會自動幫你把草稿接在原本的對話串上,收件者、主旨都直接沿用來信,不用你手動填。這樣草稿一建立就是完整可送出的狀態,你只要改內文即可。若自己另開新信,還得手動貼收件者與主旨,容易填錯或漏填。用回覆草稿的方式最省事,也最不會出錯,非常適合這種自動化情境。

同一封信會不會被重複生成很多份草稿?

不會。程式每處理完一封就貼上「已備草稿」標籤,搜尋時用 -label:已備草稿 排除這些信,下次執行自然跳過。這個「處理完就打勾」的機制,確保每封信只生成一份草稿,不會因為觸發器一直跑就在草稿匣塞滿重複內容。若你希望某封重新生成,手動移除它的「已備草稿」標籤,下次執行就會再幫它寫一份。

AI 寫的回覆語氣不符合我的習慣,能調整嗎?

可以,關鍵在提示詞。程式裡那句「用繁體中文寫一封親切且專業的回覆」可以自由改寫,例如要更正式就寫「用正式商務語氣」,要更輕鬆就寫「用友善口語的語氣」。你也可以補上具體要求,例如「開頭稱呼對方為您」「結尾主動提出可安排通話」。調整提示詞後先手動測試幾封,確認語氣對了再交給觸發器定時執行。

署名可以自動帶入嗎?每封都要手動加很麻煩。

程式已經幫你處理了。程式碼上方有一個 signature 變數,你把它改成自己的署名,例如公司名與職稱,程式就會自動接在每封 AI 回覆的末尾。這樣每份草稿都帶好署名,你不用重複打字。若不同情境需要不同署名,也可以依信件類別判斷後套用不同的署名字串,讓草稿更貼合各種場合。

它會針對所有信都生成草稿嗎?我不想每封都回。

預設是撈未讀信,但你可以縮小範圍。最實用的做法是只針對貼了某個標籤的信生成草稿,例如把搜尋條件改成 label:待回覆 -label:已備草稿,這樣只有你手動標記為待回覆的信才會被處理。你也可以結合前一課的自動分類,先讓 AI 分類,再只針對特定類別(例如客戶詢問)生成回覆草稿,流程更精準。

來信內容很長,AI 讀得完嗎?會不會漏掉重點?

程式取內文時限制在前 2000 字,一般信件綽綽有餘。對極長的信,前段通常已包含主要訴求,AI 據此回覆多半合適。若你常收到很長的信且重點在後段,可以提高擷取長度,但要留意過長會增加 API 用量與回應時間。更好的做法是在提示詞請 AI「先抓出對方的核心問題再回覆」,引導它聚焦重點,避免被冗長內容干擾。

Gemini 免費額度拿來生成草稿夠用嗎?

以個人每天回覆的量來說通常夠用。因為有「已備草稿」標記,每封信只會生成一次草稿,不會重複消耗;每次執行也有封數上限。Gemini 免費方案的每分鐘與每日呼叫上限,對一般信量不容易碰到。若你信量很大,可把封數上限調小、觸發間隔拉長,讓呼叫更平均,或只對特定標籤的信生成草稿,都能有效控制用量。

草稿生成後,我可以看到是針對哪封信回的嗎?

可以,而且很清楚。因為用的是 createDraftReply,草稿會直接掛在原本的對話串底下,你在草稿匣或原信對話裡都看得到它,上下文一目了然,收件者與主旨也都已帶好。你不會搞不清楚這封草稿在回什麼,檢查時能對照原信內容確認 AI 回得對不對,改完直接送出即可,操作和平常手動回信幾乎一樣。

我是零基礎,這套會不會很難完成?

不會。兩段核心程式碼複製貼上就好,其餘都是照步驟在畫面上點選:開專案、設金鑰、貼程式、授權、設觸發器,沒有需要你自己發明的邏輯。建議先手動執行一次、到草稿匣確認 AI 有正確生成回覆,理解流程後再依需求調整語氣、署名與搜尋條件。因為是草稿而非直接寄出,就算一開始設定不完美也很安全,可以放心慢慢調。

CTA下一步

當每封需要回的信都自動備好一份草稿,你的回信工作就從「從零開始寫」變成「檢查與微調」,省時之餘還保留了人工把關。把這招學會後,可以再結合自動分類,讓 AI 先分類、再針對特定類別草擬回覆,打造一條完整的收信處理流水線。

想讓團隊用 AI+自動化把重複工作交給流程?賴家榮提供 Workspace/GAS/Gemini 企業內訓與大學課程。

預約授課・免費諮詢

本文為賴家榮 AI 教學中心原創教學內容;想讓團隊學會用 AI,歡迎看AI 課程或預約授課 →

代表圖片來源:圖片來源:Pexels

Your turn

把 AI,變成團隊真的用得上的能力。

不論你在哪個產業,賴家榮都能帶團隊把 AI 學到真的用得上。

預約授課・免費諮詢