我正在创建一个工作流,该工作流允许将作曲家创建的对话框集成到机器人技能项目中。
为此,我尝试遵循这篇文章中的说明:https : //microsoft.github.io/botframework-solutions/skills/handbook/experimental-add-composer/
我的作曲家创建了包括调用技能的对话框。当我通过Bot模拟器启动该意图时,出现以下错误:System.NullReferenceException:'无法在HostContext中找到SkillConversationIdFactoryBase'
设置此错误很费时间,因此我创建了一个git repo,可以很容易地启动它来演示问题。
该项目可以在这里找到:https : //github.com/silverbulletgt/Integrate-Composer-Dialog-Using-Skill
重新创建问题:
先决条件
安装Bot模拟器:https : //github.com/Microsoft/BotFramework-Emulator/blob/master/README.md
在Visual Studio中打开解决方案文件Integrate-Composer-Dialog-Using-Skill.sln
在DefaultAdapter.cs的第72行上放置一个断点-在这里可以看到错误
开始调试项目
开放式机器人模拟器
连接到机器人:http:// localhost:3978 / api / messages
输入“问候语”
Bot应该回复“您好,我已经认识到您说的问候”-这意味着作曲家对话框的集成工作正常。
输入“技能”
DefaultAdapter.cs的第72行上的断点应触发,以提供错误的详细信息。
错误和堆栈跟踪可以在这里找到:https : //github.com/silverbulletgt/Integrate-Composer-Dialog-Using-Skill/blob/master/Readme/error%20stack%20trace.txt
编辑:我能够编译Bot Builder代码Bot Builder GitHub并将其连接到我的项目,以便可以调试。我发现该错误发生在Microsoft.Bot.Builder.Dialogs.Adaptive.BeginSkill.cs代码BeginSkill.cs的第157行上。
这行代码试图使SkillConversationFactoryBase脱离dialogContext.Context.TurnState。我正在研究如何添加此代码,以便在执行此代码时将其填充。
该错误是由于缺少依赖项注入要求引起的。将以下行添加到Startup.cs
services.AddSingleton<SkillConversationIdFactoryBase, SkillConversationIdFactory>();
services.AddSingleton<HttpClient>(new HttpClient());
services.AddSingleton<BotFrameworkClient, BotFrameworkHttpClient>();
添加到DefaultAdapter.cs
新领域
private readonly SkillConversationIdFactoryBase _skillConversationIdFactoryBase;
新的构造函数参数
SkillConversationIdFactoryBase skillConversationIdFactoryBase,
BotFrameworkClient botFrameworkClient
到构造函数的主体
_skillConversationIdFactoryBase = skillConversationIdFactoryBase;
Use(new RegisterClassMiddleware<SkillConversationIdFactoryBase>(_skillConversationIdFactoryBase));
Use(new RegisterClassMiddleware<BotFrameworkClient>(botFrameworkClient));
这解决了最初的异常,但是在调用此技能时又出现了新的异常。
was.Operation异常在Microsoft.Bot.Connector.Conversations.d__10.MoveNext()返回了无效的状态代码“ NotFound”
我根据此处的示例添加了SkillController.cs:Bot Builder测试JSON SkillController
然后添加了依赖注入以支持控制器。已添加到Startup.cs
services.AddSingleton<ChannelServiceHandler, SkillHandler>();
services.AddSingleton<BotAdapter>(sp => (BotFrameworkHttpAdapter)sp.GetService<IBotFrameworkHttpAdapter>());
我测试了一个基本意图,该意图没有使用技能来确定与依赖注入是否有任何冲突会影响这些依赖。基本意图如预期般运作。
我使用更改的项目仓库更新了master分支
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句