Office 365 机器人(Bot)开发入门
作者:陈希章 发表于 2017年7月29日
前言
作为人工智能技术的一个主要的表现形式,这些年机器人(bot)的应用越来越广泛。不管是有实物的,还是纯软件的,现在的机器人技术应该说已经走入寻常百姓家了。这一篇文章探讨的是,在微软提供的Bot Framework基础上快速开发和部署一个软件的机器人,并且将其与 Office 365 或其他应用无缝地整合起来,为用户带来全新的基于会话的人机交互体验。
基本概念
本文会用一个实例带领大家入门,如下的几个基本概念稍作说明
- Bot Framework —— 这是微软提供的一整套工具和服务的集合,它的访问地址是 https://dev.botframework.com 。它主要包括了
- Bot注册和管理、运行服务
- 多种开发模板和SDK(Bot Builder SDK)以及在线的开发和部署服务(Azure Bot Service)
- 用于调试的模拟器 (Bot Framework Emulator)
- 在线的应用商店(Bot Directory)
- Bot —— 这是我们最终开发出来的一个逻辑上的对象,它主要包含了一组API代码,一个描述文件。
- Channel —— 上面提到过了,我们开发出来的机器人(Bot)是一个逻辑上的对象,真正与用户交互的,必须要有一个合适的界面,这些界面,如果能跟用户最常用的应用程序整合在一起,则可能是一种更加好的体验。Bot Framework的设计理念是让Bot一次编写,处处能运行,它通过所谓的Bot connector service来连接不同的用户界面。这些用来使用我们Bot的应用程序,我们称之为Channel。目前已经有十几个Channel是受支持的。详情请见:https://docs.microsoft.com/en-us/bot-framework/portal-configure-channels.
截至本文发稿,我发现Bot Directory这个服务已经不再接受新的提交了,现在的政策改为Bing Channel来提供服务。
注册一个Bot
要进行Bot开发,你首先需要在Bot Framework中进行注册。你可以使用个人账号(Microsoft Account)和工作账号(Office 365账号)登陆 https://dev.botframework.com,然后选择“My bots”,进行如下操作完成注册。
在下面这个页面中,Bot handle是你的bot的标识符,不能包含空格,请保存这个名字,后续会用到。另外,Messaging endpoint此时可以不填。最关键就是要点击“Create Microsoft App ID and password”,并且请保存返回的AppID和Password信息,后续会用到。
使用Visual Studio 模板进行快速开发
目前Bot Framework支持四种开发方式 —— .NET、NodeJS、Azure Bot Service(preview)、REST. 基于.NET的开发是在Visual Studio 2017中进行,基于NodeJS的开发则一般在Visual Studio Code完成,后面两种则无需特定的编辑器,在线或者通过文本编辑器即可。
限于篇幅,我不会逐个展开,本文的案例将基于Visual Studio 2017和C#来进行演示,而且为了快速进行开发,我们将采用官方提供的模板来进行开发。请下载下面三个模板
- Bot Application,请将这个zip文件放在%USERPROFILE%\Documents\Visual Studio 2017\Templates\ProjectTemplates\Visual C#\下面
- Bot Controller,请将这个zip文件放在%USERPROFILE%\Documents\Visual Studio 2017\Templates\ItemTemplates\Visual C#\ 下面
- Bot Dialog,请将这个zip文件放在%USERPROFILE%\Documents\Visual Studio 2017\Templates\ItemTemplates\Visual C#\下面
完成上面的操作后,重新打开Visual Studio 2017,我们可以在新建项目的时候看到下面的模板
通过模板创建出来的项目,其实是一个标准的ASP.NET Web API项目,其中最关键的两个代码文件如下
为了帮助大家快速入门,我在这里暂时不解释代码结构,也不去做任何修改。你现在需要做的是,在web.config中将Bot注册时我提醒你保存的三个信息填写进去。我的例子信息如下:
<appSettings>
<!-- update these with your BotId, Microsoft App Id and your Microsoft App Password-->
<add key="BotId" value="codemonkeybot" />
<add key="MicrosoftAppId" value="89403745-7fe4-453a-ae0a-e53caf84866b" />
<add key="MicrosoftAppPassword" value="7LLQHqUYYWU72dY3c6OvBG4" />
</appSettings>
完成这些之后,你就可以按下F5键进行调试了,如果不出意外的话,你将看到浏览器被打开并显示如下的页面
那么,这有什么用呢?目前来说,确实还看不出有什么用。因为现在来说,我们还只是构建了Bot中的服务部分,并没有将其与对应的Channel连接起来,所以也就没有用户界面来进行调用它。
事实上我们还不要那么着急,在真正去跟Channel绑定之前,建议在本地进行测试和调试。为此,Bot Framework中很贴心地为开发人员准备了一个模拟器,下一节我将介绍如何使用它。
使用Bot Framework 模拟器进行本地测试
首先,你需要通过https://github.com/Microsoft/BotFramework-Emulator/releases 下载和安装最新版本的模拟器。
值得注意的是,这个模拟器可以在PC,Mac上面运行。
打开模拟器,并且输入服务地址,和应用ID及密钥后,点击“Connnect”按钮
确保在右侧的"Log"中看到的返回信息是 “-> POST 200 [conversationUpdate] ”,这个就表示连接成功了。然后我们在左下角的文本框,可以随便输入一些文字,点击回车后模拟器会将信息包装起来,发送给后台服务,正常情况下我们会很快看到Bot的回复文本。我的范例如下
在这个标准模板中,机器人(Bot)只是很简单地将用户发送过来的指令原封不动地返回给用户,并没有做任何实质性的工作。但其实,这已经是一个很好的起点了,我们至少确保机器人正确地收到了指令,至于如何根据这些指令进行响应,可以在下一步来完善。
通过Bot Framework模拟器进行本地测试和调试的好处是,可以直接在Visual Studio中设置断点,一步一步地调试,便于发现和解决问题。
将Bot应用部署到Azure App Service
在完成本地的开发和测试后,下一步是需要将我们开发好的API Service发布到一个合适的生产环境,以便其他用户能够访问到这个服务。这个API Service是一个标准的ASP.NET项目,你可以自行选择合适的托管环境,只要有IIS并且支持.NET Framework 4.6的Windows Server就可以。我这里演示的是,如何将这个应用部署到Azure 的App Service中,这是Azure 提供的PaaS服务,它可以将很多运行环境的细节隐藏掉,开发人员不需要关注操作系统和IIS怎么安装,负载均衡怎么做等基础性工作,而是将全部精力集中在应用开发上面。关于Azure App Service的更多细节,已经超出了本文的范畴,有兴趣的朋友可以直接参考 https://azure.microsoft.com/en-us/services/app-service/.
在App Service的Overview页面中,点击”Get publish profile“
在Visual Studio中,停止调试,然后选中项目,在右键菜单中选择“Publish”,在属性页面中,选择“Import Profile”
Visual Studio会自动对项目进行编译并且完成第一次发布,如果一切顺利的话,你将很快看到一个新打开的浏览器窗口
请注意浏览器中的地址http://codemonkeybot.azurewebsites.net/,你可以换成 https://codemonkeybot.azurewebsites.net/ 也是能正常工作的,这其实是Azure App Service的一个福利,所有部署到App Service的应用,都默认拥有https访问的功能,不需要自己去申请证书。要知道,在生产环境使用Bot的时候,我们是强烈推荐https的。
看起来跟本地也没有什么不一样,对吗?这不是重点。我们接下来要完成一系列的配置,使这个Bot真的能在一些常见的Channel中运行起来。
使用Azure App Service,你可以专注应用开发,在Visual Studio中做了代码修改之后,只需要再次发布即可。
与Microsoft Teams进行集成
我们前面完成了几个关键步骤,包括Bot注册,Bot应用开发和发布,接下来是时候让它实际地为我们的用户进行服务了。
首先,我们需要修改Bot的注册信息,让它使用我们上面提到的Azure App Service来提供服务。
保存设置后,你可以在当前页面完成测试,确保其能正常工作
现在,万事俱备,只欠东风了。我需要隆重给大家介绍Office 365家族中的新成员——Microsoft Teams。它是一款全新的以聊天为基础的协作沟通工具,整合了Office 365的很多服务,并且作为Office 365的一站式前端应用为用户提供了聊天,团队和项目协作,会议等功能。
Microsoft Teams既提供了桌面端应用,网页应用,也提供了移动端应用,关于它的更多细节,请有兴趣的朋友参考 https://teams.microsoft.com。
接下来我们重点来看一下,如何将此前配置好的Bot与Teams连接起来,让Teams的用户可以愉快地跟它对话起来。
在Bot的设置页面,点击“CHANNELS”按钮,可以看到默认情况下连接好了两个Channel,一个是Skype(这是针对个人的一个即时通讯服务,由微软提供),另外一个是Web Chat,这是支持在任意的网页应用程序中,通过iframe的方式嵌入这个Bot,相当实用。
接下来我们要做的是,在下方“Add a channel”的列表中选择“Microsoft Teams”的图标,将其加入当前这个Bot的Channel中来。
完成配置后,在新的Channel列表中点击“Microsoft Teams” 这个链接
它会要求打开Microsoft Teams客户端,并且会自动将这个Bot添加到你的联系人列表中来。
如果你想邀请你的同事也添加这个Bot进行测试,那么你需要做的是将注册Bot时获得的App Id(通常是一个GUID字符串,例如我的Code Monkey的ID是 89403745-7fe4-453a-ae0a-e53caf84866b,欢迎大家添加 )提供给他(她),然后他们可以在Microsoft Teams中通过这个ID找到你的Bot,将其添加为好友后即可开始聊天了。
使用ID来搜索当然不会是很友好的一个体验,如果你希望将你的Bot让更多的人使用到,而且希望直接用Bot的名字来搜索到,这个过程可能略微复杂一些,请参考 https://msdn.microsoft.com/en-us/microsoft-teams/submission 了解详细信息。
另外,作为Office 365用户而言,大家可能对 Skype for Business 也是很熟悉的。Bot Framework目前也支持Skype for Business的整合,这个操作需要Office 365管理员才能完成,具体操作细节请参考 https://msdn.microsoft.com/en-us/skype/skype-for-business-bot-framework/docs/overview
扩展开发提示
看起来还不错,不是吗?现在开发一个机器人,真的不再是一件非常难的事情,我并不是说你通过这篇文章就能开发出来很酷的机器人,但至少你能快速开始,并且你可以看到Bot Framework已经帮助我们将基础架构做得非常完善了,你唯一需要去花心思的是,具体你的这个机器人要提供什么服务,以及以什么样的交互形式提供等等。这些内容跟具体的业务场景有关,显然超出了本文的范畴,但我这里很乐意给大家提供一些思路和参考链接。
- Bot开发的一些原则 https://docs.microsoft.com/en-us/bot-framework/bot-design-principles
- 为Bot添加更多智慧,如何跟微软认知服务整合 https://docs.microsoft.com/en-us/bot-framework/cognitive-services-bot-intelligence-overview
- 如何设计交互和会话流 https://docs.microsoft.com/en-us/bot-framework/bot-design-conversation-flow
结语
本文通过一个实例介绍了基于Bot Framework的 Office 365 机器人开发流程,在人工智能的大背景下,这是一个很好的机遇:一方面可以为Office 365用户带来全新的基于对话的体验,另外最重要的是业务应用可以更加自然地与Office 365这样的平台实现融合,结合微软的认知服务则可以将机器人的智慧水平提升到一个新的高度,这些创新(虽然说还有改进空间)是看得见的生产力,也将对我们日后的人机交互形式产生深远的影响。
Office 365 机器人(Bot)开发入门的更多相关文章
- Office 365 机器人(Bot)开发入门指南 (新篇)
最近在整理书稿时,发现我在2017年7月份写的这篇 Office 365 机器人(Bot)开发入门 的内容,因为相关平台的升级,已经完全不能体现当前的开发过程,所以我再专门写一篇新的开发入门指南给有兴 ...
- [ Office 365 开发系列 ] 开发模式分析
前言 本文完全原创,转载请说明出处,希望对大家有用. 在正式开发Office 365应用前,我们先了解一下Office 365的开发模式,根据不同的应用场景,我们选择最适合的开发模式. 阅读目录 Of ...
- Office 365 应用开发的 .NET Core 模板库
概述 前不久我写过一篇文章拥抱开源,Office 365开发迎来新时代,给大家介绍了Office 365开发的典型场景是如何支持开源平台的:Office 365通过Microsoft Graph,以R ...
- 人工智能背景下的Office 365现状和发展趋势
作者:陈希章 发表于 2017年7月31日 引子 谈论人工智能是让人兴奋的,因为它具有让人兴奋的两大特征 -- 每个人都似乎知道一点并且以知道一点为荣,但又好像没多少人能真正讲的明白.毫无疑问,我也仅 ...
- Office 365平台及其价值主张
重要提示:<Office 365开发入门指南>视频教程还没有上架,目前会先公开几个小节的文字版本,让大家先睹为快,请大家转发给感兴趣的朋友,敬请留意课程的正式上架和优惠券发放通知. 从今天 ...
- 《Office 365开发入门指南》上市说明和读者服务
写在最开始的话 拙作<Office 365开发入门指南>上周开始已经正式在各大书店.在线商城上市,欢迎对Office 365的开发.生态感兴趣的开发者.项目经理.产品经理参考本书,全面了解 ...
- 《Office 365开发入门指南教程》正式上线,限时优惠和邀请分享推广
我很高兴地通知大家,<Office 365 开发入门指南教程>已经正式在网易云课堂上线,你可以通过直接访问 https://aka.ms/office365devlesson 这个短地址 ...
- 所有人都可以是开发人员——《Office 365开发入门指南》视频教程即将上市
今天是春节假期的最后一天,在这里给全国的朋友们拜个晚年,祝大家身体健康,晚年幸福啊.这个春节大家过的怎么样啊,我自己是在老家过的年,家乡的年味还是比较浓的,也再次感谢朋友圈的大家给我看了各地的风光 ...
- Office 365 开发入门
<Office 365 开发入门指南>公开邀请试读,欢迎反馈 终于等来了这一天,可以为我的这本新书画上一个句号.我记得是在今年的2月份从西雅图回来之后,就萌发了要为中国的Office 36 ...
随机推荐
- kickstart 实现批量安装centos7.x系统
1.1 安装系统的方法 l 光盘(ISO文件,光盘的镜像文件)===>>每一台物理机都得给一个光驱,如果用外置光驱的话,是不是每台机器都需要插一下 l U盘:ISO镜像刻录到U盘==& ...
- 修改 Sublime 按快捷键 ctrl+s 自动格式化(reindent lines)的问题
Sublime 工具自带代码格式化的功能,但在某些场景下格式化代码后并不是我们想要的代码格式,且是点击保存ctrl+s才触发的格式代码事件,so,为关闭点击ctrl+s格式代码,我们需要改命令 sav ...
- 一致性hash算法以及其在分布式系统中的应用(转)
初始架构
- (五)solr7.1.0之solrJ的使用
(五)solr7.1.0之solrJ的使用 下面是solr7的官网API介绍: 网页翻译的不是很准确,只能了解个大概,基本能获取如下信息: 一.构建和运行SolrJ应用程序 对于用Maven构建的项目 ...
- 基于FPGA的有限状态机浅析
前言:状态机大法好,状态机几乎可以实现一切时序逻辑电路. 有限状态机(Finite State Machine, FSM),根据状态机的输出是否与输入有关,可分为Moore型状态机和Mealy型状态机 ...
- 使用vue2.x+webpack+vuex+sass+axios+elementUI等快速搭建前端项目框架
一.本文将分享如何快速搭起基于webpack+vue的前端项目框架,利用vue的自己的脚手架工具vue-cli搭建起基本的环境配置,再通过npm包管理工具引入相应的依赖来完善项目的各种依赖框架.下面是 ...
- 深入浅出多线程——ReentrantLock (一)
ReentrantLock是一个排它重入锁,与synchronized关键字语意类似,但比其功能更为强大.该类位于java.util.concurrent.locks包下,是Lock接口的实现类.基本 ...
- 关于SpringBoot bean无法注入的问题(与文件包位置有关)改变自动扫描的包
原因:同事在写demo时出现bean加了@component后却无法被spring扫描到(在编译的时候IDEA就提示拿不到对应的bean)的问题. 后来经过研究是跟文件包的位置有关的. springb ...
- 【Centos】解决设置JAVA_HOME不断失效问题
问题还原: 我们都知道,要修改centos的全局配置,可以在/etc/profile这个文件里面修改,比如,我需要修改JAVA_HOME变量 ,那么一般来说我们只要在其中修改,source 一下就行了 ...
- c语言的数组
1. 数组的基本概念 一个int类型的变量能保存一个人的年龄,如果想保存整个班的年龄呢? 1. 什么是数组 数组,从字面上看,就是一组数据的意思,没错,数组就是用来存储一组数据的 2. 数组的特点 ● ...