經過好幾篇繁複的設定:我們註冊 Bot、匯入 Bot Template 、安裝了模擬器、上傳了範本程式到 Azure Web Appliaction 與設定兩個通訊軟體(Facebook message 與 Slack)。接下來終於可以開始嘗試寫一些程式來完成些基本需求:透過簡單的文字判斷,回傳想要的資訊。
相對於 Slack 與 Facebook messages,對於自家產品 Skype 的設定很友善,建立 Bot 後在 Channel 頁籤即可以看見 Skype bot 已經加入。
只需要點選 Skype後,加入聯絡人即可。
註:若要開啟群組對話、撥打電話或進階設定,請點選 Edit 內設定。
首先開啟我們的 Visual Studio 2017 → 透過 Bot 範本建立一個 Bot application
若您還有印象,我們的 MessagesController 內有一個 api/Messages 的 API
註:請參考這一篇 03. Microsoft Bot Framework 介紹:下載 Bot 的 Project template 與 Item template 章節
我們先使用 Ctrl + 滑鼠左鍵點選傳入參數 Activity,檢視內部有哪些性質是我們需要用到的?似乎有 ChannelId、From、Text、Type 等多個性質名稱可以猜到用途。
我們先建立一個 Resources 資料夾 → 右鍵 → 加入 → 新增項目 → Resources Files (未來有機會可以延伸作為多國語系)
註:因為我在我的2017找不到 Resources Files。若您與我相同,嘗試建立文字檔案並更改附檔名為res,並確定性質自訂工具為 ResXFileCodeGenerator 與建置動作為內嵌資源。
我們在資源檔案內加入一些資料
開啟 RootDialog.cs 這隻程式,將 MessageReceivedAsync 方法改成如下:
註:您可以 Ctrl + 點選 PostAsync 方法,您會發現程式註解說明:透過前一則傳入資訊參數,建立連線回傳資料給使用者。應該是直接做回覆動作。
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
var commands = activity.Text;
var replayMessage = string.Empty;
if (commands.IndexOf("ein number") >= 0 || commands.IndexOf("統編") >= 0 || commands.IndexOf("統一編號") >= 0)
{
replayMessage = Resources.Messages.EINNumber;
}
if (commands.IndexOf("office address") >= 0 || commands.IndexOf("辦公室地址") >= 0)
{
replayMessage = Resources.Messages.OfficeAddress;
}
await context.PostAsync($"{replayMessage}");
context.Wait(MessageReceivedAsync);
}
啟動程式後 → 開啟模擬器 → 輸入辦公室地址
註:若您沒下載或設定過模擬器,請參考:請參考這一篇 03. Microsoft Bot Framework 介紹:透過模擬器測試您的 Bot 章節
接下來我們可以把機器人程式重新發布 Azure Web appliction
發行完成後,透過 Skype 測試,效果似乎不錯。
因為自己有使用 Skype 手機板,以後若需要查詢只需要透過手機即可。
https://github.com/matsurigoto/BotFrameworkExample01