活動資訊散落各處...做一個「活動彙整機器人+行事曆」:實作經驗分享【AI寫程式】

更新於 發佈於 閱讀時間約 13 分鐘

自己目前利用下班時間,協助 NGO 組織做一些小工具,想辦法讓人力使用降到最低(畢竟大家都有正職),或做出一些有趣實用的東西提供給大家。

過去就有不少校友學長姐提及,有許多散落但很棒的活動資訊,都不一定會掌握到。因此就在想,或許能做一個彙整的平台,讓無論是哪個社團、組織舉辦的活動,(尤其是各個地區校友會散落各處,資訊較難集中)都能彙整進一個行事曆當中。

整理出痛點有二,及其解決方法:

  1. 資訊散落,需要一個彙整檢視的地方 => 一個行事曆介面一次看清楚!
  2. 填寫活動很麻煩 => 直接丟活動文字即可,用 AI 幫忙分類、彙整!

選擇使用的服務

  • LINE Messaging API,串接 LINE 官方帳號
  • Google 試算表 + Google App Script:試算表是資料庫、App script 作為 API(對外接口)。
  • 靜態網頁,這邊使用 Github 架站即可
  • OpenAI 服務,需要申請 OPENAI_API_KEY

系統架構

架構非常簡單!

架構非常簡單!

成果

行事曆頁面

下圖可左右滑動

LINE 官方帳號

raw-image

開發細節

活動資訊資料庫

需先定義好可能未來會需要使用到的欄位,包含之後要給 GPT 整理的相關資訊。

raw-image

除此之外,其實我覺得也可以請 GPT 斷詞關鍵字,這樣在之後行事曆介面上會變得更豐富易讀。

這份「資料庫」,同時會是 LINE 官方帳號傳送活動資訊的存放位置,也是前端靜態行事曆頁面取資料時,也會在這邊取得資料。同樣都使用同一份 Google Sheet,同樣都將 Google App Script 當作 API 使用,串接前後端。

App Script

這裡基本上就要處理所有前後端的互動、資料處理等功能。其中特別想提的是 GPT 的寫法,這邊想使用 Json Schema 確保 AI 看完活動文字以後,吐出來的欄位都會是固定的。

// 使用GPT API提取結構化數據

function extractDataWithGPT(text) {

// 動態取得當前年份
const currentYear = new Date().getFullYear();
const requestBody = {
'model': 'gpt-4o',
'messages': [
{
'role': 'system',
'content': `你是一位專門從非結構化文字中提取活動資訊的專家。請從使用者提供的文字中提取活動相關資訊並依照指定格式輸出。其中,如果使用者沒有給明確年份,年份時間不確定的話一律用${currentYear}年份。此外,如果是港湖幫、GIVERS CLUB,需在活動名稱就提及,格式為「港湖幫活動:<實際活動名稱或演講講題>」、「GIVERS CLUB:<實際活動名稱或演講講題>」。記得,GIVERS CLUB 跟 港湖幫 都屬於校友會`
},
{
'role': 'user',
'content': text
}
],
'functions': [
{
'name': 'extract_calendar_event',
'description': '從文字中提取行事曆活動資訊,注意,其他無法歸類的活動的詳細內容描述放「活動內容」中,完全用本文文字,勿自行詮釋說法',
'parameters': {
'type': 'object',
'properties': {
'開始時間': { 'type': 'string', 'description': `活動開始時間,盡量使用YYYY/MM/DD HH:MM格式,年份時間不確定的話一律用${currentYear}年份` },
'結束時間': { 'type': 'string', 'description': '活動結束時間,盡量使用YYYY/MM/DD HH:MM格式' },
'活動名稱': { 'type': 'string', 'description': '活動的名稱' },
'活動地點': { 'type': 'string', 'description': '活動實際舉辦的確切地點' },
'活動地點分類': { 'type': 'string', 'description': '活動地點的分類,呈現台灣的縣市名稱即可' },
'分類': { 'type': 'string', 'description': '活動的分類,僅分為"校友會", "其他活動"。' },
'活動單位': { 'type': 'string', 'description': '舉辦活動的單位' },
'活動相關連結': { 'type': 'string', 'description': '活動的相關網頁連結' },
'活動性質': { 'type': 'string', 'description': '活動的性質,僅能是 "遊玩" "演講" "課程" "餐會" "其他",根據活動內容選擇最適合的一項' },
'活動內容': { 'type': 'string', 'description': '其他無法歸類的活動的詳細內容描述放這邊,請完全用本文文字,勿自行詮釋' }
},
'required': ['開始時間', '活動名稱']
}}],
'function_call': { 'name': 'extract_calendar_event' }
};

const options = {
'method': 'post',
'headers': {
'Authorization': `Bearer ${OPENAI_API_KEY}`,
'Content-Type': 'application/json'
},
'payload': JSON.stringify(requestBody),
'muteHttpExceptions': true
};

const response = UrlFetchApp.fetch('https://api.openai.com/v1/chat/completions', options);
const responseData = JSON.parse(response.getContentText());
if (responseData.error) {
throw new Error(`GPT API錯誤: ${responseData.error.message}`);
}

// 從回應中取出函數調用參數

const functionCall = responseData.choices[0].message.function_call;
if (!functionCall || functionCall.name !== 'extract_calendar_event') {
throw new Error('GPT未能正確提取資訊');
}
return JSON.parse(functionCall.arguments);
}

