2024-04-11|閱讀時間 ‧ 約 24 分鐘

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


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


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


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



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

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

    👉🏻在 LINE Developers 上建立 LINE Bot

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



    有成功建立帳號、得到 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 要正確...,細節還是很重要的啊!


    最後有成功完成以下功能

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


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

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

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



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


    其他參考文章

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

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

    Apps Script 到底是什麼



    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.