如何將 Microsoft Bot Framework 鏈接至微信公共號

来源:http://www.cnblogs.com/sonic1abc/archive/2016/10/10/5941442.html
-Advertisement-
Play Games

說到 Microsoft Bot Framework 其實微軟發佈了已經有一段時間了,有很多朋友可能還不太瞭解,微軟Bot的功能今天我給大家簡單的介紹一下,Bot Framework的開發基礎以及如何使用Bot Framework和我們的一個現有的三方客服(例如一個微信的公共號)集成起來。 ...


說到 Microsoft Bot Framework 其實微軟發佈了已經有一段時間了,有很多朋友可能還不太瞭解,微軟Bot的功能今天我給大家簡單的介紹一下,Bot Framework的開發基礎以及如何使用Bot Framework和我們的一個現有的三方客服(例如一個微信的公共號)集成起來。

首先說到Bot大家的第一反應就是機器人,但是微軟的Bot不是指的傳統意義上的一個基於硬體的機器人,而是一個類似於線上客服的服務框架。這個框架很直接的價值在於

1.Channel的概念:例如我們同時需要智能機器人用在一個HTML頁面上以及Skype或者Email客服,如果你使用微軟 Bot Framework 框架開發這個智能客服,那麼開發者可用享用Bot Framework Channel帶來的便捷,開發者只需要一次開發客服問題的邏輯然後在 Bot Framework 的 portal 上進行簡單的Channel配置就可以將這個智能客服 enable 到各種平臺或者將一段iframe的HTML的代碼嵌入網頁中就可以實現多客戶端的部署。當然也可以部署到微信公共號中,下圖就是目前微軟 Bot Framework所支持的所有的channel,當然除了這些已有的channel我們還可也連接到我們已有的應用中,這種做法我後面也會介紹。

 2. Bot Framework 是一個上手非常簡單的框架,基於ASP.NET MVC 的基礎上,簡單的說就是開發一個簡單的Web服務。開發步驟也很簡單

2.1 首先要先下載一個Bot Framework的開發模板(for visualstudio)和 模擬器 下載鏈接 https://docs.botframework.com/en-us/downloads/

配置 https://docs.botframework.com/en-us/csharp/builder/sdkreference/gettingstarted.html

安裝模板很簡單就是將一個zip包copy到vs的模板目錄下就可以在VS裡面創建Bot項目了

隨後在 MessagesController 中可以找到 Post方法這裡判斷一下 activity.Type 如果是 Message 類型就可以通過Text屬性獲取到用戶輸入的信息,隨後經過您的程式對用戶輸入的內容的理解與分析(這裡也可以使用微軟的LUIS服務進行語義理解)然後通過ConnectorClient的Conversations.ReplyToActivityAsync 方法進行回覆即可

        public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
        {
            if (activity.Type == ActivityTypes.Message)
            {
                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
                // calculate something for us to return
                int length = (activity.Text ?? string.Empty).Length;

                // return our reply to the user
                Activity reply = activity.CreateReply($"You sent {activity.Text} which was {length} characters");
                await connector.Conversations.ReplyToActivityAsync(reply);
            }
            else
            {
                HandleSystemMessage(activity);
            }
            var response = Request.CreateResponse(HttpStatusCode.OK);
            return response;
        }

隨後您可以在您的IIS上或者,Windows Azure 上的 Web App

2.2 隨後我們需要在微軟Bot Framework的portal 上註冊我們的Bot 鏈接https://dev.botframework.com/bots/new (用戶註冊過程我就略過了)

首先看到的是您可以給這個智能機器人上傳一個圖標,這個圖標用於和用戶對話或者Skype中的頭像,名稱和描述都寫上非常描述性的內容即可後面還可以修改,Bot handle 是服務的名稱設置後以後就不可修改了。後面的內容您自己照實填就好了。

