Microsoft bot framework 4 在去年九月就發布了,直到最近我才有機會去學他,雖然有碰過 v3,但聽說架構改很大, 底層也改用 .Net Core 了,現在趕緊把它補上。

雖然官方是推薦用 VS ,但身為一個 Jetbrains IDE 的愛好者,當然是使用它來當作開發工具,現在就讓我們從建立專案開始吧。

安裝專案 Template

新的東西連 VS 預設都不會有 Template,更不用說是 Rider了。

在 macOS 可以使用 dotnet 來下載 Template 的,而可以在這邊找到 v4 版本的 Template , 而它們名稱分別為 Bot v4 - Echo (bot-echo)Bot v4 - Basic (bot-basic),點進詳細頁面就可以看到下載的指令。

執行指令把他們下載下來。

dotnet new --install "Ltwlf.BotBuilderV4.Echo"
dotnet new --install "Ltwlf.BotBuilderV4.Basic"

下載完後就可以在 新增專案 中看到囉!

新增專案

使用 Rider 新增專案後,如果 Microsoft.Bot.Builder 版本是 4.0.6,會發生抓不到 Package 的問題,把它相關的 Package 都升到最新版就可以了。

執行專案後,可以下載 BotFramework-Emulator 來模擬與 Bot 對話, 安裝完執行後,點擊 Open bot 選擇專案資料夾中的 BotConfiguration.bot 檔案,就可以開始與 Bot 對話了。

專案架構

整個專案的基本架構是 .Net Core,而已開始建好專案就有幾個重要的檔案:

  1. Startup.cs: 整個專案的入口點,裡面會載入一些 Bot 的設定及註冊這個 Bot。
    • 在 Line 33-34 的部分載入了 appsettings.json 以及環境設定檔 appsettings.<環境名稱>.json
    • 如果要更改 Storage 的儲存方式,在 Line 59 的 IStorage dataStore = new MemoryStorage();
    • 在 Line 81-85 使用 AddSingleton 方法註冊了 conversationStateuserState,讓全域都可以拿到他們
    • 在 Line 87 的 services.AddBot<Bot>(options => {...} 註冊了 Bot 這個 Bot
    • 在 Line 93 的 var botConfig = BotConfiguration.Load(botFilePath ?? @".\BotConfiguration.bot", secretKey); 是意思是以 BotConfiguration.bot 來設定 Bot
  2. CounterState.cs: 在這個專案中,是用來記錄第幾個 Turn 的 State,未來想要記錄一些使用者資料,也是要建一個跟這個類似的 Class。
    • 詳細怎麼做的可以看這篇文章
  3. Bot.cs: 實際處理訊息的地方,可以看到 OnTurnAsync 這個方法,就是實際再處理訊息的地方。
    • 在 Line 45 的地方,就使用 conversationStateCounterState 建立起來。

如果在架構上還有不請楚的可以看這篇文章,講解得蠻詳細的