LINE 點名機器人製作步驟|5 分鐘完成自動簽到功能設定教學

Published on: | Last updated:

前言...要做一個 LINE 點名機器人

最近很多人想做 LINE 的自動化,特別是點名、簽到這種。網路上查了一下,發現教學文很多,但好像...嗯...有點複雜。要嘛是直接推薦你用付費平台,點一點很方便,但細節都包起來了,你不知道它怎麼動的。要嘛就是直接給你一堆程式碼,對新手來說,可能光是看到就想關掉了。

我自己是覺得,如果只是要一個簡單的、群組裡喊「簽到」然後自動記錄到表單的功能,應該可以有更單純的方法。特別是完全免費的。所以,這篇筆記,算是記錄一下我自己摸索的過程。目標是,用大家都有的 Google 帳號,搭配 LINE,大概花個...嗯,號稱 5 分鐘,實際上可能要個 10 分鐘吧,把這個功能做出來。

這個方法會用到 Google Apps Script,聽起來很像程式,但別怕,大部分是複製貼上。重點是理解它每一步在幹嘛,而不是真的要從頭寫。這方法的好處是,完全免費,而且因為是你自己做的,所以資料都抓在自己手上,很安心。

為什麼不直接用現成的服務就好?

這個問題很好,說真的,如果你的需求很複雜,或者你是店家要管會員,用現成的服務,像是 BotBonnie 或 GOSU PARTY 那些,絕對比較快,功能也強大。 但...有幾個點可以想一下。

第一是錢。雖然很多服務有免費方案,但通常訊息量或好友數一多,就要收費了。 以 LINE Messaging API 自己的計價方式來看,免費方案一個月也只有 500 則訊息,如果你的群組有 50 個人,大家喊個幾次就爆了。 自己用 Google Apps Script 做,基本上沒有這個煩惱。

第二是學習。用現成的服務,你學會的是「操作那個服務的後台」。但如果自己走一遍流程,你會大概知道 API、Webhook 這些東西是怎麼一回事。 以後想做點別的應用,腦袋裡才會有個底。就好像,買組合櫃很方便,但自己動手做過一個,以後看到木材大概就知道能怎麼拼。

所以,我自己是覺得,如果只是內部團隊、小社團要用,或是單純想學點新東西,那自己動手做絕對是個好選擇。

LINE 機器人運作流程示意圖
LINE 機器人運作流程示意圖

怎麼做?一步一步來

好,我們開始。整個過程,就像是讓 LINE(店員)、Google Apps Script(總機)、Google Sheets(紀錄本)三個東西學會互相溝通。

第一步:去 LINE Developers 申請一個機器人帳號

這一步的目標是拿到兩樣東西:一個是機器人的「身份證」,另一個是跟它溝通的「密碼」。

  1. 首先,你需要一個 LINE 帳號,然後去 LINE Developers Console 網站。用你的 LINE 登入。
  2. 登入後,你會看到建立「Provider」(供應商)的按鈕。你可以把它想像成是「機器人開發公司」,就填你自己的名字或團隊名就好。
  3. 有了 Provider 之後,在裡面建立一個新的 Channel,選擇「Messaging API」。
  4. 接著要填機器人的基本資料,像是頭像、名字。名字可以取「點名小幫手」之類的。最重要的,「方案」請選「Developer Trial」或「Free」,基本上免費方案就夠用了。
  5. 建立好之後,點進你的機器人頻道,找到「Messaging API」這個頁籤。裡面有兩個最重要的東西,先把它們找個地方貼起來:
    • Channel access token (long-lived):這就是我說的「密碼」。等一下我們的程式要跟 LINE 溝通,就要靠它。點一下「Issue」按鈕就會產生。
    • Webhook URL:這個欄位現在先空著,但要記得它在哪。它就像是我們要告訴 LINE 的「總機電話號碼」。 當有人傳訊息給機器人時,LINE 就會打這支電話。

到這邊,我們等於是已經生出一個機器人了,只是它現在還笨笨的,什麼都不會。

第二步:建立一個 Google Sheet 當作我們的資料庫

接下來,我們要準備一個地方來存誰簽到了。Google Sheets (試算表) 是最方便的選擇。

  1. 打開你的 Google 雲端硬碟,新增一個「Google 試算表」。
  2. 幫它取個名字,例如「LINE 點名紀錄」。
  3. 在第一列,建立幾個欄位標題,用來記錄資訊。最基本的可以有:Timestamp (簽到時間), UserID (簽到的人是誰), DisplayName (他的 LINE 名字), Message (他傳了什麼訊息)。

就這樣。這個試算表現在是空的,等一下程式會自動把資料填進來。

Google Apps Script 程式碼編輯器畫面
Google Apps Script 程式碼編輯器畫面

第三步:寫一點點 Google Apps Script 程式碼

這是最核心的一步,但也是複製貼上最多的一步。我們要寫一個小程式,擔任「總機」的角色。

  1. 回到剛剛那個 Google 試算表,點選頂端選單的「擴充功能」 > 「Apps Script」。
  2. 你會進到一個寫程式的畫面。把裡面原本的程式碼都刪掉,然後把下面的程式碼完整貼上去。

