實作紀錄 | Google Apps Script + Line bot 實作 & 過程覆盤

2024/04/11閱讀時間約 3 分鐘


在 IG 上看到一位前端大大用 Google Apps Script + Line bot 替自己的球隊安排了球經,覺得很有趣,想想自己家每週日晚上都有固定的家庭聚餐,而我就是那位負責預定+告知+提醒+不斷被詢問這週吃什麼的角色...


想想既然轉職成為工程師了,必須讓這過程被優化+自動化,所以決定來玩玩看😛


一開始的預想是 Apps Script + Line Notify,簡單做一個定時推播訊息的機器人,所以參考了這篇教學👉🏻【Line Notify】透過 Google Script 結合 Line Notify 做到 Line 群組推播預先排程內容


raw-image


很順利就完成部屬和測試訊息的推播,但是又覺得只有推播訊息太簡便了,還想加入我們家常去吃的餐廳查詢功能,讓我可以直接透過 line 連結訂位,或是沒想法、無法決定要吃什麼的時候,可以隨機推薦一間餐廳...這些小功能,所以拿 Line Notify 這份程式碼進行修改 + 串接 Line bot API,變成一個資料庫查詢+回覆的機器人!

一樣參考了其他大大分享關於創建 Line bot 和串接 App Script 的教學文章

👉🏻在 LINE Developers 上建立 LINE Bot

👉🏻【LINE BOT 翻譯機器人】(4) 用 Google Apps Script API 傳送 LINE 訊息


raw-image


有成功建立帳號、得到 Line bot 的回應訊息,但是我要串接 Line 的回覆模板時,卻始終沒有辦法得到回覆,試了很久才發現這段不知道我從哪裡複製過來的 code

var dataExportFormat = JSON.stringify(resturant);
return ContentService.createTextOutput(dataExportFormat).setMimeType(ContentService.MimeType.JSON);

我一直認為它是必要的 return 結果,仔細看了 Line bot 文件之後,才發現 API 需要的資料格式很簡單,就是文件範例中給的 JSON 那樣而已,把這段拿掉,直接 return 相應的 obj,果然就成功回覆了!


成功收到 Line bot 的回覆後,就開始把資料建立到 Google sheet 裡面,並改寫 App Script 的 function,期望輸入餐廳名稱可以回傳餐廳的資訊。


但是改寫 function 後就一直不回覆了,一行一行測試才發現是我用了箭頭函式!要注意 App Script 必須使用 ES5 語法,難怪前面怎樣都跑不出結果😰。


寫法修正後就可以輸入關鍵字並得到餐廳資訊,這時又發現有些餐廳的資料可以成功回傳,有些則失敗,看來不是 function 的問題,就回頭去檢查資料,原來是 Google sheet 內的資料型別和格式有誤,會導致 Line bot 完全沒回應,像是電話號碼不能有空格、超連結的 URL 要正確...,細節還是很重要的啊!

raw-image


最後有成功完成以下功能

  1. 輸入餐廳名稱:回覆餐廳資訊
  2. 輸入【全部】:會列出餐廳清單(但是 Line 回覆最多只能10筆資料)
  3. 輸入【查訂位】:會回覆我家最新一筆訂位資訊
  4. 輸入【隨機】:隨機推薦一間餐廳給我


之後還想再加入的功能有:

輸入捷運站名稱,會回覆附近的餐廳名單有哪些

直接輸入訂位資訊,讓機器人幫我把訂位資訊推送到資料庫內



那麼 Line bot 實作&覆盤就先到這邊啦,我是Amber,前端學習中,歡迎交流討論🧸


其他參考文章

兩小時打造簡單 Line Chatbot — 使用 Google Apps Script & Google Sheet API

【LineBot實作】機器人傳送的訊息種類大彙整

Apps Script 到底是什麼



    20會員
    18內容數
    留言0
    查看全部
    發表第一個留言支持創作者!