Line Bot 學習心得—— Webhook 是什麼?request 掰掰
前言
學習程式也到一個階段了,決定來寫幾個 project 增進自己的能力,也可以寫進作品集裡,為找工作做準備。因此這篇文章會著重於——為什麼做這個選擇,學到什麼新知,以及中間碰到什麼問題等等。
為什麼選擇 Line Bot ?
在學程式前,表姐夫用 Python 寫了一個 Line Bot 作為智慧家庭控制,只要在 Line 輸入指令就可遙控家中電器,那時覺得超~有~趣~~~不過家裡實在沒有什麼智能家電可控制,倒是因為最近開始實施低碳飲食,查詢營養成分變成件頻繁的事,不如就用 Line Bot 來查詢營養成分表吧!
營養成分 API — — 第一次棄坑
雖然坊間有很多 APP 可查詢營養成分,但資料多為用戶自行上傳(UGC),難免會有誤差的情況,故想用衛福部的營養成分作為資料來源,且政府有提供開放資料可下載。
下載後才發現沒這麼簡單呀!除了資料庫非常龐大,且撰寫的格式實在太繁瑣,一個食材的單一檢驗項目,就寫成一個 object ,而一個食材可能會有 10 多個檢驗項目,所以整個資料落落長,重複項目又極多,原本還在想辦法篩選表單,但連開啟檔案都非常艱難,在逼不得已下只好棄坑了。
第三方資料選擇
為了處理第三方資料實在花了太多時間,說真的,覺得這時的重點是在 Line Bot 的操作練習上,在網路上看到很多練習資料,包括匯率換算、各縣市氣溫、空汙值等等,在排除各個需求後,再加上剛好當時有空汙警示,查了空汙的資料找到一個清楚明瞭的 JSON 格式,就決定是你了!
套件選擇
request V.S. axios
在相關文章裡,千篇一律都是 request 的操作方式,但實際到 npm 查詢就會發現, request 在今年 2 月宣佈停止更新了。不過我實在太晚查了,當下已用 request 寫了,但再使用的意義不大,搜尋替代方案後決定使用耳聞過的 axios ,除了下載量大,採用 Promise 的編寫方式也挺方便。(不過實際全程使用 axios 已是下個 Line Notify 專案了)
學習新觀念 — — Webhook
Line Bot 的運作方式,是使用者傳送請求 Line伺服器(Messaging Server)接收請求à開發者的伺服器處理請求,並回傳回應給 Line 伺服器,最後交回使用者手上。其中, Line 伺服器傳送的資料,必須透過開發者架設的 Webhook (Messaging API),才能順利傳送請求給開發者的伺服器,並進一步得到回應。
而 Line 伺服器傳送的資料,包含 Webhook 的路徑、數位簽證等資料,須透過頻道金鑰解密,才能取得訊息,這部分也是交由 Webhook 處理。
瞭解這些資料的傳遞方式、解密方式後,直接使用 linebot 套件,其文件中詳細寫明了如何使用,譬如監聽訊息、傳送訊息/圖片,取得使用者資訊等等,基本上稍微再編寫一下就能使用了。
未來可改進的地方
來到這邊 Line Bot 已可查詢特定地點的空汙指數,不過程式碼有點瑣碎,之後會想辦法用個較廣泛的定義解決這件事。寫程式時,是直接上傳至熟悉的 heroku ,後來看到 Google App Script 覺得更適合,畢竟 Line Bot 只有被呼叫時才需運算,不用佔一個 heroku 免費名額。
再來,目前撰寫的 Line Bot 還沒辦法主動通知使用者訊息,須透過訊息觸發才會有回應。最後,完全忘記 Line 2.0 的全新收費機制,每個 Line Bot 有 500 則/月的限制。基於上述兩點,也興起製作 Line Notify 的念頭。
參考文獻
LINE Bot 聊天機器人程式開發教學
https://swf.com.tw/?p=1098
開發 LINE 聊天機器人不可不知的 10 件事
https://engineering.linecorp.com/tw/blog/detail/183/
LINE Bot 系列文 — — 什麼是 Webhook?
https://medium.com/@justinlee_78563/line-bot-%E7%B3%BB%E5%88%97%E6%96%87-%E4%BB%80%E9%BA%BC%E6%98%AF-webhook-d0ab0bb192be