如何将 Microsoft Bot Framework 链接至微信公共号
說到 Microsoft Bot Framework 其實微軟發布了已經有一段時間了,有很多朋友可能還不太了解,微軟Bot的功能今天我給大家簡單的介紹一下,Bot Framework的開發基礎以及如何使用Bot Framework和我們的一個現有的三方客服(例如一個微信的公共號)集成起來。
首先說到Bot大家的第一反應就是機器人,但是微軟的Bot不是指的傳統意義上的一個基于硬件的機器人,而是一個類似于在線客服的服務框架。這個框架很直接的價值在于
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 中找到
隨后您可以在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服務,希望可以幫助到大家,如果需要我的項目代碼請點擊“閱讀原文”
,到博客文章進入下載。
大家有興趣更深入的交流,可以在新浪微博上聯系?@王博_Nick
原文鏈接:http://www.cnblogs.com/sonic1abc/p/5941442.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的如何将 Microsoft Bot Framework 链接至微信公共号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis集群~StackExchang
- 下一篇: 编程语言的发展趋势及未来方向(3):函数