botframework - 主动消息:服务器重新启动时“此请求的授权已被拒绝”
问题描述
我们正在使用 botframework 来增强 Microsoft Teams 中的聊天机器人体验。我们的许多用例都涉及主动向用户发送消息,我们密切关注文档,存储/检索对话引用并从检索到的引用中信任 serviceUrl,从而使我们能够成功发送主动消息。
我们注意到,每当我们重新启动机器人时,在尝试发送主动消息时都会收到以下错误:此请求的授权已被拒绝。
我们第一次遇到这个错误消息是在至少一天没有与机器人交互之后,通过更改以下语句并增加过期时间来解决这个问题serviceUrl
:
MicrosoftAppCredentials.trustServiceUrl(conversationReference.serviceUrl, new Date(8640000000000000));
但是,我们现在每次重新启动机器人服务器时都会收到此消息,这通常是由于我们的 CI/CD 管道而发生的。
我们可以通过事先手动向机器人发送消息来快速解决这个问题,然后这将起作用,但是这非常麻烦,因为我们每天可以进行很多部署。
重现步骤
- 重启机器人服务器
- 向机器人发送主动消息(我们为此使用队列)
- 不会发送带有“此请求的授权已被拒绝”的消息。抛出错误
手动解决
- 向机器人发送消息并等待回复
- 尝试再次发送主动消息
- 消息将成功发送
附加上下文
环境:部署到 AWS 的 Node.js Docker 容器
解决方案
您必须在机器人重新启动后信任 ServiceURL。通常,机器人框架会默默地为每个入站对话启用信任。我们保留了一系列从入站对话中遇到的唯一服务 URL,并且在重新启动我们的机器人时,我们会遍历此列表并在启动任何对话之前信任它们。
这里描述了一个类似的问题:https ://github.com/microsoft/BotBuilder-Samples/issues/2462
推荐阅读
- python - 将 json 转换为 csv 以获得相似的键
- css - 为什么一个 4mb 的透明 PNG 需要 10-20 秒才能加载为重复的 CSS 背景纹理?
- angular - Angular Universal“找不到模块文件(/src/app/.ts)”
- python - 解析以引号开头的tsv文件
- sql - 比较同一个表的两列中的字符串
- jquery - 通用预输入字段和初始化程序
- compression - 存储/压缩黑白PNG的最优化方式是什么
- swift - 如何使用 Swift 读取 AXRoleDescription 和可访问性层次结构?
- postgresql - PostgreSQL中的&&是什么意思?
- android - 我想在列表中以 recyclerview 的形式获取所有订单的价格