如何将 Microsoft 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[].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
如何将 Microsoft Bot Framework 链接至微信公共号的更多相关文章
- Microsoft Bot Framework 链接至微信公共号
如何将 Microsoft Bot Framework 链接至微信公共号 说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot ...
- 如何将 Microsoft Bot Framework 机器人部署以及网页应用
<Bot Framework>是微软开发的一款可让任何人制作自己的聊天机器人.该工具可以理解自然语言并对图片进行分析等,初期开放了 22 个可集成到应用的 API. 首先说到Bot大家的第 ...
- How the Microsoft Bot Framework Changed Where My Friends and I Eat: Part 1
Bots are everywhere nowadays, and we interact with them all of the time. From interactions on our ph ...
- Microsoft Bot Framework 上手
因为这前使用过MS Bot Frameowrk 做过开发, 最近心血来潮想做(挖坑)一个小的bot. 今天带领大家使用MS Bot Framework创建Hello World. 首先,我们要创建项目 ...
- 微信公共号url地址出错,调用上次设置地址.
开发微信公共号时总是会遇到要修改公共号里自定义菜单的地址,修改过后有些手机会重新请求错误(上次)的地址. 针对这个问题,我采用重新关注公共号.清楚公共号内容.清楚浏览器缓存的方式,前两种均不得解决,第 ...
- 微信公共号的PHP开发(基础篇)——玩一下
最近没事儿开了个微信号,写点东西给家人啊什么的看,你们想看的话就这个嘛: 然后就意外的看到imooc上的微信公众号开发相关了.每天科研的累累的,做点这个不是很累的东西吧. 微信公共号开发 一.基础 1 ...
- NodeJS 微信公共号开发 - 响应微信发送的Token验证(山东数漫江湖)
背景 使用 NodeJS 进行微信公共号开发,首先需要响应微信发送的Token验证,官方文档 填写服务器配置 登录微信公共平台,在开发下的基本配置打开该页面. 依次填写接口的 URL.自定义的 Tok ...
- Microsoft Bot Framework with LUIS
今年微软的编程之美的主题是“对话即平台”,“人工智能”,要求参赛选手用到Bot Framework与Cognitive Services. 大多数人应该对这两个技术都不怎么熟悉吧,我就在这里写写自己所 ...
- PHP微信公共号发送模板消息。
1.首先从微信公共平台(https://mp.weixin.qq.com/)添加模板. 2. /** * 经纪人生成电子合同通知租客.业主 * @param string $openid openid ...
随机推荐
- C语言 线性表 顺序表结构 实现
一个能够自动扩容的顺序表 ArrList (GCC编译). #include <stdio.h> #include <stdlib.h> #include <string ...
- 2014年市场需求排名前10的编程语言 - 生命的延续是 BI
开篇介绍 2014年就快收尾了,Team 内部每人都会准备一些 Tech Talk 的内容,技术方面的,咨询方面的都可以.我就准备了一些有关 BI 排名,BI 报表排名,包括各种技术编程语言等相关排名 ...
- php闭包函数简析
闭包函数(closures)也叫匿名函数,使用js的童鞋应该比较熟悉.PHP5.3开始引入了闭包的特性. 声明一个匿名函数是: $func = function() { }; //带结束符 匿名函数因 ...
- curl常用操作
1.cURL介绍 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性 ...
- RTX的api開發實例
RTX的api開發實例 最近接觸了RTX的接口開發部份,RTX其实有很多玩法,除了可以用自帶的客戶端發消息之外還可以用PHP調用API的方式來做一些事情,下邊整理了一下分享給大家 值得提醒的是这些接口 ...
- 记一次Nginx 400错误
在一个非CDN的域名下有一个页面,需要请求CDN域名下的资源.所以在CDN的那台源站的Nginx上设置了 add_header 'Access-Control-Allow-Headers' 'X- ...
- sqlserver内存释放心得
SQL Server 2008 或者R2的默认内存分配是2147483647MB, 差不多算是无穷大,对于系统内存的管理策略是有多少占多少.SQLserver会把所有处理过的SQL操作缓存在内存里,这 ...
- RPC和NFS
参考:http://eduunix.ccut.edu.cn/index2/html/linux/OReilly.SUSE.Linux.Jul.2006/059610183X/suselinux-CHP ...
- 单点登录 SSO(Single Sign-On)的实现原理
为什么要 SSO? 企业的信息化过程是一个循序渐进的过程,这就造成在企业的不同时期,根据业务和发展需要,构建了多个应用程序,而这些应用程序在功能.设计和技术可能都有所不同,就形成了各自独立的用户库和用 ...
- 每日英语:A New Way to Learn Chinese
Entrepreneur and author ShaoLan Hsueh thinks that English-speakers can start learning to read Chines ...