上面的程式碼也是請 Cursor 生的,所以不用擔心寫不出來。我下給 Cursor 的 Prompt 是直接從 OpenAI 官網指定我要 Structural Output 的寫法:

我想要做一個app script 結合 LINE BOT 跟 gpt 的應用 使用者會先針對 行事曆總表 這個 sheet 抓欄位 欄位從A到I分別為 開始時間 結束時間 活動名稱 活動地點 活動地點分類 分類 活動單位 活動相關連結 活動內容 使用者會在 LINE 上傳一堆繁體中文文字 要先從 LINE 傳到 Google App script 中 並透過 GPT 處理文字 把文字資訊轉成 json json key 就是欄位名稱的對應 gpt範例如下 <這邊附上官網範例寫法 我使用 curl 的範例>

完成過後,將相關的內容填入 sheet 中,最後回傳給使用者「新增成功」並簡述新增的活動內容 功能都寫在同一個 code 當中

LINE Bot

LINE 這邊相對單純,純粹接 Messaging API 後,就可以使用了!

開發踩過的雷

App Script 中寫了很多 Logger.log() 偵錯,但在偵測介面看不到任何訊息跳出

(這在上一篇文有提到,這邊重貼)

是的!這真的超級麻煩,你不知道哪裡錯...真的是能憑空猜測...。詢問 AI,AI 也只能亂猜,猜對還可以,猜錯,他會印出更多的 Logger.log 然後提醒你這個使用者去看偵測介面(console),但重點是就是沒有訊息跳出啊!

幾週前也看到 保哥 也發現類似的狀況,這串很多大神,值得留個連結在這。

raw-image

當然,如果有 GCP,可以直接將 App script 專案綁定去 GCP,可以從 GCP 內看到程式 log。

個人用戶如我,後來決定「多寫一些 test function」,然後一一確認每個 Function 的功能,或許會比較不會「這麼憑空除錯」。

raw-image

有了這個概念,我開發速度有加倍了!

分類模型用什麼好?

以 GPT 非推理模型而言,個人認為 gpt-4o 仍然最佳(gpt-4.1 不好,很囉唆),如果有預算考量,可以使用 gpt-4o-mini,但就會相對不準確。你需要允許容錯空間。

AI 的 API 很花錢...,難道讓群組的人都要付費ㄇ ??

確實...如果不太能接受花太多錢,可以用小模型如「gpt-4o-mini」、「gpt-4.1-mini」或是更小的「gpt-4.1-nano」。

不然...其實 OpenAI 有提供開發者一個方案:只要你勾選願意將資料提供給 OpenAI 做利用,他們會給使用者每日一定的免費額度(實測基本上每天都用不完...,偶爾一天才花0.3~0.4美金)。

怎麼「詮釋」畫面?

如果過去沒有程式經驗,在 Vibe Coding 過程中,可以用白話詮釋沒錯,但有時候並不會很精準。我個人推薦可以去看 Bootstrap 的中文網站,提供各種元件的「講法」,讓你 LLM 對話更精準。

(Bootstrap 就是一個乖乖牌格式,並沒有到好看,但可以拿來「溝通」)

如我常用的「麵包屑(breadthumb)」、「彈出視窗(modal)」、「吐司(Toasts)」在此次都有用來溝通。

一些未來優化的方向

「誰」更新活動資訊?怎麼更新?

