前幾天我已經完成 Discord Bot 的基本指令功能,現在 /add 可以接收使用者輸入的標題、日期和時間,也把指令處理邏輯從 index.js 拆到不同的 command 檔案中。Discord這部分的基本輸入流程已經慢慢建立起來。
但目前就算 Bot 已經知道我要建立什麼行程,這些資料目前還只存在 Node.js 的程式裡,Google Calendar 並不知道這筆行程。
因此今天的目標是先理解 Google Calendar API 在整個專案裡負責什麼,以及 Discord 收到的資料之後會經過哪些步驟,最後才會真正出現在 Google Calendar 中。
一、為什麼需要 Google Calendar API
目前我的資料流程大概是:
使用者
↓
Discord Slash Command
↓
discord.js
↓
Node.js
↓
add.js
↓
取得 title、date、time
例如使用者可能輸入:
/add
title:資料結構上課
date:20261005
time:1830
目前我的程式可以成功取得:
title
date
time
但是目前 Google Calendar 還不會自動出現行程。因為 Discord 和 Google Calendar 是兩個不同的服務,Discord Bot 沒有辦法直接修改 Google Calendar。所以因此需要Google Calendar API的參與讓程式可以和 Google Calendar 溝通的介面。
Google Calendar API 可以讓程式對 Google Calendar 進行操作,例如讀取行程、建立行程、修改行程或刪除行程。
因此未來我的專案流程會變成:
Discord 使用者
↓
/add 指令
↓
Node.js
↓
取得 title、date、time
↓
整理成 Google Calendar 需要的資料格式
↓
Google Calendar API
↓
Google Calendar
這樣 Discord Bot 才真正有辦法把使用者輸入的資料送進 Google Calendar。
二、Google Calendar 裡的行程其實是一個 Event
接著我發現 Google Calendar 裡看到的一筆行程,在 API 中不是單純的三個文字資料,而是一個 Event。
例如平常看到的:
資料結構上課
2026/10/05
18:30
在程式中會被整理成類似下面的資料:
const event = {
summary: '資料結構上課',
start: {
dateTime: '2026-10-05T18:30:00+08:00',
timeZone: 'Asia/Taipei'
},
end: {
dateTime: '2026-10-05T19:30:00+08:00',
timeZone: 'Asia/Taipei'
}
};
目前 Discord 收到的是:
title = "資料結構上課"
date = "20261005"
time = "1830"
但 Google Calendar 需要的資料格式並不完全相同。
例如:
Discord 的 title
↓
Google Calendar 的 summary
而日期和時間之後也必須整理成 Calendar API 可以接受的 dateTime 格式。所以未來程式中一定還需要一個「資料轉換」的步驟。
完整流程就會變成:
Discord 資料
title
date
time
↓ 整理與轉換
Google Calendar Event
summary
start
end
三、API 和 OAuth 負責的事情不同
在研究 Google Calendar API 時,我也注意到另一個問題。如果只要知道 Calendar API 的使用方法,任何程式就可以直接修改別人的 Google Calendar,那會有很大的安全問題。因此除了 API 之外,也需要處理 Google 帳號的授權,因此之後會使用 OAuth 2.0。
Google Calendar API
= 程式要怎麼操作 Calendar
OAuth 2.0
= Google 要確認這個程式有沒有取得使用者授權
之後完整的流程應該會是:
Discord
↓
Node.js
↓
取得使用者輸入
↓
OAuth 2.0 授權
↓
整理 Event 資料
↓
Google Calendar API
↓
Google Calendar
目前 Discord 的輸入端已經建立完成,接下來幾天就是開始準備把 Discord 取得的資料轉換成 Google Calendar 可以使用的格式,讓兩個不同的服務連接起來。