LINE Bot聊天機器人程式開發教學(三):建立Node.js版的Echo Bot

Echo Bot可說是所有聊天機器人的第一個入門程式,它的作用是把收到的文字訊息轉發回去給發送者。本文內容包含:

  • 認識LINE的HTTP訊息格式
  • 撰寫LINE聊天機器人的Node.js程式

認識LINE的HTTP訊息格式

在LINE頻道的設定畫面中,我們必須替LINE頻道設定接收LINE訊息的自訂程式(也就是LINE 機器人程式)網址,這個網址稱為Webhook(註:hook代表「掛勾」)。假設筆者把LINE訊息處理程式放在swf.com.tw網站的linewebhook路徑,那麼,每當有人發送訊息給我的LINE機器人,LINE公司的伺服器將以底下的HTTP POST請求格式,將訊息發送給我的網站伺服器:

LINE的HTTP POST請求格式

我們的機器人程式要從POST本體的JSON格式資料取出傳入的訊息。此外,POST標頭有個包含數位簽章資料的X-Line-Signature欄位,其作用是讓我們的程式驗證此POST請求是真的來自LINE,而非不明的網站。

驗證數位簽章的過程,需要兩項資料:

  • 頻道密鑰(Channel Secret),也就是建立LINE頻道文章中的Channel設定畫面裡的Channel Sescret欄位值。
  • POST請求的訊息本體(就是訊息最後那段JSON資料)

把這兩個資料透過一種叫做HMAC-SHA256的演算法計算出一個值,再經過BASE64編碼轉換,所得到的值和X-Line-Signature欄位一致的話,代表通過驗證。本文採用的程式套件會在背地裡執行驗證;如果不在乎安全性,聊天機器人程式碼也可以不驗證數位簽章。

使用Node.js的linebot套件開發聊天機器人

本單元使用在npmjs.com搜尋關鍵字“linebot”找到的linebot套件,開發者是泰國人Bundit Jitkongchuen。linebot套件整合了http模組,內建Web伺服器功能,底下是專案說明頁提供的Echo Bot範例程式,只要設定頻道識別碼密鑰存取代碼,機器人程式就能運作了:

Echo Bot範例程式

每當LINE伺服器傳來新訊息時,就會觸發message(訊息)事件。除此之外,LINE的事件類型還有join(加入群組)、leave(退出群組)、follow(加入好友)…等事件,完整的事件類型請參閱LINE API說明文件的Webhook event objects單元

觸發「訊息」事件時,訊息內容會夾帶在event.message物件裡面。除了text(文字),訊息內容還有image(圖像)、sticker(貼圖)、file(檔案)、location(地點)…等類型,完整的訊息類型說明請參閱LINE API說明文件的Message event單元

lintbot套件的其他範例程式位於GitHub的這個載點,其中的demo.js包含所有事件類型以及不同訊息內容的處理示範程式。

lintbot套件的範例

採用Express框架建立的LINE Echo Bot程式碼

本文的程式修改自其中採用express框架的echo-express.js範例,修改後的程式碼如下:

echo-express.js範例程式

此範例中的頻道識別碼、密鑰和存取代碼參數,並非寫死在程式碼裡面,而是將它們設定在系統的環境變數。日後若要修改這些值,只需要重設環境變數,程式碼不變。LINE聊天機器人程式並不需要處理來自「瀏覽首頁」的請求,我加上這段程式只是為了簡單地測試Heroku平台的Node.js環境可以運作。

延伸閱讀

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *