标签: azure-bot-service

Azure聊天中间件的依赖注入?

我正在使用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

9
推荐指数
1
解决办法
831
查看次数

ChatBot 在 Web 模拟器中不起作用,但在本地 Bot Framework 模拟器中运行良好

我开发了与 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

9
推荐指数
1
解决办法
567
查看次数

如何访问Azure上部署的VS代码

如何访问从Visual Studio部署到Azure的所有文件?我正在使用bot框架创建一个机器人,然后我发布.但是,当我在网上查看代码时,我无法通过App Service Editor/Kudu /等查看所有文件.无法找到导航站点目录的文件.

有人知道吗?

azure botframework azure-bot-service

8
推荐指数
2
解决办法
91
查看次数

计划在Bot Framework SDK中支持.NET Core?

是否有计划在不久的将来支持.NET Core?我的意思是,没有重构我的机器人代码.仍有与之不兼容的组件.

.net-core botframework azure-bot-service

7
推荐指数
1
解决办法
1469
查看次数

在尝试打开Azure门户中非常存在的Bot服务时,为什么Azure"无法找到具有指定ID的机器人"?

我遇到了一个问题,我无法在互联网上的任何地方找到任何信息.我与许多同事共享一个Azure目录,因此,我们中的任何人都可能正在使用Portal中的资源.但是,当任何人创建Bot服务时,没有其他人可以访问该资源.请注意,创建Bot服务的人可以随心所欲地使用它,但是其他任何人都会看到错误"无法找到具有指定ID的机器人".(按原样写) 此错误消息显示在空白屏幕上的提示框(带有

我们知道权限没有问题,因为每个人都可以完全访问所有内容,而且问题似乎只出现在Bot服务资源上.

bots azure azure-bot-service

6
推荐指数
1
解决办法
836
查看次数

Bot服务不能与Node.js一起使用.错误无法找到模块'botbuilder'

我通过带有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)

对错误的任何建议?

node.js azure-bot-service

6
推荐指数
1
解决办法
2770
查看次数

Microsoft Azure中功能Bot,Web App Bot和Bot通道注册之间的区别?

有什么不同?我在这里,Microsoft Azure或Azure Bot Service上找不到有关所有三项服务的特定信息...

azure azure-bot-service

6
推荐指数
1
解决办法
1889
查看次数

如何查找 QnAMaker 的知识库 ID (kbid)?

我正在尝试将 QnAmaker 知识库与 Azure 机器人服务集成。我无法在 QnAMaker 门户上找到知识库 ID。 如何在QnAPortal中找到kbid?

botframework azure-bot-service azure-qna-maker

6
推荐指数
1
解决办法
1837
查看次数

带有LUIS和WaterFall对话框的Azure Bot Framework Bot以异常方式执行。意外的对话流

我正在为我自己的目的,为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

6
推荐指数
1
解决办法
248
查看次数

使用 GetOauthSignInLinkAsync 时发送 acr_values

我正在实施一个团队机器人,并使用身份服务器作为我们在 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有谁知道是否可以这样做?或者有一个解决方法的想法?问候马丁

oauth-2.0 botframework microsoft-teams azure-bot-service

6
推荐指数
1
解决办法
209
查看次数