diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b3de1d17bf..e2f664b4f2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -60,13 +60,13 @@ jobs: - name: Set Dotnet Version uses: actions/setup-dotnet@v1 with: - dotnet-version: "3.0.100" # SDK Version to use. + dotnet-version: "3.1.102" # SDK Version to use. - name: dotnet build run: dotnet build - working-directory: BotProject/CSharp + working-directory: BotProject/Templates/CSharp - name: dotnet test run: dotnet test - working-directory: BotProject/CSharp + working-directory: BotProject/Templates/CSharp docker-build: name: Docker Build diff --git a/BotProject/CSharp/.dockerignore b/BotProject/CSharp/.dockerignore deleted file mode 100644 index 31db54001a..0000000000 --- a/BotProject/CSharp/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -**/bin -**/obj \ No newline at end of file diff --git a/BotProject/CSharp/.gitignore b/BotProject/CSharp/.gitignore deleted file mode 100644 index 1557a3a3b1..0000000000 --- a/BotProject/CSharp/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ - -!Properties/launchSettings.json -!packages/packages.json diff --git a/BotProject/CSharp/BotManager.cs b/BotProject/CSharp/BotManager.cs deleted file mode 100644 index 89b76a332b..0000000000 --- a/BotProject/CSharp/BotManager.cs +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.IO; -using System.IO.Compression; -using System.Linq; -using System.Reflection; -using System.Threading.Tasks; -using Microsoft.Bot.Builder.BotFramework; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Debugging; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; -using Microsoft.Bot.Builder.Integration.AspNet.Core; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Extensions.Configuration; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - public class BotManager : IBotManager - { - private static readonly object Locker = new object(); - - public BotManager(IConfiguration config) - { - Config = config; - - // init work dir - WorkDir = ConvertPath("tmp"); - EnsureDirExists(WorkDir); - CleanDir(WorkDir); - - // set init bot - var bot = Config.GetSection("bot").Get(); - SetCurrent(bot); - } - - public IConfiguration Config { get; } - - public IBotFrameworkHttpAdapter CurrentAdapter { get; set; } - - public IBot CurrentBot { get; set; } - - private string WorkDir { get; } - - public static string ConvertPath(string relativePath) - { - var curDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); - return Path.Combine(curDir, relativePath); - } - - public static void EnsureDirExists(string dirPath) - { - var dirInfo = new DirectoryInfo(dirPath); - if (!dirInfo.Exists) - { - dirInfo.Create(); - } - } - - public static void CleanDir(string dirPath) - { - var dir = new DirectoryInfo(dirPath); - dir.GetFiles().ToList().ForEach(f => f.Delete()); - dir.GetDirectories().ToList().ForEach(d => d.Delete(true)); - } - - public void SetCurrent(string botDir) - { - IStorage storage = new MemoryStorage(); - var userState = new UserState(storage); - var conversationState = new ConversationState(storage); - var inspectionState = new InspectionState(storage); - - // manage all bot resources - var resourceExplorer = new ResourceExplorer().AddFolder(botDir); - - var adapter = new BotFrameworkHttpAdapter(new ConfigurationCredentialProvider(Config)); - - var credentials = new MicrosoftAppCredentials(Config["MicrosoftAppId"], Config["MicrosoftAppPassword"]); - - adapter - .UseStorage(storage) - .UseState(userState, conversationState) - .UseAdaptiveDialogs() - .UseResourceExplorer(resourceExplorer) - .UseLanguageGeneration(resourceExplorer, "common.lg") - .Use(new RegisterClassMiddleware(Config)) - .Use(new InspectionMiddleware(inspectionState, userState, conversationState, credentials)); - - adapter.OnTurnError = async (turnContext, exception) => - { - await turnContext.SendActivityAsync(exception.Message).ConfigureAwait(false); - - await conversationState.ClearStateAsync(turnContext).ConfigureAwait(false); - await conversationState.SaveChangesAsync(turnContext).ConfigureAwait(false); - }; - CurrentAdapter = adapter; - - CurrentBot = new ComposerBot("Main.dialog", conversationState, userState, resourceExplorer, DebugSupport.SourceMap); - } - - public void SetCurrent(Stream fileStream, string endpointKey = null, string appPwd = null) - { - lock (Locker) - { - // download file as tmp.zip - var downloadPath = SaveFile(fileStream, "tmp.zip").GetAwaiter().GetResult(); - - // extract to bot folder - var extractPath = ExtractFile(downloadPath, GenNewBotDir()); - - RetrieveSettingsFile(extractPath, endpointKey, appPwd); - SetCurrent(extractPath); - } - } - - public void RetrieveSettingsFile(string extractPath, string endpointKey, string appPwd) - { - var settingsPaths = Directory.GetFiles(extractPath, "appsettings.json", SearchOption.AllDirectories); - if (settingsPaths.Length == 0) - { - return; - } - - var settingsPath = settingsPaths.FirstOrDefault(); - - var settings = JsonConvert.DeserializeObject>(File.ReadAllText(settingsPath)); - - foreach (var pair in settings) - { - if (pair.Value is JObject) - { - foreach (var token in pair.Value as JObject) - { - string subkey = token.Key; - JToken subvalue = token.Value; - this.Config[$"{pair.Key}:{subkey}"] = subvalue.Value(); - } - } - else - { - this.Config[pair.Key.ToString()] = pair.Value.ToString(); - } - } - - if (!string.IsNullOrEmpty(endpointKey)) - { - var luconfigFile = JsonConvert.DeserializeObject(settings["luis"].ToString()); - AddLuisConfig(extractPath, luconfigFile, endpointKey); - } - - if (!string.IsNullOrEmpty(appPwd)) - { - AddOAuthConfig(appPwd); - } - } - - public void AddLuisConfig(string extractPath, LuisConfig luisConfig, string endpointKey) - { - var settingsName = $"luis.settings.{luisConfig.Environment}.{luisConfig.AuthoringRegion}.json"; - var luisEndpoint = $"https://{luisConfig.AuthoringRegion}.api.cognitive.microsoft.com"; - this.Config["luis:endpoint"] = luisEndpoint; - - // No luis settings - var luisPaths = Directory.GetFiles(extractPath, settingsName, SearchOption.AllDirectories); - if (luisPaths.Length == 0) - { - return; - } - - var luisPath = luisPaths[0]; - - var luisConfigJson = JsonConvert.DeserializeObject(File.ReadAllText(luisPath)); - - luisConfigJson.Luis.Add("endpointKey", endpointKey); - - foreach (var item in luisConfigJson.Luis) - { - this.Config[$"luis:{item.Key}"] = item.Value; - } - } - - private void AddOAuthConfig(string appPwd) - { - if (string.IsNullOrEmpty(appPwd)) - { - this.Config["MicrosoftAppPassword"] = string.Empty; - } - else - { - this.Config["MicrosoftAppPassword"] = appPwd; - } - } - - private string GenNewBotDir() - { - return System.Guid.NewGuid().ToString("N"); - } - - private async Task SaveFile(Stream fileStream, string fileName) - { - EnsureDirExists(WorkDir); - - var filePath = Path.Combine(WorkDir, fileName); - using (var outStream = new FileStream(filePath, FileMode.Create)) - { - await fileStream.CopyToAsync(outStream); - } - - return filePath; - } - - // Extract file to a dir - private string ExtractFile(string filePath, string dstDirPath) - { - EnsureDirExists(WorkDir); - - var finalDstPath = Path.Combine(WorkDir, dstDirPath); - - ZipFile.ExtractToDirectory(filePath, finalDstPath); - return finalDstPath; - } - } -} \ No newline at end of file diff --git a/BotProject/CSharp/BotProject.csproj b/BotProject/CSharp/BotProject.csproj deleted file mode 100644 index 4f0d7a31df..0000000000 --- a/BotProject/CSharp/BotProject.csproj +++ /dev/null @@ -1,46 +0,0 @@ - - - - netcoreapp2.1 - ade3d9c2-1633-4922-89e5-a4a50ccb3bc8 - - - - BotProject.ruleset - - - - BotProject.ruleset - - - - - - - - - - - - Always - - - - - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers - - - - diff --git a/BotProject/CSharp/BotProject.ruleset b/BotProject/CSharp/BotProject.ruleset deleted file mode 100644 index 845cc367f1..0000000000 --- a/BotProject/CSharp/BotProject.ruleset +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/BotProject/CSharp/BotProject.sln b/BotProject/CSharp/BotProject.sln deleted file mode 100644 index db73c02cd8..0000000000 --- a/BotProject/CSharp/BotProject.sln +++ /dev/null @@ -1,31 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.136 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotProject", "BotProject.csproj", "{80ACF5BE-4A04-46F8-A83E-530FB21948D5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{5AFADEA2-A18F-46DF-8080-2CA418880318}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {80ACF5BE-4A04-46F8-A83E-530FB21948D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80ACF5BE-4A04-46F8-A83E-530FB21948D5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80ACF5BE-4A04-46F8-A83E-530FB21948D5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80ACF5BE-4A04-46F8-A83E-530FB21948D5}.Release|Any CPU.Build.0 = Release|Any CPU - {5AFADEA2-A18F-46DF-8080-2CA418880318}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5AFADEA2-A18F-46DF-8080-2CA418880318}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5AFADEA2-A18F-46DF-8080-2CA418880318}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5AFADEA2-A18F-46DF-8080-2CA418880318}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B13FC467-1A63-4C8F-A29E-43B2D8B79B17} - EndGlobalSection -EndGlobal diff --git a/BotProject/CSharp/ComposerBot.cs b/BotProject/CSharp/ComposerBot.cs deleted file mode 100644 index f8d08a5977..0000000000 --- a/BotProject/CSharp/ComposerBot.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Bot.Builder.AI.QnA; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Debugging; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - public class ComposerBot : ActivityHandler - { - private AdaptiveDialog rootDialog; - private readonly ResourceExplorer resourceExplorer; - private readonly UserState userState; - private DialogManager dialogManager; - private readonly ConversationState conversationState; - private readonly IStatePropertyAccessor dialogState; - private readonly ISourceMap sourceMap; - - public ComposerBot(string rootDialogFile, ConversationState conversationState, UserState userState, ResourceExplorer resourceExplorer, ISourceMap sourceMap) - { - this.conversationState = conversationState; - this.userState = userState; - this.dialogState = conversationState.CreateProperty("DialogState"); - this.sourceMap = sourceMap; - this.resourceExplorer = resourceExplorer; - this.RootDialogFile = rootDialogFile; - DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); - - // auto reload dialogs when file changes - this.resourceExplorer.Changed += (resources) => - { - if (resources.Any(resource => resource.Id == ".dialog")) - { - Task.Run(() => this.LoadRootDialogAsync()); - } - }; - LoadRootDialogAsync(); - } - - private string RootDialogFile { get; set; } - - public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken)) - { - await this.dialogManager.OnTurnAsync(turnContext, cancellationToken: cancellationToken); - await this.conversationState.SaveChangesAsync(turnContext, false, cancellationToken); - await this.userState.SaveChangesAsync(turnContext, false, cancellationToken); - } - - private void LoadRootDialogAsync() - { - var rootFile = resourceExplorer.GetResource(RootDialogFile); - rootDialog = DeclarativeTypeLoader.Load(rootFile, resourceExplorer, sourceMap); - this.dialogManager = new DialogManager(rootDialog); - } - } -} \ No newline at end of file diff --git a/BotProject/CSharp/ComposerDialogs/Main/Main.dialog b/BotProject/CSharp/ComposerDialogs/Main/Main.dialog deleted file mode 100644 index cb675db8c8..0000000000 --- a/BotProject/CSharp/ComposerDialogs/Main/Main.dialog +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$type": "Microsoft.AdaptiveDialog", - "autoEndDialog": true, - "generator": "common.lg", - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema", - "triggers": [ - { - "$type": "Microsoft.OnBeginDialog", - "actions": [ - { - "$type": "Microsoft.SendActivity", - "activity": "@{bfdactivity-003038()}" - } - ] - } - ] -} diff --git a/BotProject/CSharp/ComposerDialogs/common/common.lg b/BotProject/CSharp/ComposerDialogs/common/common.lg deleted file mode 100644 index 681faf19ad..0000000000 --- a/BotProject/CSharp/ComposerDialogs/common/common.lg +++ /dev/null @@ -1,2 +0,0 @@ -# bfdactivity-003038 -- This is a default bot. diff --git a/BotProject/CSharp/Controllers/BotAdminController.cs b/BotProject/CSharp/Controllers/BotAdminController.cs deleted file mode 100644 index 25a325ed38..0000000000 --- a/BotProject/CSharp/Controllers/BotAdminController.cs +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v4.3.0 - -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - [Route("api/admin")] - [ApiController] - public class BotAdminController : ControllerBase - { - private readonly BotManager botManager; - - public BotAdminController(BotManager botManager) - { - this.botManager = botManager; - } - - [HttpGet] - public IActionResult GetAsync() - { - return Ok(); - } - - [HttpPost] - public IActionResult PostAsync(IFormFile file, [FromForm]string endpointKey = null, [FromForm]string microsoftAppPassword = null) - { - if (file == null) - { - return BadRequest(); - } - - botManager.SetCurrent(file.OpenReadStream(), endpointKey, microsoftAppPassword); - - return Ok(); - } - } -} diff --git a/BotProject/CSharp/Controllers/BotController.cs b/BotProject/CSharp/Controllers/BotController.cs deleted file mode 100644 index dc1ad5c782..0000000000 --- a/BotProject/CSharp/Controllers/BotController.cs +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -// -// Generated with Bot Builder V4 SDK Template for Visual Studio EchoBot v4.3.0 - -using System.Threading.Tasks; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Dialogs.Debugging; -using Microsoft.Bot.Builder.Integration.AspNet.Core; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - // This ASP Controller is created to handle a request. Dependency Injection will provide the Adapter and IBot - // implementation at runtime. Multiple different IBot implementations running at different endpoints can be - // achieved by specifying a more specific type for the bot constructor argument. - [Route("api/messages")] - [ApiController] - public class BotController : ControllerBase - { - private readonly BotManager botManager; - - public BotController(BotManager botManager) - { - this.botManager = botManager; - } - - [HttpPost] - [HttpGet] - public async Task PostAsync() - { - // Delegate the processing of the HTTP POST to the adapter. - // The adapter will invoke the bot. - await botManager.CurrentAdapter.ProcessAsync(Request, Response, botManager.CurrentBot); - } - } -} diff --git a/BotProject/CSharp/DeploymentTemplates/new-rg-parameters.json b/BotProject/CSharp/DeploymentTemplates/new-rg-parameters.json deleted file mode 100644 index ead3390932..0000000000 --- a/BotProject/CSharp/DeploymentTemplates/new-rg-parameters.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "groupLocation": { - "value": "" - }, - "groupName": { - "value": "" - }, - "appId": { - "value": "" - }, - "appSecret": { - "value": "" - }, - "botId": { - "value": "" - }, - "botSku": { - "value": "" - }, - "newAppServicePlanName": { - "value": "" - }, - "newAppServicePlanSku": { - "value": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - } - }, - "newAppServicePlanLocation": { - "value": "" - }, - "newWebAppName": { - "value": "" - } - } -} \ No newline at end of file diff --git a/BotProject/CSharp/DeploymentTemplates/preexisting-rg-parameters.json b/BotProject/CSharp/DeploymentTemplates/preexisting-rg-parameters.json deleted file mode 100644 index b6f5114fcc..0000000000 --- a/BotProject/CSharp/DeploymentTemplates/preexisting-rg-parameters.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "appId": { - "value": "" - }, - "appSecret": { - "value": "" - }, - "botId": { - "value": "" - }, - "botSku": { - "value": "" - }, - "newAppServicePlanName": { - "value": "" - }, - "newAppServicePlanSku": { - "value": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - } - }, - "appServicePlanLocation": { - "value": "" - }, - "existingAppServicePlan": { - "value": "" - }, - "newWebAppName": { - "value": "" - } - } -} \ No newline at end of file diff --git a/BotProject/CSharp/DeploymentTemplates/template-with-new-rg.json b/BotProject/CSharp/DeploymentTemplates/template-with-new-rg.json deleted file mode 100644 index 06b8284158..0000000000 --- a/BotProject/CSharp/DeploymentTemplates/template-with-new-rg.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "groupLocation": { - "type": "string", - "metadata": { - "description": "Specifies the location of the Resource Group." - } - }, - "groupName": { - "type": "string", - "metadata": { - "description": "Specifies the name of the Resource Group." - } - }, - "appId": { - "type": "string", - "metadata": { - "description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." - } - }, - "appSecret": { - "type": "string", - "metadata": { - "description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings." - } - }, - "botId": { - "type": "string", - "metadata": { - "description": "The globally unique and immutable bot ID. Also used to configure the displayName of the bot, which is mutable." - } - }, - "botSku": { - "type": "string", - "metadata": { - "description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." - } - }, - "newAppServicePlanName": { - "type": "string", - "metadata": { - "description": "The name of the App Service Plan." - } - }, - "newAppServicePlanSku": { - "type": "object", - "defaultValue": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - }, - "metadata": { - "description": "The SKU of the App Service Plan. Defaults to Standard values." - } - }, - "newAppServicePlanLocation": { - "type": "string", - "metadata": { - "description": "The location of the App Service Plan. Defaults to \"westus\"." - } - }, - "newWebAppName": { - "type": "string", - "defaultValue": "", - "metadata": { - "description": "The globally unique name of the Web App. Defaults to the value passed in for \"botId\"." - } - } - }, - "variables": { - "appServicePlanName": "[parameters('newAppServicePlanName')]", - "resourcesLocation": "[parameters('newAppServicePlanLocation')]", - "webAppName": "[if(empty(parameters('newWebAppName')), parameters('botId'), parameters('newWebAppName'))]", - "siteHost": "[concat(variables('webAppName'), '.azurewebsites.net')]", - "botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]" - }, - "resources": [ - { - "name": "[parameters('groupName')]", - "type": "Microsoft.Resources/resourceGroups", - "apiVersion": "2018-05-01", - "location": "[parameters('groupLocation')]", - "properties": { - } - }, - { - "type": "Microsoft.Resources/deployments", - "apiVersion": "2018-05-01", - "name": "storageDeployment", - "resourceGroup": "[parameters('groupName')]", - "dependsOn": [ - "[resourceId('Microsoft.Resources/resourceGroups/', parameters('groupName'))]" - ], - "properties": { - "mode": "Incremental", - "template": { - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": {}, - "variables": {}, - "resources": [ - { - "comments": "Create a new App Service Plan", - "type": "Microsoft.Web/serverfarms", - "name": "[variables('appServicePlanName')]", - "apiVersion": "2018-02-01", - "location": "[variables('resourcesLocation')]", - "sku": "[parameters('newAppServicePlanSku')]", - "properties": { - "name": "[variables('appServicePlanName')]" - } - }, - { - "comments": "Create a Web App using the new App Service Plan", - "type": "Microsoft.Web/sites", - "apiVersion": "2015-08-01", - "location": "[variables('resourcesLocation')]", - "kind": "app", - "dependsOn": [ - "[resourceId('Microsoft.Web/serverfarms/', variables('appServicePlanName'))]" - ], - "name": "[variables('webAppName')]", - "properties": { - "name": "[variables('webAppName')]", - "serverFarmId": "[variables('appServicePlanName')]", - "siteConfig": { - "appSettings": [ - { - "name": "WEBSITE_NODE_DEFAULT_VERSION", - "value": "10.14.1" - }, - { - "name": "MicrosoftAppId", - "value": "[parameters('appId')]" - }, - { - "name": "MicrosoftAppPassword", - "value": "[parameters('appSecret')]" - } - ], - "cors": { - "allowedOrigins": [ - "https://botservice.hosting.portal.azure.net", - "https://hosting.onecloud.azure-test.net/" - ] - } - } - } - }, - { - "apiVersion": "2017-12-01", - "type": "Microsoft.BotService/botServices", - "name": "[parameters('botId')]", - "location": "global", - "kind": "bot", - "sku": { - "name": "[parameters('botSku')]" - }, - "properties": { - "name": "[parameters('botId')]", - "displayName": "[parameters('botId')]", - "endpoint": "[variables('botEndpoint')]", - "msaAppId": "[parameters('appId')]", - "developerAppInsightsApplicationId": null, - "developerAppInsightKey": null, - "publishingCredentials": null, - "storageResourceId": null - }, - "dependsOn": [ - "[resourceId('Microsoft.Web/sites/', variables('webAppName'))]" - ] - } - ], - "outputs": {} - } - } - } - ] -} \ No newline at end of file diff --git a/BotProject/CSharp/DeploymentTemplates/template-with-preexisting-rg.json b/BotProject/CSharp/DeploymentTemplates/template-with-preexisting-rg.json deleted file mode 100644 index 43943b6581..0000000000 --- a/BotProject/CSharp/DeploymentTemplates/template-with-preexisting-rg.json +++ /dev/null @@ -1,154 +0,0 @@ -{ - "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", - "contentVersion": "1.0.0.0", - "parameters": { - "appId": { - "type": "string", - "metadata": { - "description": "Active Directory App ID, set as MicrosoftAppId in the Web App's Application Settings." - } - }, - "appSecret": { - "type": "string", - "metadata": { - "description": "Active Directory App Password, set as MicrosoftAppPassword in the Web App's Application Settings. Defaults to \"\"." - } - }, - "botId": { - "type": "string", - "metadata": { - "description": "The globally unique and immutable bot ID. Also used to configure the displayName of the bot, which is mutable." - } - }, - "botSku": { - "defaultValue": "F0", - "type": "string", - "metadata": { - "description": "The pricing tier of the Bot Service Registration. Acceptable values are F0 and S1." - } - }, - "newAppServicePlanName": { - "type": "string", - "defaultValue": "", - "metadata": { - "description": "The name of the new App Service Plan." - } - }, - "newAppServicePlanSku": { - "type": "object", - "defaultValue": { - "name": "S1", - "tier": "Standard", - "size": "S1", - "family": "S", - "capacity": 1 - }, - "metadata": { - "description": "The SKU of the App Service Plan. Defaults to Standard values." - } - }, - "appServicePlanLocation": { - "type": "string", - "metadata": { - "description": "The location of the App Service Plan." - } - }, - "existingAppServicePlan": { - "type": "string", - "defaultValue": "", - "metadata": { - "description": "Name of the existing App Service Plan used to create the Web App for the bot." - } - }, - "newWebAppName": { - "type": "string", - "defaultValue": "", - "metadata": { - "description": "The globally unique name of the Web App. Defaults to the value passed in for \"botId\"." - } - } - }, - "variables": { - "defaultAppServicePlanName": "[if(empty(parameters('existingAppServicePlan')), 'createNewAppServicePlan', parameters('existingAppServicePlan'))]", - "useExistingAppServicePlan": "[not(equals(variables('defaultAppServicePlanName'), 'createNewAppServicePlan'))]", - "servicePlanName": "[if(variables('useExistingAppServicePlan'), parameters('existingAppServicePlan'), parameters('newAppServicePlanName'))]", - "resourcesLocation": "[parameters('appServicePlanLocation')]", - "webAppName": "[if(empty(parameters('newWebAppName')), parameters('botId'), parameters('newWebAppName'))]", - "siteHost": "[concat(variables('webAppName'), '.azurewebsites.net')]", - "botEndpoint": "[concat('https://', variables('siteHost'), '/api/messages')]" - }, - "resources": [ - { - "comments": "Create a new App Service Plan if no existing App Service Plan name was passed in.", - "type": "Microsoft.Web/serverfarms", - "condition": "[not(variables('useExistingAppServicePlan'))]", - "name": "[variables('servicePlanName')]", - "apiVersion": "2018-02-01", - "location": "[variables('resourcesLocation')]", - "sku": "[parameters('newAppServicePlanSku')]", - "properties": { - "name": "[variables('servicePlanName')]" - } - }, - { - "comments": "Create a Web App using an App Service Plan", - "type": "Microsoft.Web/sites", - "apiVersion": "2015-08-01", - "location": "[variables('resourcesLocation')]", - "kind": "app", - "dependsOn": [ - "[resourceId('Microsoft.Web/serverfarms/', variables('servicePlanName'))]" - ], - "name": "[variables('webAppName')]", - "properties": { - "name": "[variables('webAppName')]", - "serverFarmId": "[variables('servicePlanName')]", - "siteConfig": { - "appSettings": [ - { - "name": "WEBSITE_NODE_DEFAULT_VERSION", - "value": "10.14.1" - }, - { - "name": "MicrosoftAppId", - "value": "[parameters('appId')]" - }, - { - "name": "MicrosoftAppPassword", - "value": "[parameters('appSecret')]" - } - ], - "cors": { - "allowedOrigins": [ - "https://botservice.hosting.portal.azure.net", - "https://hosting.onecloud.azure-test.net/" - ] - } - } - } - }, - { - "apiVersion": "2017-12-01", - "type": "Microsoft.BotService/botServices", - "name": "[parameters('botId')]", - "location": "global", - "kind": "bot", - "sku": { - "name": "[parameters('botSku')]" - }, - "properties": { - "name": "[parameters('botId')]", - "displayName": "[parameters('botId')]", - "endpoint": "[variables('botEndpoint')]", - "msaAppId": "[parameters('appId')]", - "developerAppInsightsApplicationId": null, - "developerAppInsightKey": null, - "publishingCredentials": null, - "storageResourceId": null - }, - "dependsOn": [ - "[resourceId('Microsoft.Web/sites/', variables('webAppName'))]" - ] - } - ] -} \ No newline at end of file diff --git a/BotProject/CSharp/IBotManager.cs b/BotProject/CSharp/IBotManager.cs deleted file mode 100644 index 99e421c818..0000000000 --- a/BotProject/CSharp/IBotManager.cs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.IO; -using Microsoft.Bot.Builder.Integration.AspNet.Core; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - public interface IBotManager - { - IBotFrameworkHttpAdapter CurrentAdapter { get; } - - IBot CurrentBot { get; } - - void SetCurrent(Stream fileStream, string endpointKey = null, string appPwd = null); - } -} diff --git a/BotProject/CSharp/LuisConfig.cs b/BotProject/CSharp/LuisConfig.cs deleted file mode 100644 index 506d52e343..0000000000 --- a/BotProject/CSharp/LuisConfig.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - public class LuisConfig - { - public string Name { get; set; } - - public string DefaultLanguage { get; set; } - - public List Models { get; set; } - - public string AuthoringKey { get; set; } - - public bool Dialogs { get; set; } - - public string Environment { get; set; } - - public bool Autodelete { get; set; } - - public string AuthoringRegion { get; set; } - - public string Folder { get; set; } - - public bool Help { get; set; } - - public bool Force { get; set; } - - public string Config { get; set; } - - public string EndpointKeys { get; set; } - } -} diff --git a/BotProject/CSharp/LuisCustomConfig.cs b/BotProject/CSharp/LuisCustomConfig.cs deleted file mode 100644 index 5b468ccdc7..0000000000 --- a/BotProject/CSharp/LuisCustomConfig.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System.Collections.Generic; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - public class LuisCustomConfig - { - public Dictionary Luis { get; set; } - } -} diff --git a/BotProject/CSharp/LuisKey.cs b/BotProject/CSharp/LuisKey.cs deleted file mode 100644 index e8564950e1..0000000000 --- a/BotProject/CSharp/LuisKey.cs +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - public class LuisKey - { - public string Key { get; set; } - } -} diff --git a/BotProject/CSharp/NuGet.Config b/BotProject/CSharp/NuGet.Config deleted file mode 100644 index 11ff1952c1..0000000000 --- a/BotProject/CSharp/NuGet.Config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/BotProject/CSharp/Program.cs b/BotProject/CSharp/Program.cs deleted file mode 100644 index d2fa81364c..0000000000 --- a/BotProject/CSharp/Program.cs +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using System; -using System.IO; -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - public class Program - { - public static void Main(string[] args) - { - BuildWebHost(args).Run(); - } - - public static IWebHost BuildWebHost(string[] args) => - WebHost.CreateDefaultBuilder(args) - .ConfigureAppConfiguration((hostingContext, config) => - { - var env = hostingContext.HostingEnvironment; - var luisAuthoringRegion = Environment.GetEnvironmentVariable("LUIS_AUTHORING_REGION") ?? "westus"; - config - .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) - .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true) - .AddJsonFile($"luis.settings.{env.EnvironmentName}.{luisAuthoringRegion}.json", optional: true, reloadOnChange: true) - .AddJsonFile($"luis.settings.{Environment.UserName}.{luisAuthoringRegion}.json", optional: true, reloadOnChange: true); - - if (env.IsDevelopment()) - { - config.AddUserSecrets(); - } - - config - .AddEnvironmentVariables() - .AddCommandLine(args); - }).UseStartup() - .Build(); - } -} diff --git a/BotProject/CSharp/Properties/launchSettings.json b/BotProject/CSharp/Properties/launchSettings.json deleted file mode 100644 index 33c8346152..0000000000 --- a/BotProject/CSharp/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:3979/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "BotProject": { - "commandName": "Project", - "launchBrowser": true, - "applicationUrl": "http://localhost:3979", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} \ No newline at end of file diff --git a/BotProject/CSharp/README.md b/BotProject/CSharp/README.md deleted file mode 100644 index 7f9cbbefb2..0000000000 --- a/BotProject/CSharp/README.md +++ /dev/null @@ -1,55 +0,0 @@ -## Bot Project -Bot project is the launcher project for the bots written in declarative form (JSON), using the Composer, for the Bot Framework SDK. - -## Instructions for setting up the Bot Project runtime -The Bot Project is a regular Bot Framework SDK V4 project. Before you can launch it from the emulator, you need to make sure you can run the bot. - -### Prerequisite: -* Install .Netcore 2 - -### Commands: - -* from root folder -* cd BotProject -* cd CSharp -* dotnet restore // for the package updates -* dotnet build // build -* dotnet run // start the bot -* It will start a web server and listening at http://localhost:3979. - -### Test bot -* You can set you emulator to connect to http://localhost:3979/api/messages. - -### config your bot -This setup is required for local testing of your Bot Runtime. -* The only thing you need to config is appsetting.json, which has a bot setting to launch the bot: - -``` -appsettings.json: -"bot": { - "provider": "localDisk", - "path": "../../Bots/SampleBot3/bot3.botproj" -} -``` - -## .botproj folder structure -``` -bot.botproj, bot project got the rootDialog from "entry" -{ - "services": [{ - "type": "luis", - "id": "1", - "name": "TodoBotLuis", - "lufile": "todo.lu", - "applicationId": "TodoBotLuis.applicationId", - "endpointKey": "TodoBotLuis.endpointKey", - "endpoint": "TodoBotLuis.endpoint" - }], - "files": [ - "*.dialog", - "*.lg" - ], - "entry": "main.dialog" -} -``` -* Please refer to [Samples](https://github.com/Microsoft/BotFramework-Composer/tree/master/SampleBots) for more samples. diff --git a/BotProject/CSharp/Schemas/sdk.schema b/BotProject/CSharp/Schemas/sdk.schema deleted file mode 100644 index fc90997234..0000000000 --- a/BotProject/CSharp/Schemas/sdk.schema +++ /dev/null @@ -1,6998 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/microsoft/botbuilder-dotnet/4.Future/schemas/component.schema", - "$id": "sdk.schema", - "type": "object", - "title": "Component types", - "description": "These are all of the types that can be created by the loader.", - "oneOf": [ - { - "title": "Microsoft.ActivityTemplate", - "description": "", - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "title": "Microsoft.AdaptiveDialog", - "description": "Flexible, data driven dialog that can adapt to the conversation.", - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "title": "Microsoft.AgeEntityRecognizer", - "description": "Recognizer which recognizes age.", - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "title": "Microsoft.AttachmentInput", - "description": "Collect information - Ask for a file or image.", - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "title": "Microsoft.BeginDialog", - "description": "Begin another dialog.", - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "title": "Microsoft.CancelAllDialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "title": "Microsoft.ChoiceInput", - "description": "Collect information - Pick from a list of choices", - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "title": "Microsoft.ConditionalSelector", - "description": "Use a rule selector based on a condition", - "$ref": "#/definitions/Microsoft.ConditionalSelector" - }, - { - "title": "Microsoft.ConfirmInput", - "description": "Collect information - Ask for confirmation (yes or no).", - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "title": "Microsoft.ConfirmationEntityRecognizer", - "description": "Recognizer which recognizes confirmation choices (yes/no).", - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "title": "Microsoft.CurrencyEntityRecognizer", - "description": "Recognizer which recognizes currency.", - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "title": "Microsoft.DateTimeEntityRecognizer", - "description": "Recognizer which recognizes dates and time fragments.", - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "title": "Microsoft.DateTimeInput", - "description": "Collect information - Ask for date and/ or time", - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "title": "Microsoft.DebugBreak", - "description": "If debugger is attached, stop the execution at this point in the conversation.", - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "title": "Microsoft.DeleteProperty", - "description": "Delete a property and any value it holds.", - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "title": "Microsoft.DimensionEntityRecognizer", - "description": "Recognizer which recognizes dimension.", - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "title": "Microsoft.EditActions", - "description": "Edit the current list of actions.", - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "title": "Microsoft.EditArray", - "description": "Modify an array in memory", - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "title": "Microsoft.EmailEntityRecognizer", - "description": "Recognizer which recognizes email.", - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "title": "Microsoft.EmitEvent", - "description": "Emit an event. Capture this event with a trigger.", - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "title": "Microsoft.EndDialog", - "description": "End this dialog.", - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "title": "Microsoft.EndTurn", - "description": "End the current turn without ending the dialog.", - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "title": "Microsoft.FirstSelector", - "description": "Selector for first true rule", - "$ref": "#/definitions/Microsoft.FirstSelector" - }, - { - "title": "Microsoft.Foreach", - "description": "Execute actions on each item in an a collection.", - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "title": "Microsoft.ForeachPage", - "description": "Execute actions on each page (collection of items) in an array.", - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "title": "Microsoft.GuidEntityRecognizer", - "description": "Recognizer which recognizes guids.", - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "title": "Microsoft.HashtagEntityRecognizer", - "description": "Recognizer which recognizes Hashtags.", - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "title": "Microsoft.HttpRequest", - "description": "Make a HTTP request.", - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "title": "Microsoft.IfCondition", - "description": "Two-way branch the conversation flow based on a condition.", - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "title": "Microsoft.InitProperty", - "description": "Define and initialize a property to be an array or object.", - "$ref": "#/definitions/Microsoft.InitProperty" - }, - { - "title": "Microsoft.IpEntityRecognizer", - "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "title": "Microsoft.LanguagePolicy", - "description": "This represents a policy map for locales lookups to use for language", - "$ref": "#/definitions/Microsoft.LanguagePolicy" - }, - { - "title": "Microsoft.LogAction", - "description": "Log a message to the host application. Send a TraceActivity to Bot Framework Emulator (optional).", - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "title": "Microsoft.LuisRecognizer", - "description": "LUIS recognizer.", - "$ref": "#/definitions/Microsoft.LuisRecognizer" - }, - { - "title": "Microsoft.MentionEntityRecognizer", - "description": "Recognizer which recognizes @Mentions", - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "title": "Microsoft.MostSpecificSelector", - "description": "Select most specific true events with optional additional selector", - "$ref": "#/definitions/Microsoft.MostSpecificSelector" - }, - { - "title": "Microsoft.MultiLanguageRecognizer", - "description": "Configure one recognizer per language and the specify the language fallback policy.", - "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" - }, - { - "title": "Microsoft.NumberEntityRecognizer", - "description": "Recognizer which recognizes numbers.", - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "title": "Microsoft.NumberInput", - "description": "Collect information - Ask for a number.", - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "title": "Microsoft.NumberRangeEntityRecognizer", - "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "title": "Microsoft.OAuthInput", - "description": "Collect login information.", - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "title": "Microsoft.OnActivity", - "description": "Actions to perform on receipt of a generic activity.", - "$ref": "#/definitions/Microsoft.OnActivity" - }, - { - "title": "Microsoft.OnBeginDialog", - "description": "Actions to perform when this dialog begins.", - "$ref": "#/definitions/Microsoft.OnBeginDialog" - }, - { - "title": "Microsoft.OnCancelDialog", - "description": "Actions to perform on cancel dialog event.", - "$ref": "#/definitions/Microsoft.OnCancelDialog" - }, - { - "title": "Microsoft.OnCondition", - "description": "Actions to perform when specified condition is true.", - "$ref": "#/definitions/Microsoft.OnCondition" - }, - { - "title": "Microsoft.OnConversationUpdateActivity", - "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate'.", - "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" - }, - { - "title": "Microsoft.OnCustomEvent", - "description": "Actions to perform when a custom event is detected. Use 'Emit a custom event' action to raise a custom event.", - "$ref": "#/definitions/Microsoft.OnCustomEvent" - }, - { - "title": "Microsoft.OnDialogEvent", - "description": "Actions to perform when a specific dialog event occurs.", - "$ref": "#/definitions/Microsoft.OnDialogEvent" - }, - { - "title": "Microsoft.OnEndOfConversationActivity", - "description": "Actions to perform on receipt of an activity with type 'EndOfConversation'.", - "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" - }, - { - "title": "Microsoft.OnError", - "description": "Action to perform when an 'Error' dialog event occurs.", - "$ref": "#/definitions/Microsoft.OnError" - }, - { - "title": "Microsoft.OnEventActivity", - "description": "Actions to perform on receipt of an activity with type 'Event'.", - "$ref": "#/definitions/Microsoft.OnEventActivity" - }, - { - "title": "Microsoft.OnHandoffActivity", - "description": "Actions to perform on receipt of an activity with type 'HandOff'.", - "$ref": "#/definitions/Microsoft.OnHandoffActivity" - }, - { - "title": "Microsoft.OnIntent", - "description": "Actions to perform when specified intent is recognized.", - "$ref": "#/definitions/Microsoft.OnIntent" - }, - { - "title": "Microsoft.OnInvokeActivity", - "description": "Actions to perform on receipt of an activity with type 'Invoke'.", - "$ref": "#/definitions/Microsoft.OnInvokeActivity" - }, - { - "title": "Microsoft.OnMessageActivity", - "description": "Actions to perform on receipt of an activity with type 'Message'. Overrides Intent trigger.", - "$ref": "#/definitions/Microsoft.OnMessageActivity" - }, - { - "title": "Microsoft.OnMessageDeleteActivity", - "description": "Actions to perform on receipt of an activity with type 'MessageDelete'.", - "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" - }, - { - "title": "Microsoft.OnMessageReactionActivity", - "description": "Actions to perform on receipt of an activity with type 'MessageReaction'.", - "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" - }, - { - "title": "Microsoft.OnMessageUpdateActivity", - "description": "Actions to perform on receipt of an activity with type 'MessageUpdate'.", - "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" - }, - { - "title": "Microsoft.OnRepromptDialog", - "description": "Actions to perform when 'RepromptDialog' event occurs.", - "$ref": "#/definitions/Microsoft.OnRepromptDialog" - }, - { - "title": "Microsoft.OnTypingActivity", - "description": "Actions to perform on receipt of an activity with type 'Typing'.", - "$ref": "#/definitions/Microsoft.OnTypingActivity" - }, - { - "title": "Microsoft.OnUnknownIntent", - "description": "Action to perform when user input is unrecognized and if none of the 'on intent recognition' triggers match recognized intent.", - "$ref": "#/definitions/Microsoft.OnUnknownIntent" - }, - { - "title": "Microsoft.OrdinalEntityRecognizer", - "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "title": "Microsoft.PercentageEntityRecognizer", - "description": "Recognizer which recognizes percentages.", - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "title": "Microsoft.PhoneNumberEntityRecognizer", - "description": "Recognizer which recognizes phone numbers.", - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "title": "Microsoft.QnAMakerDialog", - "description": "Dialog which uses QnAMAker knowledge base to answer questions.", - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "title": "Microsoft.RandomSelector", - "description": "Select most specific true rule", - "$ref": "#/definitions/Microsoft.RandomSelector" - }, - { - "title": "Microsoft.RegExEntityRecognizer", - "description": "Recognizer which recognizes patterns of input based on regex.", - "$ref": "#/definitions/Microsoft.RegExEntityRecognizer" - }, - { - "title": "Microsoft.RegexRecognizer", - "description": "Use regular expressions to recognize intents and entities from user input.", - "$ref": "#/definitions/Microsoft.RegexRecognizer" - }, - { - "title": "Microsoft.RepeatDialog", - "description": "Repeat current dialog.", - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "title": "Microsoft.ReplaceDialog", - "description": "Replace current dialog with another dialog.", - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "title": "Microsoft.SendActivity", - "description": "Respond with an activity.", - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "title": "Microsoft.SetProperty", - "description": "Set property to a value.", - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "title": "Microsoft.StaticActivityTemplate", - "description": "This allows you to define a static Activity object", - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - }, - { - "title": "Microsoft.SwitchCondition", - "description": "Execute different actions based on the value of a property.", - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "title": "Microsoft.TemperatureEntityRecognizer", - "description": "Recognizer which recognizes temperatures.", - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "title": "Microsoft.TextInput", - "description": "Collection information - Ask for a word or sentence.", - "$ref": "#/definitions/Microsoft.TextInput" - }, - { - "title": "Microsoft.TextTemplate", - "description": "Lg tempalte to evaluate to create text", - "$ref": "#/definitions/Microsoft.TextTemplate" - }, - { - "title": "Microsoft.TraceActivity", - "description": "Send a trace activity to the transcript logger and/ or Bot Framework Emulator.", - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "title": "Microsoft.TrueSelector", - "description": "Selector for all true events", - "$ref": "#/definitions/Microsoft.TrueSelector" - }, - { - "title": "Microsoft.UrlEntityRecognizer", - "description": "Recognizer which recognizes urls (example: http://bing.com)", - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - } - ], - "definitions": { - "Microsoft.ActivityTemplate": { - "$role": "unionType(Microsoft.IActivityTemplate)", - "title": "Microsoft ActivityTemplate", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ActivityTemplate" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "template": { - "title": "Template", - "Description": "Language Generator template to use to create the activity", - "type": "string" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "template", - "$type" - ] - } - ] - }, - "Microsoft.AdaptiveDialog": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Adaptive Dialog", - "description": "Flexible, data driven dialog that can adapt to the conversation.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AdaptiveDialog" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional dialog ID." - }, - "autoEndDialog": { - "type": "boolean", - "title": "Auto end dialog", - "description": "If set to true the dialog will automatically end when there are no further actions. If set to false, remember to manually end the dialog using EndDialog action.", - "default": "true" - }, - "defaultResultProperty": { - "type": "string", - "title": "Default result property", - "description": "Value that will be passed back to the parent dialog.", - "default": "dialog.result" - }, - "recognizer": { - "$type": "Microsoft.IRecognizer", - "title": "Recognizer", - "description": "Language Understanding recognizer that interprets user input into intent and entities.", - "$ref": "#/definitions/Microsoft.IRecognizer" - }, - "generator": { - "$type": "Microsoft.ILanguageGenerator", - "title": "Language Generator", - "description": "Language generator that generates bot responses.", - "$ref": "#/definitions/Microsoft.ILanguageGenerator" - }, - "selector": { - "$type": "Microsoft.ITriggerSelector", - "title": "Selector", - "description": "Policy to determine which trigger is executed. Defaults to a 'best match' selector (optional).", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "triggers": { - "type": "array", - "description": "List of triggers defined for this dialog.", - "title": "Triggers", - "items": { - "$type": "Microsoft.ITriggerCondition", - "$ref": "#/definitions/Microsoft.ITriggerCondition" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.AgeEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Age Entity Recognizer", - "description": "Recognizer which recognizes age.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AgeEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.AttachmentInput": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Attachment input dialog", - "description": "Collect information - Ask for a file or image.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.AttachmentInput" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "prompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", - "examples": [ - "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$type": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "type": "integer", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ], - "items": { - "$role": "expression", - "type": "string", - "description": "String must contain an expression." - } - }, - "property": { - "$role": "expression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "user.name", - "conversation.issueTitle", - "dialog.favColor" - ], - "type": "string" - }, - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@userName", - "coalesce(@number, @partySize)" - ], - "type": "string" - }, - "alwaysPrompt": { - "type": "boolean", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false - ] - }, - "allowInterruptions": { - "type": "string", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": "true", - "examples": [ - "true" - ] - }, - "outputFormat": { - "type": "string", - "enum": [ - "all", - "first" - ], - "title": "Output format", - "description": "Attachment output format.", - "default": "first" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.BeginDialog": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Begin a dialog", - "description": "Begin another dialog.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.BeginDialog" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "dialog": { - "$type": "Microsoft.IDialog", - "title": "Dialog name", - "description": "Name of the dialog to call.", - "examples": [ - "AddToDoDialog" - ], - "$ref": "#/definitions/Microsoft.IDialog" - }, - "options": { - "type": "object", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options" - } - }, - "resultProperty": { - "$role": "expression", - "title": "Property", - "description": "Property to store any value returned by the dialog that is called.", - "examples": [ - "dialog.userName" - ], - "type": "string" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.CancelAllDialogs": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Cancel all dialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CancelAllDialogs" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "eventName": { - "title": "Event name", - "description": "Name of the event to emit.", - "type": "string" - }, - "eventValue": { - "type": "object", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.ChoiceInput": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Choice input dialog", - "description": "Collect information - Pick from a list of choices", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ChoiceInput" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "prompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", - "examples": [ - "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$type": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "type": "integer", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ], - "items": { - "$role": "expression", - "type": "string", - "description": "String must contain an expression." - } - }, - "property": { - "$role": "expression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "user.name", - "conversation.issueTitle", - "dialog.favColor" - ], - "type": "string" - }, - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@userName", - "coalesce(@number, @partySize)" - ], - "type": "string" - }, - "alwaysPrompt": { - "type": "boolean", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false - ] - }, - "allowInterruptions": { - "type": "string", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": "true", - "examples": [ - "true" - ] - }, - "outputFormat": { - "type": "string", - "enum": [ - "value", - "index" - ], - "title": "Output format", - "description": "Choice output format.", - "default": "value" - }, - "choices": { - "anyOf": [ - { - "$role": "expression", - "type": "string", - "description": "String must contain an expression." - }, - { - "type": "array", - "items": [ - { - "type": "string" - } - ] - }, - { - "type": "array", - "items": [ - { - "title": "Choice", - "type": "object", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "type": "object", - "title": "Action", - "description": "Card action for the choice." - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional).", - "items": { - "type": "string" - } - } - } - } - ] - } - ] - }, - "appendChoices": { - "type": "boolean", - "title": "Append choices", - "description": "Compose an output activity containing a set of choices", - "default": "true" - }, - "defaultLocale": { - "type": "string", - "title": "Default locale", - "description": "Default locale.", - "default": "en-us" - }, - "style": { - "type": "string", - "enum": [ - "None", - "Auto", - "Inline", - "List", - "SuggestedAction", - "HeroCard" - ], - "title": "List style", - "description": "Style to render choices.", - "default": "Auto" - }, - "choiceOptions": { - "type": "object", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Character used to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Separator inserted between the choices when there are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, 'inline' and 'list' list style will be prefixed with the index of the choice.", - "default": true - } - } - }, - "recognizerOptions": { - "type": "object", - "properties": { - "noValue": { - "type": "boolean", - "title": "No value", - "description": "If true, the choices value field will NOT be search over", - "default": false - }, - "noAction": { - "type": "boolean", - "title": "No action", - "description": "If true, the the choices action.title field will NOT be searched over", - "default": false - } - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.ConditionalSelector": { - "$role": "unionType(Microsoft.ITriggerSelector)", - "title": "Condtional Trigger Selector", - "description": "Use a rule selector based on a condition", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConditionalSelector" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "type": "string", - "description": "String must contain an expression." - }, - "ifTrue": { - "$type": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - }, - "ifFalse": { - "$type": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "condition", - "ifTrue", - "ifFalse", - "$type" - ] - } - ] - }, - "Microsoft.ConfirmInput": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Confirm input dialog", - "description": "Collect information - Ask for confirmation (yes or no).", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmInput" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "prompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", - "examples": [ - "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$type": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "type": "integer", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ], - "items": { - "$role": "expression", - "type": "string", - "description": "String must contain an expression." - } - }, - "property": { - "$role": "expression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "user.name", - "conversation.issueTitle", - "dialog.favColor" - ], - "type": "string" - }, - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@userName", - "coalesce(@number, @partySize)" - ], - "type": "string" - }, - "alwaysPrompt": { - "type": "boolean", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false - ] - }, - "allowInterruptions": { - "type": "string", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": "true", - "examples": [ - "true" - ] - }, - "defaultLocale": { - "type": "string", - "title": "Default locale", - "description": "Default locale.", - "default": "en-us" - }, - "style": { - "type": "string", - "enum": [ - "None", - "Auto", - "Inline", - "List", - "SuggestedAction", - "HeroCard" - ], - "title": "List style", - "description": "Style to render choices.", - "default": "Auto" - }, - "choiceOptions": { - "type": "object", - "properties": { - "inlineSeparator": { - "type": "string", - "title": "Inline separator", - "description": "Character used to separate individual choices when there are more than 2 choices", - "default": ", " - }, - "inlineOr": { - "type": "string", - "title": "Inline or", - "description": "Separator inserted between the choices when their are only 2 choices", - "default": " or " - }, - "inlineOrMore": { - "type": "string", - "title": "Inline or more", - "description": "Separator inserted between the last 2 choices when their are more than 2 choices.", - "default": ", or " - }, - "includeNumbers": { - "type": "boolean", - "title": "Include numbers", - "description": "If true, inline and list style choices will be prefixed with the index of the choice.", - "default": true - } - } - }, - "confirmChoices": { - "type": "array", - "items": [ - { - "type": "object", - "properties": { - "value": { - "type": "string", - "title": "Value", - "description": "Value to return when this choice is selected." - }, - "action": { - "type": "object", - "title": "Action", - "description": "Card action for the choice" - }, - "synonyms": { - "type": "array", - "title": "Synonyms", - "description": "List of synonyms to recognize in addition to the value (optional)", - "items": { - "type": "string" - } - } - } - } - ] - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.ConfirmationEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Confirmation Entity Recognizer", - "description": "Recognizer which recognizes confirmation choices (yes/no).", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ConfirmationEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.CurrencyEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Currency Entity Recognizer", - "description": "Recognizer which recognizes currency.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.CurrencyEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.DateTimeEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "DateTime Entity Recognizer", - "description": "Recognizer which recognizes dates and time fragments.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.DateTimeInput": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Date/time input dialog", - "description": "Collect information - Ask for date and/ or time", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DateTimeInput" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "prompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", - "examples": [ - "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$type": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "type": "integer", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ], - "items": { - "$role": "expression", - "type": "string", - "description": "String must contain an expression." - } - }, - "property": { - "$role": "expression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "user.name", - "conversation.issueTitle", - "dialog.favColor" - ], - "type": "string" - }, - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@userName", - "coalesce(@number, @partySize)" - ], - "type": "string" - }, - "alwaysPrompt": { - "type": "boolean", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false - ] - }, - "allowInterruptions": { - "type": "string", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": "true", - "examples": [ - "true" - ] - }, - "defaultLocale": { - "type": "string", - "title": "Default locale", - "description": "Default locale.", - "default": "en-us" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.DebugBreak": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Debugger break", - "description": "If debugger is attached, stop the execution at this point in the conversation.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DebugBreak" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.DeleteProperty": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Delete Property", - "description": "Delete a property and any value it holds.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DeleteProperty" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "property": { - "$role": "expression", - "title": "Property", - "description": "Property to delete.", - "type": "string" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "property", - "$type" - ] - } - ] - }, - "Microsoft.DimensionEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Dimension Entity Recognizer", - "description": "Recognizer which recognizes dimension.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.DimensionEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.EditActions": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Edit actions.", - "description": "Edit the current list of actions.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditActions" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "changeType": { - "type": "string", - "title": "Type of change", - "description": "Type of change to apply to the current actions.", - "enum": [ - "InsertActions", - "InsertActionsBeforeTags", - "AppendActions", - "EndSequence", - "ReplaceSequence" - ] - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to apply.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "changeType", - "actions", - "$type" - ] - } - ] - }, - "Microsoft.EditArray": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Edit array", - "description": "Modify an array in memory", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EditArray" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "changeType": { - "type": "string", - "title": "Type of change", - "description": "Type of change to the array in memory.", - "enum": [ - "Push", - "Pop", - "Take", - "Remove", - "Clear" - ] - }, - "itemsProperty": { - "$role": "expression", - "title": "Items property", - "description": "Property that holds the array to update.", - "type": "string" - }, - "resultProperty": { - "$role": "expression", - "title": "Result Property", - "description": "Property to store the result of this action.", - "type": "string" - }, - "value": { - "$role": "expression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "'milk'", - "dialog.favColor", - "dialog.favColor == 'red'" - ], - "type": "string" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "changeType", - "itemsProperty", - "$type" - ] - } - ] - }, - "Microsoft.EmailEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Email Entity Recognizer", - "description": "Recognizer which recognizes email.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmailEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.EmitEvent": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Emit a custom event", - "description": "Emit an event. Capture this event with a trigger.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EmitEvent" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "eventName": { - "title": "Event name", - "description": "Name of the event to emit.", - "anyOf": [ - { - "enum": [ - "beginDialog", - "resumeDialog", - "repromptDialog", - "cancelDialog", - "endDialog", - "activityReceived", - "recognizedIntent", - "unknownIntent", - "actionsStarted", - "actionsSaved", - "actionsEnded", - "actionsResumed" - ] - }, - { - "type": "string" - } - ] - }, - "eventValue": { - "type": "object", - "title": "Event value", - "description": "Value to emit with the event (optional).", - "additionalProperties": true - }, - "bubbleEvent": { - "type": "boolean", - "title": "Bubble event", - "description": "If true this event is passed on to parent dialogs." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "eventName", - "$type" - ] - } - ] - }, - "Microsoft.EndDialog": { - "$role": "unionType(Microsoft.IDialog)", - "title": "End dialog", - "description": "End this dialog.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndDialog" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "value": { - "$role": "expression", - "title": "Value", - "description": "Result value returned to the parent dialog.", - "examples": [ - "dialog.userName", - "'tomato'" - ], - "type": "string" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.EndTurn": { - "$role": "unionType(Microsoft.IDialog)", - "title": "End turn", - "description": "End the current turn without ending the dialog.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.EndTurn" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.EntityRecognizers": { - "$role": "unionType", - "title": "Entity Recognizers", - "description": "Union of components which derive from EntityRecognizer abstract class.", - "type": "object", - "oneOf": [ - { - "title": "Microsoft.AgeEntityRecognizer", - "description": "Recognizer which recognizes age.", - "$ref": "#/definitions/Microsoft.AgeEntityRecognizer" - }, - { - "title": "Microsoft.ConfirmationEntityRecognizer", - "description": "Recognizer which recognizes confirmation choices (yes/no).", - "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" - }, - { - "title": "Microsoft.CurrencyEntityRecognizer", - "description": "Recognizer which recognizes currency.", - "$ref": "#/definitions/Microsoft.CurrencyEntityRecognizer" - }, - { - "title": "Microsoft.DateTimeEntityRecognizer", - "description": "Recognizer which recognizes dates and time fragments.", - "$ref": "#/definitions/Microsoft.DateTimeEntityRecognizer" - }, - { - "title": "Microsoft.DimensionEntityRecognizer", - "description": "Recognizer which recognizes dimension.", - "$ref": "#/definitions/Microsoft.DimensionEntityRecognizer" - }, - { - "title": "Microsoft.EmailEntityRecognizer", - "description": "Recognizer which recognizes email.", - "$ref": "#/definitions/Microsoft.EmailEntityRecognizer" - }, - { - "title": "Microsoft.GuidEntityRecognizer", - "description": "Recognizer which recognizes guids.", - "$ref": "#/definitions/Microsoft.GuidEntityRecognizer" - }, - { - "title": "Microsoft.HashtagEntityRecognizer", - "description": "Recognizer which recognizes Hashtags.", - "$ref": "#/definitions/Microsoft.HashtagEntityRecognizer" - }, - { - "title": "Microsoft.IpEntityRecognizer", - "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", - "$ref": "#/definitions/Microsoft.IpEntityRecognizer" - }, - { - "title": "Microsoft.MentionEntityRecognizer", - "description": "Recognizer which recognizes @Mentions", - "$ref": "#/definitions/Microsoft.MentionEntityRecognizer" - }, - { - "title": "Microsoft.NumberEntityRecognizer", - "description": "Recognizer which recognizes numbers.", - "$ref": "#/definitions/Microsoft.NumberEntityRecognizer" - }, - { - "title": "Microsoft.NumberRangeEntityRecognizer", - "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", - "$ref": "#/definitions/Microsoft.NumberRangeEntityRecognizer" - }, - { - "title": "Microsoft.OrdinalEntityRecognizer", - "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", - "$ref": "#/definitions/Microsoft.OrdinalEntityRecognizer" - }, - { - "title": "Microsoft.PercentageEntityRecognizer", - "description": "Recognizer which recognizes percentages.", - "$ref": "#/definitions/Microsoft.PercentageEntityRecognizer" - }, - { - "title": "Microsoft.PhoneNumberEntityRecognizer", - "description": "Recognizer which recognizes phone numbers.", - "$ref": "#/definitions/Microsoft.PhoneNumberEntityRecognizer" - }, - { - "title": "Microsoft.RegExEntityRecognizer", - "description": "Recognizer which recognizes patterns of input based on regex.", - "$ref": "#/definitions/Microsoft.RegExEntityRecognizer" - }, - { - "title": "Microsoft.TemperatureEntityRecognizer", - "description": "Recognizer which recognizes temperatures.", - "$ref": "#/definitions/Microsoft.TemperatureEntityRecognizer" - }, - { - "title": "Microsoft.UrlEntityRecognizer", - "description": "Recognizer which recognizes urls (example: http://bing.com)", - "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" - } - ] - }, - "Microsoft.FirstSelector": { - "$role": "unionType(Microsoft.ITriggerSelector)", - "title": "First Trigger Selector", - "description": "Selector for first true rule", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.FirstSelector" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.Foreach": { - "$role": "unionType(Microsoft.IDialog)", - "title": "For each item", - "description": "Execute actions on each item in an a collection.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.Foreach" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "itemsProperty": { - "$role": "expression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ], - "type": "string" - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each item. Use '$foreach.value' to access the value of each item. Use '$foreach.index' to access the index of each item.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "itemsProperty", - "actions", - "$type" - ] - } - ] - }, - "Microsoft.ForeachPage": { - "$role": "unionType(Microsoft.IDialog)", - "title": "For each page", - "description": "Execute actions on each page (collection of items) in an array.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ForeachPage" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "itemsProperty": { - "$role": "expression", - "title": "Items property", - "description": "Property that holds the array.", - "examples": [ - "user.todoList" - ], - "type": "string" - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute for each page. Use '$foreach.page' to access each page.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "pageSize": { - "type": "integer", - "title": "Page size", - "description": "Number of items in each page.", - "default": 10 - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "itemsProperty", - "actions", - "$type" - ] - } - ] - }, - "Microsoft.GuidEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Guid Entity Recognizer", - "description": "Recognizer which recognizes guids.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.GuidEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.HashtagEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Hashtag Entity Recognizer", - "description": "Recognizer which recognizes Hashtags.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HashtagEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.HttpRequest": { - "$role": "unionType(Microsoft.IDialog)", - "type": "object", - "title": "HTTP request", - "description": "Make a HTTP request.", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.HttpRequest" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "method": { - "type": "string", - "title": "HTTP method", - "description": "HTTP method to use.", - "enum": [ - "GET", - "POST", - "PATCH", - "PUT", - "DELETE" - ], - "examples": [ - "GET", - "POST" - ] - }, - "url": { - "type": "string", - "title": "Url", - "description": "URL to call (supports data binding).", - "examples": [ - "https://contoso.com" - ] - }, - "body": { - "type": "object", - "title": "Body", - "description": "Body to include in the HTTP call (supports data binding).", - "additionalProperties": true - }, - "resultProperty": { - "$role": "expression", - "title": "Result property", - "description": "Property to store the result of this action. The result includes 4 properties from the http response: statusCode, reasonPhrase, content and headers. If the content is json it will be a deserialized object.", - "examples": [ - "dialog.contosodata" - ], - "type": "string" - }, - "headers": { - "type": "object", - "additionProperties": true, - "title": "Headers", - "description": "One or more headers to include in the request (supports data binding)." - }, - "responseType": { - "type": "string", - "title": "Response type", - "description": "Defines the type of HTTP response. Automatically calls the 'Send a response' action if set to 'Activity' or 'Activities'.", - "enum": [ - "None", - "Json", - "Activity", - "Activities" - ], - "default": "Json" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "url", - "method", - "$type" - ] - } - ] - }, - "Microsoft.IActivityTemplate": { - "title": "Microsoft ActivityTemplates", - "description": "Components which are IActivityTemplates", - "$role": "unionType", - "oneOf": [ - { - "title": "Microsoft.ActivityTemplate", - "description": "", - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "title": "Microsoft.StaticActivityTemplate", - "description": "This allows you to define a static Activity object", - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - }, - { - "type": "string", - "title": "string" - } - ] - }, - "Microsoft.IDialog": { - "title": "Microsoft Dialogs", - "description": "Union of components which implement the Dialog contract", - "$role": "unionType", - "oneOf": [ - { - "title": "Microsoft.AdaptiveDialog", - "description": "Flexible, data driven dialog that can adapt to the conversation.", - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "title": "Microsoft.AttachmentInput", - "description": "Collect information - Ask for a file or image.", - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "title": "Microsoft.BeginDialog", - "description": "Begin another dialog.", - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "title": "Microsoft.CancelAllDialogs", - "description": "Cancel all active dialogs. All dialogs in the dialog chain will need a trigger to capture the event configured in this action.", - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "title": "Microsoft.ChoiceInput", - "description": "Collect information - Pick from a list of choices", - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "title": "Microsoft.ConfirmInput", - "description": "Collect information - Ask for confirmation (yes or no).", - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "title": "Microsoft.DateTimeInput", - "description": "Collect information - Ask for date and/ or time", - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "title": "Microsoft.DebugBreak", - "description": "If debugger is attached, stop the execution at this point in the conversation.", - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "title": "Microsoft.DeleteProperty", - "description": "Delete a property and any value it holds.", - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "title": "Microsoft.EditActions", - "description": "Edit the current list of actions.", - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "title": "Microsoft.EditArray", - "description": "Modify an array in memory", - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "title": "Microsoft.EmitEvent", - "description": "Emit an event. Capture this event with a trigger.", - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "title": "Microsoft.EndDialog", - "description": "End this dialog.", - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "title": "Microsoft.EndTurn", - "description": "End the current turn without ending the dialog.", - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "title": "Microsoft.Foreach", - "description": "Execute actions on each item in an a collection.", - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "title": "Microsoft.ForeachPage", - "description": "Execute actions on each page (collection of items) in an array.", - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "title": "Microsoft.HttpRequest", - "description": "Make a HTTP request.", - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "title": "Microsoft.IfCondition", - "description": "Two-way branch the conversation flow based on a condition.", - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "title": "Microsoft.InitProperty", - "description": "Define and initialize a property to be an array or object.", - "$ref": "#/definitions/Microsoft.InitProperty" - }, - { - "title": "Microsoft.LogAction", - "description": "Log a message to the host application. Send a TraceActivity to Bot Framework Emulator (optional).", - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "title": "Microsoft.NumberInput", - "description": "Collect information - Ask for a number.", - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "title": "Microsoft.OAuthInput", - "description": "Collect login information.", - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "title": "Microsoft.QnAMakerDialog", - "description": "Dialog which uses QnAMAker knowledge base to answer questions.", - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "title": "Microsoft.RepeatDialog", - "description": "Repeat current dialog.", - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "title": "Microsoft.ReplaceDialog", - "description": "Replace current dialog with another dialog.", - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "title": "Microsoft.SendActivity", - "description": "Respond with an activity.", - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "title": "Microsoft.SetProperty", - "description": "Set property to a value.", - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "title": "Microsoft.SwitchCondition", - "description": "Execute different actions based on the value of a property.", - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "title": "Microsoft.TextInput", - "description": "Collection information - Ask for a word or sentence.", - "$ref": "#/definitions/Microsoft.TextInput" - }, - { - "title": "Microsoft.TraceActivity", - "description": "Send a trace activity to the transcript logger and/ or Bot Framework Emulator.", - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "type": "string", - "title": "string" - } - ] - }, - "Microsoft.ILanguageGenerator": { - "title": "Microsoft ILanguageGenerator", - "description": "Union of components which implement the ILanguageGenerator interface", - "$role": "unionType", - "oneOf": [ - { - "type": "string", - "title": "string" - } - ] - }, - "Microsoft.IRecognizer": { - "title": "Microsoft IRecognizer", - "description": "Union of components which implement the IRecognizer interface", - "$role": "unionType", - "oneOf": [ - { - "title": "Microsoft.LuisRecognizer", - "description": "LUIS recognizer.", - "$ref": "#/definitions/Microsoft.LuisRecognizer" - }, - { - "title": "Microsoft.MultiLanguageRecognizer", - "description": "Configure one recognizer per language and the specify the language fallback policy.", - "$ref": "#/definitions/Microsoft.MultiLanguageRecognizer" - }, - { - "title": "Microsoft.RegexRecognizer", - "description": "Use regular expressions to recognize intents and entities from user input.", - "$ref": "#/definitions/Microsoft.RegexRecognizer" - }, - { - "type": "string", - "title": "string" - } - ] - }, - "Microsoft.ITextTemplate": { - "title": "Microsoft TextTemplate", - "description": "Union of components which implement the TextTemplate", - "$role": "unionType", - "oneOf": [ - { - "title": "Microsoft.TextTemplate", - "description": "Lg tempalte to evaluate to create text", - "$ref": "#/definitions/Microsoft.TextTemplate" - }, - { - "type": "string", - "title": "string" - } - ] - }, - "Microsoft.ITriggerCondition": { - "$role": "unionType", - "title": "Microsoft Triggers", - "description": "Union of components which implement the OnCondition", - "oneOf": [ - { - "title": "Microsoft.OnActivity", - "description": "Actions to perform on receipt of a generic activity.", - "$ref": "#/definitions/Microsoft.OnActivity" - }, - { - "title": "Microsoft.OnBeginDialog", - "description": "Actions to perform when this dialog begins.", - "$ref": "#/definitions/Microsoft.OnBeginDialog" - }, - { - "title": "Microsoft.OnCancelDialog", - "description": "Actions to perform on cancel dialog event.", - "$ref": "#/definitions/Microsoft.OnCancelDialog" - }, - { - "title": "Microsoft.OnCondition", - "description": "Actions to perform when specified condition is true.", - "$ref": "#/definitions/Microsoft.OnCondition" - }, - { - "title": "Microsoft.OnConversationUpdateActivity", - "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate'.", - "$ref": "#/definitions/Microsoft.OnConversationUpdateActivity" - }, - { - "title": "Microsoft.OnCustomEvent", - "description": "Actions to perform when a custom event is detected. Use 'Emit a custom event' action to raise a custom event.", - "$ref": "#/definitions/Microsoft.OnCustomEvent" - }, - { - "title": "Microsoft.OnDialogEvent", - "description": "Actions to perform when a specific dialog event occurs.", - "$ref": "#/definitions/Microsoft.OnDialogEvent" - }, - { - "title": "Microsoft.OnEndOfConversationActivity", - "description": "Actions to perform on receipt of an activity with type 'EndOfConversation'.", - "$ref": "#/definitions/Microsoft.OnEndOfConversationActivity" - }, - { - "title": "Microsoft.OnError", - "description": "Action to perform when an 'Error' dialog event occurs.", - "$ref": "#/definitions/Microsoft.OnError" - }, - { - "title": "Microsoft.OnEventActivity", - "description": "Actions to perform on receipt of an activity with type 'Event'.", - "$ref": "#/definitions/Microsoft.OnEventActivity" - }, - { - "title": "Microsoft.OnHandoffActivity", - "description": "Actions to perform on receipt of an activity with type 'HandOff'.", - "$ref": "#/definitions/Microsoft.OnHandoffActivity" - }, - { - "title": "Microsoft.OnIntent", - "description": "Actions to perform when specified intent is recognized.", - "$ref": "#/definitions/Microsoft.OnIntent" - }, - { - "title": "Microsoft.OnInvokeActivity", - "description": "Actions to perform on receipt of an activity with type 'Invoke'.", - "$ref": "#/definitions/Microsoft.OnInvokeActivity" - }, - { - "title": "Microsoft.OnMessageActivity", - "description": "Actions to perform on receipt of an activity with type 'Message'. Overrides Intent trigger.", - "$ref": "#/definitions/Microsoft.OnMessageActivity" - }, - { - "title": "Microsoft.OnMessageDeleteActivity", - "description": "Actions to perform on receipt of an activity with type 'MessageDelete'.", - "$ref": "#/definitions/Microsoft.OnMessageDeleteActivity" - }, - { - "title": "Microsoft.OnMessageReactionActivity", - "description": "Actions to perform on receipt of an activity with type 'MessageReaction'.", - "$ref": "#/definitions/Microsoft.OnMessageReactionActivity" - }, - { - "title": "Microsoft.OnMessageUpdateActivity", - "description": "Actions to perform on receipt of an activity with type 'MessageUpdate'.", - "$ref": "#/definitions/Microsoft.OnMessageUpdateActivity" - }, - { - "title": "Microsoft.OnRepromptDialog", - "description": "Actions to perform when 'RepromptDialog' event occurs.", - "$ref": "#/definitions/Microsoft.OnRepromptDialog" - }, - { - "title": "Microsoft.OnTypingActivity", - "description": "Actions to perform on receipt of an activity with type 'Typing'.", - "$ref": "#/definitions/Microsoft.OnTypingActivity" - }, - { - "title": "Microsoft.OnUnknownIntent", - "description": "Action to perform when user input is unrecognized and if none of the 'on intent recognition' triggers match recognized intent.", - "$ref": "#/definitions/Microsoft.OnUnknownIntent" - } - ] - }, - "Microsoft.ITriggerSelector": { - "$role": "unionType", - "title": "Selectors", - "description": "Union of components which are trigger selectors", - "oneOf": [ - { - "title": "Microsoft.ConditionalSelector", - "description": "Use a rule selector based on a condition", - "$ref": "#/definitions/Microsoft.ConditionalSelector" - }, - { - "title": "Microsoft.FirstSelector", - "description": "Selector for first true rule", - "$ref": "#/definitions/Microsoft.FirstSelector" - }, - { - "title": "Microsoft.MostSpecificSelector", - "description": "Select most specific true events with optional additional selector", - "$ref": "#/definitions/Microsoft.MostSpecificSelector" - }, - { - "title": "Microsoft.RandomSelector", - "description": "Select most specific true rule", - "$ref": "#/definitions/Microsoft.RandomSelector" - }, - { - "title": "Microsoft.TrueSelector", - "description": "Selector for all true events", - "$ref": "#/definitions/Microsoft.TrueSelector" - } - ] - }, - "Microsoft.IfCondition": { - "$role": "unionType(Microsoft.IDialog)", - "title": "If condition", - "description": "Two-way branch the conversation flow based on a condition.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IfCondition" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Expression to evaluate.", - "examples": [ - "user.age > 3" - ], - "type": "string" - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute if condition is true.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "elseActions": { - "type": "array", - "title": "Else", - "description": "Actions to execute if condition is false.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "condition", - "actions", - "$type" - ] - } - ] - }, - "Microsoft.InitProperty": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Initialize property", - "description": "Define and initialize a property to be an array or object.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.InitProperty" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "property": { - "$role": "expression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ], - "type": "string" - }, - "type": { - "type": "string", - "title": "Type", - "description": "Type of value.", - "enum": [ - "object", - "array" - ] - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "property", - "type", - "$type" - ] - } - ] - }, - "Microsoft.IpEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Ip Entity Recognizer", - "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.IpEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.LanguagePolicy": { - "title": "Language Policy", - "description": "This represents a policy map for locales lookups to use for language", - "type": "object", - "additionalProperties": false, - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LanguagePolicy" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.LogAction": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Log to console", - "description": "Log a message to the host application. Send a TraceActivity to Bot Framework Emulator (optional).", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LogAction" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "text": { - "type": "string", - "title": "Text", - "description": "Information to log." - }, - "traceActivity": { - "type": "boolean", - "title": "Send Trace Activity", - "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator).", - "default": false - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "text", - "$type" - ] - } - ] - }, - "Microsoft.LuisRecognizer": { - "$role": "unionType(Microsoft.IRecognizer)", - "title": "LUIS Recognizer", - "description": "LUIS recognizer.", - "type": "object", - "additionalProperties": false, - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.LuisRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "applicationId": { - "type": "string" - }, - "endpoint": { - "type": "string" - }, - "endpointKey": { - "type": "string" - } - }, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "applicationId", - "endpoint", - "endpointKey", - "$type" - ] - } - ] - }, - "Microsoft.MentionEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Mentions Entity Recognizer", - "description": "Recognizer which recognizes @Mentions", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MentionEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.MostSpecificSelector": { - "$role": "unionType(Microsoft.ITriggerSelector)", - "title": "Most Specific Trigger Selector", - "description": "Select most specific true events with optional additional selector", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MostSpecificSelector" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "selector": { - "$type": "Microsoft.ITriggerSelector", - "$ref": "#/definitions/Microsoft.ITriggerSelector" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.MultiLanguageRecognizer": { - "$role": "unionType(Microsoft.IRecognizer)", - "title": "Multi-language recognizer", - "description": "Configure one recognizer per language and the specify the language fallback policy.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.MultiLanguageRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "languagePolicy": { - "$type": "Microsoft.LanguagePolicy", - "type": "object", - "title": "Language policy", - "description": "Defines fall back languages to try per user input language.", - "$ref": "#/definitions/Microsoft.LanguagePolicy" - }, - "recognizers": { - "type": "object", - "title": "Recognizers", - "description": "Map of language -> IRecognizer", - "additionalProperties": { - "$type": "Microsoft.IRecognizer", - "$ref": "#/definitions/Microsoft.IRecognizer" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "recognizers", - "$type" - ] - } - ] - }, - "Microsoft.NumberEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Number Entity Recognizer", - "description": "Recognizer which recognizes numbers.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.NumberInput": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Number input dialog", - "description": "Collect information - Ask for a number.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberInput" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "prompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", - "examples": [ - "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$type": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "type": "integer", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ], - "items": { - "$role": "expression", - "type": "string", - "description": "String must contain an expression." - } - }, - "property": { - "$role": "expression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "user.name", - "conversation.issueTitle", - "dialog.favColor" - ], - "type": "string" - }, - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@userName", - "coalesce(@number, @partySize)" - ], - "type": "string" - }, - "alwaysPrompt": { - "type": "boolean", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false - ] - }, - "allowInterruptions": { - "type": "string", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": "true", - "examples": [ - "true" - ] - }, - "outputFormat": { - "type": "string", - "enum": [ - "float", - "integer" - ], - "title": "Output format", - "description": "Number output format.", - "default": "float" - }, - "defaultLocale": { - "type": "string", - "title": "Default locale", - "description": "Default locale.", - "default": "en-us" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.NumberRangeEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "NumberRange Entity Recognizer", - "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.NumberRangeEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.OAuthInput": { - "$role": "unionType(Microsoft.IDialog)", - "title": "OAuthInput Dialog", - "description": "Collect login information.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OAuthInput" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "connectionName": { - "type": "string", - "title": "Connection name", - "description": "The connection name configured in Azure Web App Bot OAuth settings.", - "examples": [ - "msgraphOAuthConnection" - ] - }, - "text": { - "type": "string", - "title": "Text", - "description": "Text shown in the OAuth signin card.", - "examples": [ - "Please sign in. " - ] - }, - "title": { - "type": "string", - "title": "Title", - "description": "Title shown in the OAuth signin card.", - "examples": [ - "Login" - ] - }, - "timeout": { - "type": "integer", - "title": "Timeout", - "description": "Time out setting for the OAuth signin card.", - "default": "900000" - }, - "tokenProperty": { - "$role": "expression", - "title": "Token property", - "description": "Property to store the OAuth token result.", - "examples": [ - "dialog.token" - ], - "type": "string" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "connectionName", - "$type" - ] - } - ] - }, - "Microsoft.OnActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On activity", - "description": "Actions to perform on receipt of a generic activity.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "type": { - "type": "string", - "title": "Activity type", - "description": "The Activity.Type to match" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "type", - "$type" - ] - } - ] - }, - "Microsoft.OnBeginDialog": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On begin dialog", - "description": "Actions to perform when this dialog begins.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnBeginDialog" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnCancelDialog": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On cancel dialog", - "description": "Actions to perform on cancel dialog event.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCancelDialog" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnCondition": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On condition", - "description": "Actions to perform when specified condition is true.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCondition" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnConversationUpdateActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On ConversationUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'ConversationUpdate'.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnConversationUpdateActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnCustomEvent": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On custom event", - "description": "Actions to perform when a custom event is detected. Use 'Emit a custom event' action to raise a custom event.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnCustomEvent" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "event": { - "type": "string", - "title": "Custom event name", - "description": "Name of the custom event." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "event", - "$type" - ] - } - ] - }, - "Microsoft.OnDialogEvent": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On dialog event", - "description": "Actions to perform when a specific dialog event occurs.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnDialogEvent" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "event": { - "type": "string", - "title": "Dialog event name", - "description": "Name of dialog event." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "event", - "$type" - ] - } - ] - }, - "Microsoft.OnEndOfConversationActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On EndOfConversation activity", - "description": "Actions to perform on receipt of an activity with type 'EndOfConversation'.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEndOfConversationActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnError": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On Error", - "description": "Action to perform when an 'Error' dialog event occurs.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnError" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnEventActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On Event activity", - "description": "Actions to perform on receipt of an activity with type 'Event'.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnEventActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnHandoffActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On Handoff activity", - "description": "Actions to perform on receipt of an activity with type 'HandOff'.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnHandoffActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnIntent": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On intent recognition", - "description": "Actions to perform when specified intent is recognized.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnIntent" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - }, - "intent": { - "type": "string", - "title": "Intent", - "description": "Name of intent." - }, - "entities": { - "type": "array", - "title": "Entities", - "description": "Required entities.", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "intent", - "$type" - ] - } - ] - }, - "Microsoft.OnInvokeActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On Invoke activity", - "description": "Actions to perform on receipt of an activity with type 'Invoke'.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnInvokeActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnMessageActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On Message activity", - "description": "Actions to perform on receipt of an activity with type 'Message'. Overrides Intent trigger.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnMessageDeleteActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On MessageDelete activity", - "description": "Actions to perform on receipt of an activity with type 'MessageDelete'.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageDeleteActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnMessageReactionActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On MessageReaction activity", - "description": "Actions to perform on receipt of an activity with type 'MessageReaction'.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageReactionActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnMessageUpdateActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On MessageUpdate activity", - "description": "Actions to perform on receipt of an activity with type 'MessageUpdate'.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnMessageUpdateActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnRepromptDialog": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On RepromptDialog", - "description": "Actions to perform when 'RepromptDialog' event occurs.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnRepromptDialog" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnTypingActivity": { - "$role": "unionType(Microsoft.ITriggerCondition)", - "title": "On Typing activity", - "description": "Actions to perform on receipt of an activity with type 'Typing'.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnTypingActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OnUnknownIntent": { - "title": "On unknown intent", - "description": "Action to perform when user input is unrecognized and if none of the 'on intent recognition' triggers match recognized intent.", - "type": "object", - "$role": "unionType(Microsoft.ITriggerCondition)", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OnUnknownIntent" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Condition (expression).", - "examples": [ - "user.vip == true" - ], - "type": "string" - }, - "actions": { - "type": "array", - "description": "Sequence of actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "actions", - "$type" - ] - } - ] - }, - "Microsoft.OrdinalEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Ordinal Entity Recognizer", - "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.OrdinalEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.PercentageEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Percentage Entity Recognizer", - "description": "Recognizer which recognizes percentages.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PercentageEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.PhoneNumberEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Phone Number Entity Recognizer", - "description": "Recognizer which recognizes phone numbers.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.PhoneNumberEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.QnAMakerDialog": { - "$role": "unionType(Microsoft.IDialog)", - "title": "QnAMaker Dialog", - "description": "Dialog which uses QnAMAker knowledge base to answer questions.", - "type": "object", - "additionalProperties": false, - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.QnAMakerDialog" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "knowledgeBaseId": { - "$role": "expression", - "title": "KnowledgeBase Id", - "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", - "default": "settings.qna.knowledgebaseid", - "type": "string" - }, - "endpointKey": { - "$role": "expression", - "title": "Endpoint Key", - "description": "Endpoint key for the QnA Maker KB.", - "default": "settings.qna.endpointkey", - "type": "string" - }, - "hostname": { - "$role": "expression", - "title": "Hostname", - "description": "Hostname for your QnA Maker service.", - "default": "settings.qna.hostname", - "examples": [ - "https://yourserver.azurewebsites.net/qnamaker" - ], - "type": "string" - }, - "noAnswer": { - "$type": "Microsoft.IActivityTemplate", - "title": "Fallback answer", - "description": "Default answer to return when none found in KB.", - "default": "Sorry, I did not find an answer.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "threshold": { - "type": "number", - "title": "Threshold", - "description": "Threshold score to filter results.", - "default": 0.3 - }, - "activeLearningCardTitle": { - "type": "string", - "title": "Active learning card title", - "description": "Title for active learning suggestions card.", - "default": "Did you mean:" - }, - "cardNoMatchText": { - "type": "string", - "title": "Card no match text", - "description": "Text for no match option.", - "default": "None of the above." - }, - "cardNoMatchResponse ": { - "$type": "Microsoft.IActivityTemplate", - "title": "Card no match response", - "description": "Custom response when no match option was selected.", - "default": "Thanks for the feedback.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "strictFilters": { - "type": "array", - "title": "Strict Filter Property", - "description": "Memory property that holds strict filters to use when calling the QnA Maker KB.", - "items": { - "type": "object" - } - } - }, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "knowledgeBaseId", - "endpointKey", - "hostname", - "$type" - ] - } - ] - }, - "Microsoft.RandomSelector": { - "$role": "unionType(Microsoft.ITriggerSelector)", - "title": "Random rule selector", - "description": "Select most specific true rule", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RandomSelector" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "seed": { - "type": "integer" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.RegExEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Regex Entity Recognizer", - "description": "Recognizer which recognizes patterns of input based on regex.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegExEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "name": { - "type": "string", - "title": "Name", - "description": "Name of the entity" - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "Pattern expressed as regular expression." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "name", - "pattern", - "$type" - ] - } - ] - }, - "Microsoft.RegexRecognizer": { - "$role": "unionType(Microsoft.IRecognizer)", - "title": "Regex recognizer", - "description": "Use regular expressions to recognize intents and entities from user input.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RegexRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "intents": { - "type": "array", - "title": "RegEx patterns to intents", - "description": "Collection of patterns to match for an intent.", - "items": { - "type": "object", - "properties": { - "intent": { - "type": "string", - "title": "Intent", - "description": "The intent name." - }, - "pattern": { - "type": "string", - "title": "Pattern", - "description": "The regular expression pattern." - } - } - } - }, - "entities": { - "type": "array", - "title": "Entity recognizers", - "description": "Collection of entity recognizers to use.", - "items": { - "$type": "Microsoft.EntityRecognizers", - "$ref": "#/definitions/Microsoft.EntityRecognizers" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "intents", - "$type" - ] - } - ] - }, - "Microsoft.RepeatDialog": { - "$role": "unionType(Microsoft.IDialog)", - "type": "object", - "title": "Repeat dialog", - "description": "Repeat current dialog.", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.RepeatDialog" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.ReplaceDialog": { - "$role": "unionType(Microsoft.IDialog)", - "type": "object", - "title": "Replace dialog", - "description": "Replace current dialog with another dialog.", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.ReplaceDialog" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "dialog": { - "$type": "Microsoft.IDialog", - "title": "Dialog name", - "description": "Current dialog will be replaced by this dialog.", - "$ref": "#/definitions/Microsoft.IDialog" - }, - "options": { - "type": "object", - "title": "Options", - "description": "One or more options that are passed to the dialog that is called.", - "additionalProperties": { - "type": "string", - "title": "Options" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.SendActivity": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Send an activity", - "description": "Respond with an activity.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SendActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "activity": { - "$type": "Microsoft.IActivityTemplate", - "title": "Activity", - "description": "Activity to send.", - "$ref": "#/definitions/Microsoft.IActivityTemplate" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.SetProperty": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Set property", - "description": "Set property to a value.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SetProperty" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "property": { - "$role": "expression", - "title": "Property", - "description": "Property (named location to store information).", - "examples": [ - "user.age" - ], - "type": "string" - }, - "value": { - "$role": "expression", - "title": "Value", - "description": "New value or expression.", - "examples": [ - "'milk'", - "dialog.favColor", - "dialog.favColor == 'red'" - ], - "type": "string" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "property", - "value", - "$type" - ] - } - ] - }, - "Microsoft.StaticActivityTemplate": { - "$role": "unionType(Microsoft.IActivityTemplate)", - "title": "Microsoft Static Activity Template", - "description": "This allows you to define a static Activity object", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.StaticActivityTemplate" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "activity": { - "type": "object", - "title": "Activity", - "Description": "A static Activity to used" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "activity", - "$type" - ] - } - ] - }, - "Microsoft.SwitchCondition": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Switch condition", - "description": "Execute different actions based on the value of a property.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.SwitchCondition" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "condition": { - "$role": "expression", - "title": "Condition", - "description": "Property to evaluate.", - "examples": [ - "user.favColor" - ], - "type": "string" - }, - "cases": { - "type": "array", - "title": "Cases", - "desc": "Actions for each possible condition.", - "items": { - "type": "object", - "required": [ - "value", - "case" - ], - "properties": { - "value": { - "$role": "expression", - "title": "Value", - "description": "Value.", - "examples": [ - "'red'", - "dialog.colors.red" - ], - "type": "string" - }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Actions to execute.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - } - } - }, - "default": { - "type": "array", - "title": "Default", - "description": "Actions to execute if none of the cases meet the condition.", - "items": { - "$type": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "condition", - "$type" - ] - } - ] - }, - "Microsoft.TemperatureEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Temperature Entity Recognizer", - "description": "Recognizer which recognizes temperatures.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TemperatureEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.TextInput": { - "$role": "unionType(Microsoft.IDialog)", - "type": "object", - "title": "Text input dialog", - "description": "Collection information - Ask for a word or sentence.", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextInput" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "prompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Initial prompt", - "description": "Message to send to collect information.", - "examples": [ - "What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "unrecognizedPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", - "examples": [ - "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "invalidPrompt": { - "$type": "Microsoft.IActivityTemplate", - "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", - "examples": [ - "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "defaultValueResponse": { - "$type": "Microsoft.IActivityTemplate", - "title": "Default value response", - "description": "Message to send when max turn count (if specified) has been exceeded and the default value is selected as the value.", - "examples": [ - "Sorry, I'm having trouble understanding you. I will just use {this.options.defaultValue} for now. You can say 'I'm 36 years old' to change it." - ], - "$ref": "#/definitions/Microsoft.IActivityTemplate" - }, - "maxTurnCount": { - "type": "integer", - "title": "Max turn count", - "description": "Maximum number of re-prompt attempts to collect information.", - "default": 3, - "examples": [ - 3 - ] - }, - "validations": { - "type": "array", - "title": "Validation expressions", - "description": "Expression to validate user input.", - "examples": [ - "int(this.value) > 1 && int(this.value) <= 150", - "count(this.value) < 300" - ], - "items": { - "$role": "expression", - "type": "string", - "description": "String must contain an expression." - } - }, - "property": { - "$role": "expression", - "title": "Property", - "description": "Property to store collected information. Input will be skipped if property has value (unless 'Always prompt' is true).", - "examples": [ - "$birthday", - "user.name", - "conversation.issueTitle", - "dialog.favColor" - ], - "type": "string" - }, - "defaultValue": { - "$role": "expression", - "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", - "examples": [ - "@userName", - "coalesce(@number, @partySize)" - ], - "type": "string" - }, - "alwaysPrompt": { - "type": "boolean", - "title": "Always prompt", - "description": "Collect information even if the specified 'property' is not empty.", - "default": false, - "examples": [ - false - ] - }, - "allowInterruptions": { - "type": "string", - "title": "Allow Interruptions", - "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", - "default": "true", - "examples": [ - "true" - ] - }, - "outputFormat": { - "type": "string", - "enum": [ - "none", - "trim", - "lowercase", - "uppercase" - ], - "title": "Output format", - "description": "Format of output.", - "default": "none" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.TextTemplate": { - "$role": "unionType(Microsoft.ITextTemplate)", - "title": "Microsoft TextTemplate", - "description": "Lg tempalte to evaluate to create text", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TextTemplate" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "template": { - "title": "Template", - "Description": "Language Generator template to evaluate to create the text", - "type": "string" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "template", - "$type" - ] - } - ] - }, - "Microsoft.TraceActivity": { - "$role": "unionType(Microsoft.IDialog)", - "title": "Send a TraceActivity", - "description": "Send a trace activity to the transcript logger and/ or Bot Framework Emulator.", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TraceActivity" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - }, - "name": { - "type": "string", - "title": "Name", - "description": "Name of the trace activity" - }, - "valueType": { - "type": "string", - "title": "Value type", - "description": "Type of value" - }, - "value": { - "$role": "expression", - "title": "Value", - "description": "Property that holds the value to send as trace activity.", - "type": "string" - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.TrueSelector": { - "$role": "unionType(Microsoft.ITriggerSelector)", - "title": "True Trigger Selector", - "description": "Selector for all true events", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.TrueSelector" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - }, - "Microsoft.UrlEntityRecognizer": { - "$role": "unionType(Microsoft.EntityRecognizers)", - "title": "Url Entity Recognizer", - "description": "Recognizer which recognizes urls (example: http://bing.com)", - "type": "object", - "properties": { - "$type": { - "title": "$type", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", - "const": "Microsoft.UrlEntityRecognizer" - }, - "$copy": { - "title": "$copy", - "description": "Copy the definition by id from a .dialog file.", - "type": "string", - "pattern": "^(([a-zA-Z][a-zA-Z0-9.]*)?(#[a-zA-Z][a-zA-Z0-9.]*)?)$" - }, - "$id": { - "title": "$id", - "description": "Inline id for reuse of an inline definition", - "type": "string", - "pattern": "^([a-zA-Z][a-zA-Z0-9.]*)$" - }, - "$designer": { - "title": "$designer", - "type": "object", - "description": "Extra information for the Bot Framework Designer." - } - }, - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "type": "string" - } - }, - "anyOf": [ - { - "title": "Reference", - "required": [ - "$copy" - ] - }, - { - "title": "Type", - "required": [ - "$type" - ] - } - ] - } - } -} diff --git a/BotProject/CSharp/Scripts/create.ps1 b/BotProject/CSharp/Scripts/create.ps1 deleted file mode 100644 index bd30ddf40c..0000000000 --- a/BotProject/CSharp/Scripts/create.ps1 +++ /dev/null @@ -1,185 +0,0 @@ -Param( - [string] $name, - [string] $location, - [string] $appId, - [string] $appPassword, - [string] $environment, - [string] $projDir = $(Get-Location), - [string] $logFile = $(Join-Path $PSScriptRoot .. "create_log.txt") -) - -if ($PSVersionTable.PSVersion.Major -lt 6){ - Write-Host "! Powershell 6 is required, current version is $($PSVersionTable.PSVersion.Major), please refer following documents for help." - Write-Host "For Windows - https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-6" - Write-Host "For Mac - https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-macos?view=powershell-6" - Break -} - -# Reset log file -if (Test-Path $logFile) { - Clear-Content $logFile -Force | Out-Null -} -else { - New-Item -Path $logFile | Out-Null -} - -if (-not (Test-Path (Join-Path $projDir 'appsettings.json'))) -{ - Write-Host "! Could not find an 'appsettings.json' file in the current directory." -ForegroundColor DarkRed - Write-Host "+ Please re-run this script from your project directory." -ForegroundColor Magenta - Break -} - -# Get mandatory parameters -if (-not $name) { - $name = Read-Host "? Bot Name (used as default name for resource group and deployed resources)" -} - -if (-not $environment) -{ - $environment = Read-Host "? Environment Name (single word, all lowercase)" - $environment = $environment.ToLower().Split(" ") | Select-Object -First 1 -} - -if (-not $location) { - $location = Read-Host "? Azure resource group region" -} - -if (-not $appPassword) { - $appPassword = Read-Host "? Password for MSA app registration (must be at least 16 characters long, contain at least 1 special character, and contain at least 1 numeric character)" -} - -if (-not $appId) { - # Create app registration - $app = (az ad app create ` - --display-name $name ` - --password `"$($appPassword)`" ` - --available-to-other-tenants ` - --reply-urls 'https://token.botframework.com/.auth/web/redirect' ` - --output json) - - # Retrieve AppId - if ($app) { - $appId = ($app | ConvertFrom-Json) | Select-Object -ExpandProperty appId - } - - if(-not $appId) { - Write-Host "! Could not provision Microsoft App Registration automatically. Review the log for more information." -ForegroundColor DarkRed - Write-Host "! Log: $($logFile)" -ForegroundColor DarkRed - Write-Host "+ Provision an app manually in the Azure Portal, then try again providing the -appId and -appPassword arguments. See https://aka.ms/vamanualappcreation for more information." -ForegroundColor Magenta - Break - } -} - -$resourceGroup = "$name-$environment" -$servicePlanName = "$name-$environment" - -# Get timestamp -$timestamp = Get-Date -f MMddyyyyHHmmss - -# Create resource group -Write-Host "> Creating resource group ..." -(az group create --name $resourceGroup --location $location --output json) 2>> $logFile | Out-Null - -# Deploy Azure services -Write-Host "> Validating Azure deployment ..." -$validation = az group deployment validate ` - --resource-group $resourcegroup ` - --template-file "$(Join-Path $PSScriptRoot '..' 'DeploymentTemplates' 'template-with-preexisting-rg.json')" ` - --parameters appId=$appId appSecret="`"$($appPassword)`"" newAppServicePlanName=$servicePlanName appServicePlanLocation=$location botId=$name ` - --output json - -if ($validation) { - $validation >> $logFile - $validation = $validation | ConvertFrom-Json - - if (-not $validation.error) { - Write-Host "> Deploying Azure services (this could take a while)..." -ForegroundColor Yellow - $deployment = az group deployment create ` - --name $timestamp ` - --resource-group $resourceGroup ` - --template-file "$(Join-Path $PSScriptRoot '..' 'DeploymentTemplates' 'template-with-preexisting-rg.json')" ` - --parameters appId=$appId appSecret="`"$($appPassword)`"" newAppServicePlanName=$servicePlanName appServicePlanLocation=$location botId=$name ` - --output json - } - else { - Write-Host "! Template is not valid with provided parameters. Review the log for more information." -ForegroundColor DarkRed - Write-Host "! Error: $($validation.error.message)" -ForegroundColor DarkRed - Write-Host "! Log: $($logFile)" -ForegroundColor DarkRed - Write-Host "+ To delete this resource group, run 'az group delete -g $($resourceGroup) --no-wait'" -ForegroundColor Magenta - Break - } -} - - -# Get deployment outputs -$outputs = az group deployment show ` - --name $timestamp ` - --resource-group $resourceGroup ` - --output json 2>> $logFile - -# If it succeeded then we perform the remainder of the steps -if ($outputs) -{ - # Log and convert to JSON - $outputs >> $logFile - $outputs = $outputs | ConvertFrom-Json - $outputMap = @{} - $outputs.PSObject.Properties | Foreach-Object { $outputMap[$_.Name] = $_.Value } - - # Update appsettings.json - Write-Host "> Updating appsettings.json ..." - if (Test-Path $(Join-Path $projDir appsettings.json)) { - $settings = Get-Content $(Join-Path $projDir appsettings.json) | ConvertFrom-Json - } - else { - $settings = New-Object PSObject - } - - $settings | Add-Member -Type NoteProperty -Force -Name 'microsoftAppId' -Value $appId - $settings | Add-Member -Type NoteProperty -Force -Name 'microsoftAppPassword' -Value $appPassword - $settings | Add-Member -Type NoteProperty -Force -Name 'bot' -Value "RunningInstance" - - foreach ($key in $outputMap.Keys) { $settings | Add-Member -Type NoteProperty -Force -Name $key -Value $outputMap[$key].value } - $settings | ConvertTo-Json -depth 100 | Out-File $(Join-Path $projDir appsettings.json) - - Write-Host "> Done." - Write-Host "- App Id: $appId" - Write-Host "- App Password: $appPassword" - Write-Host "- Resource Group: $resourceGroup" - Write-Host "- ServicePlan: $servicePlanName" - Write-Host "- Bot Name: $name" - Write-Host "- Web App Name : $name" -} -else -{ - # Check for failed deployments - $operations = az group deployment operation list -g $resourceGroup -n $timestamp --output json 2>> $logFile | Out-Null - - if ($operations) { - $operations = $operations | ConvertFrom-Json - $failedOperations = $operations | Where { $_.properties.statusmessage.error -ne $null } - if ($failedOperations) { - foreach ($operation in $failedOperations) { - switch ($operation.properties.statusmessage.error.code) { - "MissingRegistrationForLocation" { - Write-Host "! Deployment failed for resource of type $($operation.properties.targetResource.resourceType). This resource is not avaliable in the location provided." -ForegroundColor DarkRed - Write-Host "+ Update the .\Deployment\Resources\parameters.template.json file with a valid region for this resource and provide the file path in the -parametersFile parameter." -ForegroundColor Magenta - } - default { - Write-Host "! Deployment failed for resource of type $($operation.properties.targetResource.resourceType)." - Write-Host "! Code: $($operation.properties.statusMessage.error.code)." - Write-Host "! Message: $($operation.properties.statusMessage.error.message)." - } - } - } - } - } - else { - Write-Host "! Deployment failed. Please refer to the log file for more information." -ForegroundColor DarkRed - Write-Host "! Log: $($logFile)" -ForegroundColor DarkRed - } - - Write-Host "+ To delete this resource group, run 'az group delete -g $($resourceGroup) --no-wait'" -ForegroundColor Magenta - Break -} \ No newline at end of file diff --git a/BotProject/CSharp/Scripts/deploy.ps1 b/BotProject/CSharp/Scripts/deploy.ps1 deleted file mode 100644 index 1efad16116..0000000000 --- a/BotProject/CSharp/Scripts/deploy.ps1 +++ /dev/null @@ -1,137 +0,0 @@ -Param( - [string] $name, - [string] $environment, - [string] $luisAuthoringKey, - [string] $luisAuthoringRegion, - [string] $projFolder = $(Get-Location), - [string] $botPath, - [string] $logFile = $(Join-Path $PSScriptRoot .. "deploy_log.txt") -) - -if ($PSVersionTable.PSVersion.Major -lt 6){ - Write-Host "! Powershell 6 is required, current version is $($PSVersionTable.PSVersion.Major), please refer following documents for help." - Write-Host "For Windows - https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-windows?view=powershell-6" - Write-Host "For Mac - https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-macos?view=powershell-6" - Break -} - -# Get mandatory parameters -if (-not $name) { - $name = Read-Host "? Bot Web App Name" -} - -if (-not $environment) -{ - $environment = Read-Host "? Environment Name (single word, all lowercase)" - $environment = $environment.ToLower().Split(" ") | Select-Object -First 1 -} - -if (-not $botPath) { - $botPath = Read-Host "? The Reletive Path Of Bot" -} - - -# Reset log file -if (Test-Path $logFile) { - Clear-Content $logFile -Force | Out-Null -} -else { - New-Item -Path $logFile | Out-Null -} - -# Check for existing deployment files -if (-not (Test-Path (Join-Path $projFolder '.deployment'))) { - # Add needed deployment files for az - az bot prepare-deploy --lang Csharp --code-dir $projFolder --proj-file-path BotProject.csproj --output json | Out-Null -} - -# Delete src zip, if it exists -$zipPath = $(Join-Path $projFolder 'code.zip') -if (Test-Path $zipPath) { - Remove-Item $zipPath -Force | Out-Null -} - -# Perform dotnet publish step ahead of zipping up -$publishFolder = $(Join-Path $projFolder 'bin\Release\netcoreapp2.2') -dotnet publish -c release -o $publishFolder -v q > $logFile - -# Copy bot files to running folder -$remoteBotPath = $(Join-Path $publishFolder "RunningInstance") -Remove-Item $remoteBotPath -Recurse -ErrorAction Ignore -Copy-Item -Path $botPath -Recurse -Destination $remoteBotPath -Container -Force - -# Merge from custom config files -$customConfigFiles = Get-ChildItem -Path $remoteBotPath -Include "appsettings.json" -Recurse -Force -if ($customConfigFiles) -{ - if (Test-Path $(Join-Path $publishFolder appsettings.json)) { - $settings = Get-Content $(Join-Path $publishFolder appsettings.json) | ConvertFrom-Json - } - else { - $settings = New-Object PSObject - } - - $customConfig = @{} - $customSetting = Get-Content $customConfigFiles.FullName | ConvertFrom-Json - $customSetting.PSObject.Properties | Foreach-Object { $customConfig[$_.Name] = $_.Value } - foreach ($key in $customConfig.Keys) { $settings | Add-Member -Type NoteProperty -Force -Name $key -Value $customConfig[$key] } - - $settings | ConvertTo-Json -depth 100 | Out-File $(Join-Path $publishFolder appsettings.json) -} - -# Add Luis Config to appsettings -if ($luisAuthoringKey -and $luisAuthoringRegion) -{ - # change setting file in publish folder - if (Test-Path $(Join-Path $publishFolder appsettings.json)) { - $settings = Get-Content $(Join-Path $publishFolder appsettings.json) | ConvertFrom-Json - } - else { - $settings = New-Object PSObject - } - - $luisConfigFiles = Get-ChildItem -Path $publishFolder -Include "luis.settings*" -Recurse -Force - - $luisAppIds = @{} - - foreach ($luisConfigFile in $luisConfigFiles) - { - $luisSetting = Get-Content $luisConfigFile.FullName | ConvertFrom-Json - $luis = $luisSetting.luis - $luis.PSObject.Properties | Foreach-Object { $luisAppIds[$_.Name] = $_.Value } - } - - $luisEndpoint = "https://$luisAuthoringRegion.api.cognitive.microsoft.com" - - $luisConfig = @{} - - $luisConfig["endpointKey"] = $luisAuthoringKey - $luisConfig["endpoint"] = $luisEndpoint - - foreach ($key in $luisAppIds.Keys) { $luisConfig[$key] = $luisAppIds[$key] } - - $settings | Add-Member -Type NoteProperty -Force -Name 'luis' -Value $luisConfig - - $settings | ConvertTo-Json -depth 100 | Out-File $(Join-Path $publishFolder appsettings.json) -} - -$resourceGroup = "$name-$environment" - -if($?) -{ - # Compress source code - Get-ChildItem -Path "$($publishFolder)" | Compress-Archive -DestinationPath "$($zipPath)" -Force | Out-Null - - # Publish zip to Azure - Write-Host "> Publishing to Azure ..." -ForegroundColor Green - (az webapp deployment source config-zip ` - --resource-group $resourceGroup ` - --name $name ` - --src $zipPath ` - --output json) 2>> $logFile | Out-Null -} -else -{ - Write-Host "! Could not deploy automatically to Azure. Review the log for more information." -ForegroundColor DarkRed - Write-Host "! Log: $($logFile)" -ForegroundColor DarkRed -} \ No newline at end of file diff --git a/BotProject/CSharp/Startup.cs b/BotProject/CSharp/Startup.cs deleted file mode 100644 index 12358ce19d..0000000000 --- a/BotProject/CSharp/Startup.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Bot.Builder.BotFramework; -using Microsoft.Bot.Builder.Dialogs.Declarative.Types; -using Microsoft.Bot.Connector.Authentication; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace Microsoft.Bot.Builder.ComposerBot.Json -{ - public class Startup - { - public Startup(IHostingEnvironment env, IConfiguration configuration) - { - this.HostingEnvironment = env; - this.Configuration = configuration; - } - - public IHostingEnvironment HostingEnvironment { get; } - - public IConfiguration Configuration { get; } - - // This method gets called by the runtime. Use this method to add services to the container. - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); - - services.AddSingleton(this.Configuration); - - // Create the credential provider to be used with the Bot Framework Adapter. - services.AddSingleton(); - - services.AddSingleton(); - - TypeFactory.Configuration = this.Configuration; - services.AddSingleton((sp) => new BotManager(this.Configuration)); - } - - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env) - { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - else - { - app.UseHsts(); - } - - app.UseDefaultFiles(); - app.UseStaticFiles(); - app.UseWebSockets(); - - //app.UseHttpsRedirection(); - app.UseMvc(); - } - } -} diff --git a/BotProject/CSharp/Tests/ActionsTests.cs b/BotProject/CSharp/Tests/ActionsTests.cs deleted file mode 100644 index 173086e547..0000000000 --- a/BotProject/CSharp/Tests/ActionsTests.cs +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Adapters; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Debugging; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; -using Microsoft.Bot.Builder.Dialogs.Declarative.Types; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using System.IO; -using System.Threading.Tasks; - -namespace Tests -{ - [TestClass] - public class ActionsTests - { - private static string getOsPath(string path) => Path.Combine(path.TrimEnd('\\').Split('\\')); - - private static readonly string samplesDirectory = getOsPath(@"..\..\..\..\..\..\Composer\packages\server\assets\projects"); - - private static string getFolderPath(string path) - { - return Path.Combine(samplesDirectory, path); - } - - - [ClassInitialize] - public static void ClassInitialize(TestContext context) - { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); - string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory)); - } - - public TestContext TestContext { get; set; } - - [TestMethod] - public async Task Actions_01Actions() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)) - .Send("01") - .AssertReply("Step 1") - .AssertReply("Step 2") - .AssertReply("Step 3") - .AssertReply("user.age is set to 18") - .AssertReply("user.age is set to null") - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_02EndTurn() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)) - .Send("02") - .AssertReply("What's up?") - .Send("Nothing") - .AssertReply("Oh I see!") - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_03IfCondition() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)).Send("03") - .AssertReply("Hello, I'm Zoidberg. What is your name?") - .Send("Carlos") - .AssertReply("Hello Carlos, nice to talk to you!") - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_04EditArray() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)).Send("04") - .AssertReply("Here are the index and values in the array.") - .AssertReply("0: 11111") - .AssertReply("1: 40000") - .AssertReply("2: 222222") - .AssertReply("If each page shows two items, here are the index and values") - .AssertReply("0: 11111") - .AssertReply("1: 40000") - .AssertReply("0: 222222") - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_05EndDialog() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)).Send("05") - .AssertReply("Hello, I'm Zoidberg. What is your name?") - .Send("luhan") - .AssertReply("Hello luhan, nice to talk to you!") - .AssertReply("I'm a joke bot. To get started say \"joke\".") - .Send("joke") - .AssertReply("Why did the chicken cross the road?") - .Send("I don't know") - .AssertReply("To get to the other side!") - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_06SwitchCondition() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)).Send("07") - .AssertReply("Please select a value from below:\n\n 1. Test1\n 2. Test2\n 3. Test3") - .Send("Test1") - .AssertReply("You select: Test1") - .AssertReply("You select: 1") - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_07RepeatDialog() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)).Send("08") - .AssertReply("Do you want to repeat this dialog, yes to repeat, no to end this dialog (1) Yes or (2) No") - .Send("Yes") - .AssertReply("Do you want to repeat this dialog, yes to repeat, no to end this dialog (1) Yes or (2) No") - .Send("No") - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_08TraceAndLog() - { - await BuildTestFlow(getFolderPath("ActionsSample"), sendTrace: true) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)).Send("09") - .Send("luhan") - .AssertReply(activity => - { - var trace = (Activity)activity; - Assert.AreEqual(ActivityTypes.Trace, trace.Type, "should be trace activity"); - }) - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_09EditActions() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)).Send("10") - .AssertReply("Hello, I'm Zoidberg. What is your name?") - .Send("luhan") - .AssertReply("Hello luhan, nice to talk to you!") - .AssertReply("Goodbye!") - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_10ReplaceDialog() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)).Send("11") - .AssertReply("Hello, I'm Zoidberg. What is your name?") - .Send("luhan") - .AssertReply("Hello luhan, nice to talk to you! Please either enter 'joke' or 'fortune' to replace the dialog you want.") - .Send("joke") - .AssertReply("Why did the chicken cross the road?") - .Send("Why?") - .AssertReply("To get to the other side!") - .Send("future") - .AssertReply("Seeing into your future...") - .AssertReply("I see great things in your future!") - .AssertReply("Potentially a successful demo") - .StartTestAsync(); - } - - [TestMethod] - public async Task Actions_11EmitEvent() - { - await BuildTestFlow(getFolderPath("ActionsSample")) - .SendConversationUpdate() - .AssertReply(String.Format("I can show you examples on how to use actions. Enter the number next to the entity that you with to see in action.{0}01 - Actions{0}02 - EndTurn{0}03 - IfCondiftion{0}04 - EditArray, Foreach{0}05 - EndDialog{0}06 - HttpRequest{0}07 - SwitchCondition{0}08 - RepeatDialog{0}09 - TraceAndLog{0}10 - EditActions{0}11 - ReplaceDialog{0}12 - EmitEvent{0}13 - QnAMaker", Environment.NewLine)).Send("12") - .AssertReply("Say moo to get a response, say emit to emit a event.") - .Send("moo") - .AssertReply("Yippee ki-yay!") - .Send("emit") - .AssertReply("CustomEvent Fired.") - .StartTestAsync(); - } - - private TestFlow BuildTestFlow(string folderPath, bool sendTrace = false) - { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); - var storage = new MemoryStorage(); - var convoState = new ConversationState(storage); - var userState = new UserState(storage); - var adapter = new TestAdapter(TestAdapter.CreateConversation(TestContext.TestName), sendTrace); - var resourceExplorer = new ResourceExplorer(); - resourceExplorer.AddFolder(folderPath); - adapter - .UseStorage(storage) - .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) - .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); - - var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); - - return new TestFlow(adapter, async (turnContext, cancellationToken) => - { - if (dialog is AdaptiveDialog planningDialog) - { - await dm.OnTurnAsync(turnContext, cancellationToken).ConfigureAwait(false); - } - }); - } - } -} diff --git a/BotProject/CSharp/Tests/ControllingConversationTests.cs b/BotProject/CSharp/Tests/ControllingConversationTests.cs deleted file mode 100644 index ad75bbae45..0000000000 --- a/BotProject/CSharp/Tests/ControllingConversationTests.cs +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Adapters; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Debugging; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; -using Microsoft.Bot.Builder.Dialogs.Declarative.Types; -using Microsoft.Bot.Builder.LanguageGeneration; -using Microsoft.Bot.Builder.ComposerBot.Json; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; - -namespace Tests -{ - [TestClass] - public class ControllingConversationTests - { - private static string getOsPath(string path) => Path.Combine(path.TrimEnd('\\').Split('\\')); - - private static readonly string samplesDirectory = getOsPath(@"..\..\..\..\..\..\Composer\packages\server\assets\projects"); - - private static ResourceExplorer resourceExplorer = new ResourceExplorer(); - - - [ClassInitialize] - public static void ClassInitialize(TestContext context) - { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); - string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory, "ControllingConversationFlowSample")); - resourceExplorer.AddFolder(path); - } - - [ClassCleanup] - public static void ClassCleanup() - { - resourceExplorer.Dispose(); - } - - public TestContext TestContext { get; set; } - - [TestMethod] - public async Task ControllingConversationBotTest() - { - await BuildTestFlow() - .SendConversationUpdate() - .AssertReply(String.Format("Welcome to the Controlling Conversation sample. Choose from the list below to try.{0}You can also type \"Cancel\" to cancel any dialog or \"Endturn\" to explicitly accept an input.", Environment.NewLine)) - .Send("01") - .AssertReply("Hello, What's your age?") - .Send("18") - .AssertReply("Your age is 18 which satisified the condition that was evaluated") - .Send("02") - .AssertReply("Who are your?\n\n 1. Susan\n 2. Nick\n 3. Tom") - .Send("2") - .AssertReply("You selected Nick") - .AssertReply("This is the logic inside the \"Nick\" switch block.") - .Send("03") - .AssertReply("Pushed dialog.id into a list") - .AssertReply("0: 11111") - .AssertReply("1: 40000") - .AssertReply("2: 222222") - .Send("04") - .AssertReply("Pushed dialog.ids into a list") - .AssertReply("0: 11111") - .AssertReply("1: 40000") - .AssertReply("0: 222222") - .Send("06") - .Send("hi") - .Send("07") - .AssertReply("Do you want to repeat this dialog, yes to repeat, no to end this dialog (1) Yes or (2) No") - .Send("Yes") - .AssertReply("Do you want to repeat this dialog, yes to repeat, no to end this dialog (1) Yes or (2) No") - .Send("No") - .Send("05") - .AssertReply("Canceled.") - .StartTestAsync(); - } - - - private TestFlow BuildTestFlow(bool sendTrace = false) - { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); - var storage = new MemoryStorage(); - var convoState = new ConversationState(storage); - var userState = new UserState(storage); - var adapter = new TestAdapter(TestAdapter.CreateConversation(TestContext.TestName), sendTrace); - adapter - .UseStorage(storage) - .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) - .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); - - var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); - - return new TestFlow(adapter, async (turnContext, cancellationToken) => - { - if (dialog is AdaptiveDialog planningDialog) - { - await dm.OnTurnAsync(turnContext, cancellationToken).ConfigureAwait(false); - } - }); - } - } -} diff --git a/BotProject/CSharp/Tests/InputsTests.cs b/BotProject/CSharp/Tests/InputsTests.cs deleted file mode 100644 index a893278ca3..0000000000 --- a/BotProject/CSharp/Tests/InputsTests.cs +++ /dev/null @@ -1,148 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Adapters; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Debugging; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; -using Microsoft.Bot.Builder.Dialogs.Declarative.Types; -using Microsoft.Bot.Builder.LanguageGeneration; -using Microsoft.Bot.Builder.ComposerBot.Json; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; - -namespace Tests -{ - [TestClass] - public class InputsTests - { - private static string getOsPath(string path) => Path.Combine(path.TrimEnd('\\').Split('\\')); - - private static readonly string samplesDirectory = getOsPath(@"..\..\..\..\..\..\Composer\packages\server\assets\projects"); - - private static ResourceExplorer resourceExplorer = new ResourceExplorer(); - - - [ClassInitialize] - public static void ClassInitialize(TestContext context) - { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); - string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory, "AskingQuestionsSample")); - resourceExplorer.AddFolder(path); - } - - [ClassCleanup] - public static void ClassCleanup() - { - resourceExplorer.Dispose(); - } - - public TestContext TestContext { get; set; } - - [TestMethod] - public async Task Inputs_01TextInput() - { - await BuildTestFlow() - .SendConversationUpdate() - .AssertReply(String.Format("Welcome to Input Sample Bot.{0}I can show you examples on how to use actions, You can enter number 01-07{0}01 - TextInput{0}02 - NumberInput{0}03 - ConfirmInput{0}04 - ChoiceInput{0}05 - AttachmentInput{0}06 - DateTimeInput{0}07 - OAuthInput{0}", Environment.NewLine)) - .Send("01") - .AssertReply("Hello, I'm Zoidberg. What is your name? (This can't be interrupted)") - .Send("02") - .AssertReply("Hello 02, nice to talk to you!") - .Send("02") - .AssertReply("What is your age?") - .StartTestAsync(); - } - - [TestMethod] - public async Task Inputs_02NumberInput() - { - await BuildTestFlow() - .SendConversationUpdate() - .AssertReply(String.Format("Welcome to Input Sample Bot.{0}I can show you examples on how to use actions, You can enter number 01-07{0}01 - TextInput{0}02 - NumberInput{0}03 - ConfirmInput{0}04 - ChoiceInput{0}05 - AttachmentInput{0}06 - DateTimeInput{0}07 - OAuthInput{0}", Environment.NewLine)) - .Send("02") - .AssertReply("What is your age?") - .Send("18") - .AssertReply("Hello, your age is 18!") - .AssertReply("2 * 2.2 equals?") - .Send("4.4") - .AssertReply("2 * 2.2 equals 4.4, that's right!") - .StartTestAsync(); - } - - [TestMethod] - public async Task Inputs_03ConfirmInput() - { - await BuildTestFlow() - .SendConversationUpdate() - .AssertReply(String.Format("Welcome to Input Sample Bot.{0}I can show you examples on how to use actions, You can enter number 01-07{0}01 - TextInput{0}02 - NumberInput{0}03 - ConfirmInput{0}04 - ChoiceInput{0}05 - AttachmentInput{0}06 - DateTimeInput{0}07 - OAuthInput{0}", Environment.NewLine)) - .Send("03") - .AssertReply("yes or no (1) Yes or (2) No") - .Send("asdasd") - .AssertReply("I need a yes or no. (1) Yes or (2) No") - .Send("yes") - .AssertReply("confirmation: True") - .StartTestAsync(); - } - - [TestMethod] - public async Task Inputs_04ChoiceInput() - { - await BuildTestFlow() - .SendConversationUpdate() - .AssertReply(String.Format("Welcome to Input Sample Bot.{0}I can show you examples on how to use actions, You can enter number 01-07{0}01 - TextInput{0}02 - NumberInput{0}03 - ConfirmInput{0}04 - ChoiceInput{0}05 - AttachmentInput{0}06 - DateTimeInput{0}07 - OAuthInput{0}", Environment.NewLine)).Send("04") - .AssertReply("Please select a value from below:\n\n 1. Test1\n 2. Test2\n 3. Test3") - .Send("Test1") - .AssertReply("You select: Test1") - .StartTestAsync(); - } - - [TestMethod] - public async Task Inputs_06DateTimeInput() - { - await BuildTestFlow() - .SendConversationUpdate() - .AssertReply(String.Format("Welcome to Input Sample Bot.{0}I can show you examples on how to use actions, You can enter number 01-07{0}01 - TextInput{0}02 - NumberInput{0}03 - ConfirmInput{0}04 - ChoiceInput{0}05 - AttachmentInput{0}06 - DateTimeInput{0}07 - OAuthInput{0}", Environment.NewLine)).Send("06") - .AssertReply("Please enter a date.") - .Send("June 1st") - .AssertReply("You entered: 2019-06-01") - .StartTestAsync(); - } - - private TestFlow BuildTestFlow(bool sendTrace = false) - { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); - var storage = new MemoryStorage(); - var convoState = new ConversationState(storage); - var userState = new UserState(storage); - var adapter = new TestAdapter(TestAdapter.CreateConversation(TestContext.TestName), sendTrace); - adapter - .UseStorage(storage) - .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) - .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); - - var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); - - return new TestFlow(adapter, async (turnContext, cancellationToken) => - { - if (dialog is AdaptiveDialog planningDialog) - { - await dm.OnTurnAsync(turnContext, cancellationToken).ConfigureAwait(false); - } - }); - } - } -} diff --git a/BotProject/CSharp/Tests/MessageTests.cs b/BotProject/CSharp/Tests/MessageTests.cs deleted file mode 100644 index c077c6a3b7..0000000000 --- a/BotProject/CSharp/Tests/MessageTests.cs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Adapters; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Debugging; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; -using Microsoft.Bot.Builder.Dialogs.Declarative.Types; -using Microsoft.Bot.Builder.LanguageGeneration; -using Microsoft.Bot.Builder.ComposerBot.Json; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; - -namespace Tests -{ - [TestClass] - public class MessageTests - { - private static string getOsPath(string path) => Path.Combine(path.TrimEnd('\\').Split('\\')); - - private static readonly string samplesDirectory = getOsPath(@"..\..\..\..\..\..\Composer\packages\server\assets\projects"); - - private static ResourceExplorer resourceExplorer = new ResourceExplorer(); - - - [ClassInitialize] - public static void ClassInitialize(TestContext context) - { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); - string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory, "RespondingWithTextSample")); - resourceExplorer.AddFolder(path); - } - - [ClassCleanup] - public static void ClassCleanup() - { - resourceExplorer.Dispose(); - } - - public TestContext TestContext { get; set; } - - [TestMethod] - public async Task MessageTest() - { - await BuildTestFlow() - .SendConversationUpdate() - .AssertReply("What type of message would you like to send?\n\n 1. Simple Text\n 2. Text With Memory\n 3. LGWithParam\n 4. LGComposition\n 5. Structured LG\n 6. MultiLineText\n 7. IfElseCondition\n 8. SwitchCondition") - .Send("1") - .AssertReplyOneOf(new string[] { "Hi, this is simple text", "Hey, this is simple text", "Hello, this is simple text" }) - .AssertReply("What type of message would you like to send?\n\n 1. Simple Text\n 2. Text With Memory\n 3. LGWithParam\n 4. LGComposition\n 5. Structured LG\n 6. MultiLineText\n 7. IfElseCondition\n 8. SwitchCondition") - .Send("2") - .AssertReply("This is a text saved in memory.") - .AssertReply("What type of message would you like to send?\n\n 1. Simple Text\n 2. Text With Memory\n 3. LGWithParam\n 4. LGComposition\n 5. Structured LG\n 6. MultiLineText\n 7. IfElseCondition\n 8. SwitchCondition") - .Send("3") - .AssertReply("Hello, I'm Zoidberg. What is your name?") - .Send("luhan") - .AssertReply("Hello luhan, nice to talk to you!") - .AssertReply("What type of message would you like to send?\n\n 1. Simple Text\n 2. Text With Memory\n 3. LGWithParam\n 4. LGComposition\n 5. Structured LG\n 6. MultiLineText\n 7. IfElseCondition\n 8. SwitchCondition") - .Send("4") - .AssertReply("luhan nice to talk to you!") - .AssertReply("What type of message would you like to send?\n\n 1. Simple Text\n 2. Text With Memory\n 3. LGWithParam\n 4. LGComposition\n 5. Structured LG\n 6. MultiLineText\n 7. IfElseCondition\n 8. SwitchCondition") - .StartTestAsync(); - } - - private TestFlow BuildTestFlow(bool sendTrace = false) - { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); - var storage = new MemoryStorage(); - var convoState = new ConversationState(storage); - var userState = new UserState(storage); - var adapter = new TestAdapter(TestAdapter.CreateConversation(TestContext.TestName), sendTrace); - adapter - .UseStorage(storage) - .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) - .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); - - var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); - - return new TestFlow(adapter, async (turnContext, cancellationToken) => - { - if (dialog is AdaptiveDialog planningDialog) - { - await dm.OnTurnAsync(turnContext, cancellationToken).ConfigureAwait(false); - } - }); - } - } -} diff --git a/BotProject/CSharp/Tests/Tests.csproj b/BotProject/CSharp/Tests/Tests.csproj deleted file mode 100644 index 4ddbb74f07..0000000000 --- a/BotProject/CSharp/Tests/Tests.csproj +++ /dev/null @@ -1,27 +0,0 @@ - - - - netcoreapp2.1 - - false - - - - ..\BotProject.ruleset - - - - ..\BotProject.ruleset - - - - - - - - - - - - - diff --git a/BotProject/CSharp/Tests/ToDoBotTests.cs b/BotProject/CSharp/Tests/ToDoBotTests.cs deleted file mode 100644 index b2f4fc5ac9..0000000000 --- a/BotProject/CSharp/Tests/ToDoBotTests.cs +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -using Microsoft.Bot.Builder; -using Microsoft.Bot.Builder.Adapters; -using Microsoft.Bot.Builder.Dialogs; -using Microsoft.Bot.Builder.Dialogs.Adaptive; -using Microsoft.Bot.Builder.Dialogs.Debugging; -using Microsoft.Bot.Builder.Dialogs.Declarative; -using Microsoft.Bot.Builder.Dialogs.Declarative.Resources; -using Microsoft.Bot.Builder.Dialogs.Declarative.Types; -using Microsoft.Bot.Builder.LanguageGeneration; -using Microsoft.Bot.Builder.ComposerBot.Json; -using Microsoft.Bot.Schema; -using Microsoft.Extensions.Configuration; -using Microsoft.VisualStudio.TestTools.UnitTesting; -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; - -namespace Tests -{ - [TestClass] - public class ToDoBotTests - { - private static string getOsPath(string path) => Path.Combine(path.TrimEnd('\\').Split('\\')); - - private static readonly string samplesDirectory = getOsPath(@"..\..\..\..\..\..\Composer\packages\server\assets\projects"); - - private static ResourceExplorer resourceExplorer = new ResourceExplorer(); - - - [ClassInitialize] - public static void ClassInitialize(TestContext context) - { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); - string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory, "TodoSample")); - resourceExplorer.AddFolder(path); - } - - [ClassCleanup] - public static void ClassCleanup() - { - resourceExplorer.Dispose(); - } - - public TestContext TestContext { get; set; } - - [TestMethod] - public async Task ToDoBotTest() - { - await BuildTestFlow() - .SendConversationUpdate() - .AssertReply("Hi! I'm a ToDo bot. Say \"add a todo named first\" to get started.") - .Send("add a todo named first") - .AssertReply("Successfully added a todo named first") - .Send("add a todo named second") - .AssertReply("Successfully added a todo named second") - .Send("add a todo") - .AssertReply("OK, please enter the title of your todo.") - .Send("third") - .AssertReply("Successfully added a todo named third") - .Send("show todos") - .AssertReply(String.Format("Your most recent 3 tasks are{0}* first\n* second\n* third", Environment.NewLine)) - .Send("delete todo named second") - .AssertReply("Successfully removed a todo named second") - .Send("show todos") - .AssertReply(String.Format("Your most recent 2 tasks are{0}* first\n* third", Environment.NewLine)) - .StartTestAsync(); - } - - private TestFlow BuildTestFlow(bool sendTrace = false) - { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); - var storage = new MemoryStorage(); - var convoState = new ConversationState(storage); - var userState = new UserState(storage); - var adapter = new TestAdapter(TestAdapter.CreateConversation(TestContext.TestName), sendTrace); - adapter - .UseStorage(storage) - .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) - .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); - - var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); - - return new TestFlow(adapter, async (turnContext, cancellationToken) => - { - if (dialog is AdaptiveDialog planningDialog) - { - await dm.OnTurnAsync(turnContext, cancellationToken).ConfigureAwait(false); - } - }); - } - } -} diff --git a/BotProject/CSharp/appsettings.Development.json b/BotProject/CSharp/appsettings.Development.json deleted file mode 100644 index e203e9407e..0000000000 --- a/BotProject/CSharp/appsettings.Development.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Debug", - "System": "Information", - "Microsoft": "Information" - } - } -} diff --git a/BotProject/CSharp/appsettings.json b/BotProject/CSharp/appsettings.json deleted file mode 100644 index e3a8437897..0000000000 --- a/BotProject/CSharp/appsettings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "bot": "ComposerDialogs", - "MicrosoftAppId": "", - "MicrosoftAppPassword": "" -} \ No newline at end of file diff --git a/BotProject/Templates/CSharp/BotProject.csproj b/BotProject/Templates/CSharp/BotProject.csproj index 3b888c5943..3cc5c22939 100644 --- a/BotProject/Templates/CSharp/BotProject.csproj +++ b/BotProject/Templates/CSharp/BotProject.csproj @@ -1,4 +1,5 @@ - + + netcoreapp3.1 @@ -13,7 +14,6 @@ Always - BotProject.ruleset @@ -21,16 +21,16 @@ BotProject.ruleset - - - - - - - - - - + + + + + + + + + + all @@ -40,4 +40,4 @@ - + \ No newline at end of file diff --git a/BotProject/Templates/CSharp/ComposerBot.cs b/BotProject/Templates/CSharp/ComposerBot.cs index 45cb85659a..0589c862fc 100644 --- a/BotProject/Templates/CSharp/ComposerBot.cs +++ b/BotProject/Templates/CSharp/ComposerBot.cs @@ -14,7 +14,6 @@ namespace Microsoft.Bot.Builder.ComposerBot.Json { public class ComposerBot : ActivityHandler { - private AdaptiveDialog rootDialog; private readonly ResourceExplorer resourceExplorer; private readonly UserState userState; private DialogManager dialogManager; @@ -23,9 +22,7 @@ public class ComposerBot : ActivityHandler private readonly ISourceMap sourceMap; private readonly string rootDialogFile; - private readonly IBotTelemetryClient telemetryClient; - - public ComposerBot(string rootDialogFile, ConversationState conversationState, UserState userState, ResourceExplorer resourceExplorer, ISourceMap sourceMap, IBotTelemetryClient telemetryClient) + public ComposerBot(string rootDialogFile, ConversationState conversationState, UserState userState, ResourceExplorer resourceExplorer, ISourceMap sourceMap) { this.conversationState = conversationState; this.userState = userState; @@ -33,15 +30,11 @@ public ComposerBot(string rootDialogFile, ConversationState conversationState, U this.sourceMap = sourceMap; this.resourceExplorer = resourceExplorer; this.rootDialogFile = rootDialogFile; - this.telemetryClient = telemetryClient; - DeclarativeTypeLoader.AddComponent(new QnAMakerComponentRegistration()); - LoadRootDialogAsync(); } - + public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken)) { - this.telemetryClient.TrackTrace("Activity:" + turnContext.Activity.Text, Severity.Information, null); await this.dialogManager.OnTurnAsync(turnContext, cancellationToken: cancellationToken); await this.conversationState.SaveChangesAsync(turnContext, false, cancellationToken); await this.userState.SaveChangesAsync(turnContext, false, cancellationToken); @@ -50,8 +43,10 @@ public ComposerBot(string rootDialogFile, ConversationState conversationState, U private void LoadRootDialogAsync() { var rootFile = resourceExplorer.GetResource(rootDialogFile); - rootDialog = DeclarativeTypeLoader.Load(rootFile, resourceExplorer, sourceMap); - this.dialogManager = new DialogManager(rootDialog); + var rootDialog = resourceExplorer.LoadType(rootFile); + this.dialogManager = new DialogManager(rootDialog) + .UseResourceExplorer(resourceExplorer) + .UseLanguageGeneration(); } } } diff --git a/BotProject/Templates/CSharp/LuisConfigAdaptor.cs b/BotProject/Templates/CSharp/LuisConfigAdaptor.cs new file mode 100644 index 0000000000..6f23086f3b --- /dev/null +++ b/BotProject/Templates/CSharp/LuisConfigAdaptor.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; + +namespace Microsoft.Bot.Builder.ComposerBot.Json +{ + public static class LuisConfigAdaptor + { + public static IConfigurationBuilder UseLuisConfigAdaptor(this IConfigurationBuilder builder) + { + var configuration = builder.Build(); + var settings = new Dictionary(); + settings["environment"] = configuration.GetValue("luis:environment"); + settings["region"] = configuration.GetValue("luis:authoringRegion"); + builder.AddInMemoryCollection(settings); + return builder; + } + } +} diff --git a/BotProject/Templates/CSharp/Program.cs b/BotProject/Templates/CSharp/Program.cs index 01920c40ba..c5869104f3 100644 --- a/BotProject/Templates/CSharp/Program.cs +++ b/BotProject/Templates/CSharp/Program.cs @@ -1,11 +1,13 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. using System; +using System.Collections.Generic; using System.Diagnostics; using System.IO; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; +using Microsoft.Bot.Builder.AI.Luis; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; @@ -15,42 +17,29 @@ public class Program { public static void Main(string[] args) { - BuildWebHost(args).Run(); + CreateHostBuilder(args).Build().Run(); } - public static IWebHost BuildWebHost(string[] args) => - WebHost.CreateDefaultBuilder(args) - .ConfigureAppConfiguration((hostingContext, config) => + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureAppConfiguration((hostingContext, builder) => { + builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .AddJsonFile($"ComposerDialogs/settings/appsettings.json", optional: true, reloadOnChange: true) + .UseLuisConfigAdaptor() + .UseLuisSettings(); var env = hostingContext.HostingEnvironment; - var luisAuthoringRegion = Environment.GetEnvironmentVariable("LUIS_AUTHORING_REGION") ?? "westus"; - config - .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) - .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true) - .AddJsonFile($"ComposerDialogs/settings/appsettings.json", optional: true, reloadOnChange: true) - .AddJsonFile($"luis.settings.{env.EnvironmentName}.{luisAuthoringRegion}.json", optional: true, reloadOnChange: true) - .AddJsonFile($"luis.settings.{Environment.UserName}.{luisAuthoringRegion}.json", optional: true, reloadOnChange: true); - try - { - foreach (string filePath in Directory.GetFiles($"ComposerDialogs", "generated/luis.settings.*.json")) - { - config.AddJsonFile(filePath, optional: true, reloadOnChange: true); - } - } - catch (Exception ex) - { - Trace.WriteLine(ex.Message); - } - if (env.IsDevelopment()) { - config.AddUserSecrets(); + builder.AddUserSecrets(); } - config - .AddEnvironmentVariables() - .AddCommandLine(args); - }).UseStartup() - .Build(); + builder.AddEnvironmentVariables() + .AddCommandLine(args); + }) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); } } diff --git a/BotProject/Templates/CSharp/README.md b/BotProject/Templates/CSharp/README.md index 7f9cbbefb2..b096ecf323 100644 --- a/BotProject/Templates/CSharp/README.md +++ b/BotProject/Templates/CSharp/README.md @@ -5,14 +5,14 @@ Bot project is the launcher project for the bots written in declarative form (JS The Bot Project is a regular Bot Framework SDK V4 project. Before you can launch it from the emulator, you need to make sure you can run the bot. ### Prerequisite: -* Install .Netcore 2 +* Install .Netcore 3.1 ### Commands: * from root folder * cd BotProject -* cd CSharp -* dotnet restore // for the package updates +* cd Templates/CSharp +* dotnet user-secrets init // init the user secret id * dotnet build // build * dotnet run // start the bot * It will start a web server and listening at http://localhost:3979. @@ -20,36 +20,3 @@ The Bot Project is a regular Bot Framework SDK V4 project. Before you can launch ### Test bot * You can set you emulator to connect to http://localhost:3979/api/messages. -### config your bot -This setup is required for local testing of your Bot Runtime. -* The only thing you need to config is appsetting.json, which has a bot setting to launch the bot: - -``` -appsettings.json: -"bot": { - "provider": "localDisk", - "path": "../../Bots/SampleBot3/bot3.botproj" -} -``` - -## .botproj folder structure -``` -bot.botproj, bot project got the rootDialog from "entry" -{ - "services": [{ - "type": "luis", - "id": "1", - "name": "TodoBotLuis", - "lufile": "todo.lu", - "applicationId": "TodoBotLuis.applicationId", - "endpointKey": "TodoBotLuis.endpointKey", - "endpoint": "TodoBotLuis.endpoint" - }], - "files": [ - "*.dialog", - "*.lg" - ], - "entry": "main.dialog" -} -``` -* Please refer to [Samples](https://github.com/Microsoft/BotFramework-Composer/tree/master/SampleBots) for more samples. diff --git a/BotProject/Templates/CSharp/Schemas/sdk.schema b/BotProject/Templates/CSharp/Schemas/sdk.schema index 1fafc1696f..a1c8661f27 100644 --- a/BotProject/Templates/CSharp/Schemas/sdk.schema +++ b/BotProject/Templates/CSharp/Schemas/sdk.schema @@ -999,7 +999,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -1008,7 +1008,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -1072,7 +1072,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -1089,7 +1089,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -1527,7 +1527,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -1536,7 +1536,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -1600,7 +1600,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -1617,7 +1617,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -1939,7 +1939,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -1948,7 +1948,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -2012,7 +2012,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -2029,7 +2029,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -2552,7 +2552,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -2561,7 +2561,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -2625,7 +2625,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -2642,7 +2642,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -5763,7 +5763,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -5772,7 +5772,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -5836,7 +5836,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -5853,7 +5853,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -11520,7 +11520,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -11529,7 +11529,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -11593,7 +11593,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -11610,7 +11610,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -11648,7 +11648,7 @@ "description": "Expression to format the output.", "examples": [ "=toUpper(this.value)", - "@{toUpper(this.value)}" + "${toUpper(this.value)}" ] } }, @@ -12034,4 +12034,4 @@ ] } } -} \ No newline at end of file +} diff --git a/BotProject/Templates/CSharp/Startup.cs b/BotProject/Templates/CSharp/Startup.cs index f6b769dd96..f4f532942d 100644 --- a/BotProject/Templates/CSharp/Startup.cs +++ b/BotProject/Templates/CSharp/Startup.cs @@ -44,8 +44,6 @@ public void ConfigureServices(IServiceCollection services) // Create the credential provider to be used with the Bot Framework Adapter. services.AddSingleton(); - services.AddSingleton(); - // Load settings var settings = new BotSettings(); Configuration.Bind(settings); @@ -66,18 +64,9 @@ public void ConfigureServices(IServiceCollection services) services.AddSingleton(storage); var userState = new UserState(storage); var conversationState = new ConversationState(storage); - var inspectionState = new InspectionState(storage); - - // Configure telemetry - services.AddApplicationInsightsTelemetry(); - var telemetryClient = new BotTelemetryClient(new TelemetryClient()); - services.AddSingleton(telemetryClient); - services.AddBotApplicationInsights(telemetryClient); var botFile = Configuration.GetSection("bot").Get(); - TypeFactory.Configuration = this.Configuration; - // manage all bot resources var resourceExplorer = new ResourceExplorer().AddFolder(botFile); @@ -85,15 +74,12 @@ public void ConfigureServices(IServiceCollection services) services.AddSingleton((s) => { + HostContext.Current.Set(Configuration); + var adapter = new BotFrameworkHttpAdapter(new ConfigurationCredentialProvider(this.Configuration)); adapter .UseStorage(storage) - .UseState(userState, conversationState) - .UseAdaptiveDialogs() - .UseResourceExplorer(resourceExplorer) - .UseLanguageGeneration(resourceExplorer, "common.lg") - .Use(new RegisterClassMiddleware(Configuration)) - .Use(new InspectionMiddleware(inspectionState, userState, conversationState, credentials)); + .UseState(userState, conversationState); if (!string.IsNullOrEmpty(settings.BlobStorage.ConnectionString) && !string.IsNullOrEmpty(settings.BlobStorage.Container)) { @@ -107,28 +93,18 @@ public void ConfigureServices(IServiceCollection services) adapter.OnTurnError = async (turnContext, exception) => { await turnContext.SendActivityAsync(exception.Message).ConfigureAwait(false); - telemetryClient.TrackException(new Exception("Exceptions: " + exception.Message)); await conversationState.ClearStateAsync(turnContext).ConfigureAwait(false); await conversationState.SaveChangesAsync(turnContext).ConfigureAwait(false); }; return adapter; }); - services.AddSingleton((sp) => new ComposerBot("Main.dialog", conversationState, userState, resourceExplorer, DebugSupport.SourceMap, telemetryClient)); + services.AddSingleton((sp) => new ComposerBot("Main.dialog", conversationState, userState, resourceExplorer, DebugSupport.SourceMap)); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - else - { - app.UseHsts(); - } - app.UseDefaultFiles(); app.UseStaticFiles(); app.UseWebSockets(); diff --git a/BotProject/Templates/CSharp/Tests/ActionsTests.cs b/BotProject/Templates/CSharp/Tests/ActionsTests.cs index fbfedc8690..920cd9a00f 100644 --- a/BotProject/Templates/CSharp/Tests/ActionsTests.cs +++ b/BotProject/Templates/CSharp/Tests/ActionsTests.cs @@ -34,7 +34,6 @@ private static string getFolderPath(string path) [ClassInitialize] public static void ClassInitialize(TestContext context) { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory)); } @@ -156,6 +155,7 @@ await BuildTestFlow(getFolderPath("ActionsSample"), sendTrace: true) } [TestMethod] + [Ignore] public async Task Actions_09EditActions() { await BuildTestFlow(getFolderPath("ActionsSample")) @@ -204,7 +204,6 @@ await BuildTestFlow(getFolderPath("ActionsSample")) private TestFlow BuildTestFlow(string folderPath, bool sendTrace = false) { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); var storage = new MemoryStorage(); var convoState = new ConversationState(storage); var userState = new UserState(storage); @@ -213,15 +212,14 @@ private TestFlow BuildTestFlow(string folderPath, bool sendTrace = false) resourceExplorer.AddFolder(folderPath); adapter .UseStorage(storage) - .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) + .UseState(userState, convoState) .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); + var dialog = resourceExplorer.LoadType(resource); + DialogManager dm = new DialogManager(dialog) + .UseResourceExplorer(resourceExplorer) + .UseLanguageGeneration(); ; return new TestFlow(adapter, async (turnContext, cancellationToken) => { diff --git a/BotProject/Templates/CSharp/Tests/ControllingConversationTests.cs b/BotProject/Templates/CSharp/Tests/ControllingConversationTests.cs index 593d7666f8..a100e4565e 100644 --- a/BotProject/Templates/CSharp/Tests/ControllingConversationTests.cs +++ b/BotProject/Templates/CSharp/Tests/ControllingConversationTests.cs @@ -30,7 +30,6 @@ public class ControllingConversationTests [ClassInitialize] public static void ClassInitialize(TestContext context) { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory, "ControllingConversationFlowSample")); resourceExplorer.AddFolder(path); } @@ -75,15 +74,12 @@ await BuildTestFlow() .Send("Yes") .AssertReply("Do you want to repeat this dialog, yes to repeat, no to end this dialog (1) Yes or (2) No") .Send("No") - .Send("05") - .AssertReply("Canceled.") .StartTestAsync(); } private TestFlow BuildTestFlow(bool sendTrace = false) { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); var storage = new MemoryStorage(); var convoState = new ConversationState(storage); var userState = new UserState(storage); @@ -91,14 +87,13 @@ private TestFlow BuildTestFlow(bool sendTrace = false) adapter .UseStorage(storage) .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); + var dialog = resourceExplorer.LoadType(resource); + DialogManager dm = new DialogManager(dialog) + .UseResourceExplorer(resourceExplorer) + .UseLanguageGeneration(); return new TestFlow(adapter, async (turnContext, cancellationToken) => { diff --git a/BotProject/Templates/CSharp/Tests/InputsTests.cs b/BotProject/Templates/CSharp/Tests/InputsTests.cs index 0bf735d2fe..fe1ce5e0e0 100644 --- a/BotProject/Templates/CSharp/Tests/InputsTests.cs +++ b/BotProject/Templates/CSharp/Tests/InputsTests.cs @@ -31,7 +31,6 @@ public class InputsTests [ClassInitialize] public static void ClassInitialize(TestContext context) { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory, "AskingQuestionsSample")); resourceExplorer.AddFolder(path); } @@ -116,7 +115,6 @@ await BuildTestFlow() private TestFlow BuildTestFlow(bool sendTrace = false) { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); var storage = new MemoryStorage(); var convoState = new ConversationState(storage); var userState = new UserState(storage); @@ -124,14 +122,13 @@ private TestFlow BuildTestFlow(bool sendTrace = false) adapter .UseStorage(storage) .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); + var dialog = resourceExplorer.LoadType(resource); + DialogManager dm = new DialogManager(dialog) + .UseResourceExplorer(resourceExplorer) + .UseLanguageGeneration(); return new TestFlow(adapter, async (turnContext, cancellationToken) => { diff --git a/BotProject/Templates/CSharp/Tests/MessageTests.cs b/BotProject/Templates/CSharp/Tests/MessageTests.cs index d5fb6dc42c..d68c119860 100644 --- a/BotProject/Templates/CSharp/Tests/MessageTests.cs +++ b/BotProject/Templates/CSharp/Tests/MessageTests.cs @@ -34,7 +34,6 @@ public class MessageTests [ClassInitialize] public static void ClassInitialize(TestContext context) { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory, "RespondingWithTextSample")); resourceExplorer.AddFolder(path); } @@ -72,7 +71,6 @@ await BuildTestFlow() private TestFlow BuildTestFlow(bool sendTrace = false) { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); var storage = new MemoryStorage(); var convoState = new ConversationState(storage); var userState = new UserState(storage); @@ -80,14 +78,13 @@ private TestFlow BuildTestFlow(bool sendTrace = false) adapter .UseStorage(storage) .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); + var dialog = resourceExplorer.LoadType(resource); + DialogManager dm = new DialogManager(dialog) + .UseResourceExplorer(resourceExplorer) + .UseLanguageGeneration(); return new TestFlow(adapter, async (turnContext, cancellationToken) => { diff --git a/BotProject/Templates/CSharp/Tests/ToDoBotTests.cs b/BotProject/Templates/CSharp/Tests/ToDoBotTests.cs index b2dca363f0..b60b279307 100644 --- a/BotProject/Templates/CSharp/Tests/ToDoBotTests.cs +++ b/BotProject/Templates/CSharp/Tests/ToDoBotTests.cs @@ -30,7 +30,6 @@ public class ToDoBotTests [ClassInitialize] public static void ClassInitialize(TestContext context) { - TypeFactory.Configuration = new ConfigurationBuilder().AddInMemoryCollection().Build(); string path = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, samplesDirectory, "TodoSample")); resourceExplorer.AddFolder(path); } @@ -68,7 +67,6 @@ await BuildTestFlow() private TestFlow BuildTestFlow(bool sendTrace = false) { - TypeFactory.Configuration = new ConfigurationBuilder().Build(); var storage = new MemoryStorage(); var convoState = new ConversationState(storage); var userState = new UserState(storage); @@ -76,14 +74,13 @@ private TestFlow BuildTestFlow(bool sendTrace = false) adapter .UseStorage(storage) .UseState(userState, convoState) - .UseAdaptiveDialogs() - .UseLanguageGeneration(resourceExplorer, "common.lg") - .UseResourceExplorer(resourceExplorer) .Use(new TranscriptLoggerMiddleware(new FileTranscriptLogger())); var resource = resourceExplorer.GetResource("Main.dialog"); - var dialog = DeclarativeTypeLoader.Load(resource, resourceExplorer, DebugSupport.SourceMap); - DialogManager dm = new DialogManager(dialog); + var dialog = resourceExplorer.LoadType(resource); + DialogManager dm = new DialogManager(dialog) + .UseResourceExplorer(resourceExplorer) + .UseLanguageGeneration(); return new TestFlow(adapter, async (turnContext, cancellationToken) => { diff --git a/Composer/cypress/integration/NotificationPage.spec.ts b/Composer/cypress/integration/NotificationPage.spec.ts index ba00dc873d..eb7b06dfe8 100644 --- a/Composer/cypress/integration/NotificationPage.spec.ts +++ b/Composer/cypress/integration/NotificationPage.spec.ts @@ -13,7 +13,7 @@ context('Notification Page', () => { cy.get('.toggleEditMode button').as('switchButton'); cy.get('@switchButton').click(); - cy.get('textarea').type('test lg syntax error'); + cy.get('textarea').type('test lg syntax error#'); cy.visitPage('Notifications'); diff --git a/Composer/packages/client/__tests__/store/reducer/reducer.test.js b/Composer/packages/client/__tests__/store/reducer/reducer.test.js index cc0e7521dd..ea8c9368eb 100644 --- a/Composer/packages/client/__tests__/store/reducer/reducer.test.js +++ b/Composer/packages/client/__tests__/store/reducer/reducer.test.js @@ -31,7 +31,7 @@ describe('test all reducer handlers', () => { payload: { id: 'common.lg', content: ` # bfdactivity-003038 - - You said '@{turn.activity.text}'`, + - You said '\${turn.activity.text}'`, }, } ); diff --git a/Composer/packages/client/package.json b/Composer/packages/client/package.json index c0fcfb6d77..5c8da74fd9 100644 --- a/Composer/packages/client/package.json +++ b/Composer/packages/client/package.json @@ -20,12 +20,12 @@ "@bfc/extensions": "*", "@bfc/indexers": "*", "@bfc/shared": "*", - "@bfcomposer/bf-lu": "^1.1.8", + "@bfcomposer/bf-lu": "^1.2.5", "@emotion/core": "^10.0.7", "@reach/router": "^1.2.1", "axios": "^0.18.0", - "botbuilder-lg": "4.7.0-preview.93464", - "botframework-expressions": "4.7.0-preview.93464", + "botbuilder-lg": "^4.8.0-preview.106823", + "botframework-expressions": "^4.8.0-preview.106476", "format-message": "^6.2.3", "immer": "^5.2.0", "jwt-decode": "^2.2.0", diff --git a/Composer/packages/extensions/obiformeditor/demo/src/editorschema.json b/Composer/packages/extensions/obiformeditor/demo/src/editorschema.json index 7875250f47..b41d827cdb 100644 --- a/Composer/packages/extensions/obiformeditor/demo/src/editorschema.json +++ b/Composer/packages/extensions/obiformeditor/demo/src/editorschema.json @@ -63,9 +63,6 @@ "Microsoft.IfCondition": { "title": "Branch: If/Else" }, - "Microsoft.InitProperty": { - "title": "Initialize Property" - }, "Microsoft.OnIntent": { "title": "Intent" }, diff --git a/Composer/packages/extensions/obiformeditor/package.json b/Composer/packages/extensions/obiformeditor/package.json index a74aae2939..b575a1f5a4 100644 --- a/Composer/packages/extensions/obiformeditor/package.json +++ b/Composer/packages/extensions/obiformeditor/package.json @@ -61,7 +61,7 @@ "@types/react": "16.9.0", "@types/react-dom": "16.9.0", "autoprefixer": "^9.5.1", - "botframework-expressions": "4.7.0-preview.93464", + "botframework-expressions": "^4.8.0-preview.106476", "codemirror": "^5.44.0", "copyfiles": "^2.1.0", "css-loader": "^2.1.1", diff --git a/Composer/packages/extensions/visual-designer/demo/src/samples/todo/AddToDo.json b/Composer/packages/extensions/visual-designer/demo/src/samples/todo/AddToDo.json index f6f7be93f3..390fa63365 100644 --- a/Composer/packages/extensions/visual-designer/demo/src/samples/todo/AddToDo.json +++ b/Composer/packages/extensions/visual-designer/demo/src/samples/todo/AddToDo.json @@ -49,7 +49,7 @@ "condition": "user.todos == null", "actions": [ { - "$type": "Microsoft.InitProperty", + "$type": "Microsoft.SetProperty", "$designer": { "createdAt": "2019-07-16T20:01:05.970Z", "updatedAt": "2019-07-16T20:01:13.866Z", diff --git a/Composer/packages/extensions/visual-designer/demo/src/stories/VisualSDKDemo.js b/Composer/packages/extensions/visual-designer/demo/src/stories/VisualSDKDemo.js index c061775c26..70b1ea7f12 100644 --- a/Composer/packages/extensions/visual-designer/demo/src/stories/VisualSDKDemo.js +++ b/Composer/packages/extensions/visual-designer/demo/src/stories/VisualSDKDemo.js @@ -20,7 +20,6 @@ export class VisualSDKDemo extends Component { const initialTypes = [ SDKTypes.SendActivity, SDKTypes.EditArray, - SDKTypes.InitProperty, SDKTypes.SetProperties, SDKTypes.SetProperty, SDKTypes.DeleteProperties, diff --git a/Composer/packages/extensions/visual-designer/src/schema/uischema.tsx b/Composer/packages/extensions/visual-designer/src/schema/uischema.tsx index 07d454c2af..e0ad27eb69 100644 --- a/Composer/packages/extensions/visual-designer/src/schema/uischema.tsx +++ b/Composer/packages/extensions/visual-designer/src/schema/uischema.tsx @@ -116,10 +116,6 @@ export const uiSchema: UISchema = { 'ui:widget': ActionCard, content: data => `${data.changeType} {${data.itemsProperty || '?'}}`, }, - [SDKTypes.InitProperty]: { - 'ui:widget': ActionCard, - content: data => `{${data.property || '?'}} = new ${data.type || '?'}`, - }, [SDKTypes.SetProperty]: { 'ui:widget': ActionCard, content: data => `{${data.property || '?'}} = ${data.value || '?'}`, diff --git a/Composer/packages/lib/code-editor/src/languages/lg.ts b/Composer/packages/lib/code-editor/src/languages/lg.ts index 08ec79c018..126d0e509e 100644 --- a/Composer/packages/lib/code-editor/src/languages/lg.ts +++ b/Composer/packages/lib/code-editor/src/languages/lg.ts @@ -11,34 +11,25 @@ function createKeywordsProposals(range) { { label: 'IF', kind: monaco.languages.CompletionItemKind.Keyword, - insertText: `IF: @{} -- -- ELSEIF: @{} - - -- ELSE: - - `, + insertText: ['IF: ${}', '- ELSEIF: ${}', ' -', '- ELSE:', ' -'].join('\r\n'), range: range, }, { label: 'ELSEIF', kind: monaco.languages.CompletionItemKind.Keyword, - insertText: 'ELSEIF:@{}', + insertText: 'ELSEIF:${}', range: range, }, { label: 'ELSE', kind: monaco.languages.CompletionItemKind.Keyword, - insertText: 'ELSE:\n', + insertText: 'ELSE:\r\n', range: range, }, { label: 'SWITCH', kind: monaco.languages.CompletionItemKind.Keyword, - insertText: `SWITCH: @{} -- CASE: @{} - - -- DEFAULT: - - `, + insertText: ['SWITCH: ${}', '- CASE: ${}', ' -', '- DEFAULT:', ' -'].join('\r\n'), range: range, }, ]; @@ -94,11 +85,11 @@ export function registerLGLanguage(monaco: typeof monacoEditor) { //template_body [/^\s*-/, { token: 'template-body-identifier', next: '@template_body' }], //expression - [/@\{/, { token: 'expression', next: '@expression' }], + [/\$\{/, { token: 'expression', next: '@expression' }], ], fence_block: [ [/`{3}\s*/, { token: 'fence-block', next: '@pop' }], - [/@\{/, { token: 'expression', next: '@expression' }], + [/\$\{/, { token: 'expression', next: '@expression' }], [/./, 'fence-block'], ], expression: [ @@ -109,7 +100,7 @@ export function registerLGLanguage(monaco: typeof monacoEditor) { [/(\s*'[^']*?'\s*)(,|\))/, ['string', 'delimeter']], [/(\s*"[^"]*?"\s*)(,|\))/, ['string', 'delimeter']], [/(\s*[^},'"(]*\s*)(,|\))/, ['other-expression', 'delimeter']], - [/[^@}]*$/, { token: 'expression.content', next: '@pop' }], + [/[^$}]*$/, { token: 'expression.content', next: '@pop' }], ], structure_lg: [ [/^\s*\]\s*$/, 'structure-lg', '@pop'], @@ -117,7 +108,7 @@ export function registerLGLanguage(monaco: typeof monacoEditor) { [/(\s*\[\s*)([a-zA-Z0-9_-]+\s*$)/, ['stucture-lg-identifier', 'structure-name']], [/^\s*>[\s\S]*$/, 'comments'], [/\|/, { token: 'alternative' }], - [/@\{/, { token: 'expression', next: '@expression' }], + [/\$\{/, { token: 'expression', next: '@expression' }], ], }, }); diff --git a/Composer/packages/lib/indexers/package.json b/Composer/packages/lib/indexers/package.json index a8511930bc..461948af75 100644 --- a/Composer/packages/lib/indexers/package.json +++ b/Composer/packages/lib/indexers/package.json @@ -29,9 +29,9 @@ }, "dependencies": { "@bfc/shared": "*", - "@bfcomposer/bf-lu": "^1.1.8", - "botbuilder-lg": "^4.8.0-preview.97252", - "botframework-expressions": "4.7.0-preview.93464", + "@bfcomposer/bf-lu": "^1.2.5", + "botbuilder-lg": "^4.8.0-preview.106823", + "botframework-expressions": "^4.8.0-preview.106476", "lodash": "^4.17.15" } } diff --git a/Composer/packages/lib/shared/__tests__/lgUtils/models/LgTemplateRef.test.ts b/Composer/packages/lib/shared/__tests__/lgUtils/models/LgTemplateRef.test.ts index af6d59ba5d..b708c60893 100644 --- a/Composer/packages/lib/shared/__tests__/lgUtils/models/LgTemplateRef.test.ts +++ b/Composer/packages/lib/shared/__tests__/lgUtils/models/LgTemplateRef.test.ts @@ -20,30 +20,30 @@ describe('LgTemplateRef#', () => { it('can output correct strings', () => { const a = new LgTemplateRef('a', undefined); - expect(a.toString()).toEqual('@{a()}'); + expect(a.toString()).toEqual('${a()}'); const b = new LgTemplateRef('b', []); - expect(b.toString()).toEqual('@{b()}'); + expect(b.toString()).toEqual('${b()}'); const c = new LgTemplateRef('c', ['1', '2']); - expect(c.toString()).toEqual('@{c(1,2)}'); + expect(c.toString()).toEqual('${c(1,2)}'); }); describe('parse()', () => { it('should return null when inputs are invalid', () => { expect(LgTemplateRef.parse('')).toEqual(null); expect(LgTemplateRef.parse('xxx')).toEqual(null); - expect(LgTemplateRef.parse('@{0}')).toEqual(null); + expect(LgTemplateRef.parse('${0}')).toEqual(null); }); it('should return LgTemplateRef when inputs are valid', () => { - const a = LgTemplateRef.parse('@{bfdactivity-123456()}'); + const a = LgTemplateRef.parse('${bfdactivity-123456()}'); expect(a).toEqual(new LgTemplateRef('bfdactivity-123456')); - const a2 = LgTemplateRef.parse('@{bfdactivity-123456()}'); + const a2 = LgTemplateRef.parse('${bfdactivity-123456()}'); expect(a2).toEqual(new LgTemplateRef('bfdactivity-123456')); - const b = LgTemplateRef.parse('@{greeting(1,2)}'); + const b = LgTemplateRef.parse('${greeting(1,2)}'); expect(b).toEqual(new LgTemplateRef('greeting', ['1', '2'])); }); }); diff --git a/Composer/packages/lib/shared/__tests__/lgUtils/parsers/parseLgTemplateRef.test.ts b/Composer/packages/lib/shared/__tests__/lgUtils/parsers/parseLgTemplateRef.test.ts index cc983fdce1..7ecbe397be 100644 --- a/Composer/packages/lib/shared/__tests__/lgUtils/parsers/parseLgTemplateRef.test.ts +++ b/Composer/packages/lib/shared/__tests__/lgUtils/parsers/parseLgTemplateRef.test.ts @@ -8,15 +8,15 @@ describe('parseLgTemplateRef', () => { it('should return null when inputs are invalid', () => { expect(parseLgTemplateRef('')).toEqual(null); expect(parseLgTemplateRef('xxx')).toEqual(null); - expect(parseLgTemplateRef('@{0}')).toEqual(null); - expect(parseLgTemplateRef('hi, @{greeting()}. @{greeting()}')).toEqual(null); + expect(parseLgTemplateRef('${0}')).toEqual(null); + expect(parseLgTemplateRef('hi, ${greeting()}. ${greeting()}')).toEqual(null); }); it('should return LgTemplateRef when inputs are valid', () => { - const a = parseLgTemplateRef('@{bfdactivity-123456()}'); + const a = parseLgTemplateRef('${bfdactivity-123456()}'); expect(a).toEqual(new LgTemplateRef('bfdactivity-123456')); - const b = parseLgTemplateRef('@{greeting(1,2)}'); + const b = parseLgTemplateRef('${greeting(1,2)}'); expect(b).toEqual(new LgTemplateRef('greeting', ['1', '2'])); }); }); @@ -24,8 +24,8 @@ describe('parseLgTemplateRef', () => { describe('extractLgTemplateRefs', () => { it('can extract lg refs from input string', () => { expect(extractLgTemplateRefs('Hi')).toEqual([]); - expect(extractLgTemplateRefs('@{bfdactivity-123456()}')).toEqual([new LgTemplateRef('bfdactivity-123456')]); - expect(extractLgTemplateRefs(`-@{Greeting()}, I'm a fancy bot, @{Bye()}`)).toEqual([ + expect(extractLgTemplateRefs('${bfdactivity-123456()}')).toEqual([new LgTemplateRef('bfdactivity-123456')]); + expect(extractLgTemplateRefs(`-\${Greeting()}, I'm a fancy bot, \${Bye()}`)).toEqual([ new LgTemplateRef('Greeting'), new LgTemplateRef('Bye'), ]); diff --git a/Composer/packages/lib/shared/src/appschema.ts b/Composer/packages/lib/shared/src/appschema.ts index 711f1045dc..5330d03cfa 100644 --- a/Composer/packages/lib/shared/src/appschema.ts +++ b/Composer/packages/lib/shared/src/appschema.ts @@ -1400,11 +1400,6 @@ export const appschema: OBISchema = { description: 'Two-way branch the conversation flow based on a condition.', $ref: '#/definitions/Microsoft.IfCondition', }, - { - title: 'Microsoft.InitProperty', - description: 'Define and initialize a property to be an array or object.', - $ref: '#/definitions/Microsoft.InitProperty', - }, { title: 'Microsoft.LogAction', description: @@ -1700,28 +1695,6 @@ export const appschema: OBISchema = { }, }, }, - 'Microsoft.InitProperty': { - $role: 'unionType(Microsoft.IDialog)', - title: 'Initialize property', - description: 'Define and initialize a property to be an array or object.', - type: 'object', - properties: { - ...$properties(SDKTypes.InitProperty), - property: { - $role: 'expression', - title: 'Property', - description: 'Property (named location to store information).', - examples: ['user.age'], - type: 'string', - }, - type: { - type: 'string', - title: 'Type', - description: 'Type of value.', - enum: ['object', 'array'], - }, - }, - }, 'Microsoft.IpEntityRecognizer': { $role: 'unionType(Microsoft.EntityRecognizers)', title: 'Ip Entity Recognizer', diff --git a/Composer/packages/lib/shared/src/labelMap.ts b/Composer/packages/lib/shared/src/labelMap.ts index 48712512cd..b49e7a4714 100644 --- a/Composer/packages/lib/shared/src/labelMap.ts +++ b/Composer/packages/lib/shared/src/labelMap.ts @@ -91,9 +91,6 @@ export const ConceptLabels: { [key in ConceptLabelKey]?: LabelOverride } = { [SDKTypes.IfCondition]: { title: formatMessage('Branch: if/else'), }, - [SDKTypes.InitProperty]: { - title: formatMessage('Initialize a property'), - }, [SDKTypes.LanguagePolicy]: { title: formatMessage('LanguagePolicy'), }, diff --git a/Composer/packages/lib/shared/src/lgUtils/parsers/lgPatterns.ts b/Composer/packages/lib/shared/src/lgUtils/parsers/lgPatterns.ts index bdfcaa6023..11a4a3cd41 100644 --- a/Composer/packages/lib/shared/src/lgUtils/parsers/lgPatterns.ts +++ b/Composer/packages/lib/shared/src/lgUtils/parsers/lgPatterns.ts @@ -3,4 +3,4 @@ export const LgNamePattern = `bfd(\\w+)-(\\d+)`; -export const LgTemplateRefPattern = `@\\{([A-Za-z_][-\\w]+)(\\([^\\)]*\\))?\\}`; +export const LgTemplateRefPattern = `\\$\\{([A-Za-z_][-\\w]+)(\\([^\\)]*\\))?\\}`; diff --git a/Composer/packages/lib/shared/src/lgUtils/stringBuilders/buildLgTemplateRefString.ts b/Composer/packages/lib/shared/src/lgUtils/stringBuilders/buildLgTemplateRefString.ts index d0029c82a2..c445697275 100644 --- a/Composer/packages/lib/shared/src/lgUtils/stringBuilders/buildLgTemplateRefString.ts +++ b/Composer/packages/lib/shared/src/lgUtils/stringBuilders/buildLgTemplateRefString.ts @@ -11,5 +11,5 @@ import buildLgParamString from './buildLgParamString'; */ export default function buildLgTemplateRefString(lgTemplateRef: LgTemplateRef): LgTemplateRefString { const { name, parameters } = lgTemplateRef; - return `@{${name}${buildLgParamString(parameters)}}`; + return `\${${name}${buildLgParamString(parameters)}}`; } diff --git a/Composer/packages/lib/shared/src/types/schema.ts b/Composer/packages/lib/shared/src/types/schema.ts index 37221d09c8..6bcd5b2818 100644 --- a/Composer/packages/lib/shared/src/types/schema.ts +++ b/Composer/packages/lib/shared/src/types/schema.ts @@ -49,7 +49,6 @@ export enum SDKTypes { HashtagEntityRecognizer = 'Microsoft.HashtagEntityRecognizer', HttpRequest = 'Microsoft.HttpRequest', IfCondition = 'Microsoft.IfCondition', - InitProperty = 'Microsoft.InitProperty', IpEntityRecognizer = 'Microsoft.IpEntityRecognizer', LanguagePolicy = 'Microsoft.LanguagePolicy', LogAction = 'Microsoft.LogAction', diff --git a/Composer/packages/lib/shared/src/viewUtils.ts b/Composer/packages/lib/shared/src/viewUtils.ts index df4b202ea6..923c54b228 100644 --- a/Composer/packages/lib/shared/src/viewUtils.ts +++ b/Composer/packages/lib/shared/src/viewUtils.ts @@ -69,7 +69,6 @@ export const dialogGroups: DialogGroupsMap = { types: [ SDKTypes.SetProperty, SDKTypes.SetProperties, - SDKTypes.InitProperty, SDKTypes.DeleteProperty, SDKTypes.DeleteProperties, SDKTypes.EditArray, diff --git a/Composer/packages/server/__tests__/mocks/samplebots/bot1/ComposerDialogs/Main.dialog b/Composer/packages/server/__tests__/mocks/samplebots/bot1/ComposerDialogs/Main.dialog index 466beb28e8..54f8b4ef1d 100644 --- a/Composer/packages/server/__tests__/mocks/samplebots/bot1/ComposerDialogs/Main.dialog +++ b/Composer/packages/server/__tests__/mocks/samplebots/bot1/ComposerDialogs/Main.dialog @@ -3,27 +3,27 @@ "steps": [ { "$type": "Microsoft.TextInput", - "prompt": "@{hello()} I'm a ToDo bot" + "prompt": "${hello()} I'm a ToDo bot" }, { "$type": "Microsoft.SendActivity", - "activity": "@{bye()} See you again" + "activity": "${bye()} See you again" }, { "$type": "Microsoft.SendActivity", - "activity": "@{bye()} bye bye again" + "activity": "${bye()} bye bye again" }, { "$type": "Microsoft.SendActivity", - "activity": "@{ShowImage(dialog.attachments[0].contentUrl, dialog.attachments[0].contentType)}" + "activity": "${ShowImage(dialog.attachments[0].contentUrl, dialog.attachments[0].contentType)}" }, { "$type": "Microsoft.SendActivity", - "activity": "You entered: @{user.date[0].value}" + "activity": "You entered: ${user.date[0].value}" }, { "$type": "Microsoft.TextInput", - "activity": "@{bye3()} See you again" + "activity": "${bye3()} See you again" }, { "$type": "Microsoft.OnIntent", @@ -35,5 +35,6 @@ } ] } - ] + ], + "generator": "Main.lg" } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Actions/Actions.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Actions/Actions.dialog index 4f3d21d90a..a883e20720 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Actions/Actions.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Actions/Actions.dialog @@ -18,21 +18,21 @@ "$designer": { "id": "166131" }, - "activity": "@{bfdactivity-522200()}" + "activity": "${bfdactivity-522200()}" }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "350559" }, - "activity": "@{bfdactivity-350559()}" + "activity": "${bfdactivity-350559()}" }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "309397" }, - "activity": "@{bfdactivity-309397()}" + "activity": "${bfdactivity-309397()}" }, { "$type": "Microsoft.SetProperty", @@ -40,14 +40,14 @@ "id": "026341" }, "property": "user.age", - "value": "9+9" + "value": "18" }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "643043" }, - "activity": "@{bfdactivity-797905()}" + "activity": "${bfdactivity-797905()}" }, { "$type": "Microsoft.DeleteProperty", @@ -68,7 +68,7 @@ "$designer": { "id": "166131" }, - "activity": "@{bfdactivity-166131()}" + "activity": "${bfdactivity-166131()}" } ], "elseActions": [ @@ -77,7 +77,7 @@ "$designer": { "id": "643043" }, - "activity": "@{bfdactivity-643043()}" + "activity": "${bfdactivity-643043()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Actions/Actions.lg b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Actions/Actions.lg index 9d3305086b..bbc23edd3d 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Actions/Actions.lg +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Actions/Actions.lg @@ -10,10 +10,10 @@ -Step 3 # bfdactivity-797905 --user.age is set to @{user.age} +-user.age is set to ${user.age} # bfdactivity-166131 --user.age is set to @{user.age} +-user.age is set to ${user.age} # bfdactivity-643043 -user.age is set to null \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditActions/EditActions.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditActions/EditActions.dialog index f694e97540..7fb50111c8 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditActions/EditActions.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditActions/EditActions.dialog @@ -17,12 +17,13 @@ "$designer": { "id": "250234" }, - "changeType": "Insertactions", + "changeType": "insertActions", "actions": [ { "$type": "Microsoft.TextInput", "prompt": "Hello, I'm Zoidberg. What is your name?", - "property": "user.name" + "property": "user.name", + "alwaysPrompt": "true" } ] }, @@ -31,7 +32,7 @@ "$designer": { "id": "443878" }, - "changeType": "Appendactions", + "changeType": "appendActions", "actions": [ { "$type": "Microsoft.SendActivity", @@ -44,7 +45,7 @@ "$designer": { "id": "644042" }, - "activity": "@{bfdactivity-644042()}" + "activity": "${bfdactivity-644042()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditActions/EditActions.lg b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditActions/EditActions.lg index a83d59bfe8..b35fd7d4cb 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditActions/EditActions.lg +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditActions/EditActions.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-644042 --Hello @{user.name}, nice to talk to you! \ No newline at end of file +-Hello ${user.name}, nice to talk to you! \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditArray/EditArray.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditArray/EditArray.dialog index 1598dc0331..df0e72613f 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditArray/EditArray.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EditArray/EditArray.dialog @@ -12,23 +12,6 @@ "id": "356862" }, "actions": [ - { - "$type": "Microsoft.IfCondition", - "$designer": { - "id": "356862" - }, - "condition": "user.ids == null", - "actions": [ - { - "$type": "Microsoft.InitProperty", - "$designer": { - "id": "384024" - }, - "property": "user.ids", - "type": "array" - } - ] - }, { "$type": "Microsoft.EditArray", "$designer": { @@ -36,7 +19,7 @@ }, "changeType": "Push", "itemsProperty": "user.ids", - "value": "10000+1000+100+10+1" + "value": "=10000+1000+100+10+1" }, { "$type": "Microsoft.EditArray", @@ -45,13 +28,13 @@ }, "changeType": "Push", "itemsProperty": "user.ids", - "value": "200*200" + "value": "=200*200" }, { "$type": "Microsoft.EditArray", "changeType": "Push", "itemsProperty": "user.ids", - "value": "888888/4", + "value": "=888888/4", "$designer": { "id": "393322" } @@ -61,7 +44,7 @@ "$designer": { "id": "666135" }, - "activity": "@{bfdactivity-666135()}" + "activity": "${bfdactivity-666135()}" }, { "$type": "Microsoft.Foreach", @@ -72,7 +55,7 @@ "actions": [ { "$type": "Microsoft.SendActivity", - "activity": "@{dialog.foreach.index}: @{dialog.foreach.value}" + "activity": "${dialog.foreach.index}: ${dialog.foreach.value}" } ] }, @@ -81,7 +64,7 @@ "$designer": { "id": "763672" }, - "activity": "@{bfdactivity-763672()}" + "activity": "${bfdactivity-763672()}" }, { "$type": "Microsoft.ForeachPage", @@ -97,7 +80,7 @@ "actions": [ { "$type": "Microsoft.SendActivity", - "activity": "@{dialog.foreach.index}: @{dialog.foreach.value}" + "activity": "${dialog.foreach.index}: ${dialog.foreach.value}" } ], "$designer": { diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EmitAnEvent/EmitAnEvent.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EmitAnEvent/EmitAnEvent.dialog index 158f5704b0..3026c4a8f0 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EmitAnEvent/EmitAnEvent.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EmitAnEvent/EmitAnEvent.dialog @@ -12,12 +12,10 @@ "$type": "Microsoft.RegexRecognizer", "intents": [ { - "$type": "Microsoft.IntentPattern", "intent": "EmitEvent", "pattern": "emit" }, { - "$type": "Microsoft.IntentPattern", "intent": "CowboyIntent", "pattern": "moo" } @@ -57,7 +55,7 @@ "id": "576334", "name": "Send a response" }, - "activity": "@{bfdactivity-576334()}" + "activity": "${bfdactivity-576334()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/EndDialog.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/EndDialog.dialog index ca6efc1f7a..98069e9c27 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/EndDialog.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/EndDialog.dialog @@ -8,12 +8,10 @@ "$type": "Microsoft.RegexRecognizer", "intents": [ { - "$type": "Microsoft.IntentPattern", "intent": "JokeIntent", "pattern": "(?i)joke" }, { - "$type": "Microsoft.IntentPattern", "intent": "CancelIntent", "pattern": "(?i)cancel|never mind" } @@ -74,14 +72,14 @@ "$designer": { "id": "604381" }, - "activity": "@{bfdactivity-604381()}" + "activity": "${bfdactivity-604381()}" }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "338063" }, - "activity": "@{bfdactivity-338063()}" + "activity": "${bfdactivity-338063()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/EndDialog.lg b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/EndDialog.lg index 3f1382ec89..a8da6abca5 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/EndDialog.lg +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/EndDialog.lg @@ -1,7 +1,7 @@ [import](common.lg) # bfdactivity-604381 --Hello @{user.name}, nice to talk to you! +-Hello ${user.name}, nice to talk to you! # bfdactivity-338063 -I'm a joke bot. To get started say "joke". \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/TellJoke/EndDialog.TellJoke.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/TellJoke/EndDialog.TellJoke.dialog index a2b038b2e0..1999301f21 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/TellJoke/EndDialog.TellJoke.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndDialog/TellJoke/EndDialog.TellJoke.dialog @@ -8,7 +8,6 @@ "$type": "Microsoft.RegexRecognizer", "intents": [ { - "$type": "Microsoft.IntentPattern", "intent": "CancelIntent", "pattern": "(?i)cancel|never mind" } @@ -38,7 +37,7 @@ "$designer": { "id": "150220" }, - "activity": "@{bfdactivity-150220()}" + "activity": "${bfdactivity-150220()}" }, { "$type": "Microsoft.EndTurn", @@ -51,7 +50,7 @@ "$designer": { "id": "451180" }, - "activity": "@{bfdactivity-451180()}" + "activity": "${bfdactivity-451180()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndTurn/EndTurn.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndTurn/EndTurn.dialog index 7cdd076cc2..52c2b6a80e 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndTurn/EndTurn.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/EndTurn/EndTurn.dialog @@ -17,7 +17,7 @@ "$designer": { "id": "423305" }, - "activity": "@{bfdactivity-423305()}" + "activity": "${bfdactivity-423305()}" }, { "$type": "Microsoft.EndTurn", @@ -30,7 +30,7 @@ "$designer": { "id": "448895" }, - "activity": "@{bfdactivity-448895()}" + "activity": "${bfdactivity-448895()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/HttpRequest/HttpRequest.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/HttpRequest/HttpRequest.dialog index 73835c51f9..1870dd309b 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/HttpRequest/HttpRequest.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/HttpRequest/HttpRequest.dialog @@ -28,7 +28,7 @@ "$designer": { "id": "229784" }, - "activity": "@{bfdactivity-229784()}" + "activity": "${bfdactivity-229784()}" }, { "$type": "Microsoft.TextInput", @@ -77,7 +77,7 @@ "$designer": { "id": "200761" }, - "activity": "@{bfdactivity-200761()}" + "activity": "${bfdactivity-200761()}" }, { "$type": "Microsoft.TextInput", @@ -104,7 +104,7 @@ "$designer": { "id": "212615" }, - "activity": "@{bfdactivity-212615()}" + "activity": "${bfdactivity-212615()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/HttpRequest/HttpRequest.lg b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/HttpRequest/HttpRequest.lg index 7e60af22e3..f5a127a0e5 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/HttpRequest/HttpRequest.lg +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/HttpRequest/HttpRequest.lg @@ -1,10 +1,10 @@ [import](common.lg) # bfdactivity-229784 --Great! Your pet's name is @{user.petname} +-Great! Your pet's name is ${user.petname} # bfdactivity-200761 --Done! You have added a pet named "@{user.postResponse.content.name}" with id "@{user.postResponse.content.id}" +-Done! You have added a pet named "${user.postResponse.content.name}" with id "${user.postResponse.content.id}" # bfdactivity-212615 --Great! I found your pet named "@{user.getResponse.content.name}" \ No newline at end of file +-Great! I found your pet named "${user.getResponse.content.name}" \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/IfCondition/IfCondition.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/IfCondition/IfCondition.dialog index 10a970750d..bf75175f08 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/IfCondition/IfCondition.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/IfCondition/IfCondition.dialog @@ -37,7 +37,7 @@ "$designer": { "id": "485963" }, - "activity": "@{bfdactivity-485963()}" + "activity": "${bfdactivity-485963()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/IfCondition/IfCondition.lg b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/IfCondition/IfCondition.lg index 823cc66414..84338357a6 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/IfCondition/IfCondition.lg +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/IfCondition/IfCondition.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-485963 --Hello @{user.name}, nice to talk to you! \ No newline at end of file +-Hello ${user.name}, nice to talk to you! \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Main/Main.dialog index 41293bfc03..a1c8ee3108 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Main/Main.dialog @@ -10,62 +10,50 @@ "$type": "Microsoft.RegexRecognizer", "intents": [ { - "$type": "Microsoft.IntentPattern", "intent": "Actions", "pattern": "Actions|01" }, { - "$type": "Microsoft.IntentPattern", "intent": "EndTurn", "pattern": "EndTurn|02" }, { - "$type": "Microsoft.IntentPattern", "intent": "IfCondition", "pattern": "IfCondition|03" }, { - "$type": "Microsoft.IntentPattern", "intent": "EditArray", "pattern": "EditArray|04" }, { - "$type": "Microsoft.IntentPattern", "intent": "EndDialog", "pattern": "EndDialog|05" }, { - "$type": "Microsoft.IntentPattern", "intent": "HttpRequest", "pattern": "HttpRequest|06" }, { - "$type": "Microsoft.IntentPattern", "intent": "SwitchCondition", "pattern": "SwitchCondition|07" }, { - "$type": "Microsoft.IntentPattern", "intent": "RepeatDialog", "pattern": "RepeatDialog|08" }, { - "$type": "Microsoft.IntentPattern", "intent": "TraceAndLog", "pattern": "TraceAndLog|trace|log|09" }, { - "$type": "Microsoft.IntentPattern", "intent": "EditActions", "pattern": "EditActions|10" }, { - "$type": "Microsoft.IntentPattern", "intent": "ReplaceDialog", "pattern": "ReplaceDialog|11" }, { - "$type": "Microsoft.IntentPattern", "intent": "EmitEvent", "pattern": "EmitEvent|12" }, @@ -74,7 +62,6 @@ "pattern": "QnAMaker|13" }, { - "$type": "Microsoft.IntentPattern", "intent": "CancelIntent", "pattern": "(?i)cancel|never mind" } @@ -263,7 +250,7 @@ "$designer": { "id": "347762" }, - "activity": "@{bfdactivity-640616()}" + "activity": "${bfdactivity-640616()}" } ] }, @@ -288,7 +275,7 @@ "id": "641773", "name": "Branch: if/else" }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "condition": "=string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", "actions": [ { "$type": "Microsoft.SendActivity", @@ -296,7 +283,7 @@ "id": "640616", "name": "Send a response" }, - "activity": "@{bfdactivity-640616()}" + "activity": "${bfdactivity-640616()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Main/Main.lg b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Main/Main.lg index 213acb31bb..865780213f 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Main/Main.lg +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/Main/Main.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-640616 --@{help()} \ No newline at end of file +-${help()} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/FortuneTellerDialog/FortuneTellerDialog.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/FortuneTellerDialog/FortuneTellerDialog.dialog index 7c7e46bae6..e3b45abdc4 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/FortuneTellerDialog/FortuneTellerDialog.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/FortuneTellerDialog/FortuneTellerDialog.dialog @@ -17,21 +17,21 @@ "$designer": { "id": "554030" }, - "activity": "@{bfdactivity-554030()}" + "activity": "${bfdactivity-554030()}" }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "302405" }, - "activity": "@{bfdactivity-302405()}" + "activity": "${bfdactivity-302405()}" }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "322106" }, - "activity": "@{bfdactivity-322106()}" + "activity": "${bfdactivity-322106()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/Replace.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/Replace.dialog index 33faac0ba1..b7f9a5b172 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/Replace.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/Replace.dialog @@ -8,12 +8,10 @@ "$type": "Microsoft.RegexRecognizer", "intents": [ { - "$type": "Microsoft.IntentPattern", "intent": "JokeIntent", "pattern": "(?i)joke" }, { - "$type": "Microsoft.IntentPattern", "intent": "FortuneTellerIntent", "pattern": "(?i)fortune|future" } @@ -66,7 +64,7 @@ }, "property": "user.name", "prompt": "Hello, I'm Zoidberg. What is your name?", - "maxTurnCount": 2147483647, + "maxTurnCount": 3, "alwaysPrompt": false, "allowInterruptions": "true" } @@ -77,7 +75,7 @@ "$designer": { "id": "120128" }, - "activity": "@{bfdactivity-120128()}" + "activity": "${bfdactivity-120128()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/Replace.lg b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/Replace.lg index a7ade4f9cb..1e603d6df5 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/Replace.lg +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/Replace.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-120128 --Hello @{user.name}, nice to talk to you! Please either enter 'joke' or 'fortune' to replace the dialog you want. \ No newline at end of file +-Hello ${user.name}, nice to talk to you! Please either enter 'joke' or 'fortune' to replace the dialog you want. \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/TellJokeDialog/TellJokeDialog.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/TellJokeDialog/TellJokeDialog.dialog index 762d108e6b..68ed7ed16c 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/TellJokeDialog/TellJokeDialog.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/ReplaceDialog/TellJokeDialog/TellJokeDialog.dialog @@ -17,7 +17,7 @@ "$designer": { "id": "577618" }, - "activity": "@{bfdactivity-577618()}" + "activity": "${bfdactivity-577618()}" }, { "$type": "Microsoft.EndTurn", @@ -30,7 +30,7 @@ "$designer": { "id": "286023" }, - "activity": "@{bfdactivity-286023()}" + "activity": "${bfdactivity-286023()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog index cd1b09f32c..ad34bcf593 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog @@ -52,7 +52,7 @@ "$designer": { "id": "160914" }, - "activity": "@{bfdactivity-160914()}" + "activity": "${bfdactivity-160914()}" }, { "$type": "Microsoft.SwitchCondition", @@ -69,7 +69,7 @@ "$designer": { "id": "576002" }, - "activity": "@{bfdactivity-576002()}" + "activity": "${bfdactivity-576002()}" } ] }, @@ -81,7 +81,7 @@ "$designer": { "id": "677412" }, - "activity": "@{bfdactivity-677412()}" + "activity": "${bfdactivity-677412()}" } ] }, @@ -93,7 +93,7 @@ "$designer": { "id": "700082" }, - "activity": "@{bfdactivity-700082()}" + "activity": "${bfdactivity-700082()}" } ] } diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg index a85c5c4551..a9b546285d 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg @@ -1,7 +1,7 @@ [import](common.lg) # bfdactivity-160914 --You select: @{user.style} +-You select: ${user.style} # bfdactivity-576002 -You select: 1 diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/TraceAndLog/TraceAndLog.dialog b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/TraceAndLog/TraceAndLog.dialog index 400e32dd58..22af895044 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/TraceAndLog/TraceAndLog.dialog +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/TraceAndLog/TraceAndLog.dialog @@ -37,7 +37,7 @@ "$designer": { "id": "219510" }, - "text": "@{user.name}", + "text": "${user.name}", "traceActivity": false } ] diff --git a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/common/common.lg b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/common/common.lg index cce649deca..1778971b28 100644 --- a/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/common/common.lg +++ b/Composer/packages/server/assets/projects/ActionsSample/ComposerDialogs/common/common.lg @@ -14,18 +14,5 @@ 12 - EmitEvent 13 - QnAMaker``` - - - - - - - - - - - - - # bfdactivity-839941 --Hello @{user.name}, nice to meet you! \ No newline at end of file +-Hello ${user.name}, nice to meet you! \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/AttachmentInput/AttachmentInput.dialog b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/AttachmentInput/AttachmentInput.dialog index 1bca05a015..6a5a5f712a 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/AttachmentInput/AttachmentInput.dialog +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/AttachmentInput/AttachmentInput.dialog @@ -29,7 +29,7 @@ "$designer": { "id": "365176" }, - "activity": "@{bfdactivity-365176()}" + "activity": "${bfdactivity-365176()}" } ] } diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/AttachmentInput/AttachmentInput.lg b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/AttachmentInput/AttachmentInput.lg index b231d0f602..102448684a 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/AttachmentInput/AttachmentInput.lg +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/AttachmentInput/AttachmentInput.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-365176 --@{ShowImage(dialog.attachments[0].contentUrl, dialog.attachments[0].contentType)} \ No newline at end of file +-${ShowImage(dialog.attachments[0].contentUrl, dialog.attachments[0].contentType)} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ChoiceInput/ChoiceInput.dialog b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ChoiceInput/ChoiceInput.dialog index e9ee6b489b..3d235ebd9e 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ChoiceInput/ChoiceInput.dialog +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ChoiceInput/ChoiceInput.dialog @@ -54,7 +54,7 @@ "$designer": { "id": "004212" }, - "activity": "@{bfdactivity-004212()}" + "activity": "${bfdactivity-004212()}" } ] } diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ChoiceInput/ChoiceInput.lg b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ChoiceInput/ChoiceInput.lg index 5d96e6a4e2..540c92f505 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ChoiceInput/ChoiceInput.lg +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ChoiceInput/ChoiceInput.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-004212 --You select: @{user.style} \ No newline at end of file +-You select: ${user.style} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ConfirmInput/ConfirmInput.dialog b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ConfirmInput/ConfirmInput.dialog index adb992ee9b..035e7026f6 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ConfirmInput/ConfirmInput.dialog +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ConfirmInput/ConfirmInput.dialog @@ -36,7 +36,7 @@ "$designer": { "id": "458458" }, - "activity": "@{bfdactivity-458458()}" + "activity": "${bfdactivity-458458()}" } ] } diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ConfirmInput/ConfirmInput.lg b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ConfirmInput/ConfirmInput.lg index 395e5383c1..d644bece89 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ConfirmInput/ConfirmInput.lg +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/ConfirmInput/ConfirmInput.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-458458 --confirmation: @{user.confirmed} \ No newline at end of file +-confirmation: ${user.confirmed} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/DateTimeInput/DateTimeInput.dialog b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/DateTimeInput/DateTimeInput.dialog index 47598932d5..5711dff8b2 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/DateTimeInput/DateTimeInput.dialog +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/DateTimeInput/DateTimeInput.dialog @@ -30,7 +30,7 @@ "$designer": { "id": "828009" }, - "activity": "@{bfdactivity-828009()}" + "activity": "${bfdactivity-828009()}" } ] } diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/DateTimeInput/DateTimeInput.lg b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/DateTimeInput/DateTimeInput.lg index 398191b4d1..e809133c2c 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/DateTimeInput/DateTimeInput.lg +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/DateTimeInput/DateTimeInput.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-828009 --You entered: @{user.date[0].value} \ No newline at end of file +-You entered: ${user.date[0].value} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/Main/Main.dialog index a52fb91df5..f27b0a48a8 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/Main/Main.dialog @@ -10,42 +10,34 @@ "$type": "Microsoft.RegexRecognizer", "intents": [ { - "$type": "Microsoft.IntentPattern", "intent": "TextInput", "pattern": "TextInput|01" }, { - "$type": "Microsoft.IntentPattern", "intent": "NumberInput", "pattern": "NumberInput|02" }, { - "$type": "Microsoft.IntentPattern", "intent": "ConfirmInput", "pattern": "ConfirmInput|03" }, { - "$type": "Microsoft.IntentPattern", "intent": "ChoiceInput", "pattern": "ChoiceInput|04" }, { - "$type": "Microsoft.IntentPattern", "intent": "AttachmentInput", "pattern": "AttachmentInput|05" }, { - "$type": "Microsoft.IntentPattern", "intent": "DateTimeInput", "pattern": "DateTimeInput|06" }, { - "$type": "Microsoft.IntentPattern", "intent": "OAuthInput", "pattern": "OAuthInput|07" }, { - "$type": "Microsoft.IntentPattern", "intent": "cancel", "pattern": "cancel" } @@ -73,7 +65,7 @@ "actions": [ { "$type": "Microsoft.SendActivity", - "activity": "@{help()}" + "activity": "${help()}" } ] } @@ -183,7 +175,7 @@ "$designer": { "id": "068558" }, - "activity": "@{bfdactivity-068558()}" + "activity": "${bfdactivity-068558()}" } ], "intent": "CancelIntent" @@ -199,7 +191,7 @@ "$designer": { "id": "581197" }, - "activity": "@{bfdactivity-581197()}" + "activity": "${bfdactivity-581197()}" } ] } diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/Main/Main.lg b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/Main/Main.lg index a1e329c485..4137f1038c 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/Main/Main.lg +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/Main/Main.lg @@ -1,7 +1,7 @@ [import](common.lg) # bfdactivity-068558 --@{help()} +-${help()} # bfdactivity-581197 --@{help()} \ No newline at end of file +-${help()} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/NumberInput/NumberInput.dialog b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/NumberInput/NumberInput.dialog index dbc351ce38..0aa64c1e5b 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/NumberInput/NumberInput.dialog +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/NumberInput/NumberInput.dialog @@ -30,7 +30,7 @@ "$designer": { "id": "303304" }, - "activity": "@{bfdactivity-303304()}" + "activity": "${bfdactivity-303304()}" }, { "$type": "Microsoft.NumberInput", @@ -56,7 +56,7 @@ "$designer": { "id": "284482" }, - "activity": "@{bfdactivity-284482()}" + "activity": "${bfdactivity-284482()}" } ], "elseActions": [ @@ -65,7 +65,7 @@ "$designer": { "id": "172233" }, - "activity": "@{bfdactivity-172233()}" + "activity": "${bfdactivity-172233()}" } ] } diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/NumberInput/NumberInput.lg b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/NumberInput/NumberInput.lg index ed50fd486c..c0ad2f2fc0 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/NumberInput/NumberInput.lg +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/NumberInput/NumberInput.lg @@ -1,10 +1,10 @@ [import](common.lg) # bfdactivity-303304 --Hello, your age is @{user.age}! +-Hello, your age is ${user.age}! # bfdactivity-284482 --2 * 2.2 equals @{user.result}, that's right! +-2 * 2.2 equals ${user.result}, that's right! # bfdactivity-172233 --2 * 2.2 equals @{user.result}, that's wrong! \ No newline at end of file +-2 * 2.2 equals ${user.result}, that's wrong! \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/OAuthInput/OAuthInput.dialog b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/OAuthInput/OAuthInput.dialog index b0cc560259..fd8d7f04c0 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/OAuthInput/OAuthInput.dialog +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/OAuthInput/OAuthInput.dialog @@ -48,7 +48,7 @@ "$designer": { "id": "991558" }, - "activity": "@{bfdactivity-991558()}" + "activity": "${bfdactivity-991558()}" } ] } diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/OAuthInput/OAuthInput.lg b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/OAuthInput/OAuthInput.lg index 7e5d56c20a..550972f230 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/OAuthInput/OAuthInput.lg +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/OAuthInput/OAuthInput.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-991558 --@{ShowEmailSummary(user)} \ No newline at end of file +-${ShowEmailSummary(user)} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/TextInput/TextInput.dialog b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/TextInput/TextInput.dialog index 7e8bd3581e..4cdf31e829 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/TextInput/TextInput.dialog +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/TextInput/TextInput.dialog @@ -28,7 +28,7 @@ "$designer": { "id": "538962" }, - "activity": "@{bfdactivity-538962()}" + "activity": "${bfdactivity-538962()}" } ] } diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/TextInput/TextInput.lg b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/TextInput/TextInput.lg index 5ba7ddd1e5..473ca73db6 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/TextInput/TextInput.lg +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/TextInput/TextInput.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-538962 --Hello @{user.name}, nice to talk to you! \ No newline at end of file +-Hello ${user.name}, nice to talk to you! \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/common/common.lg b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/common/common.lg index 5eebc5130c..218fcce578 100644 --- a/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/common/common.lg +++ b/Composer/packages/server/assets/projects/AskingQuestionsSample/ComposerDialogs/common/common.lg @@ -12,21 +12,8 @@ I can show you examples on how to use actions, You can enter number 01-07 # ShowImage(contentUrl, contentType) [HeroCard title = Here is the attachment - image = @{contentUrl} + image = ${contentUrl} ] -# ShowEmailSummary(user) -- IF: @{count(user.getGraphEmails.value) == 1} - - You have\s@{count(user.getGraphEmails.value)} email. This email is @{ShowEmail(user.getGraphEmails.value[0])}. -- ELSEIF: @{count(user.getGraphEmails.value) >= 2} - - You have @{count(user.getGraphEmails.value)} emails, the first email is @{ShowEmail(user.getGraphEmails.value[0])}. -- ELSEIF: @{count(user.getGraphEmails.value) == 0} - - You don't have any email. -- ELSE: - - You should not be here. - -# ShowEmail(email) -- @{email.subject} - # Welcome -Welcome to input samples. \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachPageStep/ForeachPageStep.dialog b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachPageStep/ForeachPageStep.dialog index 4235347b4e..91c4a1483d 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachPageStep/ForeachPageStep.dialog +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachPageStep/ForeachPageStep.dialog @@ -12,23 +12,6 @@ "id": "455902" }, "actions": [ - { - "$type": "Microsoft.IfCondition", - "$designer": { - "id": "400171" - }, - "condition": "dialog.ids == null", - "actions": [ - { - "$type": "Microsoft.InitProperty", - "$designer": { - "id": "879949" - }, - "property": "dialog.ids", - "type": "array" - } - ] - }, { "$type": "Microsoft.EditArray", "$designer": { @@ -36,7 +19,7 @@ }, "changeType": "Push", "itemsProperty": "dialog.ids", - "value": "10000+1000+100+10+1" + "value": "=10000+1000+100+10+1" }, { "$type": "Microsoft.EditArray", @@ -45,7 +28,7 @@ }, "changeType": "Push", "itemsProperty": "dialog.ids", - "value": "200*200" + "value": "=200*200" }, { "$type": "Microsoft.EditArray", @@ -54,14 +37,14 @@ }, "changeType": "Push", "itemsProperty": "dialog.ids", - "value": "888888/4" + "value": "=888888/4" }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "623448" }, - "activity": "@{bfdactivity-623448()}" + "activity": "${bfdactivity-623448()}" }, { "$type": "Microsoft.ForeachPage", @@ -81,7 +64,7 @@ "id": "636747", "name": "Send a response" }, - "activity": "@{bfdactivity-636747()}" + "activity": "${bfdactivity-636747()}" } ] } diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachPageStep/ForeachPageStep.lg b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachPageStep/ForeachPageStep.lg index 1aab16f405..af1fbdfc1c 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachPageStep/ForeachPageStep.lg +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachPageStep/ForeachPageStep.lg @@ -4,4 +4,4 @@ -Pushed dialog.ids into a list # bfdactivity-636747() -- @{dialog.foreach.index}: @{dialog.foreach.value} \ No newline at end of file +- ${dialog.foreach.index}: ${dialog.foreach.value} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachStep/ForeachStep.dialog b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachStep/ForeachStep.dialog index b4f7899ad4..513daed40c 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachStep/ForeachStep.dialog +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachStep/ForeachStep.dialog @@ -12,23 +12,6 @@ "id": "614429" }, "actions": [ - { - "$type": "Microsoft.IfCondition", - "$designer": { - "id": "810905" - }, - "condition": "dialog.ids == null", - "actions": [ - { - "$type": "Microsoft.InitProperty", - "$designer": { - "id": "931303" - }, - "property": "dialog.ids", - "type": "array" - } - ] - }, { "$type": "Microsoft.EditArray", "$designer": { @@ -36,7 +19,7 @@ }, "changeType": "Push", "itemsProperty": "dialog.ids", - "value": "10000+1000+100+10+1" + "value": "=10000+1000+100+10+1" }, { "$type": "Microsoft.EditArray", @@ -45,7 +28,7 @@ }, "changeType": "Push", "itemsProperty": "dialog.ids", - "value": "200*200" + "value": "=200*200" }, { "$type": "Microsoft.EditArray", @@ -54,14 +37,14 @@ }, "changeType": "Push", "itemsProperty": "dialog.ids", - "value": "888888/4" + "value": "=888888/4" }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "638869" }, - "activity": "@{bfdactivity-638869()}" + "activity": "${bfdactivity-638869()}" }, { "$type": "Microsoft.Foreach", @@ -76,7 +59,7 @@ "id": "006441", "name": "Send a response" }, - "activity": "@{bfdactivity-006441()}" + "activity": "${bfdactivity-006441()}" } ] } diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachStep/ForeachStep.lg b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachStep/ForeachStep.lg index 21d2bcba65..77783bef5d 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachStep/ForeachStep.lg +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/ForeachStep/ForeachStep.lg @@ -4,4 +4,4 @@ -Pushed dialog.id into a list # bfdactivity-006441() -- @{dialog.foreach.index}: @{dialog.foreach.value} \ No newline at end of file +- ${dialog.foreach.index}: ${dialog.foreach.value} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/IfCondition/IfCondition.dialog b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/IfCondition/IfCondition.dialog index 7044c193c6..05901fc34f 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/IfCondition/IfCondition.dialog +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/IfCondition/IfCondition.dialog @@ -36,7 +36,7 @@ "$designer": { "id": "164444" }, - "activity": "@{bfdactivity-164444()}" + "activity": "${bfdactivity-164444()}" } ], "elseActions": [ @@ -45,7 +45,7 @@ "$designer": { "id": "619321" }, - "activity": "@{bfdactivity-619321()}" + "activity": "${bfdactivity-619321()}" } ] } diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/IfCondition/IfCondition.lg b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/IfCondition/IfCondition.lg index 0409fc4fc3..7c15f706c6 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/IfCondition/IfCondition.lg +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/IfCondition/IfCondition.lg @@ -1,7 +1,7 @@ [import](common.lg) # bfdactivity-164444() --Your age is @{user.age} which satisified the condition that was evaluated +-Your age is ${user.age} which satisified the condition that was evaluated # bfdactivity-619321() --Your age is @{user.age} which did not satisfy the condition that we evaluated \ No newline at end of file +-Your age is ${user.age} which did not satisfy the condition that we evaluated \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/Main/Main.dialog index 005561040d..25373fe23c 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/Main/Main.dialog @@ -10,37 +10,30 @@ "$type": "Microsoft.RegexRecognizer", "intents": [ { - "$type": "Microsoft.IntentPattern", "intent": "IfCondition", "pattern": "(?i)IfCondition|01" }, { - "$type": "Microsoft.IntentPattern", "intent": "SwitchCondition", "pattern": "SwitchCondition|02" }, { - "$type": "Microsoft.IntentPattern", "intent": "ForeachStep", "pattern": "ForeachStep|03" }, { - "$type": "Microsoft.IntentPattern", "intent": "ForeachPageStep", "pattern": "ForeachPageStep|04" }, { - "$type": "Microsoft.IntentPattern", "intent": "Cancel", "pattern": "Cancel|05" }, { - "$type": "Microsoft.IntentPattern", "intent": "EndTurn", "pattern": "EndTurn|06" }, { - "$type": "Microsoft.IntentPattern", "intent": "RepeatDialog", "pattern": "RepeatDialog|07" } @@ -163,7 +156,7 @@ "$designer": { "id": "953339" }, - "activity": "@{help()}" + "activity": "${help()}" } ] }, @@ -196,7 +189,7 @@ "id": "859266", "name": "Send a response" }, - "activity": "@{help()}" + "activity": "${help()}" } ] } diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog index 5445e16a1c..07d5dee23e 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog @@ -53,7 +53,7 @@ "$designer": { "id": "097130" }, - "activity": "@{bfdactivity-097130()}" + "activity": "${bfdactivity-097130()}" }, { "$type": "Microsoft.SwitchCondition", @@ -70,7 +70,7 @@ "$designer": { "id": "040464" }, - "activity": "@{bfdactivity-040464()}" + "activity": "${bfdactivity-040464()}" } ] }, @@ -82,7 +82,7 @@ "$designer": { "id": "230206" }, - "activity": "@{bfdactivity-230206()}" + "activity": "${bfdactivity-230206()}" } ] }, @@ -94,7 +94,7 @@ "$designer": { "id": "604251" }, - "activity": "@{bfdactivity-604251()}" + "activity": "${bfdactivity-604251()}" } ] } diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg index ec79f5ac82..ad6dd437ab 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg @@ -1,7 +1,7 @@ [import](common.lg) # bfdactivity-097130() --You selected @{user.name} +-You selected ${user.name} # bfdactivity-040464() -This is the logic inside the "Susan" switch block. diff --git a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/common/common.lg b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/common/common.lg index 8115e6baf9..b4e0b6dff8 100644 --- a/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/common/common.lg +++ b/Composer/packages/server/assets/projects/ControllingConversationFlowSample/ComposerDialogs/common/common.lg @@ -1,6 +1,6 @@ # help [Activity - Text = @{helpText()} + Text = ${helpText()} SuggestedActions = IfCondition|SwitchCondition|ForeachStep|ForeachPageStep|Cancel|Endturn|RepeatDialog ] diff --git a/Composer/packages/server/assets/projects/EchoBot/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/EchoBot/ComposerDialogs/Main/Main.dialog index fc69d23127..56a8ccd31e 100644 --- a/Composer/packages/server/assets/projects/EchoBot/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/EchoBot/ComposerDialogs/Main/Main.dialog @@ -18,7 +18,7 @@ "$designer": { "id": "003038" }, - "activity": "@{bfdactivity-003038()}" + "activity": "${bfdactivity-003038()}" } ] }, diff --git a/Composer/packages/server/assets/projects/EchoBot/ComposerDialogs/Main/Main.lg b/Composer/packages/server/assets/projects/EchoBot/ComposerDialogs/Main/Main.lg index 721ea81e0c..4d2da1b448 100644 --- a/Composer/packages/server/assets/projects/EchoBot/ComposerDialogs/Main/Main.lg +++ b/Composer/packages/server/assets/projects/EchoBot/ComposerDialogs/Main/Main.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-003038 -- You said '@{turn.activity.text}' \ No newline at end of file +- You said '${turn.activity.text}' \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/GetProfile/GetProfile.dialog b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/GetProfile/GetProfile.dialog index d00668d6b8..01f408dda4 100644 --- a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/GetProfile/GetProfile.dialog +++ b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/GetProfile/GetProfile.dialog @@ -21,7 +21,7 @@ "id": "362298" }, "prompt": "What is your name? \\n \\[Suggestions=Why? | No name | Cancel | Reset profile\\]", - "invalidPrompt": "@{bfdinvalidPrompt-362298()}", + "invalidPrompt": "${bfdinvalidPrompt-362298()}", "maxTurnCount": 3, "validations": [ "length(this.value) <= 150", @@ -29,10 +29,10 @@ ], "property": "user.profile.name", "defaultValue": "'Human'", - "value": "@userName", + "value": "=@userName", "alwaysPrompt": false, "allowInterruptions": "true", - "outputFormat": "trim(this.value)" + "outputFormat": "=trim(this.value)" }, { "$type": "Microsoft.NumberInput", @@ -40,9 +40,9 @@ "name": "Prompt for a number", "id": "005947" }, - "prompt": "Hello {user.profile.name}, how old are you? \\n \\[Suggestions=Why? | Reset profile | Cancel | No age\\]", - "unrecognizedPrompt": "Hello {user.profile.name}, how old are you? \\n \\[Suggestions=Why? | Reset profile | Cancel | No age\\]", - "invalidPrompt": "@{bfdinvalidPrompt-005947()}", + "prompt": "Hello ${user.profile.name}, how old are you? \\n \\[Suggestions=Why? | Reset profile | Cancel | No age\\]", + "unrecognizedPrompt": "Hello ${user.profile.name}, how old are you? \\n \\[Suggestions=Why? | Reset profile | Cancel | No age\\]", + "invalidPrompt": "${bfdinvalidPrompt-005947()}", "maxTurnCount": 3, "validations": [ "int(this.value) >= 1", @@ -50,7 +50,7 @@ ], "property": "user.profile.age", "defaultValue": "30", - "value": "@userAge", + "value": "=@userAge", "alwaysPrompt": false, "allowInterruptions": "true", "defaultLocale": "en-us" @@ -61,7 +61,7 @@ "name": "Send an Activity", "id": "296924" }, - "activity": "@{bfdactivity-296924()}" + "activity": "${bfdactivity-296924()}" } ] }, @@ -86,7 +86,7 @@ "name": "Send an Activity", "id": "907674" }, - "activity": "@{bfdactivity-907674()}" + "activity": "${bfdactivity-907674()}" } ], "elseActions": [ @@ -96,7 +96,7 @@ "name": "Send an Activity", "id": "558329" }, - "activity": "@{bfdactivity-558329()}" + "activity": "${bfdactivity-558329()}" } ] } @@ -124,7 +124,7 @@ "name": "Send an Activity", "id": "074631" }, - "activity": "@{bfdactivity-074631()}" + "activity": "${bfdactivity-074631()}" }, { "$type": "Microsoft.SetProperty", @@ -143,7 +143,7 @@ "name": "Send an Activity", "id": "758791" }, - "activity": "@{bfdactivity-758791()}" + "activity": "${bfdactivity-758791()}" }, { "$type": "Microsoft.SetProperty", @@ -152,7 +152,7 @@ "id": "142109" }, "property": "user.profile.name", - "value": "'Human'" + "value": "Human" } ] } diff --git a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/GetProfile/GetProfile.lg b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/GetProfile/GetProfile.lg index 13245f20f6..ae999ec000 100644 --- a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/GetProfile/GetProfile.lg +++ b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/GetProfile/GetProfile.lg @@ -2,7 +2,7 @@ # bfdactivity-296924 [Activity - Text = Hello @{user.profile.name}, I have your age as @{user.profile.age}. + Text = Hello ${user.profile.name}, I have your age as ${user.profile.age}. SuggestedActions = Reset profile ] @@ -26,12 +26,12 @@ # bfdinvalidPrompt-362298 [Activity - Text = Sorry, '@{this.value}' does not work. I'm looking for 2-150 characters. What is your name? + Text = Sorry, '${this.value}' does not work. I'm looking for 2-150 characters. What is your name? SuggestedActions = Why? | No name | Cancel | Reset profile ] # bfdinvalidPrompt-005947 [Activity - Text = Sorry, @{this.value} does not work. I'm looking for a value between 1-150. What is your age? + Text = Sorry, ${this.value} does not work. I'm looking for a value between 1-150. What is your age? SuggestedActions = Why? | Reset profile | Cancel | No age ] \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/Main/Main.dialog index 90154412e6..9de3377cf5 100644 --- a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/Main/Main.dialog @@ -38,7 +38,7 @@ "id": "753396", "name": "Send a response" }, - "activity": "@{bfdactivity-753396()}" + "activity": "${bfdactivity-753396()}" } ] } @@ -94,7 +94,7 @@ "name": "Send an Activity", "id": "032735" }, - "activity": "@{bfdactivity-032735()}" + "activity": "${bfdactivity-032735()}" } ] } @@ -114,7 +114,7 @@ "name": "Send an Activity", "id": "650736" }, - "activity": "@{bfdactivity-650736()}" + "activity": "${bfdactivity-650736()}" }, { "$type": "Microsoft.CancelAllDialogs", @@ -139,7 +139,7 @@ "name": "Send an Activity", "id": "031899" }, - "activity": "@{bfdactivity-031899()}" + "activity": "${bfdactivity-031899()}" }, { "$type": "Microsoft.IfCondition", @@ -155,7 +155,7 @@ "name": "Send an Activity", "id": "309274" }, - "activity": "@{bfdactivity-309274()}" + "activity": "${bfdactivity-309274()}" } ], "elseActions": [ @@ -165,7 +165,7 @@ "name": "Send an Activity", "id": "912837" }, - "activity": "@{bfdactivity-912837()}" + "activity": "${bfdactivity-912837()}" } ] } @@ -185,7 +185,7 @@ "name": "Send an Activity", "id": "924700" }, - "activity": "@{bfdactivity-924700()}" + "activity": "${bfdactivity-924700()}" } ], "intent": "Help" diff --git a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/Main/Main.lg b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/Main/Main.lg index 91bada34e5..4381c94027 100644 --- a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/Main/Main.lg +++ b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/Main/Main.lg @@ -13,13 +13,13 @@ - Sure, I've cancelled that. # bfdactivity-031899 -- @{user.profile.name} +- ${user.profile.name} # bfdactivity-309274 - ``` Here's what I know about you - -- @{NameReadBack()} -- @{AgeReadBack()} +- ${NameReadBack()} +- ${AgeReadBack()} ``` # bfdactivity-912837 diff --git a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/common/common.lg b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/common/common.lg index 5e8c80303a..bfd92b0b03 100644 --- a/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/common/common.lg +++ b/Composer/packages/server/assets/projects/InterruptionSample/ComposerDialogs/common/common.lg @@ -1,11 +1,11 @@ # NameReadBack -- IF : @{exists(user.profile.name)} - - Name : @{user.profile.name} +- IF : ${exists(user.profile.name)} + - Name : ${user.profile.name} - ELSE : - Name : unknown # AgeReadBack -- IF : @{exists(user.profile.age)} - - Age : @{user.profile.age} +- IF : ${exists(user.profile.age)} + - Age : ${user.profile.age} - ELSE: - Age : unknown \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/QnAMakerLUISSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/QnAMakerLUISSample/ComposerDialogs/Main/Main.dialog index e7d21e4fa6..b15e87264a 100644 --- a/Composer/packages/server/assets/projects/QnAMakerLUISSample/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/QnAMakerLUISSample/ComposerDialogs/Main/Main.dialog @@ -36,7 +36,7 @@ "id": "266608", "name": "Send a response" }, - "activity": "@{bfdactivity-266608()}" + "activity": "${bfdactivity-266608()}" } ] } @@ -57,7 +57,7 @@ "id": "771838", "name": "Send a response" }, - "activity": "@{bfdactivity-771838()}" + "activity": "${bfdactivity-771838()}" } ], "intent": "Help" @@ -74,9 +74,9 @@ "id": "284337", "name": "Connect to QnA Knowledgebase" }, - "knowledgeBaseId": "settings.qna.knowledgebaseid", - "endpointKey": "settings.qna.endpointkey", - "hostname": "settings.qna.hostname", + "knowledgeBaseId": "=settings.qna.knowledgebaseid", + "endpointKey": "=settings.qna.endpointkey", + "hostname": "=settings.qna.hostname", "noAnswer": "Sorry, I did not find an answer.", "threshold": 0.3, "activeLearningCardTitle": "Did you mean:", @@ -98,7 +98,7 @@ "id": "313066", "name": "Send a response" }, - "activity": "@{bfdactivity-313066()}" + "activity": "${bfdactivity-313066()}" } ], "intent": "BuySurface" diff --git a/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/Main/Main.dialog index b9e698a369..e1d0914c94 100644 --- a/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/Main/Main.dialog @@ -80,7 +80,7 @@ "name": "Send an Activity", "id": "159442" }, - "activity": "@{bfdactivity-159442()}" + "activity": "${bfdactivity-159442()}" } ] }, @@ -93,7 +93,7 @@ "id": "735465", "name": "Text input" }, - "prompt": "@{bfdprompt-735465()}", + "prompt": "${bfdprompt-735465()}", "maxTurnCount": 3, "property": "user.name", "alwaysPrompt": false, @@ -105,7 +105,7 @@ "id": "167246", "name": "Send an Activity" }, - "activity": "@{bfdactivity-167246()}" + "activity": "${bfdactivity-167246()}" } ] }, @@ -118,7 +118,7 @@ "name": "Send an Activity", "id": "762914" }, - "activity": "@{bfdactivity-762914()}" + "activity": "${bfdactivity-762914()}" } ] }, @@ -131,7 +131,7 @@ "name": "Send an Activity", "id": "241579" }, - "activity": "@{bfdactivity-241579()}" + "activity": "${bfdactivity-241579()}" } ] }, @@ -144,7 +144,7 @@ "name": "Send an Activity", "id": "901582" }, - "activity": "@{bfdactivity-901582()}" + "activity": "${bfdactivity-901582()}" } ] }, @@ -157,7 +157,7 @@ "name": "Send an Activity", "id": "553859" }, - "activity": "@{bfdactivity-553859()}" + "activity": "${bfdactivity-553859()}" } ] }, @@ -170,7 +170,7 @@ "name": "Send an Activity", "id": "190928" }, - "activity": "@{bfdactivity-190928()}" + "activity": "${bfdactivity-190928()}" } ] }, @@ -183,7 +183,7 @@ "name": "Send an Activity", "id": "806895" }, - "activity": "@{bfdactivity-806895()}" + "activity": "${bfdactivity-806895()}" } ] }, @@ -196,7 +196,7 @@ "name": "Send an Activity", "id": "997450" }, - "activity": "@{bfdactivity-997450()}" + "activity": "${bfdactivity-997450()}" } ] } @@ -238,7 +238,7 @@ "id": "729500", "name": "Send a response" }, - "activity": "@{bfdactivity-729500()}" + "activity": "${bfdactivity-729500()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/Main/Main.lg b/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/Main/Main.lg index a4376940b1..22a4c754d1 100644 --- a/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/Main/Main.lg +++ b/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/Main/Main.lg @@ -1,34 +1,34 @@ [import](common.lg) # bfdactivity-159442 --@{HeroCard()} +-${HeroCard()} # bfdprompt-735465 - What is your name? # bfdactivity-167246 -- @{HeroCardWithMemory(user.name)} +- ${HeroCardWithMemory(user.name)} # bfdactivity-762914 --@{ThumbnailCard()} +-${ThumbnailCard()} # bfdactivity-241579 --@{SigninCard()} +-${SigninCard()} # bfdactivity-901582 --@{AnimationCard()} +-${AnimationCard()} # bfdactivity-553859 --@{VideoCard()} +-${VideoCard()} # bfdactivity-190928 --@{AudioCard()} +-${AudioCard()} # bfdactivity-806895 --@{AdaptiveCard()} +-${AdaptiveCard()} # bfdactivity-997450 --@{AllCards()} +-${AllCards()} # bfdactivity-729500 -Welcome to Card Samples Bot. \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/common/adaptiveCard.json b/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/common/adaptiveCard.json index 2fd3201b24..1949095870 100644 --- a/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/common/adaptiveCard.json +++ b/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/common/adaptiveCard.json @@ -15,17 +15,17 @@ }, { "type": "TextBlock", - "text": "@{PassengerName()}", + "text": "${PassengerName()}", "separator": true }, { "type": "TextBlock", - "text": "@{PassengerName()}", + "text": "${PassengerName()}", "spacing": "none" }, { "type": "TextBlock", - "text": "@{PassengerName()}", + "text": "${PassengerName()}", "spacing": "none" }, { diff --git a/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/common/common.lg b/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/common/common.lg index 959de5f1ac..39a3d70912 100644 --- a/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/common/common.lg +++ b/Composer/packages/server/assets/projects/RespondingWithCardsSample/ComposerDialogs/common/common.lg @@ -1,8 +1,8 @@ > All cards can be defined and managed through .lg files. > All cards use the chatdown notation - see here - https://github.com/Microsoft/botbuilder-tools/tree/master/packages/Chatdown#message-commands > Multi-line text are enclosed in ``` -> Multi-line text can include inline expressions enclosed in @{expression}. -> @{TemplateName()} is an inline expression that uses the lgTemplate pre-built function to evaluate a template by name. +> Multi-line text can include inline expressions enclosed in ${expression}. +> ${TemplateName()} is an inline expression that uses the lgTemplate pre-built function to evaluate a template by name. # HeroCard [HeroCard @@ -10,20 +10,20 @@ subtitle = Microsoft Bot Framework text = Build and connect intelligent bots to interact with your users naturally wherever they are, from text/sms to Skype, Slack, Office 365 mail and other popular services. image = https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg - buttons = @{cardActionTemplate('imBack', 'Show more cards', 'Show more cards')} + buttons = ${cardActionTemplate('imBack', 'Show more cards', 'Show more cards')} ] # HeroCardWithMemory(name) [Herocard - title=@{TitleText(name)} - subtitle=@{SubText()} - text=@{DescriptionText()} - images=@{CardImages()} - buttons=@{cardActionTemplate('imBack', 'Show more cards', 'Show more cards')} + title=${TitleText(name)} + subtitle=${SubText()} + text=${DescriptionText()} + images=${CardImages()} + buttons=${cardActionTemplate('imBack', 'Show more cards', 'Show more cards')} ] # TitleText(name) -- Hello, @{name} +- Hello, ${name} # SubText - What is your favorite? @@ -40,10 +40,10 @@ # cardActionTemplate(type, title, value) [CardAction - Type = @{if(type == null, 'imBack', type)} - Title = @{title} - Value = @{value} - Text = @{title} + Type = ${if(type == null, 'imBack', type)} + Title = ${title} + Value = ${value} + Text = ${title} ] # ThumbnailCard @@ -58,7 +58,7 @@ # SigninCard [SigninCard text = BotFramework Sign-in Card - buttons = @{cardActionTemplate('signin', 'Sign-in', 'https://login.microsoftonline.com/')} + buttons = ${cardActionTemplate('signin', 'Sign-in', 'https://login.microsoftonline.com/')} ] # AnimationCard @@ -96,7 +96,7 @@ # AdaptiveCard [Activity - Attachments = @{json(adaptivecardjson())} + Attachments = ${json(adaptivecardjson())} ] @@ -112,8 +112,8 @@ # AllCards [Activity - Attachments = @{HeroCard()} | @{ThumbnailCard()} | @{SigninCard()} | @{AnimationCard()} | @{VideoCard()} | @{AudioCard()} | @{AdaptiveCard()} - AttachmentLayout = @{AttachmentLayoutType()} + Attachments = ${HeroCard()} | ${ThumbnailCard()} | ${SigninCard()} | ${AnimationCard()} | ${VideoCard()} | ${AudioCard()} | ${AdaptiveCard()} + AttachmentLayout = ${AttachmentLayoutType()} ] @@ -148,17 +148,17 @@ }, { "type": "TextBlock", - "text": "@{PassengerName()}", + "text": "${PassengerName()}", "separator": true }, { "type": "TextBlock", - "text": "@{PassengerName()}", + "text": "${PassengerName()}", "spacing": "none" }, { "type": "TextBlock", - "text": "@{PassengerName()}", + "text": "${PassengerName()}", "spacing": "none" }, { diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/IfElseCondition/IfElseCondition.dialog b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/IfElseCondition/IfElseCondition.dialog index af3cc70ba6..93126591d5 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/IfElseCondition/IfElseCondition.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/IfElseCondition/IfElseCondition.dialog @@ -20,7 +20,7 @@ "id": "383595", "name": "Multiple choice" }, - "prompt": "@{bfdprompt-383595()}", + "prompt": "${bfdprompt-383595()}", "maxTurnCount": 3, "property": "user.timeofday", "alwaysPrompt": false, @@ -56,7 +56,7 @@ "id": "749181", "name": "Send a response" }, - "activity": "@{bfdactivity-749181()}" + "activity": "${bfdactivity-749181()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/IfElseCondition/IfElseCondition.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/IfElseCondition/IfElseCondition.lg index bb05f073a0..0a88fbd0cc 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/IfElseCondition/IfElseCondition.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/IfElseCondition/IfElseCondition.lg @@ -4,4 +4,4 @@ - what the time of day # bfdactivity-749181 -- @{timeOfDayGreeting(user.timeofday)} \ No newline at end of file +- ${timeOfDayGreeting(user.timeofday)} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGComposition/LGComposition.dialog b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGComposition/LGComposition.dialog index 4b68fe3cdc..efc6e98243 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGComposition/LGComposition.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGComposition/LGComposition.dialog @@ -28,7 +28,7 @@ "$designer": { "id": "823322" }, - "activity": "@{bfdactivity-823322()}" + "activity": "${bfdactivity-823322()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGComposition/LGComposition.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGComposition/LGComposition.lg index 859aae0a0e..6771020b83 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGComposition/LGComposition.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGComposition/LGComposition.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-823322 --@{LGComposition(user)} \ No newline at end of file +-${LGComposition(user)} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGWithParam/LGWithParam.dialog b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGWithParam/LGWithParam.dialog index 29748e15f8..b31b4e5deb 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGWithParam/LGWithParam.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGWithParam/LGWithParam.dialog @@ -28,7 +28,7 @@ "$designer": { "id": "176070" }, - "activity": "@{bfdactivity-176070()}" + "activity": "${bfdactivity-176070()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGWithParam/LGWithParam.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGWithParam/LGWithParam.lg index 927c34108f..ba8ee42fc4 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGWithParam/LGWithParam.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/LGWithParam/LGWithParam.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-176070 --@{LGWithParam(user)} \ No newline at end of file +-${LGWithParam(user)} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/Main/Main.dialog index 7d2907cbff..2565a6460f 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/Main/Main.dialog @@ -17,7 +17,7 @@ "$designer": { "id": "551445" }, - "activity": "@{bfdactivity-551445()}" + "activity": "${bfdactivity-551445()}" } ] }, @@ -50,7 +50,7 @@ "id": "576166", "name": "Send a response" }, - "activity": "@{bfdactivity-576166()}" + "activity": "${bfdactivity-576166()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/Main/Main.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/Main/Main.lg index 8348aafffc..3ec57ec62c 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/Main/Main.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/Main/Main.lg @@ -1,7 +1,7 @@ [import](common.lg) # bfdactivity-551445 --@{help()} +-${help()} # bfdactivity-576166 -Welcome to the Message Samples. You can use this sample to explore different capabilities of sending messages to users. \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/MultiLineText/MultiLineText.dialog b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/MultiLineText/MultiLineText.dialog index 362f78e4b2..07781fb615 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/MultiLineText/MultiLineText.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/MultiLineText/MultiLineText.dialog @@ -20,7 +20,7 @@ "id": "458516", "name": "Send a response" }, - "activity": "@{bfdactivity-458516()}" + "activity": "${bfdactivity-458516()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/MultiLineText/MultiLineText.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/MultiLineText/MultiLineText.lg index a5f1fb730b..837c499f7e 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/MultiLineText/MultiLineText.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/MultiLineText/MultiLineText.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-458516 -- @{multilineText()} \ No newline at end of file +- ${multilineText()} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SimpleText/SimpleText.dialog b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SimpleText/SimpleText.dialog index afa7a2596b..c85078b6c0 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SimpleText/SimpleText.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SimpleText/SimpleText.dialog @@ -17,7 +17,7 @@ "$designer": { "id": "219943" }, - "activity": "@{bfdactivity-219943()}" + "activity": "${bfdactivity-219943()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SimpleText/SimpleText.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SimpleText/SimpleText.lg index 2561584cac..11945a3e5d 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SimpleText/SimpleText.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SimpleText/SimpleText.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-219943 --@{SimpleText()} \ No newline at end of file +-${SimpleText()} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/StructuredLG/StructuredLG.dialog b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/StructuredLG/StructuredLG.dialog index f49ec2cc0e..343eecb04e 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/StructuredLG/StructuredLG.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/StructuredLG/StructuredLG.dialog @@ -20,7 +20,7 @@ "id": "862531", "name": "Send a response" }, - "activity": "@{bfdactivity-862531()}" + "activity": "${bfdactivity-862531()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/StructuredLG/StructuredLG.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/StructuredLG/StructuredLG.lg index 873af082ee..1915dae7b2 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/StructuredLG/StructuredLG.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/StructuredLG/StructuredLG.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-862531 -- @{StructuredText()} \ No newline at end of file +- ${StructuredText()} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog index 8a9ab15b22..9683a81166 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SwitchCondition/SwitchCondition.dialog @@ -20,7 +20,7 @@ "id": "958316", "name": "Send a response" }, - "activity": "@{bfdactivity-958316()}" + "activity": "${bfdactivity-958316()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg index 6cc4687d3c..d96dc948c0 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/SwitchCondition/SwitchCondition.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-958316 -- @{greetInAWeek()} \ No newline at end of file +- ${greetInAWeek()} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/TextWithMemory/TextWithMemory.dialog b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/TextWithMemory/TextWithMemory.dialog index 82c5d4d950..a5f5a9a73a 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/TextWithMemory/TextWithMemory.dialog +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/TextWithMemory/TextWithMemory.dialog @@ -18,14 +18,14 @@ "id": "765039" }, "property": "user.message", - "value": "'This is a text saved in memory.'" + "value": "This is a text saved in memory." }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "822060" }, - "activity": "@{bfdactivity-822060()}" + "activity": "${bfdactivity-822060()}" } ] } diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/TextWithMemory/TextWithMemory.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/TextWithMemory/TextWithMemory.lg index 51ef818258..764388935e 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/TextWithMemory/TextWithMemory.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/TextWithMemory/TextWithMemory.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-822060 --@{user.message} \ No newline at end of file +-${user.message} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/common/common.lg b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/common/common.lg index c050afc1c7..e871b7d453 100644 --- a/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/common/common.lg +++ b/Composer/packages/server/assets/projects/RespondingWithTextSample/ComposerDialogs/common/common.lg @@ -2,10 +2,10 @@ - nice to talk to you! # LGComposition(user) -- @{user.name} @{Greeting()} +- ${user.name} ${Greeting()} # LGWithParam(user) -- Hello @{user.name}, nice to talk to you! +- Hello ${user.name}, nice to talk to you! # SimpleText - Hi, this is simple text @@ -18,18 +18,18 @@ ``` # greetInAWeek -- SWITCH: @{dayOfWeek(utcNow())} -- CASE: @{0} +- SWITCH: ${dayOfWeek(utcNow())} +- CASE: ${0} - Happy Sunday! --CASE: @{6} +-CASE: ${6} - Happy Saturday! -DEFAULT: - Working day! # timeOfDayGreeting(timeOfDay) -- IF: @{timeOfDay == 'morning'} +- IF: ${timeOfDay == 'morning'} - good morning -- ELSEIF: @{timeOfDay == 'afternoon'} +- ELSEIF: ${timeOfDay == 'afternoon'} - good afternoon - ELSE: - good evening diff --git a/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/Main/Main.dialog index 47bfb7e19e..d760ed5083 100644 --- a/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/Main/Main.dialog @@ -37,47 +37,11 @@ "id": "037171", "name": "Send a response" }, - "activity": "@{bfdactivity-037171()}" + "activity": "${bfdactivity-037171()}" } ] } ] - }, - { - "$type": "Microsoft.InitProperty", - "$designer": { - "id": "200509", - "name": "Initialize a Property" - }, - "property": "user.taskLists", - "type": "object" - }, - { - "$type": "Microsoft.InitProperty", - "$designer": { - "id": "192864", - "name": "Initialize a Property" - }, - "property": "user.taskLists.grocery", - "type": "array" - }, - { - "$type": "Microsoft.InitProperty", - "$designer": { - "id": "905432", - "name": "Initialize a Property" - }, - "property": "user.taskLists.shopping", - "type": "array" - }, - { - "$type": "Microsoft.InitProperty", - "$designer": { - "id": "773009", - "name": "Initialize a Property" - }, - "property": "user.taskLists.todo", - "type": "array" } ] }, @@ -94,7 +58,7 @@ "id": "113335", "name": "Send a response" }, - "activity": "@{bfdactivity-113335()}" + "activity": "${bfdactivity-113335()}" } ], "intent": "Help" @@ -112,7 +76,7 @@ "id": "183920", "name": "Confirmation" }, - "prompt": "@{bfdprompt-183920()}", + "prompt": "${bfdprompt-183920()}", "maxTurnCount": 3, "property": "turn.cancelConfirmation", "defaultValue": "false", @@ -141,7 +105,7 @@ "id": "304360", "name": "Send a response" }, - "activity": "@{bfdactivity-304360()}" + "activity": "${bfdactivity-304360()}" }, { "$type": "Microsoft.CancelAllDialogs", @@ -158,7 +122,7 @@ "id": "470975", "name": "Send a response" }, - "activity": "@{bfdactivity-470975()}" + "activity": "${bfdactivity-470975()}" } ] } @@ -178,7 +142,7 @@ "id": "456012", "name": "Send a response" }, - "activity": "@{bfdactivity-456012()}" + "activity": "${bfdactivity-456012()}" } ], "intent": "Greeting" @@ -195,12 +159,12 @@ "id": "069270", "name": "Text input" }, - "prompt": "@{bfdprompt-069270()}", + "prompt": "${bfdprompt-069270()}", "maxTurnCount": 3, "property": "dialog.item", "alwaysPrompt": false, "allowInterruptions": "turn.recognized.score > 0.7 && !#AddItem && !@itemTitle", - "value": "@itemTitle" + "value": "=@itemTitle" }, { "$type": "Microsoft.IfCondition", @@ -216,7 +180,7 @@ "id": "781953", "name": "Multiple choice" }, - "prompt": "@{bfdprompt-781953()}", + "prompt": "${bfdprompt-781953()}", "maxTurnCount": 3, "property": "dialog.listType", "alwaysPrompt": false, @@ -245,7 +209,7 @@ "recognizerOptions": { "noValue": false }, - "value": "@listType" + "value": "=@listType" } ] }, @@ -257,7 +221,7 @@ }, "changeType": "Push", "itemsProperty": "user.taskLists[dialog.listType]", - "value": "dialog.item" + "value": "=dialog.item" }, { "$type": "Microsoft.SendActivity", @@ -265,7 +229,7 @@ "id": "775572", "name": "Send a response" }, - "activity": "@{bfdactivity-775572()}" + "activity": "${bfdactivity-775572()}" }, { "$type": "Microsoft.DeleteProperty", @@ -306,13 +270,13 @@ "id": "637111", "name": "Multiple choice" }, - "prompt": "@{bfdprompt-637111()}", + "prompt": "${bfdprompt-637111()}", "maxTurnCount": 3, "property": "dialog.listType", "alwaysPrompt": false, "allowInterruptions": "turn.recognized.score > 0.7 && !#DeleteItem && !@listType", "outputFormat": "value", - "value": "@listType", + "value": "=@listType", "choices": [ { "value": "Shopping" @@ -353,7 +317,7 @@ "id": "684852", "name": "Send a response" }, - "activity": "@{bfdactivity-212971()}" + "activity": "${bfdactivity-212971()}" }, { "$type": "Microsoft.TextInput", @@ -361,12 +325,12 @@ "id": "038757", "name": "Text input" }, - "prompt": "@{bfdprompt-879447()}", + "prompt": "${bfdprompt-879447()}", "maxTurnCount": 3, "property": "dialog.item", "alwaysPrompt": false, "allowInterruptions": "turn.recognized.score > 0.7 && !#DeleteItem && !@itemTitle", - "value": "@itemTitle" + "value": "=@itemTitle" }, { "$type": "Microsoft.EditArray", @@ -377,7 +341,7 @@ "changeType": "Remove", "itemsProperty": "user.taskLists[dialog.listType]", "resultProperty": "turn.itemDeleted", - "value": "dialog.item" + "value": "=dialog.item" }, { "$type": "Microsoft.SendActivity", @@ -385,7 +349,7 @@ "id": "593087", "name": "Send a response" }, - "activity": "@{bfdactivity-056974()}" + "activity": "${bfdactivity-056974()}" } ], "elseActions": [ @@ -395,7 +359,7 @@ "id": "253146", "name": "Send a response" }, - "activity": "@{bfdactivity-084161()}" + "activity": "${bfdactivity-084161()}" } ] }, @@ -438,13 +402,13 @@ "id": "059540", "name": "Multiple choice" }, - "prompt": "@{bfdprompt-059540()}", + "prompt": "${bfdprompt-059540()}", "maxTurnCount": 3, "property": "dialog.listType", "alwaysPrompt": false, "allowInterruptions": "turn.recognized.score > 0.7 && !#ViewCollection && !@listType", "outputFormat": "value", - "value": "@listType", + "value": "=@listType", "choices": [ { "value": "Todo" @@ -483,7 +447,7 @@ "id": "052697", "name": "Send a response" }, - "activity": "@{bfdactivity-052697()}" + "activity": "${bfdactivity-052697()}" }, { "$type": "Microsoft.DeleteProperty", diff --git a/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/Main/Main.lg b/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/Main/Main.lg index 93d54c6f8e..0cd081b29b 100644 --- a/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/Main/Main.lg +++ b/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/Main/Main.lg @@ -1,10 +1,10 @@ [import](common.lg) # bfdactivity-037171 -- @{Welcome-Message()} +- ${Welcome-Message()} # bfdactivity-113335 -- @{Welcome-Message()} +- ${Welcome-Message()} # bfdprompt-183920 - Are you sure you want to cancel? @@ -12,14 +12,14 @@ # bfdactivity-304360 [Activity Text = Cancelling ... - @{Welcome-Actions()} + ${Welcome-Actions()} ] # bfdactivity-470975 - No worries. Let's get right back to where we were... # bfdactivity-456012 -- @{Welcome-Message()} +- ${Welcome-Message()} # bfdprompt-069270 [Activity @@ -28,19 +28,19 @@ ] # bfdprompt-781953 -- Which list should I add **@{dialog.item}** to? +- Which list should I add **${dialog.item}** to? # bfdactivity-775572 [Activity -    Text = @{Add-Todo-Text()} -    @{Welcome-Actions()} +    Text = ${Add-Todo-Text()} +    ${Welcome-Actions()} ] # bfdprompt-637111 - Which list do you want to remove an item from? # bfdactivity-212971 -- @{List-readback(user.taskLists, dialog.listType)} +- ${List-readback(user.taskLists, dialog.listType)} # bfdprompt-879447 [Activity @@ -50,14 +50,14 @@ # bfdactivity-056974 [Activity - Text = @{Delete-Items-readback()} - @{Welcome-Actions()} + Text = ${Delete-Items-readback()} + ${Welcome-Actions()} ] # bfdactivity-084161 [Activity - Text = @{Items-readback()} - @{Welcome-Actions()} + Text = ${Items-readback()} + ${Welcome-Actions()} ] # bfdprompt-059540 @@ -65,6 +65,6 @@ # bfdactivity-052697 [Activity - Text = @{Items-readback()} - @{Welcome-Actions()} -] + Text = ${Items-readback()} + ${Welcome-Actions()} +] diff --git a/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/common/common.lg b/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/common/common.lg index 6a13dfb640..703ab0c800 100644 --- a/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/common/common.lg +++ b/Composer/packages/server/assets/projects/ToDoBotWithLuisSample/ComposerDialogs/common/common.lg @@ -22,59 +22,59 @@ # Welcome-Message [Activity - Text = @{Welcome-Prefix()}, I'm the Todo sample bot. @{Welcome-Suffix()} - @{Welcome-Actions()} + Text = ${Welcome-Prefix()}, I'm the Todo sample bot. ${Welcome-Suffix()} + ${Welcome-Actions()} ] > This template uses pre-built functions to construct a response. # Delete-Items-readback -- IF: @{turn.itemDeleted} - - ```I have removed **@{dialog.item}** from your @{dialog.listType} list. - You have **@{count(user.taskLists[dialog.listType])}** items in your @{dialog.listType} list. +- IF: ${turn.itemDeleted} + - ```I have removed **${dialog.item}** from your ${dialog.listType} list. + You have **${count(user.taskLists[dialog.listType])}** items in your ${dialog.listType} list. ``` - ELSE : - - Sorry, I did not find **@{dialog.item}** in your todo list + - Sorry, I did not find **${dialog.item}** in your todo list # Items-Ordinality (list) -- IF: @{list == null || count(list) == 1} +- IF: ${list == null || count(list) == 1} - item - ELSE: - items # Items-readback -- IF : @{toLower(dialog.listType) == 'all' } - - @{Show-all-lists()} +- IF : ${toLower(dialog.listType) == 'all' } + - ${Show-all-lists()} - ELSE : - - @{List-readback (user.taskLists, dialog.listType)} + - ${List-readback (user.taskLists, dialog.listType)} # Show-all-lists - ``` ## Shopping list -@{List-readback (user.taskLists, 'shopping')} +${List-readback (user.taskLists, 'shopping')} ## Grocery list -@{List-readback (user.taskLists, 'grocery')} +${List-readback (user.taskLists, 'grocery')} ## Todo list -@{List-readback (user.taskLists, 'todo')} +${List-readback (user.taskLists, 'todo')} ``` > This template uses a foreach prebuilt function to call a template. The template helps with putting together each item in a line prefixed with `-` > This way, clients that support multi-line markdown for text can render the items as a list. # List-readback (collection, type) -- IF: @{collection != null && collection[type] != null && count(collection[type]) != 0} +- IF: ${collection != null && collection[type] != null && count(collection[type]) != 0} - ``` -You have @{count(collection[type])} @{Items-Ordinality(collection[type])} in your @{type} collection. - - @{join(foreach(collection[type], item, todo-line(item)), '')} +You have ${count(collection[type])} ${Items-Ordinality(collection[type])} in your ${type} collection. + - ${join(foreach(collection[type], item, todo-line(item)), '')} ``` - ELSE: - ``` -You do not have any items in your @{type} list. +You do not have any items in your ${type} list. ``` # todo-line (item) - ``` -- @{item}``` +- ${item}``` # Help-prefix - Sure @@ -83,6 +83,6 @@ You do not have any items in your @{type} list. # Add-Todo-Text - ``` -@{Help-prefix()}, I have added **@{dialog.item}** to your @{dialog.listType} list.  -You have **@{count(user.taskLists[dialog.listType])}** items in your @{dialog.listType} list. +${Help-prefix()}, I have added **${dialog.item}** to your ${dialog.listType} list.  +You have **${count(user.taskLists[dialog.listType])}** items in your ${dialog.listType} list. ``` \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/AddToDo/AddToDo.dialog b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/AddToDo/AddToDo.dialog new file mode 100644 index 0000000000..5ee4e61c45 --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/AddToDo/AddToDo.dialog @@ -0,0 +1,48 @@ +{ + "$type": "Microsoft.AdaptiveDialog", + "$designer": { + "id": "808722" + }, + "autoEndDialog": true, + "defaultResultProperty": "dialog.result", + "triggers": [ + { + "$type": "Microsoft.OnBeginDialog", + "$designer": { + "id": "335456" + }, + "actions": [ + { + "$type": "Microsoft.TextInput", + "$designer": { + "id": "298897" + }, + "property": "dialog.todo", + "prompt": "OK, please enter the title of your todo.", + "maxTurnCount": 3, + "value": "=@title", + "alwaysPrompt": false, + "allowInterruptions": "true" + }, + { + "$type": "Microsoft.EditArray", + "$designer": { + "id": "567087" + }, + "changeType": "push", + "itemsProperty": "user.todos", + "value": "=dialog.todo" + }, + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "116673" + }, + "activity": "${bfdactivity-116673()}" + } + ] + } + ], + "generator": "AddToDo.lg", + "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema" +} diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/AddToDo/AddToDo.lg b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/AddToDo/AddToDo.lg new file mode 100644 index 0000000000..de1e038fa7 --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/AddToDo/AddToDo.lg @@ -0,0 +1,4 @@ +[import](common.lg) + +# bfdactivity-116673 +-Successfully added a todo named ${dialog.todo} diff --git a/BotProject/CSharp/ComposerDialogs/Main/Main.lu b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/AddToDo/AddToDo.lu similarity index 100% rename from BotProject/CSharp/ComposerDialogs/Main/Main.lu rename to Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/AddToDo/AddToDo.lu diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ClearToDos/ClearToDos.dialog b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ClearToDos/ClearToDos.dialog new file mode 100644 index 0000000000..4038bfaaa8 --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ClearToDos/ClearToDos.dialog @@ -0,0 +1,54 @@ +{ + "$type": "Microsoft.AdaptiveDialog", + "$designer": { + "id": "316336" + }, + "autoEndDialog": true, + "defaultResultProperty": "dialog.result", + "triggers": [ + { + "$type": "Microsoft.OnBeginDialog", + "$designer": { + "id": "480162" + }, + "actions": [ + { + "$type": "Microsoft.EditArray", + "$designer": { + "id": "832307" + }, + "changeType": "Clear", + "itemsProperty": "user.todos", + "resultProperty": "dialog.cleared" + }, + { + "$type": "Microsoft.IfCondition", + "$designer": { + "id": "983761" + }, + "condition": "dialog.cleared", + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "832307" + }, + "activity": "${bfdactivity-832307()}" + } + ], + "elseActions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "983761" + }, + "activity": "${bfdactivity-983761()}" + } + ] + } + ] + } + ], + "generator": "ClearToDos.lg", + "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema" +} diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ClearToDos/ClearToDos.lg b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ClearToDos/ClearToDos.lg new file mode 100644 index 0000000000..6f87860ae7 --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ClearToDos/ClearToDos.lg @@ -0,0 +1,7 @@ +[import](common.lg) + +# bfdactivity-832307 +-Successfully cleared items in the Todo List. + +# bfdactivity-983761 +-You don't have any items in the Todo List. diff --git a/BotProject/CSharp/packages/packages.json b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ClearToDos/ClearToDos.lu similarity index 100% rename from BotProject/CSharp/packages/packages.json rename to Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ClearToDos/ClearToDos.lu diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/DeleteToDo/DeleteToDo.dialog b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/DeleteToDo/DeleteToDo.dialog new file mode 100644 index 0000000000..a4f151bec9 --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/DeleteToDo/DeleteToDo.dialog @@ -0,0 +1,67 @@ +{ + "$type": "Microsoft.AdaptiveDialog", + "$designer": { + "id": "114909" + }, + "autoEndDialog": true, + "defaultResultProperty": "dialog.result", + "triggers": [ + { + "$type": "Microsoft.OnBeginDialog", + "$designer": { + "id": "768658" + }, + "actions": [ + { + "$type": "Microsoft.TextInput", + "$designer": { + "id": "870620" + }, + "property": "dialog.todo", + "prompt": "OK, please enter the title of the todo you want to remove.", + "maxTurnCount": 3, + "value": "=@title", + "alwaysPrompt": false, + "allowInterruptions": "false" + }, + { + "$type": "Microsoft.EditArray", + "$designer": { + "id": "492096" + }, + "changeType": "Remove", + "itemsProperty": "user.todos", + "resultProperty": "dialog.removed", + "value": "=dialog.todo" + }, + { + "$type": "Microsoft.IfCondition", + "$designer": { + "id": "549615" + }, + "condition": "dialog.removed", + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "725469" + }, + "activity": "${bfdactivity-725469()}" + } + ], + "elseActions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "549615" + }, + "activity": "${bfdactivity-549615()}" + } + ] + } + ] + } + ], + "generator": "DeleteToDo.lg", + "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema" +} diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/DeleteToDo/DeleteToDo.lg b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/DeleteToDo/DeleteToDo.lg new file mode 100644 index 0000000000..883fe4dde6 --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/DeleteToDo/DeleteToDo.lg @@ -0,0 +1,10 @@ +[import](common.lg) + +# bfdactivity-725469 +-Successfully removed a todo named ${dialog.todo} + +# bfdactivity-549615 +-${dialog.todo} is not in the Todo List + +# bfdprompt-870620() +- OK, please enter the title of the todo you want to remove. diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/DeleteToDo/DeleteToDo.lu b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/DeleteToDo/DeleteToDo.lu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/Main/Main.dialog new file mode 100644 index 0000000000..bf4c4f9df0 --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/Main/Main.dialog @@ -0,0 +1,202 @@ +{ + "$type": "Microsoft.AdaptiveDialog", + "$designer": { + "id": "288769", + "description": "This is a bot that demonstrates how to manage a ToDo list using Regular Expressions." + }, + "autoEndDialog": false, + "defaultResultProperty": "dialog.result", + "recognizer": { + "$kind": "Microsoft.RecognizerSet", + "recognizers": [ + { + "$kind": "Microsoft.MultiLanguageRecognizer", + "recognizers": { + "en-us": { + "$kind": "Microsoft.CrossTrainedRecognizerSet", + "recognizers": [ + { + "$kind": "Microsoft.RegexRecognizer", + "id": "regex", + "intents": [ + { + "intent": "AddIntent", + "pattern": "(?i)(?:add|create) .*(?:to-do|todo|task)(?: )?(?:named (?.*))?" + }, + { + "intent": "ClearIntent", + "pattern": "(?i)(?:delete|remove|clear) (?:all|every) (?:to-dos|todos|tasks)" + }, + { + "intent": "DeleteIntent", + "pattern": "(?i)(?:delete|remove|clear) .*(?:to-do|todo|task)(?: )?(?:named (?<title>.*))?" + }, + { + "intent": "ShowIntent", + "pattern": "(?i)(?:show|see|view) .*(?:to-do|todo|task)" + }, + { + "intent": "HelpIntent", + "pattern": "(?i)help" + }, + { + "intent": "CancelIntent", + "pattern": "(?i)cancel|never mind" + } + ] + } + ] + } + } + }, + { + "$kind": "Microsoft.ValueRecognizer" + } + ] + }, + "generator": "Main.lg", + "triggers": [ + { + "$type": "Microsoft.OnConversationUpdateActivity", + "$designer": { + "id": "376720" + }, + "actions": [ + { + "$type": "Microsoft.Foreach", + "$designer": { + "id": "518944", + "name": "Loop: for each item" + }, + "itemsProperty": "turn.Activity.membersAdded", + "actions": [ + { + "$type": "Microsoft.IfCondition", + "$designer": { + "id": "641773", + "name": "Branch: if/else" + }, + "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "157674", + "name": "Send a response" + }, + "activity": "${bfdactivity-157674()}" + } + ] + } + ] + } + ] + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "064505" + }, + "actions": [ + { + "$type": "Microsoft.BeginDialog", + "dialog": "AddToDo" + } + ], + "intent": "AddIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "114961" + }, + "actions": [ + { + "$type": "Microsoft.BeginDialog", + "dialog": "DeleteToDo", + "$designer": { + "id": "978613" + } + } + ], + "intent": "DeleteIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "088050" + }, + "actions": [ + { + "$type": "Microsoft.BeginDialog", + "dialog": "ClearToDos" + } + ], + "intent": "ClearIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "633942" + }, + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "696707" + }, + "activity": "${bfdactivity-696707()}" + } + ], + "intent": "HelpIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "794124" + }, + "actions": [ + { + "$type": "Microsoft.BeginDialog", + "dialog": "ShowToDos" + } + ], + "intent": "ShowIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "179728" + }, + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "677440" + }, + "activity": "ok." + }, + { + "$type": "Microsoft.EndDialog" + } + ], + "intent": "CancelIntent" + }, + { + "$type": "Microsoft.OnUnknownIntent", + "$designer": { + "id": "677447" + }, + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "677448" + }, + "activity": "Hi! I'm a ToDo bot. Say \"add a todo named first\" to get started." + } + ] + } + ], + "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema" +} \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/Main/Main.lg b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/Main/Main.lg new file mode 100644 index 0000000000..46c46aa61a --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/Main/Main.lg @@ -0,0 +1,10 @@ +[import](common.lg) + +# bfdactivity-696707 +-${help()} + +# bfdactivity-157674() +- Hi! I'm a ToDo bot. Say "add a todo named first" to get started. + +# foo +- You are so smart! diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/Main/Main.lu b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/Main/Main.lu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ShowToDos/ShowToDos.dialog b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ShowToDos/ShowToDos.dialog new file mode 100644 index 0000000000..869ecbbb98 --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ShowToDos/ShowToDos.dialog @@ -0,0 +1,47 @@ +{ + "$type": "Microsoft.AdaptiveDialog", + "$designer": { + "id": "709692" + }, + "autoEndDialog": true, + "defaultResultProperty": "dialog.result", + "triggers": [ + { + "$type": "Microsoft.OnBeginDialog", + "$designer": { + "id": "783343" + }, + "actions": [ + { + "$type": "Microsoft.IfCondition", + "$designer": { + "id": "662084" + }, + "condition": "user.todos == null", + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "339580", + "name": "Send an Activity" + }, + "activity": "${bfdactivity-339580()}" + } + ], + "elseActions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "662084", + "name": "Send an Activity" + }, + "activity": "${bfdactivity-662084()}" + } + ] + } + ] + } + ], + "generator": "ShowToDos.lg", + "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema" +} diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ShowToDos/ShowToDos.lg b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ShowToDos/ShowToDos.lg new file mode 100644 index 0000000000..9983313454 --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ShowToDos/ShowToDos.lg @@ -0,0 +1,8 @@ +[import](common.lg) + + +# bfdactivity-339580 +-You have no todos. + +# bfdactivity-662084 +-${ShowTodo()} diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ShowToDos/ShowToDos.lu b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/ShowToDos/ShowToDos.lu new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/common/common.lg b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/common/common.lg new file mode 100644 index 0000000000..951d3595ca --- /dev/null +++ b/Composer/packages/server/assets/projects/TodoRecognizerSetSample/ComposerDialogs/common/common.lg @@ -0,0 +1,39 @@ +# Hello +-${Welcome(time)} ${name} + +# Welcome(time) +-IF:${time == 'morning'} + - Good morning +-ELSEIF:${time == 'evening'} + - Good evening +-ELSE: + - How are you doing, + +# Exit +-Thanks for using todo bot. + +# Greeting +-What's up bro + +# ShowTodo +-IF:${count(user.todos) > 0} +-``` +${HelperFunction()} +${join(foreach(user.todos, x, showSingleTodo(x)), '\n')} +``` +-ELSE: +-You don't have any todos. + +# showSingleTodo(x) +-* ${x} + +# HelperFunction +- IF: ${count(user.todos) == 1} + - Your most recent ${count(user.todos)} task is +- ELSE: + - Your most recent ${count(user.todos)} tasks are + +# help +-I can add a todo, show todos, remove a todo, and clear all todos +-I can help you yes I can +-Help, we don't need no stinkin' help! \ No newline at end of file diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/AddToDo/AddToDo.dialog b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/AddToDo/AddToDo.dialog index 0670abd04f..5ee4e61c45 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/AddToDo/AddToDo.dialog +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/AddToDo/AddToDo.dialog @@ -12,14 +12,6 @@ "id": "335456" }, "actions": [ - { - "$type": "Microsoft.SetProperty", - "$designer": { - "id": "201694" - }, - "property": "dialog.todo", - "value": "@title" - }, { "$type": "Microsoft.TextInput", "$designer": { @@ -28,41 +20,25 @@ "property": "dialog.todo", "prompt": "OK, please enter the title of your todo.", "maxTurnCount": 3, + "value": "=@title", "alwaysPrompt": false, "allowInterruptions": "true" }, - { - "$type": "Microsoft.IfCondition", - "$designer": { - "id": "015420" - }, - "condition": "user.todos == null", - "actions": [ - { - "$type": "Microsoft.InitProperty", - "$designer": { - "id": "015420" - }, - "property": "user.todos", - "type": "array" - } - ] - }, { "$type": "Microsoft.EditArray", "$designer": { "id": "567087" }, - "changeType": "Push", + "changeType": "push", "itemsProperty": "user.todos", - "value": "dialog.todo" + "value": "=dialog.todo" }, { "$type": "Microsoft.SendActivity", "$designer": { "id": "116673" }, - "activity": "@{bfdactivity-116673()}" + "activity": "${bfdactivity-116673()}" } ] } diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/AddToDo/AddToDo.lg b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/AddToDo/AddToDo.lg index b22ba8fae6..de1e038fa7 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/AddToDo/AddToDo.lg +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/AddToDo/AddToDo.lg @@ -1,4 +1,4 @@ [import](common.lg) # bfdactivity-116673 --Successfully added a todo named @{dialog.todo} +-Successfully added a todo named ${dialog.todo} diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ClearToDos/ClearToDos.dialog b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ClearToDos/ClearToDos.dialog index ef4a4fb651..4038bfaaa8 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ClearToDos/ClearToDos.dialog +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ClearToDos/ClearToDos.dialog @@ -33,7 +33,7 @@ "$designer": { "id": "832307" }, - "activity": "@{bfdactivity-832307()}" + "activity": "${bfdactivity-832307()}" } ], "elseActions": [ @@ -42,7 +42,7 @@ "$designer": { "id": "983761" }, - "activity": "@{bfdactivity-983761()}" + "activity": "${bfdactivity-983761()}" } ] } diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/DeleteToDo/DeleteToDo.dialog b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/DeleteToDo/DeleteToDo.dialog index 0b87a9ff54..a4f151bec9 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/DeleteToDo/DeleteToDo.dialog +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/DeleteToDo/DeleteToDo.dialog @@ -12,14 +12,6 @@ "id": "768658" }, "actions": [ - { - "$type": "Microsoft.SetProperty", - "$designer": { - "id": "725469" - }, - "property": "dialog.todo", - "value": "@title" - }, { "$type": "Microsoft.TextInput", "$designer": { @@ -28,6 +20,7 @@ "property": "dialog.todo", "prompt": "OK, please enter the title of the todo you want to remove.", "maxTurnCount": 3, + "value": "=@title", "alwaysPrompt": false, "allowInterruptions": "false" }, @@ -39,7 +32,7 @@ "changeType": "Remove", "itemsProperty": "user.todos", "resultProperty": "dialog.removed", - "value": "dialog.todo" + "value": "=dialog.todo" }, { "$type": "Microsoft.IfCondition", @@ -53,7 +46,7 @@ "$designer": { "id": "725469" }, - "activity": "@{bfdactivity-725469()}" + "activity": "${bfdactivity-725469()}" } ], "elseActions": [ @@ -62,7 +55,7 @@ "$designer": { "id": "549615" }, - "activity": "@{bfdactivity-549615()}" + "activity": "${bfdactivity-549615()}" } ] } diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/DeleteToDo/DeleteToDo.lg b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/DeleteToDo/DeleteToDo.lg index 9032f289f0..883fe4dde6 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/DeleteToDo/DeleteToDo.lg +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/DeleteToDo/DeleteToDo.lg @@ -1,10 +1,10 @@ [import](common.lg) # bfdactivity-725469 --Successfully removed a todo named @{dialog.todo} +-Successfully removed a todo named ${dialog.todo} # bfdactivity-549615 --@{dialog.todo} is not in the Todo List +-${dialog.todo} is not in the Todo List # bfdprompt-870620() - OK, please enter the title of the todo you want to remove. diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/Main/Main.dialog b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/Main/Main.dialog index 0a52604d6b..80fc61097e 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/Main/Main.dialog +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/Main/Main.dialog @@ -7,183 +7,176 @@ "autoEndDialog": false, "defaultResultProperty": "dialog.result", "recognizer": { - "$type": "Microsoft.RegexRecognizer", + "$kind": "Microsoft.RegexRecognizer", + "id": "regex", "intents": [ { - "$type": "Microsoft.IntentPattern", "intent": "AddIntent", "pattern": "(?i)(?:add|create) .*(?:to-do|todo|task)(?: )?(?:named (?<title>.*))?" }, { - "$type": "Microsoft.IntentPattern", "intent": "ClearIntent", "pattern": "(?i)(?:delete|remove|clear) (?:all|every) (?:to-dos|todos|tasks)" }, { - "$type": "Microsoft.IntentPattern", "intent": "DeleteIntent", "pattern": "(?i)(?:delete|remove|clear) .*(?:to-do|todo|task)(?: )?(?:named (?<title>.*))?" }, { - "$type": "Microsoft.IntentPattern", "intent": "ShowIntent", "pattern": "(?i)(?:show|see|view) .*(?:to-do|todo|task)" }, { - "$type": "Microsoft.IntentPattern", "intent": "HelpIntent", "pattern": "(?i)help" }, { - "$type": "Microsoft.IntentPattern", "intent": "CancelIntent", "pattern": "(?i)cancel|never mind" } ] }, - "generator": "Main.lg", + "generator": "Main.lg", "triggers": [ - { - "$type": "Microsoft.OnConversationUpdateActivity", - "$designer": { - "id": "376720" - }, - "actions": [ - { - "$type": "Microsoft.Foreach", - "$designer": { - "id": "518944", - "name": "Loop: for each item" - }, - "itemsProperty": "turn.Activity.membersAdded", - "actions": [ - { - "$type": "Microsoft.IfCondition", - "$designer": { - "id": "641773", - "name": "Branch: if/else" - }, - "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", - "actions": [ - { - "$type": "Microsoft.SendActivity", - "$designer": { - "id": "157674", - "name": "Send a response" - }, - "activity": "@{bfdactivity-157674()}" - } - ] - } - ] - } - ] - }, - { - "$type": "Microsoft.OnIntent", - "$designer": { - "id": "064505" - }, - "actions": [ - { - "$type": "Microsoft.BeginDialog", - "dialog": "AddToDo" - } - ], - "intent": "AddIntent" + { + "$type": "Microsoft.OnConversationUpdateActivity", + "$designer": { + "id": "376720" }, - { - "$type": "Microsoft.OnIntent", - "$designer": { - "id": "114961" - }, - "actions": [ - { - "$type": "Microsoft.BeginDialog", - "dialog": "DeleteToDo", - "$designer": { - "id": "978613" + "actions": [ + { + "$type": "Microsoft.Foreach", + "$designer": { + "id": "518944", + "name": "Loop: for each item" + }, + "itemsProperty": "turn.Activity.membersAdded", + "actions": [ + { + "$type": "Microsoft.IfCondition", + "$designer": { + "id": "641773", + "name": "Branch: if/else" + }, + "condition": "string(dialog.foreach.value.id) != string(turn.Activity.Recipient.id)", + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "157674", + "name": "Send a response" + }, + "activity": "${bfdactivity-157674()}" + } + ] } - } - ], - "intent": "DeleteIntent" + ] + } + ] + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "064505" }, - { - "$type": "Microsoft.OnIntent", - "$designer": { - "id": "088050" - }, - "actions": [ - { - "$type": "Microsoft.BeginDialog", - "dialog": "ClearToDos" - } - ], - "intent": "ClearIntent" + "actions": [ + { + "$type": "Microsoft.BeginDialog", + "dialog": "AddToDo" + } + ], + "intent": "AddIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "114961" }, - { - "$type": "Microsoft.OnIntent", - "$designer": { - "id": "633942" - }, - "actions": [ - { - "$type": "Microsoft.SendActivity", - "$designer": { - "id": "696707" - }, - "activity": "@{bfdactivity-696707()}" + "actions": [ + { + "$type": "Microsoft.BeginDialog", + "dialog": "DeleteToDo", + "$designer": { + "id": "978613" } - ], - "intent": "HelpIntent" + } + ], + "intent": "DeleteIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "088050" }, - { - "$type": "Microsoft.OnIntent", - "$designer": { - "id": "794124" - }, - "actions": [ - { - "$type": "Microsoft.BeginDialog", - "dialog": "ShowToDos" - } - ], - "intent": "ShowIntent" + "actions": [ + { + "$type": "Microsoft.BeginDialog", + "dialog": "ClearToDos" + } + ], + "intent": "ClearIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "633942" }, - { - "$type": "Microsoft.OnIntent", - "$designer": { - "id": "179728" - }, - "actions": [ - { - "$type": "Microsoft.SendActivity", - "$designer": { - "id": "677440" - }, - "activity": "ok." + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "696707" }, - { - "$type": "Microsoft.EndDialog" - } - ], - "intent": "CancelIntent" + "activity": "${bfdactivity-696707()}" + } + ], + "intent": "HelpIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "794124" + }, + "actions": [ + { + "$type": "Microsoft.BeginDialog", + "dialog": "ShowToDos" + } + ], + "intent": "ShowIntent" + }, + { + "$type": "Microsoft.OnIntent", + "$designer": { + "id": "179728" }, - { - "$type": "Microsoft.OnUnknownIntent", - "$designer": { - "id": "677447" + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "677440" + }, + "activity": "ok." }, - "actions": [ - { - "$type": "Microsoft.SendActivity", - "$designer": { - "id": "677448" - }, - "activity": "Hi! I'm a ToDo bot. Say \"add a todo named first\" to get started." - } - ] - } - ], - "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema" -} + { + "$type": "Microsoft.EndDialog" + } + ], + "intent": "CancelIntent" + }, + { + "$type": "Microsoft.OnUnknownIntent", + "$designer": { + "id": "677447" + }, + "actions": [ + { + "$type": "Microsoft.SendActivity", + "$designer": { + "id": "677448" + }, + "activity": "Hi! I'm a ToDo bot. Say \"add a todo named first\" to get started." + } + ] + } +], "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/stable/Composer/packages/server/schemas/sdk.schema" } diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/Main/Main.lg b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/Main/Main.lg index ad1159cd7d..46c46aa61a 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/Main/Main.lg +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/Main/Main.lg @@ -1,7 +1,7 @@ [import](common.lg) # bfdactivity-696707 --@{help()} +-${help()} # bfdactivity-157674() - Hi! I'm a ToDo bot. Say "add a todo named first" to get started. diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ShowToDos/ShowToDos.dialog b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ShowToDos/ShowToDos.dialog index 9494d6928e..869ecbbb98 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ShowToDos/ShowToDos.dialog +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ShowToDos/ShowToDos.dialog @@ -25,7 +25,7 @@ "id": "339580", "name": "Send an Activity" }, - "activity": "@{bfdactivity-339580()}" + "activity": "${bfdactivity-339580()}" } ], "elseActions": [ @@ -35,7 +35,7 @@ "id": "662084", "name": "Send an Activity" }, - "activity": "@{bfdactivity-662084()}" + "activity": "${bfdactivity-662084()}" } ] } diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ShowToDos/ShowToDos.lg b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ShowToDos/ShowToDos.lg index f7ad27a35b..9983313454 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ShowToDos/ShowToDos.lg +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/ShowToDos/ShowToDos.lg @@ -5,4 +5,4 @@ -You have no todos. # bfdactivity-662084 --@{ShowTodo()} +-${ShowTodo()} diff --git a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/common/common.lg b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/common/common.lg index cefda30532..951d3595ca 100644 --- a/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/common/common.lg +++ b/Composer/packages/server/assets/projects/TodoSample/ComposerDialogs/common/common.lg @@ -1,10 +1,10 @@ # Hello --@{Welcome(time)} @{name} +-${Welcome(time)} ${name} # Welcome(time) --IF:@{time == 'morning'} +-IF:${time == 'morning'} - Good morning --ELSEIF:@{time == 'evening'} +-ELSEIF:${time == 'evening'} - Good evening -ELSE: - How are you doing, @@ -16,22 +16,22 @@ -What's up bro # ShowTodo --IF:@{count(user.todos) > 0} +-IF:${count(user.todos) > 0} -``` -@{HelperFunction()} -@{join(foreach(user.todos, x, showSingleTodo(x)), '\n')} +${HelperFunction()} +${join(foreach(user.todos, x, showSingleTodo(x)), '\n')} ``` -ELSE: -You don't have any todos. # showSingleTodo(x) --* @{x} +-* ${x} # HelperFunction -- IF: @{count(user.todos) == 1} - - Your most recent @{count(user.todos)} task is +- IF: ${count(user.todos) == 1} + - Your most recent ${count(user.todos)} task is - ELSE: - - Your most recent @{count(user.todos)} tasks are + - Your most recent ${count(user.todos)} tasks are # help -I can add a todo, show todos, remove a todo, and clear all todos diff --git a/Composer/packages/server/package.json b/Composer/packages/server/package.json index 3920015655..08e07b6842 100644 --- a/Composer/packages/server/package.json +++ b/Composer/packages/server/package.json @@ -57,7 +57,7 @@ "@bfc/lg-languageserver": "*", "@bfc/lu-languageserver": "*", "@bfc/shared": "*", - "@bfcomposer/lubuild": "1.1.2-preview", + "@bfcomposer/bf-lu": "^1.2.5", "archiver": "^3.0.0", "axios": "^0.18.0", "azure-storage": "^2.10.3", diff --git a/Composer/packages/server/schemas/editor.schema b/Composer/packages/server/schemas/editor.schema index 9d581ca9bb..3d4c987261 100644 --- a/Composer/packages/server/schemas/editor.schema +++ b/Composer/packages/server/schemas/editor.schema @@ -115,11 +115,6 @@ "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", "helpLinkText": "Learn more" }, - "Microsoft.InitProperty": { - "title": "Initialize Property", - "helpLink": "https://aka.ms/bfc-using-memory", - "helpLinkText": "Learn more" - }, "Microsoft.LanguagePolicy": { "title": "LanguagePolicy" }, diff --git a/Composer/packages/server/schemas/sdk.schema b/Composer/packages/server/schemas/sdk.schema index 1fafc1696f..a1c8661f27 100644 --- a/Composer/packages/server/schemas/sdk.schema +++ b/Composer/packages/server/schemas/sdk.schema @@ -999,7 +999,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -1008,7 +1008,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -1072,7 +1072,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -1089,7 +1089,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -1527,7 +1527,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -1536,7 +1536,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -1600,7 +1600,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -1617,7 +1617,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -1939,7 +1939,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -1948,7 +1948,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -2012,7 +2012,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -2029,7 +2029,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -2552,7 +2552,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -2561,7 +2561,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -2625,7 +2625,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -2642,7 +2642,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -5763,7 +5763,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -5772,7 +5772,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -5836,7 +5836,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -5853,7 +5853,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -11520,7 +11520,7 @@ "unrecognizedPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Unrecognized prompt", - "description": "Message to send if user response is not recognized.", + "description": "Message to send when the recognizer does not understand the user input.", "examples": [ "Sorry, I do not understand '{turn.activity.text'}. Let's try again. What is your birth date?" ], @@ -11529,7 +11529,7 @@ "invalidPrompt": { "$kind": "Microsoft.IActivityTemplate", "title": "Invalid prompt", - "description": "Message to send if user response is invalid. Relies on specified validation expressions.", + "description": "Message to send when the user input does not meet any validation expression.", "examples": [ "Sorry, '{this.value}' does not work. I need a number between 1-150. What is your age?" ], @@ -11593,7 +11593,7 @@ "string" ], "title": "Default value", - "description": "Expression to examine on each turn of the conversation as possible value to the property.", + "description": "'Property' will be set to the value of this expression when max turn count is exceeded.", "examples": [ "@userName", "coalesce(@number, @partySize)" @@ -11610,7 +11610,7 @@ "string" ], "title": "Value", - "description": "Gets or sets a value expression which can be used to intialize the input prompt.", + "description": "'Property' will be set to the value of this expression unless it evaluates to null.", "examples": [ "@userName" ] @@ -11648,7 +11648,7 @@ "description": "Expression to format the output.", "examples": [ "=toUpper(this.value)", - "@{toUpper(this.value)}" + "${toUpper(this.value)}" ] } }, @@ -12034,4 +12034,4 @@ ] } } -} \ No newline at end of file +} diff --git a/Composer/packages/server/src/models/bot/luPublisher.ts b/Composer/packages/server/src/models/bot/luPublisher.ts index f117227f8a..12fcc28a09 100644 --- a/Composer/packages/server/src/models/bot/luPublisher.ts +++ b/Composer/packages/server/src/models/bot/luPublisher.ts @@ -2,12 +2,14 @@ // Licensed under the MIT License. import isEqual from 'lodash/isEqual'; -import { runBuild } from '@bfcomposer/lubuild'; +import { luBuild } from '@bfcomposer/bf-lu/lib/parser/lubuild'; import { LuFile } from '@bfc/indexers'; import { Path } from './../../utility/path'; import { IFileStorage } from './../storage/interface'; import { ILuisConfig, LuisStatus, FileUpdateType } from './interface'; +import log from './../../logger'; + const GENERATEDFOLDER = 'ComposerDialogs/generated'; const LU_STATUS_FILE = 'luis.status.json'; const DEFAULT_STATUS = { @@ -24,6 +26,11 @@ export class LuPublisher { // key: filePath relative to bot dir // value: lastUpdateTime && lastPublishTime public status: { [key: string]: LuisStatus } = {}; + + private builder = new luBuild.Builder(message => { + log(message); + }); + constructor(path: string, storage: IFileStorage) { this.botDir = path; this.generatedFolderPath = Path.join(this.botDir, GENERATEDFOLDER); @@ -80,24 +87,35 @@ export class LuPublisher { }; public publish = async (luFiles: LuFile[]) => { - const config = this._getConfig(luFiles); - if (config.models.length === 0) { + if (!luFiles.length) { throw new Error('No luis file exist'); } + const config = this._getConfig(); const curTime = Date.now(); try { - await runBuild(config); + const loadResult = await this._loadLuConatents(luFiles); + const buildResult = await this.builder.build( + loadResult.luContents, + loadResult.recognizers, + config.authoringKey, + config.region, + config.botName, + config.suffix, + config.fallbackLocal, + false, + loadResult.multiRecognizers, + loadResult.settings + ); // update pubish status after sucessfully published luFiles.forEach(f => { this.status[f.relativePath].lastPublishTime = curTime; }); await this.saveStatus(); + await this.builder.writeDialogAssets(buildResult, true, this.generatedFolderPath); } catch (error) { - throw new Error(error?.body?.error?.message ?? 'Error publishing to LUIS.'); + throw new Error(error.body?.error?.message || error.message || 'Error publishing to LUIS.'); } - - await this._copyDialogsToTargetFolder(config); }; public getUnpublisedFiles = (files: LuFile[]) => { @@ -147,33 +165,27 @@ export class LuPublisher { } } - private _copyDialogsToTargetFolder = async (config: any) => { - const defaultLanguage = config.defaultLanguage; - await config.models.forEach(async (filePath: string) => { - const baseName = Path.basename(filePath, '.lu'); - const rootPath = Path.dirname(filePath); - const currentPath = `${filePath}.dialog`; - const targetPath = Path.join(this.generatedFolderPath, `${baseName}.lu.dialog`); - const currentVariantPath = Path.join(rootPath, `${baseName}.${defaultLanguage}.lu.dialog`); - const targetVariantPath = Path.join(this.generatedFolderPath, `${baseName}.${defaultLanguage}.lu.dialog`); - await this.storage.copyFile(currentPath, targetPath); - await this.storage.copyFile(currentVariantPath, targetVariantPath); - await this.storage.removeFile(currentPath); - await this.storage.removeFile(currentVariantPath); - }); + private _getConfig = () => { + const luConfig = { + authoringKey: this.config?.authoringKey || '', + region: this.config?.authoringRegion || '', + botName: this.config?.name || '', + suffix: this.config?.environment || '', + fallbackLocal: this.config?.defaultLanguage || 'en-us', + }; + return luConfig; }; - private _getConfig = (luFiles: LuFile[]) => { - const luConfig: any = { ...this.config }; - luConfig.models = []; - luConfig.autodelete = true; - luConfig.dialogs = true; - luConfig.force = false; - luConfig.folder = this.generatedFolderPath; - luFiles.forEach(file => { - luConfig.models.push(Path.resolve(this.botDir, file.relativePath)); + private _loadLuConatents = async (luFiles: LuFile[]) => { + const pathList = luFiles.map(file => { + return Path.resolve(this.botDir, file.relativePath); }); - return luConfig; + return await this.builder.loadContents( + pathList, + this.config?.defaultLanguage || '', + this.config?.environment || '', + this.config?.authoringRegion || '' + ); }; } diff --git a/Composer/packages/server/src/models/connector/csharpBotConnector.ts b/Composer/packages/server/src/models/connector/csharpBotConnector.ts index e77bddcd0d..f97dadb2a4 100644 --- a/Composer/packages/server/src/models/connector/csharpBotConnector.ts +++ b/Composer/packages/server/src/models/connector/csharpBotConnector.ts @@ -103,10 +103,6 @@ export class CSharpBotConnector implements IBotConnector { configList.push('--luis:endpointKey'); configList.push(config.luis.authoringKey); } - if (config.luis.authoringRegion) { - configList.push('--luis:endpoint'); - configList.push(`https://${config.luis.authoringRegion}.api.cognitive.microsoft.com`); - } } return configList; diff --git a/Composer/packages/server/src/types/bf-lu.d.ts b/Composer/packages/server/src/types/bf-lu.d.ts new file mode 100644 index 0000000000..1eff54c908 --- /dev/null +++ b/Composer/packages/server/src/types/bf-lu.d.ts @@ -0,0 +1,35 @@ +/// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +declare module '@bfcomposer/bf-lu/lib/parser/lubuild' { + namespace luBuild { + class Builder { + private readonly handler: (input: string) => any; + + constructor(handler: any); + + loadContents( + files: string[], + culture: string, + suffix: string, + region: string, + stdin?: string + ): { luContents: any[]; recognizers: Map<string, any>; multiRecognizers: Map<string, any>; settings: any }; + + build( + luContents: any[], + recognizers: Map<string, any>, + authoringKey: string, + region: string, + botName: string, + suffix: string, + fallbackLocale: string, + deleteOldVersion: boolean, + multiRecognizers: Map<string, any>, + settings: any + ): any[]; + + writeDialogAssets(contents: any[], force: boolean, out: string): void; + } + } +} diff --git a/Composer/packages/tools/language-servers/language-generation/__tests__/app.test.ts b/Composer/packages/tools/language-servers/language-generation/__tests__/app.test.ts index 980c0de87d..341ea74f63 100644 --- a/Composer/packages/tools/language-servers/language-generation/__tests__/app.test.ts +++ b/Composer/packages/tools/language-servers/language-generation/__tests__/app.test.ts @@ -120,7 +120,7 @@ describe('lg lsp server', () => { it('didChange', async () => { // didChange - const newContent = `${content}-@{G\\r\\n`; + const newContent = `${content}-\${G\\r\\n`; const payload = `{"jsonrpc":"2.0","method":"textDocument/didChange","params":{"textDocument":{"uri":"inmemory://model/1","version":3},"contentChanges":[{"text": "${newContent}"}]}}`; await send(payload, [ response => { diff --git a/Composer/packages/tools/language-servers/language-generation/package.json b/Composer/packages/tools/language-servers/language-generation/package.json index 3d8e889244..8d3cd2032f 100644 --- a/Composer/packages/tools/language-servers/language-generation/package.json +++ b/Composer/packages/tools/language-servers/language-generation/package.json @@ -16,8 +16,8 @@ }, "dependencies": { "@bfc/indexers": "*", - "botbuilder-lg": "4.7.0-preview.93464", - "botframework-expressions": "4.7.0-preview.93464", + "botbuilder-lg": "^4.8.0-preview.106823", + "botframework-expressions": "^4.8.0-preview.106476", "request-light": "^0.2.2", "vscode-languageserver": "^5.3.0-next" }, diff --git a/Composer/packages/tools/language-servers/language-generation/src/LGServer.ts b/Composer/packages/tools/language-servers/language-generation/src/LGServer.ts index 3ee73eb7fd..51511bbed4 100644 --- a/Composer/packages/tools/language-servers/language-generation/src/LGServer.ts +++ b/Composer/packages/tools/language-servers/language-generation/src/LGServer.ts @@ -354,7 +354,7 @@ export class LGServer { } if (char === '{' && i >= 1 && state[state.length - 1] !== SINGLE && state[state.length - 1] !== DOUBLE) { - if (lineContent.charAt(i - 1) === '@') { + if (lineContent.charAt(i - 1) === '$') { state.push(EXPRESSION); } } diff --git a/Composer/packages/tools/language-servers/language-understanding/package.json b/Composer/packages/tools/language-servers/language-understanding/package.json index 62510a16d7..02bc7a28fa 100644 --- a/Composer/packages/tools/language-servers/language-understanding/package.json +++ b/Composer/packages/tools/language-servers/language-understanding/package.json @@ -18,8 +18,8 @@ "start:server": "cd demo && ts-node ./src/server.ts" }, "dependencies": { - "@bfcomposer/bf-lu": "https://botbuilder.myget.org/F/botbuilder-declarative/npm/@bfcomposer/bf-lu/-/@bfcomposer/bf-lu-1.1.8.tgz", "@microsoft/bf-cli-command": "https://botbuilder.myget.org/F/botbuilder-declarative/npm/@microsoft/bf-cli-command/-/@microsoft/bf-cli-command-1.0.0.tgz", + "@bfcomposer/bf-lu": "^1.2.5", "@types/node": "^12.0.4", "express": "^4.15.2", "monaco-editor-core": "^0.17.0", diff --git a/Composer/yarn.lock b/Composer/yarn.lock index be76d64dd2..5673f0b793 100644 --- a/Composer/yarn.lock +++ b/Composer/yarn.lock @@ -2120,32 +2120,10 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" -"@bfcomposer/bf-lu@1.1.2": - version "1.1.2" - resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/@bfcomposer/bf-lu/-/@bfcomposer/bf-lu-1.1.2.tgz#0dcd1efa9f839daefe9e2dfc6f4b6db731b701a3" - integrity sha1-Dc0e+p+Dna7+ni38b0tttzG3AaM= - dependencies: - "@microsoft/bf-cli-command" "1.0.0" - "@oclif/command" "~1.5.19" - "@oclif/config" "~1.13.3" - "@oclif/errors" "~1.2.2" - antlr4 "^4.7.2" - chalk "2.4.1" - console-stream "^0.1.1" - deep-equal "^1.0.1" - fs-extra "^8.1.0" - get-stdin "^6.0.0" - intercept-stdout "^0.1.2" - lodash "^4.17.15" - node-fetch "^2.1.2" - semver "^5.5.1" - tslib "^1.10.0" - uuid "~3.3.3" - -"@bfcomposer/bf-lu@^1.1.8", "@bfcomposer/bf-lu@https://botbuilder.myget.org/F/botbuilder-declarative/npm/@bfcomposer/bf-lu/-/@bfcomposer/bf-lu-1.1.8.tgz": - version "1.1.8" - resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/@bfcomposer/bf-lu/-/@bfcomposer/bf-lu-1.1.8.tgz#a3c7767de038025157bdc8cf9f56b393f1428fd4" - integrity sha1-o8d2feA4AlFXvcjPn1azk/FCj9Q= +"@bfcomposer/bf-lu@^1.2.5": + version "1.2.5" + resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/@bfcomposer/bf-lu/-/@bfcomposer/bf-lu-1.2.5.tgz#4d3707746518d013e19aa6f26467c94342874459" + integrity sha1-TTcHdGUY0BPhmqbyZGfJQ0KHRFk= dependencies: "@azure/cognitiveservices-luis-authoring" "3.0.1" "@azure/ms-rest-azure-js" "2.0.1" @@ -2166,27 +2144,6 @@ semver "^5.5.1" tslib "^1.10.0" -"@bfcomposer/lubuild@1.1.2-preview": - version "1.1.2-preview" - resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/@bfcomposer/lubuild/-/@bfcomposer/lubuild-1.1.2-preview.tgz#426e5e109c2d6752745dc363aa824a653a3757f7" - integrity sha1-Qm5eEJwtZ1J0XcNjqoJKZTo3V/c= - dependencies: - "@azure/ms-rest-js" "1.7.0" - "@bfcomposer/bf-lu" "1.1.2" - async-file "^2.0.2" - await-delay "^1.0.0" - chalk "^2.4.2" - cli-position "^1.0.1" - cli-table3 "^0.5.1" - fs-extra "^7.0.1" - latest-version "^5.1.0" - luis-apis "2.5.1" - minimist "^1.2.0" - read-text-file "^1.1.0" - semver "^6.0.0" - username "^4.1.0" - window-size "^1.1.1" - "@bfcomposer/monaco-editor-webpack-plugin@^1.7.2": version "1.7.2" resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/@bfcomposer/monaco-editor-webpack-plugin/-/@bfcomposer/monaco-editor-webpack-plugin-1.7.2.tgz#f00ac5cec496dc3d44713d9142956b3336033eab" @@ -2798,11 +2755,6 @@ resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz#8013f2af54a2b7d735f71560ff360d3a8176a87b" integrity sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q== -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" @@ -2913,13 +2865,6 @@ "@svgr/plugin-svgo" "^4.0.3" loader-utils "^1.1.0" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - "@testing-library/cypress@^5.2.1": version "5.2.1" resolved "https://registry.yarnpkg.com/@testing-library/cypress/-/cypress-5.2.1.tgz#fc9f40fe0de95b1f4c3888a908c432e11a092fe7" @@ -3901,6 +3846,22 @@ acorn@^7.1.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== +adaptive-expressions@4.8.0-preview.106823: + version "4.8.0-preview.106823" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/adaptive-expressions/-/adaptive-expressions-4.8.0-preview.106823.tgz#f5fe72797fd0c2a4eb12afaab85da0756e0ae4b5" + integrity sha1-9f5yeX/QwqTrEq+quF2gdW4K5LU= + dependencies: + "@microsoft/recognizers-text-data-types-timex-expression" "^1.1.4" + "@types/lru-cache" "^5.1.0" + "@types/moment-timezone" "^0.5.12" + "@types/xmldom" "^0.1.29" + antlr4ts "0.5.0-alpha.1" + jspath "^0.4.0" + lodash "^4.17.15" + lru-cache "^5.1.1" + moment "2.24.0" + moment-timezone "^0.5.25" + address@1.0.3, address@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" @@ -4285,13 +4246,6 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735" integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg== -async-file@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/async-file/-/async-file-2.0.2.tgz#02ad07856ac3717e836b20aec5a4cfe00c46df23" - integrity sha1-Aq0HhWrDcX6DayCuxaTP4AxG3yM= - dependencies: - rimraf "^2.5.2" - async-hook-jl@^1.7.6: version "1.7.6" resolved "https://registry.yarnpkg.com/async-hook-jl/-/async-hook-jl-1.7.6.tgz#4fd25c2f864dbaf279c610d73bf97b1b28595e68" @@ -4817,65 +4771,32 @@ boolbase@^1.0.0, boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -botbuilder-core@4.7.0-preview.93464: - version "4.7.0-preview.93464" - resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botbuilder-core/-/botbuilder-core-4.7.0-preview.93464.tgz#31b3a4d3c87ed82f89b993eebea684708eaca1d6" - integrity sha1-MbOk08h+2C+JuZPuvqaEcI6sodY= - dependencies: - assert "^1.4.1" - botframework-schema "4.7.0-preview.93464" - -botbuilder-core@4.8.0-preview.97252: - version "4.8.0-preview.97252" - resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botbuilder-core/-/botbuilder-core-4.8.0-preview.97252.tgz#eed85ff5c7136e5d6187d6627a27daf0f4187443" - integrity sha1-7thf9ccTbl1hh9Zieifa8PQYdEM= +botbuilder-core@4.8.0-preview.106823: + version "4.8.0-preview.106823" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botbuilder-core/-/botbuilder-core-4.8.0-preview.106823.tgz#ab1dec97e67ba0504669cc0eec4741a531d5b687" + integrity sha1-qx3sl+Z7oFBGacwO7EdBpTHVtoc= dependencies: assert "^1.4.1" - botframework-schema "4.8.0-preview.97252" - -botbuilder-lg@4.7.0-preview.93464: - version "4.7.0-preview.93464" - resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botbuilder-lg/-/botbuilder-lg-4.7.0-preview.93464.tgz#504c647aca501998a0bcf89da33612c808334825" - integrity sha1-UExkespQGZigvPidozYSyAgzSCU= - dependencies: - antlr4ts "0.5.0-alpha.1" - botbuilder-core "4.7.0-preview.93464" - botframework-expressions "4.7.0-preview.93464" - lodash "^4.17.11" - uuid "^3.3.3" + botframework-schema "4.8.0-preview.106823" -botbuilder-lg@^4.8.0-preview.97252: - version "4.8.0-preview.97252" - resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botbuilder-lg/-/botbuilder-lg-4.8.0-preview.97252.tgz#2bd92cf0009bae0de77d6695c206960b8028c40e" - integrity sha1-K9ks8ACbrg3nfWaVwgaWC4AoxA4= +botbuilder-lg@^4.8.0-preview.106823: + version "4.8.0-preview.106823" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botbuilder-lg/-/botbuilder-lg-4.8.0-preview.106823.tgz#9b144401c75493243def5c3c3347021c60dbbbbd" + integrity sha1-mxREAcdUkyQ971w8M0cCHGDbu70= dependencies: + adaptive-expressions "4.8.0-preview.106823" antlr4ts "0.5.0-alpha.1" - botbuilder-core "4.8.0-preview.97252" - botframework-expressions "4.8.0-preview.97252" + botbuilder-core "4.8.0-preview.106823" lodash "^4.17.11" uuid "^3.3.3" -botframework-expressions@4.7.0-preview.93464: - version "4.7.0-preview.93464" - resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botframework-expressions/-/botframework-expressions-4.7.0-preview.93464.tgz#576e6d48f7dd1c615d23894de758b7b5b4afc505" - integrity sha1-V25tSPfdHGFdI4lN51i3tbSvxQU= - dependencies: - "@microsoft/recognizers-text-data-types-timex-expression" "^1.1.4" - "@types/moment-timezone" "^0.5.12" - "@types/xmldom" "^0.1.29" - antlr4ts "0.5.0-alpha.1" - jspath "^0.4.0" - lodash "^4.17.15" - lru-cache "^5.1.1" - moment "2.24.0" - moment-timezone "^0.5.25" - -botframework-expressions@4.8.0-preview.97252: - version "4.8.0-preview.97252" - resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botframework-expressions/-/botframework-expressions-4.8.0-preview.97252.tgz#ea650dafd11b58eaceb735893d330454a5bd0495" - integrity sha1-6mUNr9EbWOrOtzWJPTMEVKW9BJU= +botframework-expressions@^4.8.0-preview.106476: + version "4.8.0-preview.106476" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botframework-expressions/-/botframework-expressions-4.8.0-preview.106476.tgz#984c155efbac673a0ad9945220691040b93996f9" + integrity sha1-mEwVXvusZzoK2ZRSIGkQQLk5lvk= dependencies: "@microsoft/recognizers-text-data-types-timex-expression" "^1.1.4" + "@types/lru-cache" "^5.1.0" "@types/moment-timezone" "^0.5.12" "@types/xmldom" "^0.1.29" antlr4ts "0.5.0-alpha.1" @@ -4885,15 +4806,10 @@ botframework-expressions@4.8.0-preview.97252: moment "2.24.0" moment-timezone "^0.5.25" -botframework-schema@4.7.0-preview.93464: - version "4.7.0-preview.93464" - resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botframework-schema/-/botframework-schema-4.7.0-preview.93464.tgz#ff6d11cde4e57e12632d18855e9ba31b541f9583" - integrity sha1-/20RzeTlfhJjLRiFXpujG1QflYM= - -botframework-schema@4.8.0-preview.97252: - version "4.8.0-preview.97252" - resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botframework-schema/-/botframework-schema-4.8.0-preview.97252.tgz#123ca59efd8efba94d2e339f9b571fd1969ef705" - integrity sha1-Ejylnv2O+6lNLjOfm1cf0Zae9wU= +botframework-schema@4.8.0-preview.106823: + version "4.8.0-preview.106823" + resolved "https://botbuilder.myget.org/F/botbuilder-v4-js-daily/npm/botframework-schema/-/botframework-schema-4.8.0-preview.106823.tgz#e9766d34c2e031e90d0950c51352c3848e368102" + integrity sha1-6XZtNMLgMekNCVDFE1LDhI42gQI= boxen@^1.2.1: version "1.3.0" @@ -5239,19 +5155,6 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - cachedir@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4" @@ -5689,7 +5592,7 @@ clone-deep@^0.2.4: lazy-cache "^1.0.3" shallow-clone "^0.1.2" -clone-response@1.0.2, clone-response@^1.0.2: +clone-response@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= @@ -7208,11 +7111,6 @@ default-require-extensions@^2.0.0: dependencies: strip-bom "^3.0.0" -defer-to-connect@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e" - integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw== - define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -8894,20 +8792,13 @@ get-stream@3.0.0, get-stream@^3.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== - dependencies: - pump "^3.0.0" - get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -9133,23 +9024,6 @@ got@^8.3.1: url-parse-lax "^3.0.0" url-to-options "^1.0.1" -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" @@ -9489,11 +9363,6 @@ http-cache-semantics@3.8.1: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== -http-cache-semantics@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5" - integrity sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew== - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -11042,13 +10911,6 @@ keyv@3.0.0: dependencies: json-buffer "3.0.0" -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -11112,13 +10974,6 @@ latest-version@^4.0.0: dependencies: package-json "^5.0.0" -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - lazy-ass@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" @@ -11620,16 +11475,11 @@ lowercase-keys@1.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: +lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -11953,7 +11803,7 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: +mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== @@ -12506,11 +12356,6 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -normalize-url@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.3.0.tgz#9c49e10fc1876aeb76dba88bf1b2b5d9fa57b2ee" - integrity sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ== - normalize-url@^4.5.0: version "4.5.0" resolved "https://botbuilder.myget.org/F/botbuilder-declarative/npm/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" @@ -12911,11 +12756,6 @@ p-cancelable@^0.4.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -13051,16 +12891,6 @@ package-json@^5.0.0: registry-url "^3.1.0" semver "^5.5.0" -package-json@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.4.0.tgz#4f626976604f4a9a41723ce1792b204a60b1b61e" - integrity sha512-bd1T8OBG7hcvMd9c/udgv6u5v9wISP3Oyl9Cm7Weop8EFwrtcQDnS2sb6zhwqus2WslSr5wSTIPiTTpxxmPm7Q== - dependencies: - got "^9.6.0" - registry-auth-token "^3.4.0" - registry-url "^5.0.0" - semver "^6.1.1" - pako@~1.0.5: version "1.0.10" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" @@ -14383,7 +14213,7 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -14762,7 +14592,7 @@ regexpu-core@^4.6.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" -registry-auth-token@^3.0.1, registry-auth-token@^3.3.2, registry-auth-token@^3.4.0: +registry-auth-token@^3.0.1, registry-auth-token@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== @@ -14777,13 +14607,6 @@ registry-url@^3.0.3, registry-url@^3.1.0: dependencies: rc "^1.0.1" -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - regjsgen@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" @@ -15002,7 +14825,7 @@ resolve@^1.13.1: dependencies: path-parse "^1.0.6" -responselike@1.0.2, responselike@^1.0.2: +responselike@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= @@ -15053,7 +14876,7 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: +rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -15224,7 +15047,7 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.0.0.tgz#05e359ee571e5ad7ed641a6eec1e547ba52dea65" integrity sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ== -semver@^6.1.0, semver@^6.1.1: +semver@^6.1.0: version "6.1.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== @@ -16360,11 +16183,6 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -16931,14 +16749,6 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -username@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/username/-/username-4.1.0.tgz#640f2ae13d17c51e7fb1d3517ad7c17fcd5d1670" - integrity sha512-sKh1KCsMfv8jPIC9VdeQhrNAgkl842jS/M74HQv7Byr0AMAwKZt8mLWX9DmtMeD8nQA3eKa10f5LbqlSVmokMg== - dependencies: - execa "^1.0.0" - mem "^4.0.0" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -16981,7 +16791,7 @@ uuid@^3.0.0, uuid@^3.0.1, uuid@^3.2.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== -uuid@^3.3.3, uuid@~3.3.3: +uuid@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== @@ -17598,7 +17408,7 @@ widest-line@^2.0.0, widest-line@^2.0.1: dependencies: string-width "^2.1.1" -window-size@^1.1.0, window-size@^1.1.1: +window-size@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/window-size/-/window-size-1.1.1.tgz#9858586580ada78ab26ecd6978a6e03115c1af20" integrity sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==