我们正在使用 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/