【Azure 机器人】微软Azure Bot 编辑器系列(2) : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorials)

简介: 【Azure 机器人】微软Azure Bot 编辑器系列(2) : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorials)

欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人。

在该系列文章中,每一篇都将通过添加更多的功能来构建机器人。当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather Bot)。在本系列中将学会以下内容:

 

1)创建一个简单的对话天气机器人

2)在机器人中提出问题,并获取从HTTP API获取响应

3)在机器人中增加帮助提示和取消功能

4)使用语言生成功能(LG: Language Generation)

5)把机器人的回复转换为卡片

6)添加LUIS功能,理解自然语言

 

准备条件

 

添加机器人提问

在机器人能获取天气之前,它需要知道请求天气的具体位置。为此,需要先创建一个文本输入操作来提示用户数据邮政编码(Postal Code),然后机器人根据它从Weather API中获取对应的天气数据。

第一步:启动编辑器(Bot Composer) 并打开 weather_bot项目

第二步:在“getWeather”对话中选中“BeginDialog”开始事件,点击“+”号按钮,添加一个 Ask a question(提问) --> Text(文本) 任务。

提问文本”任务创建完成后,主界面中会多出三个节点,第一个节点是机器人提出问题,第二个节点的内容为用户输入的邮政编码. 第三个为其他:

  1. Bot response:指机器人发出询问用户信息的提示
  2. 用户输入:存储用户输入的内容,机器人可以使用这一值进行进一步的处理
  3. 其他:验证用户输入,在输入无效时回复验证消息

第三步:在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 datahttps://openweathermap.org/current

 

[完]

相关文章
|
2月前
|
JavaScript 前端开发 API
[译] 用 Vue 3 Composition API 实现 React Context/Provider 模式
[译] 用 Vue 3 Composition API 实现 React Context/Provider 模式
|
1月前
|
存储 API 数据库
如何使用 ef core 的 code first(fluent api)模式实现自定义类型转换器?
本文介绍了如何在 EF Core 的 Code First 模式下使用自定义类型转换器实现 JsonDocument 和 DateTime 类型到 SQLite 数据库的正确映射。通过自定义 ValueConverter,实现了数据类型的转换,并展示了完整的项目结构和代码实现,包括实体类定义、DbContext 配置、Repositories 仓储模式及数据库应用迁移(Migrations)操作。
54 6
如何使用 ef core 的 code first(fluent api)模式实现自定义类型转换器?
|
20天前
|
JSON 监控 安全
探索微服务架构中的API网关模式
【9月更文挑战第22天】在微服务架构的海洋中,API网关如同一位智慧的守门人,不仅管理着服务的进出,还维护着整个系统的秩序。本文将带你一探究竟,看看这位守门人是如何工作的,以及它为何成为现代云原生应用不可或缺的一部分。从流量控制到安全防护,再到服务聚合,我们将一起解锁API网关的秘密。
|
20天前
|
设计模式 Java API
Quarkus RESTful API性能揭秘:如何打造极速响应的应用程序?
在互联网高速发展的背景下,企业对应用性能的要求日益提升。Quarkus作为一款基于Java的开源框架,以出色的性能和简洁的设计模式成为开发者的首选。本文通过实例展示如何利用Quarkus构建响应迅速的RESTful API应用。首先创建Maven项目并配置Quarkus依赖,接着逐步实现用户管理系统的各个模块,包括实体类、数据访问层、服务层及资源层,最终完成一个高性能的RESTful API。通过Quarkus,开发者可以更高效地开发出轻量级且响应快速的应用程序。
35 1
|
2月前
|
API 网络架构
【Azure API 管理】如何修改Azure APIM的管理员邮箱和组织名称
【Azure API 管理】如何修改Azure APIM的管理员邮箱和组织名称
|
2月前
|
Web App开发 缓存 小程序
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
【Azure API 管理】从微信小程序访问APIM出现200空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
|
2月前
|
负载均衡 监控 JavaScript
探索微服务架构下的API网关模式
【8月更文挑战第31天】在微服务的大潮中,API网关不仅是流量的守门人,更是服务间通信的桥梁。本文将带你深入理解API网关的核心概念、设计要点及其在微服务架构中的重要作用,同时通过代码示例揭示如何利用API网关提升系统的灵活性与扩展性。
|
2月前
|
运维 API 开发工具
阿里云云效操作报错合集之在编辑器里api接口调用时,经常报错,是什么原因
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
5月前
|
传感器 人工智能 监控
智能耕耘机器人
智能耕耘机器人
112 3
|
2月前
|
人工智能 算法 机器人
机器人版的斯坦福小镇来了,专为具身智能研究打造
【8月更文挑战第12天】《GRUtopia:城市级具身智能仿真平台》新论文发布,介绍了一款由上海AI实验室主导的大规模3D城市模拟环境——GRUtopia。此平台包含十万级互动场景与大型语言模型驱动的NPC系统,旨在解决具身智能研究中的数据稀缺问题并提供全面的评估工具,为机器人技术的进步搭建重要桥梁。https://arxiv.org/pdf/2407.10943
189 60

热门文章

最新文章

  • 1
    配置Linux固定IP地址,为什么要固定IP,因为他是通DHCP服务获取的,DHCP服务每次重启都会重新获取一次ip,VMware编辑中有一个虚拟网络编辑器
    60
  • 2
    vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
    51
  • 3
    【微信小程序-原生开发】富文本编辑器 editor 的使用教程
    524
  • 4
    文本-----wangEditor的使用,设置和获取内容,展示HTML无样式怎么办????console同步展示怎样写,Vue的配置在Vue3配置文件中的配置,是editor中的v-model绑定的值
    263
  • 5
    content‘ is declared but its value is never read.富文本编辑器中这里必须的script中添加setup,引入到set当中时,带title的富文本写法
    46
  • 6
    先文章写在自己的富文本上,痛点,商业模式,支持文章转载,搭建工具------自媒体平台之间快速上传文章的方法,利用自己的富文本编辑器进行上传
    22
  • 7
    文本----简单编写文章的方法(中),后端接口的编写,自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑,想写好一个项目,先分析一下需求,再理一下实现思路,再搞几层,配好参数校验,lomb
    35
  • 8
    文本----简单编写文章的方法(上),自己编写好页面就上传到自己的服务器上,使用富文本编辑器进行编辑
    27
  • 9
    文本---富文本编辑器------Vue3使用富文本编辑器,Quill,全局样式和组件和样式的写法
    454
  • 10
    vue 富文本编辑器 quill (含代码高亮、自定义字体、汉化、鼠标悬浮提示、组件封装等)
    109