【Azure 机器人】微软Azure Bot 编辑器系列(2) : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人。
在该系列文章中,每一篇都将通过添加更多的功能来构建机器人。当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather Bot)。在本系列中将学会以下内容:
2)在机器人中提出问题,并获取从HTTP API获取响应
3)在机器人中增加帮助提示和取消功能
4)使用语言生成功能(LG: Language Generation)
5)把机器人的回复转换为卡片
6)添加LUIS功能,理解自然语言
准备条件
- 完成系列一种的简单对话机器人创建(https://www.cnblogs.com/lulight/p/14891002.html)
- 准备天气的API接口的Token(Open Weather: https://openweathermap.org/)
添加机器人提问
在机器人能获取天气之前,它需要知道请求天气的具体位置。为此,需要先创建一个文本输入操作来提示用户数据邮政编码(Postal Code),然后机器人根据它从Weather API中获取对应的天气数据。
第一步:启动编辑器(Bot Composer) 并打开 weather_bot项目
第二步:在“getWeather”对话中选中“BeginDialog”开始事件,点击“+”号按钮,添加一个 Ask a question(提问) --> Text(文本) 任务。
“提问文本”任务创建完成后,主界面中会多出三个节点,第一个节点是机器人提出问题,第二个节点的内容为用户输入的邮政编码. 第三个为其他:
- Bot response:指机器人发出询问用户信息的提示
- 用户输入:存储用户输入的内容,机器人可以使用这一值进行进一步的处理
- 其他:验证用户输入,在输入无效时回复验证消息
第三步:在Bot response部分,在文本属性中输入问题文本(点击‘Add alternative’ 分两次输入下面的内容)
What's your postal code?
请输入邮政编码?
第四步:在用户输入部分,在"Property"中输入“ user.postalcode ”。这将把用户输入的邮政编码保存在user.postalcode属性中
第五步:在用户输入部分,在“Output format”中输入“ =trim(this.value) ”。函数trim()是Bot的默认方法,用于把用户输入值的的多用空格去除(前后空格)。
注:用户第一次输入邮政编码后,机器人不会再次提示输入值。 如果希望机器人每一次都询问新的邮政编码,则在“其他”选项卡中,必须将“Always prompt”设置为 true。
请查看添加提问的演示动画:
添加输入验证规则
验证规则:用户输入的邮政编码长度必须大于5或者6个字符。如果输入短于5个或者长于6个,机器人都会发送错误消息。此消息在“Invalid prompt”字段中设定
第一步:接上一节操作,选中“其他”选项卡。这里指定验证规则,并根据规则设定消息提示。
第二步:展开“识别器”部分,在“Unrecognized prompt”中输入下面的内容
Sorry, I do not understand '${this.value}'. Please specify a 5 or 6 digit postal code in the format 123456. 输入有误,请输入5位,或者六位的邮政编码!
第三步:展开“验证”部分,在“验证规则”中输入规则 length(this.value) == 5 || length(this.value) == 6
第四步:在“Invalid prompt”部分,点击“Add alternative”。输入下面的文本
Sorry, '${this.value}' is not valid. I'm looking for a 5 or 6 digit number as postal code.
对不起,输入的内容'${this.value}' 不是有效的邮政编码,请输入5位或者6位编码。
第五步:展开“提示配置”部分,在"Default value Response"中可以输入默认值。
注:默认情况下,提示配置为向用户询问3次后(在 Max turn count 字段中指定,默认为 3)提示将停止,并且在继续对话之前,该属性将设置为默认值字段中定义的值。
请查看添加验证的演示动画:
现在,机器人已经将用户输入的邮政编码存放在user.postalcode 属性中。 接下来,将在 HTTP 请求中将该属性的值传递给天气服务API。
[重要] 添加HTTP请求
在开始之前,需要把调用天气API的信息准备好。OpenWeather 站点中注册完成后,可以在用户的API Keys信息中获取到能够访问API的Token。当前的完整URL为:
GET http://api.openweathermap.org/data/2.5/weather?zip=${user.postalcode},us&appid=f8b74e2161e8a98afa3fdc8233b74adb
- appid= Your_API_Token . 如果需要实验,可以使用以上的Token,但是该token有效期无法保证。
- zip=${user.postalcode}表示输入的内容为邮政编码
- us 表示地区是美国,CN表示中国。但是由于中国区的邮政编码在openweathermap中没有包含。所以无法通过邮编获取。如果有兴趣的可以自己使用城市名来查看天气情况。使用城市名的接口如:
GET http://api.openweathermap.org/data/2.5/weather?q=ChengDu&appid=f8b74e2161e8a98afa3fdc8233b74adb
Response Body: {"coord":{"lon":-122.088,"lat":37.3855},
"weather":[{"id":721,"main":"Haze","description":"haze","icon":"50d"}],
"base":"stations","main":{"temp":291.68,"feels_like":291.39,"temp_min":284.81,"temp_max":297.16,"pressure":1007,"humidity":69},
"visibility":9656,"wind":{"speed":2.06,"deg":290},"clouds":{"all":1},"dt":1624026023,
"sys":{"type":2,"id":2010364,"country":"US","sunrise":1624020446,"sunset":1624073504},
"timezone":-25200,"id":0,"name":"Mountain View","cod":200}
第一步:在“getWeather”的对话中,选择编辑区中最下面的“+”按钮,添加一个“访问外部资源”-->“发送HTTP请求”
第二步:在HTTP的属性中,设置请求方式为GET. 请求的URL为 http://api.openweathermap.org/data/2.5/weather?zip=${user.postalcode},us&appid=Your_API_Token (注:Token需替换), ${user.postalcode}为参数占位符,在机器人运行时根据输入自动替换。
第三步:在“Result Property”中,输入 dialog.api_response 。 Response的数据类型为"json"
第四步:在HTTP请求发送后,需要根据API的返回做下一步的操作,当请求返回200(成功)或者是其他状态(失败),使用if/else模块来完成逻辑判断
第五步:在“分支 If/Else” 的 “Condition” 中输入 ”= dialog.api_response.statusCode == 200“表达式。注意必须要在语句前有”=“号表达式。
第六步:在“分支 If/Else” 的 ”True“ 部分,点击“+”按钮,添加“管理属性 --> 设置属性”。然后添加下列属性 (注:如在添加属性时,无法添加多个属性值,可以修改编辑器的语言版本为英文后,重新加载试一试)
Property |
Value |
dialog.weather | =dialog.api_response.content.weather[0].description |
dialog.icon | =dialog.api_response.content.weather[0].icon |
dialog.city | =dialog.api_response.content.name |
dialog.country | =dialog.api_response.content.sys.country |
dialog.kelvin | =dialog.api_response.content.main.temp |
dialog.fahrenheit | =round((9/5 * (dialog.kelvin-273)) + 32,0) |
dialog.celsius | =round(dialog.kelvin-273.15) |
第七步:在“True”的分支中,继续点击“+”按钮,添加一个“发送响应”任务。在响应中回复如下内容:
The weather is ${dialog.fahrenheit}F or ${dialog.celsius}C and ${dialog.weather} 当前地区的温度为${dialog.celsius}C, ${dialog.weather}
第八步:当HTTP请求返回失败时,在False的分支中也需要设定回复消息。点击“+”按钮,同样选择“发送响应”任务。在响应中回复如下内容:
I got an error: ${dialog.api_response.content.message}. 调用天气接口失败,错误消息: ${dialog.api_response.content.message}.
注:由于调用API失败的情况应为用户输入的邮政编码无效,为了保证数据的有效性,需要在False分支中删除错误的user.postalcode属性。继续点击“+”按钮,在“管理属性”下选择“删除属性”任务。输入需要删除的属性值:user.postalcode
以上步骤,就完成了机器人的问答,获取API数据并提供响应的整个功能。在测试机器人环节中验证是否正常工作。
请查看添加HTTP请求的演示动画:
测试机器人
第一步:在编辑器的右上角点击 “Start Bot”按钮,启动机器人
第二步:启动后,会弹出一个“Local bot runtime manager”的窗口,选择“Open Web Chat”,打开一个页面聊天窗口
第三步:在对话框中输入“weather” 或者“天气”来触发机器人的对话
第四步:输入邮编“94040”查看机器人的正常返回,
第五步:再次输入“weather” 或者“天气”来触发机器人的对话,输入错误的内容
在下一篇中将演示:在机器人中增加帮助提示和取消功能
(以上内容均是参考微软官方的机器人文档进行的中文操作步骤,原文连接见参考资料)
参考资料
Tutorial: Add actions to your dialog:https://docs.microsoft.com/en-us/composer/tutorial/tutorial-get-weather?tabs=v2x
Current weather data:https://openweathermap.org/current
[完]
【Azure 机器人】微软Azure Bot 编辑器系列(2) : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorials)的更多相关文章
- 【Azure 机器人】微软Azure Bot 编辑器系列(1) : 创建一个天气对话机器人(The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...
- 【Azure 机器人】微软Azure Bot 编辑器系列(5) : 机器人的卡片式回复 (The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...
- 【Azure 机器人】微软Azure Bot 编辑器系列(6) : 添加LUIS,理解自然语言 (The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...
- 【Azure 机器人】微软Azure Bot 编辑器系列(3) : 机器人对话流中加入帮助和取消按钮功能 (The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...
- 【Azure 机器人】微软Azure Bot 编辑器系列(4) : 使用语言生成功能[LG: Language Generation] (The Bot Framework Composer tutorials)
欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...
- 通过Azure bot framework composer 设计一个AI对话机器人bot(查询天气)
本文介绍通过机器人框架设计器 (Bot framework composer)接近拖拉拽的方式设计一个聊天机器人,该聊天机器人的主要功能是发起http请求查询天气.当然,稍微变通下,可以用来查询几乎任 ...
- (视频) 《快速创建网站》1. 网站管理平台WordPress & 微软Azure 云计算简介
网站并不神秘,过节了,在家闲的没事的,自己建个网站玩玩吧.每段视频不超过15分钟,地铁/公交/睡前/醒来看一段,几天之后变身建站专家,找老板加薪去! 在普通人眼里,创建网站是专业开发人员和IT工程师才 ...
- 免费电子书:微软Azure基础之Azure Automation
(此文章同时发表在本人微信公众号"dotNET每日精华文章") Azure Automation是Azure内置的一项自动化运维基础功能,微软为了让大家更快上手使用这项功能,特意推 ...
- Azure Messaging-ServiceBus Messaging消息队列技术系列4-复杂对象消息是否需要支持序列化和消息持久化
在上一篇中,我们介绍了消息的顺序收发保证: Azure Messaging-ServiceBus Messaging消息队列技术系列3-消息顺序保证 在本文中我们主要介绍下复杂对象消息是否需要支持序列 ...
随机推荐
- SpringBoot配置切换
切换需求 有时候在本地测试是使用8080端口,可是上线使用的又是80端口. 此时就可以通过多配置文件实现多配置支持与灵活切换. 多配置文件 3个配置文件: 核心配置文件:application.pro ...
- 【c#】 使用Directory.GetFiles获取局域网中任意电脑指定文件夹下的文件
本文为老魏原创,如需转载请留言 格式如下: // 获取IP地址为10.172.10.167下D盘下railway下的所有文件 string[] picArray = Directory.GetFile ...
- mysql.data.entityframeworkcore 已弃用
转官网有方案: https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework-core.html General R ...
- 23.Quick QML-简单且好看的图片浏览器-支持多个图片浏览、缩放、旋转、滑轮切换图片
之前我们已经学习了Image.Layout布局.MouseArea.Button.GroupBox.FileDialog等控件. 所以本章综合之前的每章的知识点,来做一个图片浏览器,使用的Qt版本为Q ...
- Django(26)HttpResponse对象和JsonResponse对象
HttpResponse对象 Django服务器接收到客户端发送过来的请求后,会将提交上来的这些数据封装成一个HttpRequest对象传给视图函数.那么视图函数在处理完相关的逻辑后,也需要返回一个响 ...
- Linux下的ARP攻击-断网
1.软件工具安装 1. nmap --网络嗅探工具 2. dsniff ( arpspoof ) --ARP嗅探工具 3. net-tools ( ifconfig ) --网络工具 sudo ...
- 移动应用开发 第5讲 Activity课堂综合练习
作业总要求使用附件"素材"压缩包中的素材完成下列任务: 1.完成小游戏主程序,如图mainActivity.png. 2.在主程序界面当按下游戏介绍按钮时进行游戏介绍界面如图gam ...
- [C] gcc
概述 GNU C Compiler 流程 预处理,生成.i文件(中间文件,看不到) 编译,生成.s文件(中间文件,看不到) 汇编,生成.o文件 链接,生成可执行文件 参数 -E:预处理 -S:预处理, ...
- Nginx——Docker下安装部署
前言 Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务 . 一. 环境说明 docker: 18.09.9-ce nginx: 1.1 ...
- Ansible_变量管理与设置
一.Ansible变量管理 1.变量概述 Ansible支持利用变量来存储值,并在Ansible项目的所有文件中重复使用这些值.这可以简化项目的创建和维护,并减少错误的数量 通过变量,可以轻松地在An ...