LINE Bot 串接 Google 試算表教學:自動化數據收集與即時回應設定步驟

Published on: | Last updated:

為什麼要串這個?

嗯...主要是...方便。不用自己寫後台。也不用租伺服器。

LINE 傳個訊息,資料就自己進 Google Sheet。很直覺。

像是...做個簡單的報名表、訂單紀錄、或是回報系統。都可以。省錢...對,Google Apps Script 在一定的用量下是免費的,這點就很夠用了。

可以幹嘛?簡單的例子

串起來之後能做的事情,老實說還真不少。主要看你的想像力啦。

  • 訂便當機器人...吧。每天中午在群組問,誰要什麼,然後自動把「+1」的訊息跟餐點名稱記錄到試算表。省得人工一個一個複製貼上,超煩的。
  • 簡易客服回報。讓客人或使用者透過 LINE Bot 回報問題,訊息、使用者 ID、時間,自動存成一列表格。工程師或客服就能直接看,不用在對話紀錄裡大海撈針。
  • 個人記帳。設定一個格式,例如「花費 100 早餐」,傳給自己的 Bot,它就自動幫你寫進記帳本。養成習慣...可能比開 App 還快。

對,大概就是這種...重複性高、需要被記錄下來的場景。

LINE Bot 到 Google Sheets 的資料流程示意圖
LINE Bot 到 Google Sheets 的資料流程示意圖

開工前要準備的

嗯...開始之前,先確定你有這幾個東西。不然會卡住。

  • 一個 LINE 帳號。這應該大家都有。
  • 一個 Google 帳號。這也...應該都有。
  • 差不多...半小時的專注力。設定過程有點瑣碎,需要靜下心。

第一站:LINE Developers 後台

這一步的目標是拿到跟 LINE Bot 溝通的鑰匙。也就是 Channel Access Token。

先去 LINE Developers Console。用你的 LINE 帳號登入。

  1. 建立 Provider:如果沒建過,就按「Create a new provider」。名字...隨便取,自己看得懂就好。例如「我的小工具」。
  2. 建立 Channel:在剛剛建好的 Provider 下面,選「Create a new channel」,然後選「Messaging API」。這個才是聊天機器人用的。
  3. 填寫 Channel 資料:名字、描述...一樣,自己看得懂就好。頭像也可以先不傳。最重要的是,同意那些條款。
  4. 拿出關鍵鑰匙:進到你剛建好的 Channel,切到「Messaging API」這個頁籤。往下滑...會看到「Channel access token (long-lived)」。按「Issue」。這串長長的英文數字,就是最重要的鑰匙。先複製起來,放在記事本之類的地方。千萬不要弄丟或給別人。

好,LINE 這邊先這樣。我們等等還要回來設定 Webhook URL。

第二站:Google 試算表與 Apps Script

接下來換 Google 這邊。我們要準備一個表格來收資料,還有寫一點點程式碼。

準備試算表

很簡單。就...去 Google Drive 開一個新的「Google 試算表」。

然後在第一個工作表(Sheet1)的第一行,打上你想要的欄位標題。例如:`時間`、`使用者ID`、`訊息內容`。這樣之後資料進來才不會亂掉。

對了,把這個試算表的 ID 記下來。網址列 `.../d/` 後面那串亂碼就是。例如 `https://docs.google.com/spreadsheets/d/1aBcDeFgHiJkLmNoPqRsTuVwXyZ.../edit`,那串 `1aBcD...` 就是了。也貼到記事本上。

撰寫 Apps Script 程式碼

這個是核心。但別怕,程式碼很短。在剛剛那個試算表裡,點上面選單的「擴充功能」 > 「Apps Script」。

進去之後,會看到一個寫程式的畫面。把裡面原本的 `function myFunction() {...}` 內容全部刪掉。然後貼上這段:


