手把手教你建聊天機器人(linebot+nodjes+ngrok)

Charles Huang
6 min readSep 22, 2019

--

今天我們要來玩line提供的messaging api,並且利用Nodejs實作一個聊天機器人,讓他可以echo我們的對話以及主動推播訊息給我們。步驟分成以下三種:

  1. 註冊LINE Channel
  2. 撰寫Node.js程式
  3. 使用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程式中。

  1. Channel ID
  2. Channel Secret
  3. Channel Access Token
一開始是空的,按下Issue去做生成

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'

這次的手把手建立聊天機器人就到這邊結束了,如果有任何問題歡迎聯絡我,謝謝各位!

--

--

Charles Huang

Made in Taiwan的後端工程師,擅長nodejs做後端開發。相信分享與交流可以讓世界更美好,加上自己有點金魚腦,所以開始了寫些有的沒的之路XD