关于技能使用者

适用于: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”,则该技能不会回发到技能主机端点。 相反,所有答复活动将被序列化为响应的正文。 然后,根机器人会循环访问这些活动,并以类似于技能主机端点处理它们的方式对它们进行处理。

有关信息,请参阅活动规范中的传递模式