一、下载Bot Framework的SDK
首先,下载Bot Framework的SDK,建议下载Bot Framework的Visual Studio的模板Bot Application。
下载下来的模板(不用解压)请直接放置到C:\Users\你的用户名\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C# 下面,这样你在C#下面就可以看到有Bot Application的模板了。
二、创建Bot的应用
点击创建,然后直接发布Publish。
发布到本地IIS上,配置个端口,如20080
三、使用ngrok工具,将本地的站点暴露外网中
因为在注册bot时候是必须得要外网https的链接,所以我们先要将BotTest投到外网上。有外网有ssl证书(自签的不可以)可以忽略这步
1.首先访问官网,https://ngrok.com/ 注册一个账号(注册后才能获取自己的一个账号秘钥用于进行后面的绑定操作)。
2.注册完成后,在跳转后的页面不用理会支付模块,可以看到自己的秘钥信息以及一个下载链接
3.点击下载链接,下载ngrok(开始下载后,可以点击浏览器返回到之前有秘钥信息的页面,页面暂时不要关闭,后面还有用),下载完成后可以看到压缩包里只有一个.exe文件。提示下千万不要习惯性的以为解压到当前文件夹,然后双击.exe文件哦。正确的操作是解压的时候选择 解压到 ngrok 这个选项。然后将解压生成的文件夹直接放到自己想放的地方,例如我直接放到D:\ngrok目录下。
打开cmd
输入d: 回车
输入cd: ngrok
输入注册完成后给到的Install your authtoken
最后设置对应的端口号,如20080 ngrok http 20080
然后就完成了操作
四、在Bot Framework网站上注册应用
注册时需要有一个微软的帐号来登录,然后同意授权。在界面中点击Register a bot开始注册:
"Name":你的bot的名字。
"Bot Handle":其实就是你的Bot的id。
"Description":你的Bot的描述,会在你的publish之后主页上显示。
endpoint,就是你后台服务的地址:https://你的服务器地址/api/messages (刚才咱们发布的template的默认接口)
你需要点击"Create Microsoft App ID and password",创建App ID和Password(注意,切记把这个app password记下来,只显示一次)
下面的必填的一些选项随便填一下就可以了。
点击保存。
更新程序的webconfig
点击Channels 下Get bot embed codes
将得到的code 替换进default.htm的body里
访问该页面:
到此,机器人部分完成。
由于ngrok产生的网址过了一段时间或者没有使用就会失效,需要重新产生,再配置到bot中
五、LUIS服务
请先登录:https://www.luis.ai/ ,这是语言理解服务的portal。如果还没注册的话用live id注册以下就可以了。
咱们先点击"new App"新建一个app。
新建完成后,点击"Edit",编辑这个应用。
我们先看以下左边的tab,可以看到有Intents,Entities,Pre-built Entities。。。。
Intents:就是意图,比如咱们现在要提供图书查询的服务,那么咱们就创建一个"查询图书"的Intent。
Entities:实例,比如在查询图书的时候需要有书名,出版社,价格等信息,需要把用户的语言里头的这些信息提取出来,这些就是这个句子里头的实例,咱们创建一个"图书"的实例。
Pre-built Entities:这个是预置好的实例,比如说时间,数字等等,我加了一个datetime的预置实例。
Regex Features:正则表达式,可以匹配出相应的一些字段,比如说航班号。
Phrase List Features:固定的一些短语,能够直接识别,比如说航空公司的名字等已知信息
建立问题,并可以将书名标注为图书,然后点击submit
之后点击左下角的Train
训练完成后点击Publish
在Bot中集成LUIS服务,这块可以参考佘泽鹏的博客。我略微做了些调整,但原理是一样的。
六、使用botframework-emulator 工具
该工具可以到https://emulator.botframework.com/ 下载。
通过该工具,可以进行代码调试并且绕开第四步在Bot Framework网站上注册应用。不过必须把MessagesController上的 [BotAuthentication] 先注销掉。
下载打开,先要进行app setting。配置本地的ngrok路径即可。
然后输入本地路径链接就可以进行操作了。
在右边工具也自动记录下来了日志。有异常时,可以在Details这块查看具体信息。
七、使用Http Request来请求
获得Bot Framework 返回在http://www.cnblogs.com/sonic1abc/p/5941442.html 里有详细的介绍了。
另外如果既没有https也不想通过代理的话也可以绕过Bot Framework直接请求Luis,对Luis的返回数据再进行自定义的处理:
System.Net.WebRequest wrq = System.Net.WebRequest.Create(uri);
wrq.Headers.Add("Ocp-Apim-Subscription-Key", luis_Key);
wrq.Method = "GET";
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; //SSL3协议替换成TLS协议
System.NetWebResponse wrp = wrq.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(wrp.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"));
strResult = sr.ReadToEnd();
Lusi ro = JsonHelper.JsonDeserialize<Lusi>(strResult);
反序列化后得到的信息和Luis官网请求得到的结果形式一样。
将处理好的信息之后,再调用微信的api接口返回,既可以完成微信上面的人工智能了。
public class MessageBiz : BaseBiz
{
public SendResponse Send<T>(T request)
{
string strJson = JsonConvert.SerializeObject(request);
//_SendLog.WriteLog("new: " + strJson);
base.url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + TokenBiz.GetAccessToken(str_corpid, str_corpsecret);
base.para = strJson;
base.method = "POST";
base.needAccessToken = true;
var res = base.GetUrlReturn<SendResponse>();
return res;
}
}
因为我是企业号,所以调用的企业号服务,接口说明可以参见:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E。公众号道理还是一样的,换公众号接口另外实现而已。
最后来简单看下效果截图。
参考资料:
http://www.cnblogs.com/rocsheh/p/5846009.html
http://blog.csdn.net/xxdddail/article/details/51190754
http://blog.csdn.net/gebitan505/article/details/39497779
http://www.cnblogs.com/sonic1abc/p/5941442.html