【发布时间】:2019-03-27 17:41:09
【问题描述】:
我是 C# 和 Bot Framework (V3) 的新手,并被要求开始在我加入的项目中测试现有的机器人。 bot 本身在 Bot Emulator 上运行良好,并且在托管在 Skype 上时,但由于某种原因,Azure 上的网络聊天不起作用。由于网络聊天使用 Direct Line,它暂时停止了运行测试。我花了很多时间搜索 V3 Github 页面和 SO,但我一直无法找到解决方案。
对话似乎可以开始,因为 Bot 向用户发送消息,但未发送所有用户响应,并且 Bot 以错误消息“抱歉,我的 bot 代码有问题”进行响应。 见——
Azure 将其列为 500 错误 - 内部服务器错误。 见
Azure 中的错误消息
然后,我查看了 Chrome 开发工具选项卡中的消息,发现了相同的错误以及 502 错误,最近(或者我以前从未注意到)也出现了 CORS 错误。 见
Chrome 开发工具控制台
在此之后,我在 Azure 上使用了 Application Insights,当我尝试使用网络聊天时,每个实例都会有三个项目;
- 一个 customEvent (StatusCode: 200),可能是 Bot 在对话开始时发送的消息。
- issueId 为“System.Exception at Microsoft.Bot.ChannelConnector.BotAPI+d__31.MoveNext”的异常
- 另一个 customEvent (StatusCode : 500)
由于我对 C# 和 Bot Framework 之间的整个设置不是很熟悉,因此我不确定问题出在哪里。这是异常消息的截图 -
单个 operationId 的消息
异常详情(一)
异常详情(二)
异常详情(三)
异常详情(4)
我对这些消息有一些想法:
- “外部程序集”被描述为“Microsoft.Bot.ChannelConnector, Version=3.2.2.5, Culture=neutral, PublicKeyToken=null” - 缺少 PublicKeyToken 是否意味着没有为用户分配令牌因为错误?还是应该先发生这种情况,然后因为用户没有令牌而发生错误?
- 堆栈跟踪指向其中一个对话框文件中的一行,但通过查看代码,我真的看不出问题出在哪里?我实际上删除了被标记的部分,但它只是将代码中问题所在的行更改为前一部分,所以我不确定这个文件是否存在问题?
如果有人对此有任何想法以及问题的原因可能是什么,我将不胜感激。
此外,我尝试做两件事来解决这个问题,但没有任何区别;
- 确保在将配置文件发布到 Azure 时勾选“全部删除”框
- 确保所有软件包都是最新的(包括安装 bot.connector.directline 软件包,由于某种原因尚未安装)
【问题讨论】:
-
您是否使用部署槽进行测试?另外,bot 使用什么来管理状态(表存储、CosmosDb 等)?
-
好的,感谢您提供的信息。这都是拼图的一部分。新问题:我看到引用“testboteurope”资源的 WebChat 错误(包括 CORS 错误)。但是,Application Insights 数据引用了“TestSlotNetHope”资源。您是否尝试从另一个资源访问一个资源?
-
好的,我还建议您研究一些事情。一,检查你的机器人没有使用状态服务进行状态管理。我看到 State Store 调用此服务,但它在几个月前已被弃用。您可以在此处阅读有关状态服务和替代选项的更多信息:blog.botframework.com/2018/04/02/…
-
另外,你提到让机器人在不同的部署槽中使用不同的应用服务。这很有可能是 CORS 问题的原因。主机网络聊天 URI 应作为受信任的来源添加到相关机器人的 Direct Line 通道中。导航到机器人,单击 Channels 边栏选项卡并选择 Direct Line。滚动到该页面的底部,然后在“增强的身份验证选项”下添加 URI 并单击完成。
-
最后,北欧数据中心的 Direct Line 存在一些问题。这些错误持续了几个小时,并且与您的机器人的连接问题相吻合。
标签: c# botframework azure-bot-service