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

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

自動跟進信:找出未回覆名單並由 Gemini 生成

自動跟進信:找出未回覆名單並由 Gemini 生成 — 賴家榮 AI 教學

整體概覽|Overview

業務、招募、客服都有同一件累人的事:發出去的信沒回,得記得哪些人該追、逐一寫信催。這篇教你用時間驅動觸發器,讓 Apps Script 定時從試算表找出逾期未回覆的名單,交給 Gemini 生成語氣得體、內容客製的跟進信,再用 GmailApp 自動寄出。

Key Takeaways

  • 程式定時掃描名單,逾期未回覆者一個都不會被漏掉。
  • Gemini 依對象與情境生成客製跟進信,不再千篇一律。
  • GmailApp 直接用你的信箱寄出,收件人回覆就回到你這。
  • 已跟進者立即標記,避免同一個人被重複催信。
  • 金鑰以 PropertiesService 保管,程式碼可安心分享。
  • 一張名單表加一段指令碼,十來分鐘建好自動追蹤流程。

本文以「客戶跟進表」為例:欄位包含姓名、Email、寄出日、是否回覆、跟進狀態。觸發器定時執行時,程式會找出寄出超過三天、仍未回覆、且尚未跟進的人,請 Gemini 為每個人寫一封跟進信寄出,並標記為已跟進。

為什麼要這樣做|Why

跟進的難處不在寫信,而在「記得」。誰在什麼時候寄過、過了幾天、回了沒有,這些散在腦袋或信箱裡的資訊很容易漏。交給程式定時比對日期與狀態,機器永遠記得,也永遠準時,這正是自動化最能發揮價值的地方。

但催信最忌諱冷冰冰的罐頭訊息,收件人一看就知道是群發。Gemini 能依照每個人的姓名與情境,寫出語氣自然、像真人手打的跟進信。把「找出該追的人」交給程式、把「寫得像人」交給 Gemini,你就能大量跟進又不失溫度。

開始前準備|Prepare

Checklist

  • 一個 Google 帳號,並能使用 Gmail 與 Google 試算表。
  • 到 Google AI Studio 申請一組 Gemini API 金鑰。
  • 準備名單表,欄位如:姓名、Email、寄出日、是否回覆、跟進狀態。
  • 確認每筆資料的寄出日與回覆狀態都有正確維護。
  • 想清楚跟進的門檻,例如超過幾天未回覆才要催。

實作步驟|Steps

1開啟指令碼編輯器

動作在名單試算表點「擴充功能 → Apps Script」開啟指令碼專案。

常見地雷從獨立指令碼進入會抓不到這張表,請從試算表開。

2設定 API 金鑰

動作在「專案設定 → 指令碼屬性」新增 GEMINI_API_KEY,填入金鑰。

常見地雷別把金鑰寫死在程式裡,分享時會外洩。

3貼入 askGemini 函式

動作貼上下方第一段共用函式作為呼叫 Gemini 的入口。

常見地雷模型名稱要與你有權限的版本相符,否則回傳 404。

4設定跟進門檻與工作表

動作在主流程開頭設定 DAYS(幾天算逾期)與工作表名稱。

常見地雷門檻設太小可能追得太急,建議先設三天以上。

5貼入主流程

動作貼上第二段 sendFollowUps(),它會找出符合條件者、生成信件並寄出。

常見地雷務必用跟進狀態欄標記,否則同一人每天都會被重複催。

6首次執行並授權

動作選 sendFollowUps 按執行,授權存取試算表、寄信與連外網路。

常見地雷第一次會出現未驗證警告,點「進階 → 前往」即可,那是你自己的指令碼。

7設定時間驅動觸發器

動作在「觸發器」新增,函式選 sendFollowUps、來源選時間驅動、設每天執行一次。

常見地雷頻率別設太密,一天一次足以涵蓋所有逾期名單。

8驗證流程

動作用一筆測試資料(寄出日填幾天前)執行,確認收到跟進信且狀態被標記。

常見地雷沒寄出先看執行紀錄,多半是日期比對或 Email 欄位有誤。

第一段是共用的 Gemini 呼叫函式,請原封不動貼進指令碼。它從屬性服務讀金鑰,用 UrlFetchApp 送出請求並取回文字。

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();
}

第二段是主流程:逐列檢查名單,找出寄出超過指定天數、未回覆且尚未跟進的人,請 Gemini 為每人寫一封客製跟進信,用 GmailApp 寄出後把狀態標記為已跟進。

const DAYS = 3;

function sendFollowUps() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('客戶跟進表');
  const data = sheet.getDataRange().getValues();
  const now = new Date();

  for (let i = 1; i < data.length; i++) {
    const [name, email, sentDate, replied, followed] = data[i];
    if (!email || replied === '是' || followed === '已跟進') continue;

    const days = (now - new Date(sentDate)) / (1000 * 60 * 60 * 24);
    if (days < DAYS) continue;

    const prompt = '你是客戶關係專員,請幫我寫一封約120字、語氣禮貌自然的中文跟進信給「' + name + '」,提醒對方我們先前的信尚未收到回覆,希望了解是否需要協助。只回信件內容,不要主旨:';
    const bodyText = askGemini(prompt);

    GmailApp.sendEmail(email, '關於先前來信的後續追蹤', bodyText);
    sheet.getRange(i + 1, 5).setValue('已跟進');
  }
}

