先說結論,這東西比你想的還好用
嗯...今天要來聊一個... 我自己覺得蠻實用的東西。就是把 LINE 的聊天機器人,跟 Google Sheet,也就是那個雲端試算表,把它們串在一起。
聽起來好像... 有點複雜?但其實不會。簡單講,就是讓你的 LINE Bot 可以把收到的訊息,自動存到一個 Google 試算表裡面。反過來也行,可以從試算表讀資料,然後回傳給使用者。
這很有用啊,你可以把它當成一個... 嗯... 免費的、又很簡單的小型資料庫。 像是做個簡單的報名系統、訂單紀錄、或是收集使用者回饋,都... 蠻方便的。
為什麼要用 Google Sheet?不能用資料庫嗎?
對,這是一個好問題。很多人可能會想說,為什麼不用正規的資料庫?像是 MySQL 或其他的。老實說,專業的應用,當然是用資料庫比較好。 但... 不是每個情況都需要那麼... 嗯... 重裝備。
我整理了一下,我自己是覺得,它們的差別大概是這樣:
| 比較項目 | Google Sheet | 專業資料庫 (例如 MySQL) |
|---|---|---|
| 建置難度 | 很低。基本上... 你會用 Excel 就會用。打開網頁就能用了。 | 比較高。你需要... 怎麼說... 設定環境、管理權限,比較麻煩。 |
| 成本 | 基本免費。除非你的用量真的... 真的很大,超過 API 限制才可能要錢。 | 看情況。自己架主機要硬體錢,用雲端服務... 像是 AWS、GCP 那些,也要看用量算錢。 |
| 速度 | 資料少的時候,很快,沒感覺。但... 如果你的資料超過幾千、幾萬筆,讀寫速度會明顯變慢。 | 快。就是為了處理大量資料設計的,速度不是問題。 |
| 視覺化 | 超方便。資料一進去,你直接在網頁上就能看到,還能直接拉圖表。 | 嗯... 需要另外接一個... 就是所謂的前端介面,才能把資料呈現出來。 |
| 安全性 | 普通。適合放一些非敏感資料。雖然可以設定權限,但... 嗯... 還是要小心。 | 高。可以做很複雜的權限控管,比較安全。 |
所以... 就是說,如果你的專案不大、需要快速開發、對成本敏感,而且資料不是那種... 機密等級的,那用 Google Sheet 真的很適合。
好,那... 到底要怎麼做?
整個流程... 我想一下... 大概可以分成三個部分:Google 那邊的設定、LINE 這邊的設定,最後就是把程式碼放進去。 很多教學都會一步一步帶你做。 我這裡講一個... 大概的概念。
第一步:準備 Google Sheet 和 Apps Script
首先,你當然要有一個 Google 帳號。然後...
- 去 Google Drive 新增一個 Google Sheet,就是試算表。把它想成你的資料庫表格,第一列可以先打好欄位名稱,像是「時間」、「使用者ID」、「訊息內容」之類的。
- 然後,從那個試算表的「擴充功能」選單裡面,找到「Apps Script」。
- 這個 Apps Script... 嗯... 它就是整個串接的核心。你可以在這裡寫一些 JavaScript 程式碼,讓它可以去操作你的試算表。 等一下我們的程式碼就是要貼在這裡。
- 寫好之後,你要把這個 Apps Script 部署成「網路應用程式」。這個步驟很重要,部署完之後,你會拿到一個... 很長的網址。這個網址要收好,等一下 LINE 那邊會用到。
第二步:設定 LINE Messaging API
接下來換 LINE 這邊。
- 你要去 LINE Developers 網站。 用你的 LINE 帳號登入。
- 進去之後,要建立一個 "Provider",然後在底下建立一個 "Channel"。Channel 的類型要選「Messaging API」。
- 建立好 Channel 之後,裡面有很多設定。最重要的東西是「Channel access token」。 這是一長串的亂碼,像是密碼一樣,絕對不能給別人知道。等一下寫程式會用到。
- 還有一個地方叫做 "Webhook settings"。 你要把剛剛在 Apps Script 拿到的那個很長的網址,貼到 Webhook URL 這個欄位裡面。然後把「Use webhook」這個開關打開。
Webhook 的作用,就是告訴 LINE:欸,以後只要有使用者傳訊息給這個 Bot,你就把訊息丟到我這個網址去。對,就是丟到我們剛剛部署好的那個 Apps Script。
第三步:把程式碼串起來
好,現在兩邊都準備好了。最後一步,就是寫程式碼。這個程式碼是要放在 Google Apps Script 裡面的。
我這裡提供一個... 嗯... 很基本的範例,就是把收到的訊息和使用者是誰,寫進試算表的第一個工作表。
// 這段程式碼要放在 Google Apps Script 裡面
// 從 LINE Developers 網站複製過來的 Channel Access Token
const CHANNEL_ACCESS_TOKEN = '你的CHANNEL_ACCESS_TOKEN貼在這裡';
// 你要寫入的 Google Sheet 的網址
const SPREADSHEET_URL = '你的GOOGLE_SHEET網址貼在這裡';
// 你要寫入的工作表名稱
const SHEET_NAME = '工作表1';
// 當 LINE 送訊息過來的時候,這個 doPost 函式會被觸發
function doPost(e) {
// 解析 LINE 送來的資料
const event = JSON.parse(e.postData.contents).events;
const replyToken = event.replyToken;
const userMessage = event.message.text;
const userId = event.source.userId;
// 取得現在的時間
const timestamp = new Date();
// 把資料寫入 Google Sheet
try {
const spreadSheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
const sheet = spreadSheet.getSheetByName(SHEET_NAME);
// 在最後一列新增資料
sheet.appendRow([timestamp, userId, userMessage]);
} catch (err) {
// 如果寫入失敗,可以在這裡記錄錯誤
Logger.log(err);
}
// 這邊可以加上回覆訊息給使用者的程式碼,但我們先專注在寫入資料
// ...
return ContentService.createTextOutput(JSON.stringify({'status': 'success'})).setMimeType(ContentService.MimeType.JSON);
}
你只要把上面程式碼裡的 `CHANNEL_ACCESS_TOKEN` 和 `SPREADSHEET_URL` 換成你自己的,然後把這段程式碼貼到 Apps Script,再重新部署一次... 理論上,這樣就完成了。 你現在對你的 LINE Bot 傳訊息,去看看那個 Google Sheet,應該就會看到資料跑進去了。
不只是寫入,還能讀取跟...互動
當然,只是把訊息存進去... 有點無聊。更有趣的應用是,讓 Bot 去讀取試算表的資料,然後根據使用者的指令回覆。
比如說,你可以做一個簡易的... 產品查詢功能。在 Google Sheet 建立一個產品清單,有「產品名稱」、「價格」、「庫存」三個欄位。然後改寫 Apps Script 的程式碼,讓它在收到訊息後:
- 去讀取產品那個工作表的所有資料。
- 檢查使用者傳來的訊息,是不是跟某個「產品名稱」一樣。
- 如果找到了,就把那一樣的「價格」和「庫存」讀出來,組合成一句話,再回傳給使用者。
這樣一來一往,你的 Bot 就變得很實用。你可以用類似的邏輯,做出很多變化,像是... 關鍵字自動回覆、查詢訂單狀態、或是玩一些... 隨機抽籤的小遊戲。
不過... 這方法有幾個... 嗯... 坑
這個方法雖然方便,但就像我前面說的,它不是萬能的。有幾個... 該說是缺點還是限制... 你在用之前最好知道一下。
最主要的問題是 API 的呼叫次數限制。 Google 和 LINE 都不是讓你無限次使用的。 比如說,Google Sheets API 每分鐘的讀取和寫入請求是有上限的。 如果你的 Bot 在短時間內有非常多人使用,每個人傳訊息都會觸發一次寫入,就... 很容易撞到那個上限。 撞到之後,API 就會暫時不理你,你的 Bot 就會沒反應。
另一個問題是效能。如果你的試算表資料越來越多,比如說... 累積了好幾萬筆對話紀錄,那每次 Apps Script 要去讀寫的時候,速度就會變慢。 有時候可能會慢到... 使用者都等得不耐煩了。
再來就是,嗯... 拿官方文件跟台灣一些開發者的教學文章比,你會發現一個有趣的現象。 Google 的官方文件寫得非常完整、非常嚴謹,所有限制跟規則都列得清清楚楚。 但是... 老實說,對新手來說有點難讀。反而你看一些台灣開發者寫的部落格或教學,他們會直接給你一個能跑的範例,雖然可能省略了一些... 錯誤處理的細節,但能讓你很快看到成果。 我自己是覺得,剛開始可以跟著教學做,但做到一個階段後,最好還是回去讀一下官方文件,了解那些限制,才不會把 Bot 做到一半就卡住了。
那你呢?
嗯... 大致上就是這樣。用 Google Sheet 當作 LINE Bot 的後台資料庫,是一個... 很有彈性又省錢的作法。很適合做一些小專案、prototype、或是內部用的小工具。
如果讓你來做一個 LINE Bot,你會想用 Google Sheet 來記錄什麼資料呢?是客戶訂單、活動報名、還是... 單純收集一些大家講的有趣的話?可以在下面留言,聊聊你的想法。
