Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 記錄軟體開發的點點滴滴 著重於微軟技術、網頁開發、DevOps、C#, Asp .net Mvc、Azure、AI、Chatbot、Docker、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
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus