category
你可以使用技能机器人来扩展机器人。技能可以被各种其他机器人消耗,便于重用,通过这种方式,你可以创建一个面向用户的机器人,并通过消耗你自己或第三方的技能来扩展它。
- 技能是一个机器人,可以为另一个机器人执行一组任务——机器人既可以是一种技能,也可以是面向用户的机器人。
- 技能消费者是一个可以调用一种或多种技能的机器人。面向用户的技能消费者也称为根机器人。
- 技能清单是一个JSON文件,它描述了技能可以执行的操作、其输入和输出参数以及技能的端点。
- 无法访问技能源代码的开发人员可以使用清单中的信息来设计他们的技能使用者。
- 技能清单模式是一个JSON文件,用于描述技能清单的模式。
-
了解如何实现技能以及如何为示例技能清单编写技能清单。
换句话说,用户直接与根机器人交互,根机器人将其一些会话逻辑委托给一种技能。
技能功能设计为:
- 技能和消费者使用Bot框架协议通过HTTP进行通信。
- 一个技能消费者可以消费多种技能。
- 技能消费者可以消费一项技能,而不考虑用于实现该技能的语言。例如,C#机器人程序可以使用使用JavaScript实现的技能。
- 一种技能也可以是一种技能消费者,并称之为其他技能。
- 技能支持用户身份验证;然而,用户身份验证是技能的本地特性,不能转移到另一个bot。
- Skills可以同时使用Bot Framework适配器和自定义适配器。
这张图显示了一些可能的排列。
技能消费者和技能之间的排列说明。
概念架构
技能和技能消费者是独立的机器人,您可以独立发布它们。
- 技能使用者需要添加管理技能的逻辑,例如何时调用或取消技能等。除了常见的机器人程序和适配器对象外,使用者还包括一些
- 技能相关的对象,用于与技能交换活动。技能使用者至少实现两个HTTP端点:
- 消息传递端点接收来自用户或通道的活动。这是所有机器人实现的常见消息传递端点。
- 用于接收技能的活动的技能宿主端点。这充当回调URL,即技能回复的服务URL。(技能使用者需要将接收来自技能的HTTP方法请求的代码与技能处理程序配对。)
- 技能需要添加逻辑,以便在完成endOfConversation活动时发送该活动,以便技能消费者知道何时停止向该技能转发活动。
该图概述了从用户到根机器人再到技能再到返回的活动流程。
说明活动如何从用户流向技能再返回。
- 根机器人的适配器接收来自用户的活动,并将其转发给根机器人的活动处理程序。(来自用户的活动在根机器人程序的消息传递端点处接收。)
- root机器人程序使用skill HTTP客户端向skill发送活动。客户端从技能定义和技能会话ID工厂获得消费者技能会话信息。这包括技能将用于回复活动的服务URL。
- 技能的适配器接收来自技能使用者的活动,并将其转发给技能的活动处理程序。(来自消费者的活动在技能机器人的消息传递端点处接收。)
- 当技能响应时,根机器人的技能处理程序将接收活动。它从技能会话ID工厂获取根用户会话信息。然后它将活动转发到根机器人的适配器。(来自技能的活动在根机器人的技能主机端点处接收。)
- 根机器人的适配器在内部生成一条主动消息,以恢复与用户的对话。
- 根机器人的适配器将技能中的任何消息发送给用户。
这些对象有助于管理技能和路由技能流量:
- Bot框架技能描述了技能的路由信息,并且可以从技能使用者的配置文件中读取。
- 技能HTTP客户端向技能发送活动。
- 技能处理程序接收来自技能的活动。
- 技能会话ID工厂在用户根会话引用和根技能会话引用之间进行转换。
- Bot连接器服务同时提供通道和机器人到机器人的身份验证。使用身份验证配置对象,可以向技能或技能使用者添加声明验证,以限制哪些应用程序或用户可以访问。
技能客户端和技能处理程序对象都使用会话ID工厂来在根机器人程序用于与用户交互的会话和根机器人程序用来与技能交互的会话之间进行转换。
技能清单
技能清单是一个JSON文件,它描述了技能可以执行的操作、其输入和输出参数、技能的端点以及技能的调度模型。
有关技能清单模式的信息,请参阅如何编写技能清单。
机器人到机器人的通信
了解这个设计的某些方面很重要,与你设计的机器人无关。
技能动作
某些技能可以执行多项任务或动作。例如,待办事项技能可能允许创建、更新、查看和删除可以作为离散对话访问的活动。
- 了解如何为实现一个操作的简单技能实现一项技能。
- 了解如何在一项技能中使用对话框,了解使用对话框执行多个操作的技能。
会话参考
用户root会话与root技能会话不同。
会话ID工厂有助于管理技能消费者和技能之间的流量。工厂在root与用户的对话ID和它与技能的对话ID之间进行转换。换句话说,它生成一个会话ID供root和skill之间使用,并从root skill会话ID中恢复原始用户root会话ID。
跨服务器协调
根机器人和技能机器人通过HTTP进行通信。因此,从技能接收活动的根机器人的实例可能与发送发起活动的实例不同;换句话说,不同的服务器可以处理这两个请求。
- 在将活动转发给技能之前,请始终保存技能使用者的状态。这确保了从技能接收流量的实例可以从上一个实例调用技能之前停止的地方恢复。
- 当技能处理程序接收到来自技能的活动时,它将其转换为适合技能使用者的形式,并将其转发给使用者的适配器。
技能消费者和技能状态
技能消费者和技能分别管理自己的状态。但是,消费者会创建用于与技能交流的会话ID。这会对技能中的会话状态产生影响。
重要的
如前所述,当技能消费者将用户活动委托给技能时,消费者的不同实例可以接收技能响应。消费者应始终在将活动转发给技能之前立即保存会话状态。
机器人到机器人身份验证
在Bot Framework Emulator中本地测试技能和技能消费者不需要应用程序ID和密码。将您的技能部署到Azure仍然需要Azure订阅。
服务级别身份验证由Bot连接器服务管理。该框架使用承载令牌和机器人应用程序ID来验证每个机器人的身份。(机器人框架使用身份验证配置对象来验证传入请求的身份验证头。)
重要的
这要求所有部署的机器人(技能使用者及其所消耗的任何技能)都具有有效的应用程序凭据。
申请验证
您必须将声明验证器添加到身份验证配置中。声明在验证标头之后进行评估。在验证代码中抛出错误或异常以拒绝请求。
笔记
如果机器人拥有应用程序ID和密码,它将执行索赔验证;否则,不会执行索赔验证。
您可能会拒绝通过其他方式验证的请求,原因多种多样:
- 当技能消费者应该只接受来自其可能发起对话的技能的流量时。
- 当一项技能是付费服务的一部分,而不在数据库中的用户不应该有访问权限时。
- 当您想限制特定技能消费者使用技能时。
重要的如果你不提供索赔验证器,无论你的机器人是技能消费者还是技能消费者,你的机器人在收到另一个机器人的活动时都会产生错误或异常。
调试技能对话
由于技能和技能消费者之间的流量是经过身份验证的,因此在调试此类机器人时需要额外的步骤。
- 技能消耗者及其直接或间接消耗的所有技能都必须在运行。
- 如果机器人在本地运行,并且其中任何机器人都有应用程序ID和密码,那么所有机器人都必须有有效的ID和密码。
- 如果机器人程序都已部署,请参阅如何使用ngrok从任何通道调试机器人程序。
- 如果一些机器人程序在本地运行,而另一些则已部署,请参阅如何调试技能或技能使用者。
否则,您可以像调试其他机器人一样调试技能消费者或技能。有关详细信息,请参阅调试机器人程序和使用bot Framework Emulator进行调试。
其他信息
从用户的角度来看,他们正在与根机器人进行交互。从技能的角度来说,技能消费者是它与用户沟通的渠道。
- 有关技能消费者的更多信息,请参阅有关技能消费者。
- 登录 发表评论
- 7 次浏览
Tags
最新内容
- 2 days 20 hours ago
- 2 days 22 hours ago
- 2 days 22 hours ago
- 5 days 14 hours ago
- 5 days 21 hours ago
- 5 days 22 hours ago
- 5 days 22 hours ago
- 5 days 22 hours ago
- 1 week 3 days ago
- 1 week 3 days ago