endpoint 就是你的bot將來要部署的服務地址,也就是MS Bot Framework 要轉發消息的地址,現在最新的3.0版本中需要 Microsoft App ID, 需要您登陸MSA 生成一個APP ID就可以了。完成其他信息填寫後點擊註冊按鈕。

最後您需要從新配置Bot Framework 的這個website的web.config文件中的 MicrosoftAppId MicrosoftAppPassword,這兩個Key的value您都可以在Bot Portal 中找到

  <appSettings>
    <!-- update these with your BotId, Microsoft App Id and your Microsoft App Password-->
    <add key="BotId" value="YourBotId" />
    <add key="MicrosoftAppId" value="" />
    <add key="MicrosoftAppPassword" value="" />
  </appSettings>

隨後您可以在Bot的設置頁面配置要打開的channel這裡我打算做一個HTML的聊天視窗和一個微信的公共號,所以我打開了一個Web chat是用來做HTML做聊天視窗的,Direct Line 用來對接微信公共號。 

通過點擊 Web Chat的 Edit(編輯)按鈕來編輯和獲取嵌入HTML中的代碼和Secret ID,註意 需要在HTML代碼中把YOUR_SECRET_HERE替換成真正的 Secret ID 這樣在打開您部署的網站就可以看到您的Bot視窗,通過iframe的CSS就可以控制視窗的大小和位置。

<iframe src='https://webchat.botframework.com/embed/BoBotTest?s=YOUR_SECRET_HERE'></iframe>

接著我給大家介紹一下日和微信集成的方法,介紹之前推薦大家先瞭解一下微信公共號的基礎知識,我這裡是直接使用的 http://www.weixinsdk.net/ 微信SDK的基礎上開發的。在接收到微信轉發的消息的時候直接通過 Direct Line 轉發到MS Bot上,當然如果您已經有自己的微信公共號/企業號的微信後臺伺服器您也可以基於現有服務進行消息轉發或者您的微信公共號後臺本身就是一個ASP.NET MVC架構的服務您也可以直接集成這個Bot Framework

今天在這裡我就介紹一下基於現有微信後臺服務通過 Direct Line 轉發到MS Bot上的場景。

如果您已經瞭解過微信公共號後臺機制後肯定會想到,其實邏輯很簡單就是在微信後臺收到消息以後轉發消息和接收MS Bot消息的一個過程。

