说到 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--><addkey="BotId"value="YourBotId" /><addkey="MicrosoftAppId"value="" /><addkey="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服务,希望可以帮助到大家,如果需要我的项目代码请点击“阅读原文”

,到博客文章进入下载。

大家有兴趣更深入的交流,可以在新浪微博上联系 @王博_Nick

原文链接:http://www.cnblogs.com/sonic1abc/p/5941442.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

如何将 Microsoft Bot Framework 链接至微信公共号相关推荐

  1. electron 图标制作_使用Electron和Microsoft Bot Framework制作Skype Bot

    electron 图标制作 聊天机器人越来越受欢迎. Facebook正在致力于提供一个构建Messenger机器人的框架,该框架将允许企业所有者完全在Facebook的消息传递应用程序内部建立其客户 ...

  2. Microsoft Bot Framework 上手

    因为这前使用过MS Bot Frameowrk 做过开发, 最近心血来潮想做(挖坑)一个小的bot. 今天带领大家使用MS Bot Framework创建Hello World. 首先,我们要创建项目 ...

  3. 通过链接关注微信公众号

    小刀拉屁股,让你开开眼!!! 1. 首先登陆微信公众平台 地址:https://mp.weixin.qq.com/ 2. 在这个页面右键查看网页源代码 3. 然后全局搜索"uin_base6 ...

  4. 微信公共号开发教程java版——请求消息,响应消息及事件消息类的封装(三)

    一:封装请求信息 当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上. 各消息类型的推送XML数据包结构如下: 查看官网详细介绍 文本消息<xml&g ...

  5. 微信公共号系列---快速整合微信多端页面授权之单点登录

    本人从事互联网项目java开发五年,会java,微信公共号开发,python,nodejs,爬虫等技术,对发票项目很熟悉,如果想交一个朋友请加QQ技术交流群@群主吧:131831533 .本文章来源于 ...

  6. 微信公共号开发教程java版——获取用户基本信息(UnionID机制)(七)

    一:UnionID机制说明 官网详细介绍:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839 获取用户基本信息( ...

  7. 微信公共号消息推送给你心爱的她/他-Python3版本

    最近某音比较火的微信公共号消息推送教学来啦~ Python3代码编写,代码极度简单 第一步: 1.打开[https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t ...

  8. 跟我一起做微信开发(一)——开通微信公共号(开发模式)

    做微信开发,首先得有个微信公共号! 公共号注册地址:https://mp.weixin.qq.com/cgi-bin/readtemplate?t=register/step1_tmpl&la ...

  9. 微信推广平台上线:微信公共号可以靠广告赚钱啦

    微信公共号可以赚钱啦!任何企业或个人的公众账号,只要粉丝超过500人,都可以成为广告主. 这个微信推广平台目前仍处于内测阶段,或将于下周公开上线.该平台由微信和广点通团队联合开发,是微信公众平台官方唯 ...

最新文章

  1. ALGO-185 Trash Removal
  2. wow服务器已满 队列位置5,《魔兽世界》前夕版本中“碧空之歌”排队人数近万,有必要排吗?...
  3. 剑指offer之分行从上到下之字行打印二叉树
  4. Arduino学习笔记24
  5. 信息学奥赛C++语言:时间转换
  6. 4.4 一个完整的Google Maps应用
  7. 2017.4.2 loli测试
  8. xp无法使用计算机管理员权限,xp无法无法使用管理员权限运行软件的解决步骤...
  9. python爬虫之------每天给她(他)一个小故事啦啦啦啦
  10. HDFS 纠删码 EC
  11. 使用jclasslib修改字节码/源码
  12. java个人网站源码下载_创建一个基于JAVA的个人网站(有源码也行)
  13. aspen稳态导出动态_Aspen Dynamics在控制中的应用
  14. 如何批量修改文件夹名称中的某个字?
  15. android 自定义view画虚线长方形
  16. My Fifty-First Page - 组合总和 - By Nicolas
  17. spring扫描出现Annotation-specified bean name 'userService' for bean class [com.test.service.UserService]
  18. GitHub 的 Pull Request 是指什么意思?
  19. {__ob__: Observer }的解决方式
  20. 快速安装visual studio 2005 sp1补丁(转载)

热门文章

  1. VNCServer 配置
  2. 基于css3的鼠标滑动按钮动画之CSS--续
  3. DNS(三)--子域授权和视图
  4. 解决iPhone网络软件在睡眠情况断线问题
  5. Akka2使用探索3(Duration 和 Deadline)
  6. 持续集成、持续交付(CI/CD)开篇,先来唠唠嗑
  7. 分布式/微服务必配APM系统,SkyWalking让你不迷路
  8. 如何使用 C# 中的 Lazy
  9. Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
  10. 探讨NET Core数据进行3DES加密或解密弱密钥问题