Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[Bot Framework V4][04]瞭解EchoBot的程式碼結構

[Bot Framework V4][04]瞭解EchoBot的程式碼結構.jpg
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 

在上一篇([03]搞懂關鍵字以及信息的處理流程)瞭解了整個V4版本的關鍵字以及信息是怎麽流動。

這篇來看看實際code的結構 - 使用之前建立出來的EchoBot,看一下整體的結構。

程式碼的結構

首先,來看一下整個EchoBot有的檔案:

devenv_2018-10-20_17-18-41.png
EchoBot的資料夾組成

從這個結構可以看出,是一個很典型的Asp .NET Core的結構,拆解出來可以分幾個部分:

  1. Startup.cs - 網站啓動的時候執行的部分
  2. EchoBotAccessorsCounterState - 還記得每一個對話,Turn的數字會加一。這兩個class有何記錄這個信息有關的地方
  3. EchoWithCounterBot - 信息最末端,Bot的部分,也是實際邏輯的部分

有了幾個部分的概念之後,來實際看一下裡面的内容。

Startup.cs

這個Class的東西會在Bot (網站)啓動的時候被執行,因此是這邊有了某些設定,Asp .NET Core才會把他當作Bot來處理。

這邊又分了兩個大的方法:

  1. Configure
  2. ConfigureServices

Configure

這邊重要的是呼叫了IApplicationBuilder.UseBotFramework()

呼叫了這一行,將會把對應等一下提到的bot相關設定注冊進去。

devenv_2018-10-20_21-04-51.png
IApplicationBuilder的程式碼片段

ConfigureServices

在這個方法裡面有兩個部分:

  1. AddBot - 這邊設定Bot的部分
  2. AddSingleton - 這個注冊State Accessor的部分為一個Singleton

devenv_2018-10-20_21-09-25.png
總覽的部分
AddBot
這邊總共設定了3個事情:
  1. 透過BotConfiguration.bot的内容來設定framework裡面的config
  2. 透過OnTurnError設定當Bot有出錯的時候要發生什麽事情
  3. 信息一定要存在某個地方才有上下文,類似網頁的Session要存那邊,預設存在Memory裡面

這邊就不展開程式碼的部分 - 不過整體來説就是做了這3個事情。

AddSingleton

還記得在EchoBot的時候每一輪bot都會直接回復他收到的内容并且Turn都會加1。第幾輪的信息就是透過Accessors來呼叫。

因此透過Asp .NET Core的Dependency Injection把這個物件注冊成爲Singleton,這樣每個地方都可以透過注入的方式取得這個物件。

EchoBot很單純,所以沒有使用其他Middleware,如果有需要就可以在這邊做設定,或者其他會用到的物件也是這邊可以放到注入的容器裏面。

CounterState.cs

還記得EchoBot裡面記錄的第幾輪的信息嗎?在這邊CounterState這個Class就代表想要被記錄的信息的POCO。

整個Class很見到,就一個Property記錄TurnCount

devenv_2018-10-20_21-40-24.png
CounterState的内容

EchoBotAccessors.cs

有了要被記錄保留信息的POCO之後,接下來就需要一個代表儲存以及取得的Class,這個也就是Accessors。

透過Accessors能夠把底層實際讀取和儲存的邏輯(例如是存在Memory,還是一些可以永久儲存的地方例如Azure Storage)抽離,達到降低Dependency。

EchoBotAccessors就是這個bot程式裡面的Accessors。

EchoWithCounterBot.cs

這邊就是流裡面的最後的部分,也就是上篇提到的Bot的部分,換句話説,也就是實際做處理的邏輯的部分。

任何要做Bot就要實作IBot,這個Interface有個方法叫做OnTurnAsync需要implement。

在這個Bot的實作是:

  • 如果信息類型不是Message,那麽直接把信息類型回復回去
  • 如果信息類型是Message,那麽把Turn加1,然後把得到的内容在回傳回去

devenv_2018-10-20_21-57-00.png
Bot内容

結語

這篇把整個EchoBot的程式碼拆解并且把不同的部分做了一些介紹。

希望透過這篇能夠對於整個Bot的程式有點概念,有了一些概念之後接下來就可以開始做開發了。

第一步當然是需要知道使用者的姓名好幫他做訂房的手續,那麽問題就來了,怎麽儲存這個信息呢?

下一篇([05]搞懂Bot的State Management - 怎麽儲存信息)將會介紹Bot Sate - 怎麽在Chatbot裡面儲存信息。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus