有人可以帮助如何使用 Bot Framweork 的最新预览/2.0 版本启用/开发自定义操作。微软文档似乎只适用于 v1.4.1
谢谢
有人可以帮助如何使用 Bot Framweork 的最新预览/2.0 版本启用/开发自定义操作。微软文档似乎只适用于 v1.4.1
谢谢
因此,BotComponents 是自定义操作的新途径。请按照此处的说明进行操作。您可能需要更改的两件事是:
Microsoft.Azure.KeyVault.Core
. 我参加3.0.5
了这两个项目。"components":[{"name":"MultiplyDialog"}]
而不是"components":[{"name":"CustomAction.MultiplyDialog"}]
.在第 2 点上,我遇到了构建错误 ( FileNotFoundException: Could not load file or assembly 'CustomAction.MultiplyDialog
),因此执行了上述操作来解决。奇怪的是,一旦我能够在 VS 中构建,然后在 Composer 中运行和测试,它再次回到 . CustomAction.MultiplyDialog
,但它可以工作。
2.0
一旦发布,该文档应该成为 Composer 文档的途径。
请在此处找到文档。
将一个名为 MultiplyDialog 的新项目添加到您的解决方案中。在 Visual Studio 中,右键单击解决方案资源管理器中的解决方案,然后选择添加 > 新项目。使用类库项目模板。
添加对 Microsoft.Bot.Builder.Adaptive.Runtime 包的引用。使用与机器人所依赖的相同版本。
将 bot 项目中的项目引用添加到组件项目中。右键单击项目并选择添加 > 项目引用。选择 MultiplyDialog 项目并单击 OK。
构建整个解决方案以恢复所有包并验证依赖关系树。
创建自定义操作
Composer 中的操作是 Dialog 基类的特殊实现。这允许触发器中的每个操作被推送到对话框堆栈上,并依次执行。
在新项目中,将 Class1.cs 文件重命名为 MultiplyDialog.cs,并将其内容更新为如下所示:
using System;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using AdaptiveExpressions.Properties;
using Microsoft.Bot.Builder.Dialogs;
using Newtonsoft.Json;
public class MultiplyDialog : Dialog
{
[JsonConstructor]
public MultiplyDialog([CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0)
: base()
{
// enable instances of this command as debug break point
RegisterSourceLocation(sourceFilePath, sourceLineNumber);
}
[JsonProperty("$kind")]
public const string Kind = "MultiplyDialog";
[JsonProperty("arg1")]
public NumberExpression Arg1 { get; set; }
[JsonProperty("arg2")]
public NumberExpression Arg2 { get; set; }
[JsonProperty("resultProperty")]
public StringExpression ResultProperty { get; set; }
public override Task<DialogTurnResult> BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default(CancellationToken))
{
var arg1 = Arg1.GetValue(dc.State);
var arg2 = Arg2.GetValue(dc.State);
var result = Convert.ToInt32(arg1) * Convert.ToInt32(arg2);
if (this.ResultProperty != null)
{
dc.State.SetValue(this.ResultProperty.GetValue(dc.State), result);
}
return dc.EndDialogAsync(result: result, cancellationToken: cancellationToken);
}
}
创建架构文件
组件的 .schema 文件是部分架构,将合并到机器人的主 .schema 文件中。虽然可以直接编辑机器人的主 sdk.schema 文件,但不建议这样做。合并部分模式文件将隔离更改,允许更轻松地从错误中恢复,并使组件更容易打包以供重用。
在名为 MultiplyDialog.schema 的项目中创建一个新文件,并将内容更新为以下内容:
{
"$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema",
"$role": "implements(Microsoft.IDialog)",
"title": "Multiply",
"description": "This will return the result of arg1*arg2",
"type": "object",
"additionalProperties": false,
"properties": {
"arg1": {
"$ref": "schema:#/definitions/integerExpression",
"title": "Arg1",
"description": "Value from callers memory to use as arg 1"
},
"arg2": {
"$ref": "schema:#/definitions/integerExpression",
"title": "Arg2",
"description": "Value from callers memory to use as arg 2"
},
"resultProperty": {
"$ref": "schema:#/definitions/stringExpression",
"title": "Result",
"description": "Value from callers memory to store the result"
}
}
}
创建 BotComponent 类
自适应运行时将在启动时动态发现和注入组件。
在项目中新建MultiplyDialogBotComponent.cs文件,更新内容为
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Dialogs.Declarative;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
public class MultiplyDialogBotComponent : BotComponent
{
public override void ConfigureServices(IServiceCollection services, IConfiguration configuration)
{
// Anything that could be done in Startup.ConfigureServices can be done here.
// In this case, the MultiplyDialog needs to be added as a new DeclarativeType.
services.AddSingleton<DeclarativeType>(sp => new DeclarativeType<MultiplyDialog>(MultiplyDialog.Kind));
}
}
在机器人项目的 appsettings.json 文件(位于 \settings)中,将 MultiplyDialogBotComponent 包含在 runtimeSettings/components 数组中。
"runtimeSettings": {
"components": [
{
"name": "MultiplyDialog"
}
]
}
合并架构文件
最后一步是将 MultiplyDialog 项目中的部分模式文件合并到机器人的主 sdk.schema 文件中。这使得自定义操作可在 Composer 中使用。
导航到 myBot 项目中的 schemas 文件夹。此文件夹包含一个 PowerShell 脚本和一个 bash 脚本。使用提升的 PowerShell 终端执行 PowerShell 脚本。您将需要复制/粘贴脚本的内容,或者确保您的执行策略允许运行未签名的脚本。
要验证脚本是否成功执行,请在 MyBot\schemas\sdk.schema 文件中搜索 MultiplyDialog,并验证 MultiplyDialog.schema 文件中的部分模式是否包含在 sdk.schema 中。