本文解答了一般性的常见问题。
适用于: SDK v4
某些渠道不支持其客户端中的临时性键入更新。
连接器库是 REST API 的展示。 生成器库添加了会话对话框编程模型和其他功能,如提示、瀑布图、链和指导表单完成。 生成器库还提供对 Azure AI 服务(如自然语言理解)的访问权限。
当用户通过通道发送消息时,Bot Framework Web 服务将向机器人的 Web 服务终结点发出 HTTPS POST。 机器人通过针对其发送的每条消息向 Bot Framework 发送单独的 HTTPS POST,从而在该通道上向用户发送零个、一个或多个消息。
从机器人的角度来看,“被动”意味着用户通过向机器人发送消息来启动会话,并且机器人通过响应该消息来做出反应。 相反,“主动”意味着机器人通过先向用户发送第一条消息来启动会话。 例如,机器人可以发送主动消息以在计时器过期或事件发生时通知用户。
有关演示如何发送主动消息的示例,请参阅 GitHub 上的 BotBuilder-Samples 存储库中的 C# V4 示例和 Node.js V4 示例。
ETag 是一种用于乐观并发控制的机制。 机器人数据包存储使用 ETag 来防止数据更新冲突。 如果出现 ETag 错误并显示 HTTP 状态代码 412“不满足前提条件”,则表明在机器人完成第一个操作之前,已并行接收了多个消息。 对话框堆栈和状态均存储在机器人数据包中。 例如,如果机器人在收到该会话的新消息时仍在处理上一条消息,则可能会看到“不满足前提条件”ETag 错误。
Bot Framework 服务必须保护其自身及其客户免受滥用呼叫模式攻击(例如,拒绝服务攻击),这样一来,没有一个机器人可以对其他机器人的性能产生负面影响。 为了实现这种保护,我们为终结点添加了速率限制(也称为限制)。 通过强制执行速率限制,我们可以限制客户端或机器人进行特定呼叫的频率。 例如:启用速率限制后,如果机器人想要发布大量活动,则必须在一段时间内将它们分开。 速率限制的目的不是限制机器人的总量。 它旨在防止滥用不遵循人类会话模式的会话架构。 例如,在两个人的聊天中填充的内容超出了两个人的承受量。
在为我们的服务和用户提供保护的同时,我们也不断调整速率限制,使其尽可能宽松。 由于阈值有时会发生变化,因此,我们目前不会公布这些数字。 最后,如果你在应用服务上托管机器人,该机器人需遵守应用服务的限制。 有关详细信息,请参阅 Azure 服务的 SLA 摘要。如果你受到速率限制的影响,请随时通过 bf-reports@microsoft.com 与我们联系。
某些通道对可发送文件的大小或类型实施了限制。 例如,Direct Line 将活动有效负载限制为 262,144 字节,而 Bot Framework Emulator 没有限制。 这些限制是由通道施加的。 如果发送的消息超出此限制,你可能会收到错误消息,例如:请求内容长度超过了 262144 字节的限制。 但是,可将资源的链接作为 Internet 附件提供。 有关发送附件的详细信息,请参阅如何在消息中添加媒体。
即使在数据量较大时,你也不太可能遇到速率限制。 最大速率限制只会由于(从机器人或客户端)大量发送活动、极限负载测试或 bug 而发生。 当请求受到限制时,将返回 HTTP 429(请求过多)响应以及 Retry-After 标头,指示在重试请求成功之前等待的时间(以秒为单位)。 可以通过 Azure Application Insights 为你的机器人启用分析,从而收集此信息。 或者,可以在机器人中添加代码来记录消息。
速率限制是由下列任一情况造成的:
- 机器人发送消息的频率过高
- 机器人客户端发送消息的频率过高
- Direct Line 客户端请求新的 Web 套接字的频率过高
有时,需要将聊天从机器人转移到人类,例如当机器人不了解用户或请求无法自动执行时。 在这种情况下,机器人会将聊天移交给人类用户。 Bot Framework SDK 支持向人类用户交接聊天。 有几个事件类型可以指示交接操作。 这些事件是在机器人与代理中心(也称为参与中心)之间交换的。 此代理中心定义为允许代理(通常是人类)接收和处理来自用户的请求,以及升级来自机器人的请求的应用程序或系统。 有关详细信息,请参阅将聊天从机器人移交给人类用户一文。