流程一覽|Flow

從掃描名單到寄出跟進信
1時間驅動觸發器每天啟動 sendFollowUps()
2逐列讀取名單,跳過已回覆或已跟進者
3計算寄出至今天數,篩出逾期者
4Gemini 為每人生成客製跟進信
5GmailApp 逐一寄出跟進信
6把該列跟進狀態標記為已跟進

整條流程的安全閥是「跟進狀態欄」:它確保每個人只會被催一次。少了這個標記,程式每天都會重新判定同一人逾期,收件人會被洗版,這是務必先設好的關鍵。

實用技巧|Tips

常見問題|FAQ

常見問題 FAQ

程式怎麼知道對方到底回覆了沒有?

範例是靠試算表裡的「是否回覆」欄位來判斷,也就是需要有人或流程把回覆狀態更新進去。如果想全自動偵測,可以進一步用 GmailApp 搜尋收件匣裡是否有該對象的回信,再回寫狀態,但那會複雜不少。建議先用手動維護的欄位把流程跑順,之後再考慮自動偵測回覆。

會不會同一個人被催好幾次?

只要「跟進狀態」欄有正確標記就不會。程式在寄出後立刻把該列標成已跟進,下次執行看到這個標記就會跳過。真正會重複的情況通常是忘了加這個判斷,或誤把狀態欄清空。務必確認迴圈裡有 followed === '已跟進' 這個跳過條件。

日期比對常常怪怪的,是什麼原因?

多半是試算表裡的寄出日不是真正的日期格式,而是純文字,導致 new Date() 解析失敗。請確認該欄的儲存格格式是日期,或在填入時就用標準格式如 2026/07/28。你也可以在程式裡用 Logger.log 印出算出來的天數,一眼就能看出比對是否正確。

我想更謹慎,寄出前先人工看過怎麼辦?

把 GmailApp.sendEmail 改成 GmailApp.createDraft,程式就只會生成草稿而不直接寄出。你可以到 Gmail 的草稿匣逐封檢查、修改後再手動送出。等你對 Gemini 的產出品質有信心了,再換回直接寄送。這是上線初期很推薦的穩健做法。

跟進信可以依不同對象寫得不一樣嗎?

可以,這正是用 Gemini 的價值。你可以把試算表裡更多欄位,例如產業、先前談的內容、對方職稱,一起放進提示詞,Gemini 就會據此調整用字與重點。欄位越豐富,信件越貼合對方情境。記得提示詞要明確說明語氣與長度,輸出才會穩定。

為什麼跟進門檻建議至少三天?

太快跟進會給對方壓力,也可能對方只是還沒空看。三天是一個常見的緩衝,讓對方有合理時間回覆。實際天數依你的業務性質調整,急件可以縮短、一般往來可以拉長。重點是把它做成常數 DAYS,需要時改一個數字就好,不必動到其他程式碼。

名單很長,一次寄太多會不會有問題?

Gmail 對每日寄信量有上限,一般帳號一天約可寄數百封,商務帳號更多。若名單非常大,建議分批處理,例如每次只處理前 N 筆未跟進者,或降低觸發頻率分散寄送。程式面可加一個計數器,達到上限就停止,隔天再繼續。

Gemini 偶爾會寫出不太合適的句子,怎麼降低風險?

第一是把提示詞寫具體,明確規範語氣、長度、不可出現的內容。第二是上線初期用草稿模式人工把關。第三是可以在程式裡做簡單檢查,例如信件太短或包含奇怪字串就跳過不寄、改記錄下來。多一道防呆,就能大幅降低尷尬信件寄出去的機會。

這會不會被當成騷擾或濫發?

只要對象是你本來就有往來、且合理範圍內的跟進,就屬於正常商務溝通。避免濫發的關鍵是:每人只催合理次數、內容針對個人而非群發罐頭、並提供對方停止的方式。設好跟進次數上限、讓信件個人化,就能兼顧效率與禮貌,不會變成打擾。

整套流程要花錢嗎?

GAS 與 Gmail 在一般用量免費,Gemini 也有免費額度。每天生成幾封到幾十封跟進信,遠低於免費上限。只有在名單極大、每天數百上千封時才需評估更高階方案。對多數團隊而言,這套自動跟進幾乎零成本,卻能省下大量人工追蹤的時間。

延伸與諮詢|CTA

把「記得該追誰」交給程式、把「寫得有溫度」交給 Gemini,你就能穩定跟進每一位客戶,不再因為漏追而錯失機會。一次建好,長期替你顧好每一段對話。

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

預約授課・免費諮詢

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

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

Your turn

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

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

預約授課・免費諮詢