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

Edward Kuo
Oct 18 · 6 min read
Image for post
Image for post

前一篇的[[玩具系列]快速建立一個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方式的介面是會常改。但不外乎就是幾個步驟

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

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圖示

Image for post
Image for post

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

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

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

Image for post
Image for post

修改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

參考資料

EK.Technology Learn

Design,Thinking,Coding & have fun every thing

Edward Kuo

Written by

Enterprise IT Manager / Microsoft Regional Director / Microsoft MVP / DevOps Expert / Speaker, About me: https://profile.edwardkuo.dev/about/

EK.Technology Learn

Design,Thinking,Coding & have fun every thing

Edward Kuo

Written by

Enterprise IT Manager / Microsoft Regional Director / Microsoft MVP / DevOps Expert / Speaker, About me: https://profile.edwardkuo.dev/about/

EK.Technology Learn

Design,Thinking,Coding & have fun every thing

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store