botframework - 主动消息 : 'Authorization has been denied for this request' on server restart

标签 botframework

我们正在使用 botframework 来增强 Microsoft Teams 中的聊天机器人体验。我们的许多用例都涉及主动向用户发送消息,我们通过存储/检索对话引用并信任检索到的引用中的 serviceUrl 来密切关注文档,从而使我们能够成功发送主动消息。

我们注意到,每当我们重新启动机器人时,我们都会在尝试发送主动消息时收到以下错误: 此请求的授权已被拒绝。

我们第一次遇到此错误消息是在至少一天没有与机器人进行交互之后,通过更改以下语句并增加 serviceUrl 上的过期时间来解决此错误消息: MicrosoftAppCredentials.trustServiceUrl(conversationReference.serviceUrl, new Date(8640000000000000));

但是,我们现在每次重启机器人服务器时都会收到此消息,由于我们的 CI/CD 管道,这种情况经常发生。

我们可以通过事先手动向机器人发送消息来快速解决这个问题,这将起作用,但是这非常麻烦,因为我们每天可能有很多部署。

重现步骤

  • 重启机器人服务器
  • 向机器人发送主动消息(为此我们使用队列)
  • 不会发送带有“此请求的授权已被拒绝”的消息。抛出错误

手动解决

  • 向机器人发送消息并等待回复
  • 尝试再次发送主动消息
  • 消息发送成功

附加上下文

环境:部署到 AWS 的 Node.js Docker 容器

最佳答案

您必须在机器人重启后信任 ServiceURLs。通常,机器人框架默默地负责为每个入站对话启用信任。我们保留了一组我们从入站对话中遇到的唯一服务 URL,并且在我们的机器人重新启动时,我们循环遍历此列表并在启动任何对话之前信任它们。

这里描述了一个类似的问题:https://github.com/microsoft/BotBuilder-Samples/issues/2462

关于botframework - 主动消息 : 'Authorization has been denied for this request' on server restart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64961922/

相关文章:

node.js - waterfall 对话中的 Microsoft Bot Framework LUIS

javascript - 发布到 Azure 后,聊天机器人可以在模拟器上运行,但不能在 Web 聊天和 Direct Line 上运行

node.js - 如何使用 Visual Studio Code 将 Node.js 机器人部署到 Azure?

c# - 如何将用户的消息存储在表存储中? (微软机器人框架 SDK4 和 C#)

c# - 在 Botframework V4 中扩展和链接对话框的正确方法?

node.js - 在 MS Bot Framework 机器人中获取 Azure Active Directory 用户的数据

azure - 第二个 ConversationUpdate 事件将在用户第一次输入之后发生?

botframework - 如何解决 Bot Framework Channel Emulator 中的 “500 internal server error” 错误?

javascript - 如何访问 Microsoft Bot Framework 上的用户数据?

botframework - 比较 Microsoft Bot Framework 与 Howdy Botkit