LINE Chat Bot 串接 Google Sheet 教學:自動化資料存取步驟與應用實例

Published on: | Last updated:

先說結論,這東西比你想的還好用

嗯...今天要來聊一個... 我自己覺得蠻實用的東西。就是把 LINE 的聊天機器人,跟 Google Sheet,也就是那個雲端試算表,把它們串在一起。

聽起來好像... 有點複雜?但其實不會。簡單講,就是讓你的 LINE Bot 可以把收到的訊息,自動存到一個 Google 試算表裡面。反過來也行,可以從試算表讀資料,然後回傳給使用者。

這很有用啊,你可以把它當成一個... 嗯... 免費的、又很簡單的小型資料庫。 像是做個簡單的報名系統、訂單紀錄、或是收集使用者回饋,都... 蠻方便的。

為什麼要用 Google Sheet?不能用資料庫嗎?

對,這是一個好問題。很多人可能會想說,為什麼不用正規的資料庫?像是 MySQL 或其他的。老實說,專業的應用,當然是用資料庫比較好。 但... 不是每個情況都需要那麼... 嗯... 重裝備。

我整理了一下,我自己是覺得,它們的差別大概是這樣:

比較項目 Google Sheet 專業資料庫 (例如 MySQL)
建置難度 很低。基本上... 你會用 Excel 就會用。打開網頁就能用了。 比較高。你需要... 怎麼說... 設定環境、管理權限,比較麻煩。
成本 基本免費。除非你的用量真的... 真的很大,超過 API 限制才可能要錢。 看情況。自己架主機要硬體錢,用雲端服務... 像是 AWS、GCP 那些,也要看用量算錢。
速度 資料少的時候,很快,沒感覺。但... 如果你的資料超過幾千、幾萬筆,讀寫速度會明顯變慢。 快。就是為了處理大量資料設計的,速度不是問題。
視覺化 超方便。資料一進去,你直接在網頁上就能看到,還能直接拉圖表。 嗯... 需要另外接一個... 就是所謂的前端介面,才能把資料呈現出來。
安全性 普通。適合放一些非敏感資料。雖然可以設定權限,但... 嗯... 還是要小心。 高。可以做很複雜的權限控管,比較安全。

所以... 就是說,如果你的專案不大、需要快速開發、對成本敏感,而且資料不是那種... 機密等級的,那用 Google Sheet 真的很適合。

一個簡單的 LINE Bot 報名系統範例
一個簡單的 LINE Bot 報名系統範例

好,那... 到底要怎麼做?

整個流程... 我想一下... 大概可以分成三個部分:Google 那邊的設定、LINE 這邊的設定,最後就是把程式碼放進去。 很多教學都會一步一步帶你做。 我這裡講一個... 大概的概念。

第一步:準備 Google Sheet 和 Apps Script

首先,你當然要有一個 Google 帳號。然後...

  1. 去 Google Drive 新增一個 Google Sheet,就是試算表。把它想成你的資料庫表格,第一列可以先打好欄位名稱,像是「時間」、「使用者ID」、「訊息內容」之類的。
  2. 然後,從那個試算表的「擴充功能」選單裡面,找到「Apps Script」。
  3. 這個 Apps Script... 嗯... 它就是整個串接的核心。你可以在這裡寫一些 JavaScript 程式碼,讓它可以去操作你的試算表。 等一下我們的程式碼就是要貼在這裡。
  4. 寫好之後,你要把這個 Apps Script 部署成「網路應用程式」。這個步驟很重要,部署完之後,你會拿到一個... 很長的網址。這個網址要收好,等一下 LINE 那邊會用到。

第二步:設定 LINE Messaging API

接下來換 LINE 這邊。

  1. 你要去 LINE Developers 網站。 用你的 LINE 帳號登入。
  2. 進去之後,要建立一個 "Provider",然後在底下建立一個 "Channel"。Channel 的類型要選「Messaging API」。
  3. 建立好 Channel 之後,裡面有很多設定。最重要的東西是「Channel access token」。 這是一長串的亂碼,像是密碼一樣,絕對不能給別人知道。等一下寫程式會用到。
  4. 還有一個地方叫做 "Webhook settings"。 你要把剛剛在 Apps Script 拿到的那個很長的網址,貼到 Webhook URL 這個欄位裡面。然後把「Use webhook」這個開關打開。

Webhook 的作用,就是告訴 LINE:欸,以後只要有使用者傳訊息給這個 Bot,你就把訊息丟到我這個網址去。對,就是丟到我們剛剛部署好的那個 Apps Script。

資料流示意圖:從 LINE 到 Google Sheet
資料流示意圖:從 LINE 到 Google Sheet

第三步:把程式碼串起來

好,現在兩邊都準備好了。最後一步,就是寫程式碼。這個程式碼是要放在 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 的程式碼,讓它在收到訊息後:

  1. 去讀取產品那個工作表的所有資料。
  2. 檢查使用者傳來的訊息,是不是跟某個「產品名稱」一樣。
  3. 如果找到了,就把那一樣的「價格」和「庫存」讀出來,組合成一句話,再回傳給使用者。

這樣一來一往,你的 Bot 就變得很實用。你可以用類似的邏輯,做出很多變化,像是... 關鍵字自動回覆、查詢訂單狀態、或是玩一些... 隨機抽籤的小遊戲。

不過... 這方法有幾個... 嗯... 坑

這個方法雖然方便,但就像我前面說的,它不是萬能的。有幾個... 該說是缺點還是限制... 你在用之前最好知道一下。

最主要的問題是 API 的呼叫次數限制。 Google 和 LINE 都不是讓你無限次使用的。 比如說,Google Sheets API 每分鐘的讀取和寫入請求是有上限的。 如果你的 Bot 在短時間內有非常多人使用,每個人傳訊息都會觸發一次寫入,就... 很容易撞到那個上限。 撞到之後,API 就會暫時不理你,你的 Bot 就會沒反應。

另一個問題是效能。如果你的試算表資料越來越多,比如說... 累積了好幾萬筆對話紀錄,那每次 Apps Script 要去讀寫的時候,速度就會變慢。 有時候可能會慢到... 使用者都等得不耐煩了。

再來就是,嗯... 拿官方文件跟台灣一些開發者的教學文章比,你會發現一個有趣的現象。 Google 的官方文件寫得非常完整、非常嚴謹,所有限制跟規則都列得清清楚楚。 但是... 老實說,對新手來說有點難讀。反而你看一些台灣開發者寫的部落格或教學,他們會直接給你一個能跑的範例,雖然可能省略了一些... 錯誤處理的細節,但能讓你很快看到成果。 我自己是覺得,剛開始可以跟著教學做,但做到一個階段後,最好還是回去讀一下官方文件,了解那些限制,才不會把 Bot 做到一半就卡住了。

資料量過大時的效能瓶頸示意
資料量過大時的效能瓶頸示意

那你呢?

嗯... 大致上就是這樣。用 Google Sheet 當作 LINE Bot 的後台資料庫,是一個... 很有彈性又省錢的作法。很適合做一些小專案、prototype、或是內部用的小工具。

如果讓你來做一個 LINE Bot,你會想用 Google Sheet 來記錄什麼資料呢?是客戶訂單、活動報名、還是... 單純收集一些大家講的有趣的話?可以在下面留言,聊聊你的想法。

Related to this topic:

Comments

撥打專線 LINE免費通話