手把手教你建聊天機器人(linebot+nodjes+ngrok)
今天我們要來玩line提供的messaging api,並且利用Nodejs實作一個聊天機器人,讓他可以echo我們的對話以及主動推播訊息給我們。步驟分成以下三種:
- 註冊LINE Channel
- 撰寫Node.js程式
- 使用ngrok並設定line webhook
註冊LINE Channel
先來到line developer頁面,利用你的line account去做註冊登入動作。
登入後,選擇”Create new provider”,取一個沒有重複的provider name即可。
Provider就像公司或品牌一樣,接著可以在provider下建立channel,一個channel對應一個line bot,就像不同團隊或是商品一樣的概念。故Provider下可以有多個channel & bot。
當Provider建立好後,選取Messaging api來Create channel。
接著開始填入App名稱、敘述分類等等的資訊後,按下確認後即可建立一個LINE Channel帳號。
OK,當channel建立完成後,點選channel的卡片進入channel setting當中。
在這邊我們要找到三個很重要的資訊,這會應用在等等的Nodejs程式中。
- Channel ID
- Channel Secret
- Channel Access Token
Channel Secret, Channel Access Token是讓Line能辨識Bot的重要資訊,請勿將這些資訊請勿外流,否則他人將有機會偽造你的Bot回傳訊息給你的使用者。
本篇為測試用,故事後會把provider刪去,不要傻傻用我上面截圖的~
撰寫Node.js程式
要用nodejs來開發line bot非常的容易,line本身提供了許多種語言的sdk,這邊我們使用的是npm上的一個linebot libray。
先開一個空白資料夾,並透過terminal在裡面執行以下command,會將我們接下來需要的library安裝好。
npm install linebot express body-parser dotenv
新增一個.env
檔用來存放我們的line channel資訊
LINE_CHANNEL_ID="<帶入前一步驟的channel id>"
LIEN_CHANNEL_SECRET="<帶入前一步驟的channel secret>"
LINE_CHANNEL_ACCESS_TOKEN="<帶入前一步驟的channel access token>"
接著新增一個名為app.js的檔案並輸入以下程式碼
除了可以重複使用者輸入的訊息外,這邊同時搭配express來建構一個http server,讓我們可以設計一些情境,並透過http api去主動讓line bot去推送訊息給bot的好友們。比如….發送騷擾訊息給bot的好友(誤XD。
如果等等運行正確的話,你會看到以下狀況
使用ngrok並設定line webhook
ngrok可以讓產生一個暫時的public domain(免費方案)讓外網可以連到你local的程式,同時支援https協定,而這也是Line官方規定要使用webhook的前提。所以先去ngrok官方網站下載吧!
載好後,先將其複製到/usr/local/bin
底下,接著就能global的使用啦。
運行方式
ngrok http 3000 // 3000 是因為app.js使用3000 port唷!
接著會看到以下畫面
其中的Forwarding就是我們要的
https://0bf2a174.ngrok.io
接著回到channel setting頁面把webhook給enable並且填入Webhook URL。
這邊注意到,因為上面的nodejs程式寫的是
app.post('/linewebhook', linebotParser);
故我們的webhook url就會是
https://0bf2a174.ngrok.io/linewebhook
最後,回到app.js的資料夾內去運行我們的bot吧!
node app.js
到目前為止都很順利,不過當我真的與bot對話時
發現會出現這樣的罐頭訊息,而不是我們預期的重複我的話。這時候回到channel setting頁面,讓我們看到Auto-reply messages
這個欄位!
接著點選Set message
進去裡面設定。
好的,到這邊就大功告成啦。再度測試後發現,bot有成功重複我們的話了!
並且,使用curl測試我們的broadcast api也是非常順利的。
curl -XPOST localhost:3000/broadcast -d 'message=broadcast test123'
這次的手把手建立聊天機器人就到這邊結束了,如果有任何問題歡迎聯絡我,謝謝各位!