我正在开发 Microsoft Teams 机器人并遇到问题。即使登录成功,我仍然看到错误消息“无法访问应用程序。请重试。”
当我使用 Node.js 和 Microsoft Bot Framework 来显示 OAuthPrompt 时,可以正确显示身份验证登录。登录过程确实成功并返回正确的令牌。但是,登录卡本身会显示一条错误消息,指出“无法访问应用程序。请重试。”
采取的配置步骤:
问题: 发布和测试后,登录机器人将按预期显示。但是,当我单击它时,遇到“无法访问应用程序”错误。此问题是 Teams 应用程序独有的。使用机器人模拟器和 Azure 机器人进行测试(在网络聊天中测试)时,一切正常。此外,当我在浏览器中尝试 Teams 应用程序并检查网络选项卡时,它引发了 502 bad gateway 错误。
有人遇到过类似的问题或者可以提供解决此问题的见解吗?任何指导将不胜感激。
此问题是由于如果机器人未完成操作,可能会发生 10 或 15 秒超时。这记录在 Azure 服务机器人文档中:
如果机器人在10到15秒内没有完成操作, 根据通道的不同,Azure Bot 服务将超时并且 向客户端报告 504:GatewayTimeout,如如何操作中所述 机器人工作。
如果这是由于延迟造成的,您需要确保您的应用程序可以处理长时间运行的操作。
机器人构建器框架的某些版本还存在一个已知问题,可能会导致正文设置为空。在此相关线程中,提供了一种解决方法,通过防止将 None 设置为 null 来防止设置 body=null。
# Listen for incoming requests on /api/messages
async def messages(req: Request) -> Response:
# Main bot message handler.
if "application/json" in req.headers["Content-Type"]:
body = await req.json()
else:
return Response(status=415)
activity = Activity().deserialize(body)
auth_header = req.headers["Authorization"] if "Authorization" in req.headers else ""
response = await ADAPTER.process_activity(activity, auth_header, BOT.on_turn)
if response:
# prevent sending None body as 'null'
if response.body is None:
args = {'status': response.status}
else:
args = {'data': response.body, 'status': response.status}
return json_response(**args)
return Response(status=201)