// 這是一個特殊名稱的 function,Google Apps Script 看到 Webhook 來的 POST 請求,就會自動執行它
function doPost(e) {
  // try...catch 是個好習慣,如果中間出錯,至少我們能知道哪裡錯了
  try {
    // 從 LINE 送來的請求中,把內容(JSON格式)解析出來
    var event = JSON.parse(e.postData.contents).events;
    
    // 取得我們要回覆訊息時需要的 token
    var replyToken = event.replyToken;
    
    // 如果收到的不是文字訊息,就先不處理
    if (event.type !== "message" || event.message.type !== "text") {
      return;
    }
    
    // 抓出使用者傳來的文字內容
    var userMessage = event.message.text;
    
    // 抓出使用者的 ID,這樣才知道是誰傳的
    var userId = event.source.userId;

    // 現在,把資料寫進 Google Sheet
    // ******** 下面這兩行是你需要修改的地方 ********
    var sheet = SpreadsheetApp.openById("你的試算表ID").getSheetByName("工作表1"); // 把「你的試算表ID」換成你自己的,工作表名稱也要對
    sheet.appendRow([new Date(), userId, userMessage]); // 把時間、ID、訊息內容,按照順序寫入新的一行

    // 接著,回覆一則訊息告訴使用者我們收到了
    var url = "https://api.line.me/v2/bot/message/reply";
    var headers = {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + "你的Channel Access Token" // 把「你的Channel Access Token」換成你自己的
    };
    
    var payload = {
      "replyToken": replyToken,
      "messages": [{
        "type": "text",
        "text": "收到你的訊息囉:" + userMessage
      }]
    };

    var options = {
      "method": "post",
      "headers": headers,
      "payload": JSON.stringify(payload)
    };

    // 送出回覆訊息的請求
    UrlFetchApp.fetch(url, options);

  } catch (error) {
    // 如果上面 try 的區塊有任何錯誤,就在 Apps Script 的後台記錄下來
    Logger.log(error);
  }

  // 最後回傳一個成功的狀態碼
  return ContentService.createTextOutput(JSON.stringify({'status': 'success'})).setMimeType(ContentService.MimeType.JSON);
}
    

注意:要把上面程式碼裡的 `你的試算表ID` 和 `你的Channel Access Token` 換成你自己的。工作表名稱如果不是 `工作表1` 也要改。

在 Google Apps Script 編輯器中貼上程式碼
在 Google Apps Script 編輯器中貼上程式碼

部署為網路應用程式

寫好程式碼,要把它發佈出去,LINE 才能找到它。

  1. 點右上角的藍色按鈕「部署」,選「新增部署作業」。
  2. 跳出一個視窗。左邊齒輪圖示,「選取類型」請選「網頁應用程式」。
  3. 描述...隨便寫。
  4. 「執行身分」選「我」。
  5. 「誰可以存取」...這個最重要,一定要選「所有人」。不然 LINE 會被擋在門外。我知道這聽起來有點可怕,但在台灣,多數小型應用都是這樣做的,主要是因為 LINE 的 Webhook 機制需要一個公開的端點。不像在美國,有些平台可能有更複雜的驗證流程。
  6. 按下「部署」。它會要你授權,就按「授予存取權」,選你的 Google 帳號,然後在「不安全」的警告頁面點「進階」,再點「前往『(專案名稱)』」。
  7. 授權完,就會給你一個「網頁應用程式網址」。這就是最後一塊拼圖。把它複製下來。

最後一步:把兩邊接起來

回到剛剛的 LINE Developers Console 頁面。

一樣在「Messaging API」頁籤,找到「Webhook settings」這個區塊。把剛剛從 Google Apps Script 拿到的網址,貼到「Webhook URL」欄位裡面。

然後,把下面的「Use webhook」開關打開。

可以按一下「Verify」按鈕。如果你的 Apps Script 程式碼跟部署都沒錯,應該會看到一個綠色的 Success 訊息。這表示 LINE 成功戳到你的 Google Script 了。

好了。現在打開你的 LINE,對你的 Bot 傳個訊息試試看。如果一切順利,你的 Google 試算表應該會馬上多出一行資料,而且你的 Bot 也會回你一句「收到你的訊息囉」。

成功寫入資料的 Google 試算表畫面
成功寫入資料的 Google 試算表畫面

卡住了?常見的幾個點

第一次設定,卡住很正常。我自己也卡過好幾次。八成是下面幾個原因:

問題狀況 可能原因...我猜
Webhook 按 Verify 失敗 大概是 Apps Script 的權限沒開「所有人」。或是你根本就還沒部署...或是複製到舊的網址了。
LINE 有回訊息,但試算表沒資料 嗯...檢查一下程式碼裡的「試算表ID」或「工作表名稱」是不是打錯字了。差一個字都讀不到。
LINE 沒回訊息,試算表也沒資料 這就比較麻煩。去 Apps Script 左邊選單的「執行作業」看一下紀錄。通常裡面會紅字跟你說錯在哪。最常見的是 Channel Access Token 貼錯。
什麼反應都沒有 你...有把 LINE Developers 後台的「Use webhook」打開嗎?還有...「Auto-reply messages」要關掉,不然會衝突。

總之,就是一個蘿蔔一個坑。慢慢對,一定可以成功的。

你第一個會想拿這個來做什麼?是訂便當、記帳,還是有更酷的想法?留言分享一下吧。

Related to this topic:

Comments

撥打專線 LINE免費通話