這是我第一次透過node.js建置Line BOT, 紀錄一下過程和遇到的issue, 也許有人也發生過。首先這次的初次建立參考了An Sheng Huang的教學, 大家如果覺得我的不夠詳細也可以參照一下他的範例, 他有一些圖示說明可參考。
Step1 您的環境要先安裝 Node.js
這邊建議安裝新版的Node.js, 第一次使用時一直出現 400 bad request Error
, 後來嘗試追問很多問題, 最後透過更新最新版本Node.js解決了問題, 所以這邊建議大家都用新版的Node.js, 可以優先選擇下載左邊的 Recommended For Most Users, 此文件針對version 10.15.3。
OSX upgrade方式我是使用brew更新, 但他把我一堆東西順便一起更新了, 會耽誤一些些時間..., 如果大家有更好做法可以提出, 謝謝。
Windows upgrade方式我是一樣從官方下載.msi檔安裝, 路徑跟舊的版本選一樣他就會將舊的版本蓋過, 很方便。
打開終端機輸入以下指令即可查閱目前Node.js 版本
OSX
$ node --version
Windows
node --version
Step2 註冊一個 LINE Channel
先登入你的LINE帳號, 接著選擇Create New Provider, 將Provider名稱建立, 接著選擇Messaging API, 將App名稱建立, 建立好後就可以進去Channel Settings裡了。
這裡有幾項比較重要的資訊需要記下
Channel ID
Channel Secret
Channel Access Token(有時效性, 最多保留24hr, 超過時間就需要再創建)
請先安裝LINE BOT 的SDK, 這邊你第一次需要先執行npm init
, 他會建立一個package.json file, 步驟我也沒多做設定, 就一直enter進行, 最後再來執行下面的指令。
OSX
$ npm install linebot --save
Winsows
npm install linebot --save
準備好一個空的資料夾, 建立第一個Node.js
App.js
// 引用linebot SDK
var linebot = require('linebot');
// 這邊用來填寫你的Line Channel資料
var bot = linebot({
channelId: '你的CHANNEL_ID',
channelSecret: '你的CHANNEL_SECRET',
channelAccessToken: '你的CHANNEL_ACCESS_TOKEN'
});
// 有人傳送訊息給我們的Bot時
bot.on('message', function (event) {
// event.message.text 是使用者傳給bot的訊息
// 使用event.reply(要回傳的訊息)方法可將訊息回傳給使用者
event.reply(event.message.text).then(function (data) {
// 當訊息成功回傳後的處理
}).catch(function (error) {
// 當訊息回傳失敗後的處理
});
});
// Bot所監聽的webhook路徑與port
bot.listen('/linewebhook', 3000, function () {
console.log('[BOT已準備完成]');
});
這邊引用An Sheng Huang的教學範例, 希望大家能幫他clap幾下。
再我們的專案裡, 執行一下我們的node.js
OSX
$node app.js
Windows
node app.js
Step4 使用ngrok測試Bot
Line BOT 需要一個https的Webhook, ngrok會提供一個URL作為連接, 先註冊一個帳號, 接著Download官方zip檔, 接著解壓縮再雙擊, 網站上會顯示你的account's authtoken, 接著就在你解壓縮下的資料夾run起來
OSX
$ ./ngrok http 3000
Windows
'ngrok.exe http 3000
終端機應該就會顯示以下內容, x代碼需要大家記下, 後面需要在LINE Channel Settings設定
Forwarding https://xxxxxxxx.ngrok.io -> http://localhost:3000
初次使用記得將Use webhooks選擇Enabled, 我一開始就是沒開啟失敗了幾次, 接著將下方的Webhook URL填上, 也就是xxxxxxxx.ngrok.io這一段, 記得後面要再加上/linewebhook
, 還記得我們的App.js最後設定webhook的地方寫到
// Bot所監聽的webhook路徑與port
bot.listen('/linewebhook', 3000, function () {
console.log('[BOT已準備完成]');
});
App.js裡的bot所監聽的路徑是bot.listen('/linewebhook', 3000)
所以webhook URL必須填入完整路徑xxxxxxxx.ngrok.io/linewebhook
輸入後就可以按下verify, 如果有出現Success, 就OK了!你就可以加自己的BOT, LINE他一下, 沒意外他應該會把一樣的訊息丟回來給你。這邊如果webhook URL如果沒成功記得將Use webhooks選擇Enabled, 並且確定自己的Node.js為新版, 我就是因為這兩個原因一直噴400 bad request Error
, 希望大家都有順利成功!
這次的初次練習參考了An Sheng Huang的教學範例, 他的文章還有搭配一些圖說明, 非常清楚, 大家也可以從上面做參考, 也給他一些clap回應吧!這是一個初次的小記錄, 方便我記錄當初遇到的問題, 也分享給大家試試看。