我正在使用Azure Bot服务和QnAMaker开发一个新的聊天机器人.我们正在使用BotBuilder中间件(包括自定义中间件)来定制机器人行为.
其中一个中间件将调用Azure功能,我想将新HttpClientFactory功能与自定义中间件一起使用 - 但这需要依赖注入.
我如何在BotBuilder中间件中使用依赖注入,就像使用常规.NET Core中间件一样?
当你看到在机器人配置Startup.cs,你可以看到它是如何要求你新的所有机器人的依赖关系:
services.AddHttpClient<MyFunctionClient>(client =>
{
client.BaseAddress = new Uri(mySettings.GetValue<string>("myFunctionUrl"));
client.DefaultRequestHeaders.Add("x-functions-key", mySettings.GetValue<string>("myFunctionKey"));
});
services.AddBot<QnAMakerBot>(options =>
{
options.CredentialProvider = new ConfigurationCredentialProvider(Configuration);
options.ConnectorClientRetryPolicy = new RetryPolicy(
new BotFrameworkHttpStatusCodeErrorDetectionStrategy(),
3,
TimeSpan.FromSeconds(2),
TimeSpan.FromSeconds(20),
TimeSpan.FromSeconds(1));
var middleware = options.Middleware;
middleware.Add(new ConversationState<ChatLog>(new MemoryStorage()));
middleware.Add(new MyCustomMiddleware()); // <- I want to inject a typed HttpClient here
//... etc. ....
Run Code Online (Sandbox Code Playgroud)
是否有不同的方法来配置允许依赖注入的机器人?
如果MyCustomMiddleware需要HttpClient在其构造函数中输入,我必须在此处创建一个新实例,因此我没有得到DI和我刚刚设置的配置的好处.
c# .net-core asp.net-core azure-bot-service asp.net-core-2.1
我开发了与 SharePoint On Premise 集成的 ChatBot。当我在模拟器中调试 ChatBot 时,它可以工作。但是,当我使用 DirectLine 在 Azure 中的 Web 模拟器和公司网站中托管的网站上进行调试时,它不起作用。
有谁知道如何解决它?
附上我的截图。左侧来自 Web Emulator,右侧来自本地 Bot Framework Emulator
更新源代码(2019 年 12 月 9 日)
XmlNamespaceManager xmlnspm = new XmlNamespaceManager(new NameTable());
Uri sharepointUrl = new Uri("https://mvponduty.sharepoint.com/sites/sg/daw/");
xmlnspm.AddNamespace("atom", "http://www.w3.org/2005/Atom");
xmlnspm.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices");
xmlnspm.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
NetworkCredential cred = new System.Net.NetworkCredential("engsooncheah@mvponduty.onmicrosoft.com", "Pa$$w0rd", "mvponduty.onmicrosoft.com");
HttpWebRequest listRequest = (HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + "_api/lists/getByTitle('" + "data@work" + "')/items?$filter=Keywords%20eq%20%27bloomberg%27");
listRequest.Method = "GET";
listRequest.Accept = "application/atom+xml";
listRequest.ContentType = "application/atom+xml;type=entry";
listRequest.Credentials = cred;
//LINE 136 start from below
HttpWebResponse listResponse …Run Code Online (Sandbox Code Playgroud) sharepoint-2013 botframework direct-line-botframework azure-bot-service
如何访问从Visual Studio部署到Azure的所有文件?我正在使用bot框架创建一个机器人,然后我发布.但是,当我在网上查看代码时,我无法通过App Service Editor/Kudu /等查看所有文件.无法找到导航站点目录的文件.
有人知道吗?
是否有计划在不久的将来支持.NET Core?我的意思是,没有重构我的机器人代码.仍有与之不兼容的组件.
我遇到了一个问题,我无法在互联网上的任何地方找到任何信息.我与许多同事共享一个Azure目录,因此,我们中的任何人都可能正在使用Portal中的资源.但是,当任何人创建Bot服务时,没有其他人可以访问该资源.请注意,创建Bot服务的人可以随心所欲地使用它,但是其他任何人都会看到错误"无法找到具有指定ID的机器人".(按原样写)

我们知道权限没有问题,因为每个人都可以完全访问所有内容,而且问题似乎只出现在Bot服务资源上.
我通过带有Node.js和LUIS的"Azure门户"创建了一个Bot服务.创建Bot后,我可以看到"聊天界面"永远加载"加载聊天界面"消息. Bot开发人员界面
所以我通过'dev.botframework.com'中的'我的机器人'打开了Bot并测试了连接.它因以下错误而失败. 机器人聊天窗口
当我在聊天框中ping"Hi"时,我可以在执行函数时看到日志中的错误:Functions.messages.mscorlib:错误:找不到模块'botbuilder'
我可以在'package.json'中看到'botbuildr'依赖关系,如下所示.
{
"name": "luisbot",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"botbuilder": "^3.7.0",
"botbuilder-azure": "3.0.2"
},
"devDependencies": {
"restify": "^4.3.0"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Run Code Online (Sandbox Code Playgroud)
对错误的任何建议?
有什么不同?我在这里,Microsoft Azure或Azure Bot Service上找不到有关所有三项服务的特定信息...
我正在尝试将 QnAmaker 知识库与 Azure 机器人服务集成。我无法在 QnAMaker 门户上找到知识库 ID。 如何在QnAPortal中找到kbid?
我正在为我自己的目的,为Bot Framework V4(使用LUIS)破解GitHub'CoreBot'示例代码,并且在响应和瀑布对话框步骤的执行方式上遇到了麻烦。
我有一个顶级对话框。我的期望是,该对话框基于输入对LUIS进行初始调用,并基于该输入路由到其他对话框。目前,只能问候机器人并报告危险。我的对话框设置如下(忽略BookingDialog,它是示例的一部分)。
public MainDialog(IConfiguration configuration, ILogger<MainDialog> logger)
: base(nameof(MainDialog))
{
Configuration = configuration;
Logger = logger;
AddDialog(new TextPrompt(nameof(TextPrompt)));
AddDialog(new BookingDialog());
AddDialog(new HazardDialog());
AddDialog(new WaterfallDialog(nameof(WaterfallDialog), new WaterfallStep[]
{
MainStepAsync,
EndOfMainDialogAsync
}));
// The initial child Dialog to run.
InitialDialogId = nameof(WaterfallDialog);
}
Run Code Online (Sandbox Code Playgroud)
我的期望是MainStepAsync被执行,并运行以下命令:
private async Task<DialogTurnResult> MainStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
CoreBot.StorageLogging.LogToTableAsync($"Main step entered. I am contacting LUIS to determine the intent");
string what_i_got = await LuisHelper.ExecuteMyLuisQuery(Configuration, Logger, stepContext.Context, cancellationToken);
CoreBot.StorageLogging.LogToTableAsync($"LUIS intent matched: {what_i_got}");
//await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { …Run Code Online (Sandbox Code Playgroud) c# botframework azure-language-understanding azure-bot-service
我正在实施一个团队机器人,并使用身份服务器作为我们在 Bot Channel 中设置的身份验证。使用时效果很好
var signInLink = await (turnContext.Adapter as IUserTokenProvider).GetOauthSignInLinkAsync(turnContext, _connectionName, cancellationToken);
但是,似乎我们无法通过添加例如 &acr_values=idp:Aad 来将首选登录方法添加到调用中,我找不到在创建链接时添加额外参数的方法,我希望它是创建链接时可以发送到 GetOauthSignInLinkAsync,但似乎不可能。
创建后将其添加到链接时 不起作用,即https://token.botframework.com/api/oauth/signin?signin=xxx&acr_values=idp:Aad有谁知道是否可以这样做?或者有一个解决方法的想法?问候马丁
botframework ×6
azure ×3
.net-core ×2
c# ×2
asp.net-core ×1
azure-language-understanding ×1
bots ×1
node.js ×1
oauth-2.0 ×1