Bot Framework-防止GatewayTimeout长时间运行

时间:2019-12-26 09:23:43

标签: c# azure botframework

我已经使用botframework V4 for .Net构建了一个机器人,该机器人通过电子邮件 directline 渠道都向用户回复。

但是,某些请求需要15秒钟以上才能完成,因此我会收到GatewayTimeout错误: Channel Error Log

这些请求很繁重(从数据库中获取一些数据,通过API调用从另一台服务器获取其他数据,处理数据,生成HTML并将其发送回用户...),因此无法采取任何措施来缩短过程。

我知道网关超时延迟is by design(15秒),但是问题在于,通道会在短时间后自动重试该请求,最终我收到了同一查询的多封电子邮件(每个间隔大约1分钟)。

我也注意到,直接回复比电子邮件回复(websocket与SMTP)要快得多,因此,这主要是通过 email 渠道发生的。请注意,根据this comment,电子邮件的大小保持在300KB以下,但大小很容易接近此限制。

因此,有一种方法可以实现:

  • 增加超时延迟吗?
  • 禁用自动重试吗?
  • 或者是某种预防该问题的方法?

1 个答案:

答案 0 :(得分:1)

请记住,your bot is a web app公开了HTTP端点,并且发送到您的漫游器的每个活动都是API调用。长时间运行的API调用应设计为立即返回响应并异步进行处理。例如,考虑Recognize Text Computer Vision API。它只是返回一个Operation-Location,实际结果将在以后提供。

对于机器人框架机器人,在回合结束后向频道发送消息所需要做的就是发送proactive message。设计您的机器人以向用户指示结果即将到来通常也是个好主意,例如通过发送初步的“处理中”消息或键入指示符,但是对于电子邮件渠道而言,这可能是不需要的。埃里克·达赫郎(Eric Dahlvang)在您链接到的问题中对此进行了解释:

  

如果开发人员知道响应时间将超过15秒,则有可能根据通道的不同,启动一个单独的线程来处理长时间运行的进程,并在接收线程上返回有效的状态代码,进程完成后,从后台线程发送主动消息。