你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Bot Framework 的一般常见问题解答

本文解答了一般性的常见问题。

适用于: SDK v4

为什么键入活动不会执行任何操作?

某些渠道不支持其客户端中的临时性键入更新。

SDK 中的连接器库和生成器库之间的区别是什么?

连接器库是 REST API 的展示。 生成器库添加了会话对话框编程模型和其他功能,如提示、瀑布图、链和指导表单完成。 生成器库还提供对 Azure AI 服务(如自然语言理解)的访问权限。

用户消息如何与 HTTPS 方法调用关联?

当用户通过通道发送消息时,Bot Framework Web 服务将向机器人的 Web 服务终结点发出 HTTPS POST。 机器人通过针对其发送的每条消息向 Bot Framework 发送单独的 HTTPS POST,从而在该通道上向用户发送零个、一个或多个消息。

“主动”和“被动”之间的区别是什么?

从机器人的角度来看,“被动”意味着用户通过向机器人发送消息来启动会话,并且机器人通过响应该消息来做出反应。 相反,“主动”意味着机器人通过先向用户发送第一条消息来启动会话。 例如,机器人可以发送主动消息以在计时器过期或事件发生时通知用户。

如何向用户发送主动消息?

有关演示如何发送主动消息的示例,请参阅 GitHub 上的 BotBuilder-Samples 存储库中的 C# V4 示例Node.js V4 示例

什么是 ETag? 它与机器人数据包存储有何关系?

ETag 是一种用于乐观并发控制的机制。 机器人数据包存储使用 ETag 来防止数据更新冲突。 如果出现 ETag 错误并显示 HTTP 状态代码 412“不满足前提条件”,则表明在机器人完成第一个操作之前,已并行接收了多个消息。 对话框堆栈和状态均存储在机器人数据包中。 例如,如果机器人在收到该会话的新消息时仍在处理上一条消息,则可能会看到“不满足前提条件”ETag 错误。

什么是速率限制?

Bot Framework 服务必须保护其自身及其客户免受滥用呼叫模式攻击(例如,拒绝服务攻击),这样一来,没有一个机器人可以对其他机器人的性能产生负面影响。 为了实现这种保护,我们为终结点添加了速率限制(也称为限制)。 通过强制执行速率限制,我们可以限制客户端或机器人进行特定呼叫的频率。 例如:启用速率限制后,如果机器人想要发布大量活动,则必须在一段时间内将它们分开。 速率限制的目的不是限制机器人的总量。 它旨在防止滥用不遵循人类会话模式的会话架构。 例如,在两个人的聊天中填充的内容超出了两个人的承受量。

什么是速率极限?

在为我们的服务和用户提供保护的同时,我们也不断调整速率限制,使其尽可能宽松。 由于阈值有时会发生变化,因此,我们目前不会公布这些数字。 最后,如果你在应用服务上托管机器人,该机器人需遵守应用服务的限制。 有关详细信息,请参阅 Azure 服务的 SLA 摘要。如果你受到速率限制的影响,请随时通过 bf-reports@microsoft.com 与我们联系。

使用通道传输的文件的大小限制是多少?

某些通道对可发送文件的大小或类型实施了限制。 例如,Direct Line 和 Facebook 都将活动有效负载限制为262,144字节,而 Emulator 则没有限制。 这些限制是由通道施加的。 如果发送的消息超出此限制,你可能会收到错误消息,例如:请求内容长度超过了 262144 字节的限制。 但是,可将资源的链接作为 Internet 附件提供。 有关发送附件的详细信息,请参阅如何在消息中添加媒体

我如何知道我是否受到速率限制的影响?

即使在数据量较大时,你也不太可能遇到速率限制。 最大速率限制只会由于(从机器人或客户端)大量发送活动、极限负载测试或 bug 而发生。 当请求受到限制时,将返回 HTTP 429(请求过多)响应以及 Retry-After 标头,指示在重试请求成功之前等待的时间(以秒为单位)。 可以通过 Azure Application Insights 为你的机器人启用分析,从而收集此信息。 或者,可以在机器人中添加代码来记录消息。

速率限制如何发生?

速率限制是由下列任一情况造成的:

  • 机器人发送消息的频率过高
  • 机器人客户端发送消息的频率过高
  • Direct Line 客户端请求新的 Web 套接字的频率过高

如何实现人类交接?

有时,需要将聊天从机器人转移到人类,例如当机器人不了解用户或请求无法自动执行时。 在这种情况下,机器人会将聊天移交给人类用户。 Bot Framework SDK 支持向人类用户交接聊天。 有几个事件类型可以指示交接操作。 这些事件是在机器人代理中心(也称为参与中心)之间交换的。 此代理中心定义为允许代理(通常是人类)接收和处理来自用户的请求,以及升级来自机器人的请求的应用程序或系统。 有关详细信息,请参阅将聊天从机器人移交给人类用户一文。