你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
关于技能使用者
适用于:SDK v4
技能使用者是可以调用一项或多项技能的机器人。 就技能来说,根机器人是面向用户的机器人,也是技能使用者。
从用户的角度来看,根机器人是与用户交互的机器人。 从技能的角度来看,技能使用者是技能与用户通信的通道。 (有关详细信息,请参阅技能概述。)
作为技能使用者,根机器人包含一些额外的逻辑,用于管理它与技能之间的流量:
- 根使用的每项技能的配置信息。
- 一个“对话 ID 中心”,允许根在它与用户的对话和它与技能的对话之间来回切换。
- 一个技能客户端,可以将活动打包并转发给技能机器人。
- 一个技能处理程序,可以接收来自技能机器人的请求,并将来自技能机器人的活动解包。
管理技能
若要管理单个技能运行的启动和完成,只需向技能使用者添加几项内容即可。 可能会有更复杂的情况,会有多个技能或聊天线程。
技能使用者至少实现了两个 HTTP 终结点:
- 消息传递终结点从用户或通道接收活动。 这是所有机器人都实现的一般消息传递终结点。
- 用于接收技能活动的技能主机终结点。 它充当一个回叫 URL,即该技能要回复的服务 URL。 (技能使用者需要将从技能接收 HTTP 方法请求的代码与技能处理程序配对。)
技能说明
对于每项技能,请将 Bot Framework 技能对象添加到技能使用者的配置文件中。 每项技能都会有 ID、应用 ID 和技能终结点。
properties | 说明 |
---|---|
ID | 技能的 ID 或密钥,特定于技能使用者。 |
应用 ID | 在 Azure 上注册技能时分配给机器人资源的 appId 。 |
技能终结点 | 技能的消息传送终结点。 这是供使用者用来与技能通信的 URL。 |
技能客户端和技能处理程序
技能使用者使用技能客户端向技能发送活动。 客户端:
- 使用一个将发送到技能的活动,不管该活动是来自用户还是由使用者生成。
- 将发送给技能的活动上的服务 URL 设置为使用者的技能主机终结点。
- 将原始聊天引用替换为使用者-技能聊天引用。
- 添加机器人到机器人身份验证令牌。
- 将更新的活动发送到技能。
技能使用者使用技能处理程序从技能接收活动。 处理程序:
- 处理通道服务 REST API 方法。
- 强制执行身份验证和声明验证。
- 检索原始聊天引用。
- 为使用者的适配器生成一个活动。 此活动会指示技能已完成,或者会成为要转发给用户的活动。
直接管理技能
需要向技能使用者添加逻辑,以便跟踪任何活动的技能。 由使用者决定如何在整体上对技能进行管理,是否允许并行维护多个活动技能,等等。 要考虑的具体方案包括:
- 启动新的使用者-技能聊天。 (这将与特定的使用者-用户聊天相关联。)
- 若要将参数传递给某项技能,请将初始活动中的 value 属性设置为该技能。
- 继续现有的使用者-技能聊天。
- 将来自技能的
endOfConversation
活动视为结束使用者-技能聊天的信号。- 若要检索来自技能的任何返回值,请检查活动的 value 属性。
- 若要检查技能结束的原因,请检查活动的 code 参数,该参数可能指示技能出错。
- 通过向技能发送
endOfConversation
活动来取消使用者的技能。
有关直接管理技能的使用者,请参阅如何实现技能使用者。
使用技能对话管理技能
如果使用对话库,则可通过“技能对话”来管理技能。 虽然技能对话是活动对话,但它会将活动转发给关联的技能。
- 创建技能对话时,请使用 dialog options 参数提供对话管理技能时所需的所有信息,例如使用者的应用 ID 和回调 URL、要使用的聊天 ID 工厂、技能的属性等。
- 如果要将多项技能作为对话进行管理,则需为每项技能分别创建一个技能对话。
- 通常会将技能对话添加到组件对话。
- 若要启动技能对话,请使用对话上下文的 begin 方法并提供技能对话的 ID。 使用 options 参数提供使用者会将其作为第一个活动发送到技能的活动。
- 可以像对待任何其他对话那样取消或中断技能对话。 请参阅如何处理用户中断以获取示例。
有关使用对话管理技能的使用者,请参阅如何通过对话使用技能。
使用预期回复的传递模式
机器人和技能通过 HTTPS 使用行业标准的 REST 和 JSON 进行通信。 当根机器人在其消息传递终结点从通道接收到帖子时,将开始正常活动处理流程。 然后,根机器人会将上面的活动发送到技能进行处理。 技能回复将回发到根机器人的技能主机终结点,而不是其消息传递终结点。 最后,根机器人将答复进一步处理或回发到通道。 可以通过更改发送到技能的活动的传递模式来更改此正常流。 如果 delivery mode 设置为“ExpectReplies”,则该技能不会回发到技能主机端点。 相反,所有答复活动将被序列化为响应的正文。 然后,根机器人会循环访问这些活动,并以类似于技能主机端点处理它们的方式对它们进行处理。
有关信息,请参阅活动规范中的传递模式。