function doPost(e) {
  // 解析 LINE 傳來的資料
  var event = JSON.parse(e.postData.contents).events;
  var replyToken = event.replyToken;
  var messageText = event.message.text;
  var userId = event.source.userId;
  var timestamp = new Date(event.timestamp);

  // 如果訊息不是「簽到」,就什麼都不做
  if (messageText.trim().toLowerCase() !== '簽到') {
    return;
  }
  
  // 取得使用者名稱
  var userName = getUserDisplayName(userId);

  // 把資料寫進 Google Sheet
  // ***注意:這裡要換成你自己的試算表網址跟工作表名稱***
  var sheet = SpreadsheetApp.openByUrl("【你的 Google Sheet 網址】").getSheetByName("工作表1");
  sheet.appendRow([timestamp, userId, userName, messageText]);

  // (選用) 回覆一個簡單的訊息告訴使用者成功了
  // 如果不想回覆,可以把下面這段刪掉
  replyMessage(replyToken, "簽到成功!");
}

function getUserDisplayName(userId) {
  // ***注意:這裡要換成你自己的 Channel Access Token***
  var channelAccessToken = "【你的 Channel Access Token】";
  var url = "https://api.line.me/v2/bot/profile/" + userId;
  var response = UrlFetchApp.fetch(url, {
    "headers": {
      "Authorization": "Bearer " + channelAccessToken
    }
  });
  return JSON.parse(response.getContentText()).displayName;
}

function replyMessage(replyToken, message) {
  // ***注意:這裡要換成你自己的 Channel Access Token***
  var channelAccessToken = "【你的 Channel Access Token】";
  var url = "https://api.line.me/v2/bot/message/reply";
  UrlFetchApp.fetch(url, {
    "method": "post",
    "headers": {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + channelAccessToken
    },
    "payload": JSON.stringify({
      "replyToken": replyToken,
      "messages": [{
        "type": "text",
        "text": message
      }]
    })
  });
}
  

貼上去之後,有兩個地方絕對要修改

  • 【你的 Google Sheet 網址】:換成你第二步建立的那個試算表的完整網址。
  • 【你的 Channel Access Token】:換成你第一步從 LINE Developers Console 拿到的那串長長的密碼。程式碼裡面有兩處要改,都要改。

這段程式碼的意思很簡單:當 LINE 打電話來 (doPost),它會看一下訊息是不是「簽到」,如果是,就去問 LINE 這個人叫什麼名字,然後把時間、ID、名字、訊息寫進我們的 Google Sheet 紀錄本。 最後再回覆一句「簽到成功!」。

第四步:把所有東西連起來

最後一步,就是告訴 LINE 我們總機的電話號碼。

  1. 在 Google Apps Script 編輯器頁面,點右上角的「部署」 > 「新增部署作業」。
  2. 在「選取類型」那邊,選擇「網頁應用程式」。
  3. 在「誰可以存取」的選項,一定要改成「所有人」。 這是因為 LINE 的伺服器是「任何人」,如果沒開放,它就打不進來。
  4. 點下「部署」。它會給你一串「網頁應用程式」的網址。這就是我們的總機電話號碼,把它複製下來。
  5. 回到你第一步打開的 LINE Developers Console 頁面,找到「Messaging API」頁籤裡的「Webhook URL」欄位。把剛剛複製的網址貼進去,然後按下「Update」或「更新」。
  6. 最後,記得把下面的「Use webhook」或「使用 Webhook」這個開關打開。

好了,大功告成!現在可以把你的機器人加到 LINE 群組裡,然後試著打「簽到」看看。如果一切順利,你的 Google Sheet 裡應該就會出現一筆新的紀錄了。如果不成功,八成是 Token 或網址貼錯,或是權限沒開對。

Google Sheet 點名紀錄成果
Google Sheet 點名紀錄成果

這方法跟付費平台差在哪?

說了這麼多,這個 DIY 的方法跟市面上的服務到底差在哪裡?簡單整理一下。

項目 DIY (Google Apps Script) 付費平台 (No-Code)
成本 幾乎是零。只要你不超過 Google 和 LINE 的超高用量限制,就都是免費的。 有免費方案,但功能和訊息量受限。進階功能或高用量通常要月費。
設定難度 需要複製貼上程式碼,還要到不同後台設定。第一次可能會有點卡。 很低。通常是圖形化介面,用滑鼠點一點、拉一拉就好。
彈性 / 擴充性 超高。只要你懂一點程式,想加什麼功能都可以,例如統計人數、自動回覆不同內容等等。 受限於平台提供的功能。如果平台沒做,你就沒辦法用。
維護 基本上是「設後不理」,但如果 LINE 或 Google 改了 API,可能需要自己回來修改程式碼。 平台會負責維護。你什麼都不用管。

總結...還有一些限制

所以,這個方法,我自己覺得,很適合那種「一次性」或「內部使用」的需求。例如公司部門要登記下午茶、讀書會要點名、朋友揪團...等等。它的好處就是免費、彈性大,而且資料掌握在自己手上。

不過它也有很明顯的限制。第一,它很陽春,沒有漂亮的按鈕或圖文選單。第二,如果同時有一大堆人傳訊息,Google Apps Script 可能會反應不過來,造成漏單或延遲。第三,它沒什麼防呆機制,如果有人打錯字,例如打成「簽道」,那機器人就不會理他。

NP_ANS_END

但無論如何,走過這一遍,至少對 LINE Bot 的運作原理會有個基本的認識。以後再看到相關的應用,也比較能想像背後是怎麼實現的。這大概是最大的收穫吧。

換你試試看

你還希望這個機器人有什麼功能?像是自動回覆「[某某某] 簽到成功!」還是可以輸入「名單」就吐出目前的簽到總人數?在下面留言分享看看你的想法吧!

Related to this topic:

Comments

撥打專線 LINE免費通話