在大约10分钟内未请求Bot后,Bot框架在生产环境中出现502个错误网关(Node.js)

在大约10分钟内未请求Bot后,Bot框架在生产环境中出现502个错误网关(Node.js),node.js,firebase,botframework,Node.js,Firebase,Botframework,当我使用Microsoft Bot Framework开发使用多个瀑布对话框的对话Bot时,如果在大约10分钟内没有请求Bot,我总是在生产环境中收到502个坏网关错误 但是,在本地环境中,使用Bot仿真器测试应用程序时不会发生错误 我一直在寻找有关此问题的解决方案,该错误似乎是由于bot无法在15秒内发回响应造成的 以下是我为解决这一问题所做的尝试: 已为Azure云应用程序启用“始终打开”选项(无法解决此问题) 使用Cosmos DB将状态的内存存储更改为自定义存储(无法解决此问题)

当我使用Microsoft Bot Framework开发使用多个瀑布对话框的对话Bot时,如果在大约10分钟内没有请求Bot,我总是在生产环境中收到502个坏网关错误

但是,在本地环境中,使用Bot仿真器测试应用程序时不会发生错误

我一直在寻找有关此问题的解决方案,该错误似乎是由于bot无法在15秒内发回响应造成的

以下是我为解决这一问题所做的尝试:

  • 已为Azure云应用程序启用“始终打开”选项(无法解决此问题)

  • 使用Cosmos DB将状态的内存存储更改为自定义存储(无法解决此问题)

  • 为某些长期运行的进程发送主动消息。但是,当502错误开始发生时,即使从Firebase Firestore获取一个文档也可能是导致错误的“长时间运行的过程”。由于我的应用程序需要不断检查Firebase文档状态,以查看特定对话阶段是否打开,并决定应应用哪个对话框,因此不太可能在此上下文中识别长期运行的流程

根据我的观察,当502网关错误发生时,bot将卡在初始阶段,而不是缓慢运行(即bot将卡在初始Firebase请求中),这似乎不是长时间运行进程的问题

此外,当错误发生时,bot框架抛出的错误消息如下所示,我无法找到错误
活动的任何相关解决方案。值为“14”的代码必须是string类型

[onTurnError]:错误:未建立连接 BotFrameworkAdapter.processActivity():500错误-错误:值为“14”的activity.code必须为字符串类型。(节点:5132)未处理的PromisejectionWarning:错误:错误:值为“14”的activity.code必须为string类型。在进程中的BotFrameworkAdapter.processActivity(D\home\site\wwwroot\node\u modules\botbuilder\lib\BotFrameworkAdapter.js:511:19)中单击回调(内部/process/next\u tick.js:68:7)。(节点:5132)未处理承诺拒绝警告:未处理承诺拒绝。此错误源于抛出不带catch块的异步函数内部,或者拒绝未处理的承诺 with.catch()。(拒绝id:9)

考虑到这种情况,该问题的适当解决方法是什么

  • 我正在尝试编写一个云函数,以每隔5分钟主动向bot发送请求,使其保持活动状态,但我不确定它是否会工作,而且它似乎不是正确的解决方案
  • 如果我需要为每个收到的消息发送主动消息(因为不可能识别长时间运行的流程),我如何向前推瀑布式对话框并用主动消息提示用户输入某些输入?因为主动消息示例没有提供一个实现来继续瀑布式对话框&提示用户进行某些输入(例如AttachmentPrompt、NumberPrompt等)

我不明白。看起来你已经知道哪里出了问题(firebase呼叫)。firebase电话就是不回吗?如果您的对话框一直挂起,直到调用返回,并且在15秒内没有返回,那么它将超时。@JJ_Wailes Firebase没有问题。我的意思是,从Firebase获取数据(基本上不需要时间)似乎是一个长时间运行的过程,而bot在大约10分钟后似乎不处于“活动”状态。问题是,bot似乎无法发送抓取请求。您能否在此repo上发布此错误(您的开启错误)@当然,我已经在GitHub上发布了这个问题。我不明白。看起来你已经知道哪里出了问题(firebase呼叫)。firebase电话就是不回吗?如果您的对话框一直挂起,直到调用返回,并且在15秒内没有返回,那么它将超时。@JJ_Wailes Firebase没有问题。我的意思是,从Firebase获取数据(基本上不需要时间)似乎是一个长时间运行的过程,而bot在大约10分钟后似乎不处于“活动”状态。问题是,bot似乎无法发送抓取请求。您能否在此repo上发布此错误(您的开启错误)@当然,我已经在GitHub上发布了这个问题。