現在解決了「不一一打欄位、一一按送出」的痛點,只要貼文字就好。但仍然要「貼文字」的動作。解決方法大概有二:

  • 交給社群力量:開放這個 LINE 官方帳號,有人想新增資料,就直接填寫。但壞處就是不確定資料品質、大家丟上來的活動是否適合。
  • 交給爬蟲:爬特定的社團、或 LINE 群組,定期丟入資訊。壞處當然仍是爬臉書困難、爬 LINE 也有點麻煩,或許需要加一層 AI 判斷哪些是「活動資訊」哪些不是,但這樣會讓 AI 監測所有群組談論內容,可能不是大家都喜歡這樣。

也因此,目前暫時打算使用一兩位管理者,仍然是手動貼文字訊息,但至少這樣已經很快了!


留言
avatar-img
留言分享你的想法!
avatar-img
CT
71會員
83內容數
加入沙龍追蹤 CT 更多文章!
CT的其他內容
2025/05/24
利用 Google Apps Script 串接 LINE 聊天機器人和 OpenAI,打造每日定時傳送鼓勵訊息、提供對話的自動化系統。文章分享開發過程中的心得和遇到的問題,如 LINE Messaging API 如何僅針對特定群組回訊、App Script 除錯、及 OpenAI費用考量。
Thumbnail
2025/05/24
利用 Google Apps Script 串接 LINE 聊天機器人和 OpenAI,打造每日定時傳送鼓勵訊息、提供對話的自動化系統。文章分享開發過程中的心得和遇到的問題,如 LINE Messaging API 如何僅針對特定群組回訊、App Script 除錯、及 OpenAI費用考量。
Thumbnail
2025/05/07
Cursor推出學生方案,但馬上撤回!目前台灣、中國、香港等地已無法享有一年免費使用Pro版!
Thumbnail
2025/05/07
Cursor推出學生方案,但馬上撤回!目前台灣、中國、香港等地已無法享有一年免費使用Pro版!
Thumbnail
2024/10/29
在生成式 AI 的崛起中,Perplexity 作為一款強大的 AI 搜尋引擎,能夠即時搜尋網路資訊。本文將嘗試使用 Perplexity 完成事實查核任務 DEMO。
Thumbnail
2024/10/29
在生成式 AI 的崛起中,Perplexity 作為一款強大的 AI 搜尋引擎,能夠即時搜尋網路資訊。本文將嘗試使用 Perplexity 完成事實查核任務 DEMO。
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
這篇文章探討如何使用 VBA 來設計一個隨機生成不重覆的排班表,解決依據每日、每站、每人進行的排班需求。文章分享了設定人員、站點及工作日的基本步驟,並使用 AI - ChatGPT 4o 做為互動,最終產生了滿意的結果,並提供了一個 VBA設計完成 的影片 以及 免費的檔案下載。
Thumbnail
這篇文章探討如何使用 VBA 來設計一個隨機生成不重覆的排班表,解決依據每日、每站、每人進行的排班需求。文章分享了設定人員、站點及工作日的基本步驟,並使用 AI - ChatGPT 4o 做為互動,最終產生了滿意的結果,並提供了一個 VBA設計完成 的影片 以及 免費的檔案下載。
Thumbnail
某單位志工服務時數記錄在檔案內,需匯入衛福部志工系統,但由於志工多、檔案多,進行人工計算耗時費工且常累計算錯。故提此法改善,提高效率。文章內容包含了作業流程、作業說明、實例說明、改善前後、展開運用和設計編寫。
Thumbnail
某單位志工服務時數記錄在檔案內,需匯入衛福部志工系統,但由於志工多、檔案多,進行人工計算耗時費工且常累計算錯。故提此法改善,提高效率。文章內容包含了作業流程、作業說明、實例說明、改善前後、展開運用和設計編寫。
Thumbnail
由 RPAI 數位優化器主辦的「啟動生產力!自動化工具分享會」在上週末順利結束。每位參與者都獲得一個充實的下午,對自動化工具的態度從一知半解轉為躍躍欲試。而講者們精心準備的豐富內容,相信也讓大家帶走許多能夠即時用在工作上的知識。錯過本場講座沒關係,趕緊閱讀 RPAI 為您整理的本場活動精華!
Thumbnail
由 RPAI 數位優化器主辦的「啟動生產力!自動化工具分享會」在上週末順利結束。每位參與者都獲得一個充實的下午,對自動化工具的態度從一知半解轉為躍躍欲試。而講者們精心準備的豐富內容,相信也讓大家帶走許多能夠即時用在工作上的知識。錯過本場講座沒關係,趕緊閱讀 RPAI 為您整理的本場活動精華!
Thumbnail
為活動安排適合的工作分組,不僅可以幫助活動流暢,往更遠一點看,能幫助大家提升其專業分工上能力,例如一開始只能當一位接待員,但經驗累積後,主管就可以放手給其承擔各大領導角色。這樣的思維可能顛覆傳統職場上對下關係,但對一個組織長遠發展跟經驗傳承是好的。本文以一場200人研討會規格,試著列出所需人力分組。
Thumbnail
為活動安排適合的工作分組,不僅可以幫助活動流暢,往更遠一點看,能幫助大家提升其專業分工上能力,例如一開始只能當一位接待員,但經驗累積後,主管就可以放手給其承擔各大領導角色。這樣的思維可能顛覆傳統職場上對下關係,但對一個組織長遠發展跟經驗傳承是好的。本文以一場200人研討會規格,試著列出所需人力分組。
Thumbnail
在當今全球化的AI科技時代,企業面臨著前所未有的挑戰和機遇。如何在這個競爭激烈的環境中脫穎而出,成為眾多企業關注的焦點。答案之一就是參與並策劃國際會議論壇活動。 什麼是國際會議論壇活動策劃? 國際會議論壇活動策劃是指針對國際性會議和論壇進行全面的組織和安排,涵蓋從主題設定、議程設計、嘉賓邀請
Thumbnail
在當今全球化的AI科技時代,企業面臨著前所未有的挑戰和機遇。如何在這個競爭激烈的環境中脫穎而出,成為眾多企業關注的焦點。答案之一就是參與並策劃國際會議論壇活動。 什麼是國際會議論壇活動策劃? 國際會議論壇活動策劃是指針對國際性會議和論壇進行全面的組織和安排,涵蓋從主題設定、議程設計、嘉賓邀請
Thumbnail
科技發達的現代,就要善用科技化產品,來處理店裡的大小事務!排假是每個企業都會遇到的問題,該如何安排才能同時符合員工以及現場的需求?
Thumbnail
科技發達的現代,就要善用科技化產品,來處理店裡的大小事務!排假是每個企業都會遇到的問題,該如何安排才能同時符合員工以及現場的需求?
Thumbnail
透過 Google Sheets 和 Make 打造專案任務自動提醒系統,當一到專案任務重要時程,系統便自動寄發專案任務的提醒信件或行事曆邀請,給專案任務負責人和相關團隊成員,確保專案進度如期完成,有效提升跨部門溝通協作效率!不再花費時間人工追蹤時程進度,釋放時間及專注力,專注在更重要的工作上!
Thumbnail
透過 Google Sheets 和 Make 打造專案任務自動提醒系統,當一到專案任務重要時程,系統便自動寄發專案任務的提醒信件或行事曆邀請,給專案任務負責人和相關團隊成員,確保專案進度如期完成,有效提升跨部門溝通協作效率!不再花費時間人工追蹤時程進度,釋放時間及專注力,專注在更重要的工作上!
Thumbnail
內容行事曆是一種策略工具,可以幫助職場人士預先規劃和組織其內容創作與發布。透過明確規劃每日、每週或每月的內容主題、格式、發布管道和目標受眾,業者可以更有效地吸引、參與和保留客戶。特別是在節日或特殊事件期間,內容行事曆能夠幫助業者提前準備,確保市場活動和宣傳內容的時效性和吸引力。
Thumbnail
內容行事曆是一種策略工具,可以幫助職場人士預先規劃和組織其內容創作與發布。透過明確規劃每日、每週或每月的內容主題、格式、發布管道和目標受眾,業者可以更有效地吸引、參與和保留客戶。特別是在節日或特殊事件期間,內容行事曆能夠幫助業者提前準備,確保市場活動和宣傳內容的時效性和吸引力。
Thumbnail
在職場上,我們常常需要規劃和追蹤活動的進度。為了確保活動能夠如期順利完成,我們需要掌握活動的開始日期、結束日期以及每個階段的截止日期。你是否曾經遇到以下情況?要準備重要的會議,但不知道距離會議還有多少天?要舉辦年度活動,但不知道距離活動還有多少天?要管理專案進度,但不知天數掌控?
Thumbnail
在職場上,我們常常需要規劃和追蹤活動的進度。為了確保活動能夠如期順利完成,我們需要掌握活動的開始日期、結束日期以及每個階段的截止日期。你是否曾經遇到以下情況?要準備重要的會議,但不知道距離會議還有多少天?要舉辦年度活動,但不知道距離活動還有多少天?要管理專案進度,但不知天數掌控?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News