微信處理消息的機制非常簡單如下,我這裡使用了一個MSBot的一個PostMessage方法來調用遠程Bot的消息 代碼如下:

  switch (message.Type)
                    {
                        case WeixinMessageType.Text://文字消息
                            {
                                var msgId = message.Body.MsgId.Value.ToString();
                                string userMessage = message.Body.Content.Value;
                                string BotMessage = await MSBot.PostMessage(userMessage);
                                result = ReplayPassiveMessageAPI.RepayText(openId, myUserName, BotMessage);
                            }
                            break;

那麼只要在您的項目中實現下麵的這個MSBot的Class即可,這裡我把PostMessage的方法貼出來,具體項目請下載我在Github上的源碼體驗。

        public async static Task<string> PostMessage(string message)
        {
            HttpClient client;
            HttpResponseMessage response;

            bool IsReplyReceived = false;

            string ReceivedString = null;

            client = new HttpClient();
            client.BaseAddress = new Uri("https://directline.botframework.com/api/conversations/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("BotConnector", "aDyJxnUSx30.cwA.WOg.4DzXtwItzBC6jyUCxHXG8fLKcgdx2zZYf2BkkfW5Lpc");
            response = await client.GetAsync("/api/tokens/");
            if (response.IsSuccessStatusCode)
            {
                var conversation = new Conversation();
                response = await client.PostAsJsonAsync("/api/conversations/", conversation);
                //response = await client.PostAsync("/api/conversations/", null);
                if (response.IsSuccessStatusCode)
                {
                    Conversation ConversationInfo = response.Content.ReadAsAsync(typeof(Conversation)).Result as Conversation;
                    string conversationUrl = ConversationInfo.conversationId + "/messages/";
                    Message msg = new Message() { text = message };
                    response = await client.PostAsJsonAsync(conversationUrl, msg);
                    if (response.IsSuccessStatusCode)
                    {
                        response = await client.GetAsync(conversationUrl);
                        if (response.IsSuccessStatusCode)
                        {
                            MessageSet BotMessage = response.Content.ReadAsAsync(typeof(MessageSet)).Result as MessageSet;
                            ReceivedString = BotMessage.messages[1].text;
                            IsReplyReceived = true;
                        }
                    }
                }

            }
            return ReceivedString;
        }

這裡要註意的是需要設置AuthenticationHeaderValue這個屬性,這個屬性值是對應Direct Line Secret的Key值的。

隨後我們就可以實現在微信公共號上通過Direct Line 鏈接到 Microsoft Bot Framwork的場景了。

 

這樣就實現了使用一個MS Bot Framework 同時服務於微信公共號和HTML的Web服務,希望可以幫助到大家,如果需要我的項目代碼請在Github上下載即可 鏈接:https://github.com/Nick287/WeiXinSDKforBotFrameworkDirectline

希望上的總結可以幫助到大家, 同時歡迎大家在這裡和我溝通交流或者在新浪微博上 @王博_Nick

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.什麼是ORM ORM的全稱是Object Relational Mapping,即對象關係映射。它的實現思想就是將關係資料庫中表的數據映射成為對象,以對象的形式展現,這樣開發人員就可以把對資料庫的操作轉化為對這些對象的操作。因此它的目的是為了方便開發人員以面向對象的思想來實現對資料庫的操作。 2 ...
  • 文章出處:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html ...
  • 首先需要添加的命名空間 using System.Web.UI.WebControls;using System.Drawing.Drawing2D;using System.Drawing.Imaging; 編寫一個生成隨機數的方法,此方法很簡單,返回的是一個字元串也就是需要顯示到驗證碼中的字元串 ...
  • 當運行一個 Asp.Net Core 應用的時候, WebHostBuilder 根據環境變數來判斷當前運行的是哪個環境,可能是 Development,Staging或者Production.你也可以設置成隨便的一個字元串. 這個鏈接將會告訴你 如何在各種平臺各種環境中設置環境變數.但如果你使用 ...
  • 修飾符 訪問許可權 public 關鍵字是類型和類型成員的訪問修飾符。 公共訪問是允許的最高訪問級別。 對訪問公共成員沒有限制 private 私有訪問是允許的最低訪問級別。 私有成員只有在聲明它們的類和結構體中才是可訪問的 protected 受保護的,訪問許可權於包含類或包含類派生的類型 inter ...
  • 最初接觸時,感覺很好玩,然後就自己研究了下,做了個demo,然後整理下,下次可以直接使用啦,英文大小寫,點擊可以切換 上代碼了。。。。 頁面代碼: <img id="Img" src="/Login/GetCheckCode" /> 這個是頁面JQuery點擊更換方法 $("#Img").click ...
  • 摘要:.NET中的枚舉分為簡單枚舉和標誌枚舉,這次主要總結一下標誌枚舉適用條件,以及它的使用方法,併在文章的最後列舉枚舉使用的一些規範。 在剛接觸.NET的枚舉時,只用簡單的枚舉,對於標記枚舉,只知道是在枚舉類型加上 特性,然後給枚舉值賦予十六進位的值,並且書中還特別明確規定值必須是以2的指數才可以 ...
  • 最近發現easyui時間控制項的值格式不支持帶斜杠的日期(2016/10/31),必須是2016-10-31這類的才能正常使用,否則預設初始化為當前時間 斜杠顯示異常:顯示的是當前系統日期 如上換成橫杠之後正常顯示: 如上,必須把value換成帶橫杠 的日期格式才能正常初始化,已測試過easyui1. ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...