[玩具系列]Azure Bot Service 接合Line Message API做一個Line Bot

前一篇的[[玩具系列]快速建立一個Azure Bot Service 服務]可以用Bot Service建立好Bot服務,再來就是要看把這個Bot放到那一種IM軟體上,在公司可以使用Microsoft Teams,但是如果是要自己非公司外用,比較常用就是使用Line Bot,如何開發Line Bot呢?首先就是要建立Line Bot的Message API,所以,我們要去Line的開發網站https://developers.line.biz/,申請一組Line Message API 的Provider和Channel。
申請Line Message API
申請Line Message API方式的介面是會常改。但不外乎就是幾個步驟
- Create a new provider

- 選擇要合適的Channel類型

- 設定Channel相關屬性

- 微調Message API設定,例如下方例子中回應設定,這邊記得關於Webhook設定都要設定為啟動

Azure Bot Service 結合Line Message API
網路上關於Line Bot的開發for .NET Code的案例很多,比較常見都是建立一組Web API作為Line Bot的Webhook的URL,然後,只要把這組API接收Line Bot傳來的Message作相對應的處理。這種做法的控制性會比較高,相對彈性也會比較大。而透過Azure Bot Service結合Line方式,相對來說會比較簡單一點(至少,在整合上我是認為比較簡單),另一方面也可以除了結合Line外,也可以與其他多Bot平台整合與處理,把它作為一個所有Bot的中間平台層
在Azure Bot Service要整合Line Channel,只要幾個步驟就可以完成。先到Azure Bot Service的頻道找到Line圖示

點選Line圖示後,就會開始與你申請的Line頻道做整合,這會要請你填上兩個值

- 頻道秘密: 翻譯挺怪的,其實就是在Line API設定的
Channel secret

- 頻道存取權狀:就是在Line API設定的Channel access token

填完兩個值後,就可以儲存了。同時把在設定畫面中的最下面Webhook URL,填入在Line API設定的Webhook Settings
中的Webhook URL
,這樣就完成綁訂了,之後就可以看到下面這樣資訊,資訊上有Line圖示,就表示跟Line API整合成功

修改Azure Bot Service 程式碼
如果以為這樣設定好,就可以跟Line Bot互相溝通,這是不可能的,沿用上一篇程式碼,我們必須在Azure Bot Service判定收到訊息是屬於哪一種IM Channel或是說Bot Type才可以,因為大多數的Bot傳來的Message可能是不相同的,沒有額外處理是無法運作。
因此,我們必須修改收到Bot Service收到訊息後,判斷是從那一個Channel發送過來的,進而針對每個Channel的Message做後續的處理
然後,這邊要實作收到從Line傳來的圖片要怎樣去跟這篇的[[玩具系列]用Azure Custom Vision 建立玩具分類器]整合。當然第一件事就要能取的Line上傳過來的圖片,建立一個Class區分Line Message類型。要判斷其類型,就需要從Channel Data中的資訊獲取
ChannelData的Json檔案轉換成Class如下
因此,從Message Type中可以區分圖片、文字或是其他類型等Message。有了這個資訊,再來只要能獲取的圖片就可以。
Line的上傳圖片其實都是存在Line的平台中,所以,我們必須要到Line 平台才能取得相對應圖片回來。從Line API中可以得到要呼叫上傳的Content,還必須要一組ID。而這組ID就是存在於Message.ID裡面
https://api-data.line.me/v2/bot/message/{messageID}/content
換言之,你必須先要有這組ID,然後再去Line平台取得圖片回來。而Line回傳的圖片是byte[]格式,剛好這樣格式也可以省去我們要轉換,才能與Custom Vision整合。此外,因為要呼叫Line API需要做Authorization
認證
Authorization認證資料就是使用Channel access token的資訊。然後,取得Response的Rawbytes的資料,Rawbytes本身就是Byte[]型別,所以可以直接拿來用到CustomVision內。
以上就可以將Line Message API結合Azure Bot Service變成一組Line Bot服務。雖然,處理方式跟部份是跟自己寫Web API有點類似,不過,這樣做方式也可以使用到Azure Bot Service本身具備的好處。要參考完整的Code可以參考我的Github