本篇適合:
1. 曾經使用過 App Script 串接 LINE 聊天機器人的同好。(因這篇沒有針對技術細節做詳盡介紹,純粹寫下開發路上踩到的雷。)
2. 純粹好奇的朋友!(可以看前面成果部分即可,後面開發細節可不必看)
自己有一個研究所好朋友群組,常常大家都會在群組裡取暖,但很重要一部分功能是在上班的時候互相鼓勵、抱怨,跟倒數下班。
起因就是如此,忽然靈機一動:

成果
每日定時下午三點鼓勵大家...

大家超愛玩...


有日文的緣故是因為群組內有很多日文的愛好者,想說順便學習日文XD,每日定時鼓勵的系統提示如下:「你是一個社畜激勵搞笑的台灣機器人,需要給一群在上班的朋友溫暖詼諧且豐富的情緒價值的鼓勵語句,但不能死板,要詼諧,除了繁體中文外,可以使用日文,隨機使用,不一定每次都要日文,如果出現日文,你也需要搭配繁體中文翻譯,必要的時候可以教大家日文。如果遇到週一,是難過的週一,可能要多一些激勵,如果是週五,要表現快樂快樂。此外上班時間是週一到週五9:00~18:00,也可以以此激勵大家!重要:你的回覆不要超過一個段落,不要太長!每個句子(遇到逗點)都應該斷行,這樣比較好閱讀。不要使用 markdown 回覆。」
使用平台
- LINE Messaging API,串接 LINE 官方帳號,但對話對象僅限特定群組。
- 你需要註冊官方帳號,並綁定
LINE_CHANNEL_ACCESS_TOKEN
- 你需要註冊官方帳號,並綁定
- Google 試算表 + Google App Script:試算表是資料庫、App script 作為 API(對外接口)。
- OpenAI 服務,需要申請
OPENAI_API_KEY
開發工具
Cursor,搭配 Claude Sonnet 3.5
開發踩過的雷
LINE Messaging API 要怎麼只針對特定群組回訊息?
當 LINE Bot 被邀請到群組後,有人傳訊息,LINE 就會發送一個 webhook event,其中包含群組 ID。因此需要先寫一個取得群組 ID 的機制,才能針對特定群組回訊息。
參考程式碼:(建議直接請 AI 給 code 即可 )
// 這邊的 code 是查詢群組 ID 的方式
function doPost(e) {
const json = JSON.parse(e.postData.contents);
const event = json.events[0];
// 印出 groupId / userId / roomId
const source = event.source;
const id = source.groupId || source.roomId || source.userId || '未知來源';
// (可選)回應用戶一段訊息
replyToLine(event.replyToken, id+' 功能測試中...888888');
return ContentService.createTextOutput(JSON.stringify({ status: 'ok' })).setMimeType(ContentService.MimeType.JSON);
}
App Script 中寫了很多 Logger.log() 偵錯,但在偵測介面看不到任何訊息跳出
是的!這真的超級麻煩,你不知道哪裡錯...真的是能憑空猜測...。詢問 AI,AI 也只能亂猜,猜對還可以,猜錯,他會印出更多的 Logger.log 然後提醒你這個使用者去看偵測介面(console),但重點是就是沒有訊息跳出啊!
幾週前也看到 保哥 也發現類似的狀況,這串很多大神,值得留個連結在這。


大家都踩雷!
當然,如果有 GCP,可以直接將 App script 專案綁定去 GCP,可以從 GCP 內看到程式 log。
個人用戶如我,後來決定「多寫一些 test function」,然後一一確認每個 Function 的功能,或許會比較不會「這麼憑空除錯」。

設定好 function,按下上方「執行」,下方會跑 log !(前提是程式碼要有 Logger.log())
AI 的 API 很花錢...,難道讓群組的人都要付費ㄇ ??
確實...如果不太能接受花太多錢,可以用小模型如「gpt-4o-mini」、「gpt-4.1-mini」或是更小的「gpt-4.1-nano」。
不然...其實 OpenAI 有提供開發者一個方案:只要你勾選願意將資料提供給 OpenAI 做利用,他們會給使用者每日一定的免費額度(實測基本上每天都用不完...,偶爾一天才花0.3~0.4美金)。