From 2a3e3603671104c47e056bf0fb48675837a71142 Mon Sep 17 00:00:00 2001 From: hond Date: Fri, 25 Sep 2020 16:48:31 +0800 Subject: [PATCH 01/17] change the appsetting parse logic --- .../Memory/Scopes/SettingsMemoryScope.cs | 165 ++++++++++-------- 1 file changed, 89 insertions(+), 76 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs index 6b8747cd4b..3e0ab879de 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs @@ -73,91 +73,104 @@ protected static Dictionary LoadSettings(IConfiguration configur if (configuration != null) { // load configuration into settings dictionary - foreach (var child in configuration.AsEnumerable()) + var root = ConvertFlattenSettingToNode(configuration.AsEnumerable().ToList()); + var result = new Dictionary(); + foreach (var child in root.Children) { - var keys = child.Key.Split(':'); + result.Add(child.Value, ConvertNodeToObject(child)); + } + + return result; + } + + return settings; + } - // initialize all parts of path up to the key/value we are attempting to set - dynamic parent = null; - var parentKey = string.Empty; - dynamic node = settings; - for (var i = 0; i < keys.Length - 1; i++) + private static Node ConvertFlattenSettingToNode(List> kvs) + { + var root = new Node(null); + foreach (var child in kvs) + { + var key = child.Key; + var value = child.Value; + var keyChain = key.Split(':'); + var currentNode = root; + foreach (var item in keyChain) + { + var matchIten = currentNode.Children.FirstOrDefault(u => u?.Value == item); + if (matchIten == null) { - var key = keys[i]; - if (!node.ContainsKey(key)) - { - node[key] = new Dictionary(); - } - - parent = node; - parentKey = key; - node = node[key]; - } + // Remove all the leaf children + currentNode.Children.RemoveAll(u => u.Children.Count == 0); - if (child.Value != null) + // Append new child into current node + var node = new Node(item); + currentNode.Children.Add(node); + currentNode = node; + } + else { - var lastKey = keys.Last(); - var hasIndex = int.TryParse(lastKey, out var index); - if (hasIndex) - { - // if node is dictionary, and has zero elements then convert to array - var dict = node as IDictionary; - if (dict != null && dict.Count == 0) - { - // replace parent with array - parent[parentKey] = new object[index + 1]; - node = parent[parentKey]; - } - - // if it's still a dictionary that's because we have a non-number value in it - if (dict != null && dict.Count > 0) - { - // store using key as string - node[lastKey] = child.Value; - } - else - { - // it's an array - var arr = (object[])node; - if (arr.Length < index + 1) - { - // auto-resize to be bigger if we need to - // NOTE: keys seem to be reverse indexed, which means we should have already "right-sized" the array - Array.Resize(ref arr, index + 1); - parent[parentKey] = arr; - node = arr; - } - - // store using keyValue as an index - arr[index] = child.Value; - } - } - else - { - if (node is object[] arr) - { - // we got a non-number key but we have building an array, convert the array to dictionary - // NOTE: keys is sorting reverse which means we should we always start out with a dictionary for nonnumberic keys - var dict = new Dictionary(); - for (var i = 0; i < arr.Length; i++) - { - if (arr[i] != null) - { - dict[i.ToString(CultureInfo.InvariantCulture)] = arr[i]; - } - } - - parent[parentKey] = dict; - node = dict; - } - - node[lastKey] = child.Value; - } + currentNode = matchIten; } } + + currentNode.Children.Add(new Node(value)); } - return settings; + return root; + } + + private static object ConvertNodeToObject(Node node) + { + if (node.Children.Count == 1 && node.Children[0].Children.Count == 0) + { + return node.Children[0].Value; + } + + if (node.Children.All(u => int.TryParse(u.Value, out _))) + { + // all children are int number + var pairs = new List>(); + node.Children.ForEach(u => pairs.Add(new Tuple(int.Parse(u.Value, CultureInfo.InvariantCulture), ConvertNodeToObject(u)))); + var maxIndex = pairs.Select(u => u.Item1).Max(); + var list = new object[maxIndex + 1]; + foreach (var pair in pairs) + { + list[pair.Item1] = pair.Item2; + } + + return list; + } + + // convert all children into dictionary + var result = new Dictionary(); + foreach (var child in node.Children) + { + result.Add(child.Value, ConvertNodeToObject(child)); + } + + return result; + } + + /// + /// The setting node. + /// + private class Node + { + public Node(string value) + { + Value = value; + } + + /// + /// Gets or sets value of the node. If the node is not leaf, value presents the current path. + /// + public string Value { get; set; } + + /// + /// Gets or sets children of the node. + /// + public List Children { get; set; } = new List(); } } } From bdc47b15f0e8967ab375d1b391e5a633b36c235a Mon Sep 17 00:00:00 2001 From: hond Date: Fri, 25 Sep 2020 17:02:20 +0800 Subject: [PATCH 02/17] typo --- .../Memory/Scopes/SettingsMemoryScope.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs index 3e0ab879de..0853cc96c5 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs @@ -74,13 +74,10 @@ protected static Dictionary LoadSettings(IConfiguration configur { // load configuration into settings dictionary var root = ConvertFlattenSettingToNode(configuration.AsEnumerable().ToList()); - var result = new Dictionary(); foreach (var child in root.Children) { - result.Add(child.Value, ConvertNodeToObject(child)); + settings.Add(child.Value, ConvertNodeToObject(child)); } - - return result; } return settings; From 095f8e8b06129f4898b1db28544116a18030be9d Mon Sep 17 00:00:00 2001 From: hond Date: Fri, 25 Sep 2020 17:09:21 +0800 Subject: [PATCH 03/17] refine --- .../Memory/Scopes/SettingsMemoryScope.cs | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs index 0853cc96c5..3101fdac16 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs @@ -74,10 +74,7 @@ protected static Dictionary LoadSettings(IConfiguration configur { // load configuration into settings dictionary var root = ConvertFlattenSettingToNode(configuration.AsEnumerable().ToList()); - foreach (var child in root.Children) - { - settings.Add(child.Value, ConvertNodeToObject(child)); - } + root.Children.ForEach(u => settings.Add(u.Value, ConvertNodeToObject(u))); } return settings; @@ -88,14 +85,12 @@ private static Node ConvertFlattenSettingToNode(List u?.Value == item); - if (matchIten == null) + var matchItem = currentNode.Children.FirstOrDefault(u => u?.Value == item); + if (matchItem == null) { // Remove all the leaf children currentNode.Children.RemoveAll(u => u.Children.Count == 0); @@ -107,11 +102,11 @@ private static Node ConvertFlattenSettingToNode(List int.TryParse(u.Value, out _))) + if (node.Children.All(u => int.TryParse(u.Value, out var number) && number >= 0)) { - // all children are int number + // all children are int number, treat it as Array var pairs = new List>(); node.Children.ForEach(u => pairs.Add(new Tuple(int.Parse(u.Value, CultureInfo.InvariantCulture), ConvertNodeToObject(u)))); var maxIndex = pairs.Select(u => u.Item1).Max(); @@ -139,12 +135,9 @@ private static object ConvertNodeToObject(Node node) return list; } - // convert all children into dictionary + // Convert all children into dictionary var result = new Dictionary(); - foreach (var child in node.Children) - { - result.Add(child.Value, ConvertNodeToObject(child)); - } + node.Children.ForEach(u => result.Add(u.Value, ConvertNodeToObject(u))); return result; } From c59d9f043b50407e8a725f47f045786c99ef1f25 Mon Sep 17 00:00:00 2001 From: hond Date: Fri, 25 Sep 2020 17:54:40 +0800 Subject: [PATCH 04/17] add test --- .../MemoryScopeTests.cs | 4 ++++ .../test.settings.json | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs index 550c5bc884..00891d9e13 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs @@ -455,6 +455,10 @@ public async Task SettingsMemoryScopeTest() .AssertReply("three") .Send("settings.fakeArray.zzz") .AssertReply("cat") + .Send("settings.myArray[0]") + .AssertReply("e1") + .Send("settings.myArray[1].obj") + .AssertReply("e2") .StartTestAsync(); } diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json b/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json index 7d1c6334a6..a91e2c9e25 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json +++ b/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json @@ -13,5 +13,11 @@ "zzz": "cat", "2": "two", "3": "three" - } + }, + "myarray": [ + "e1", + { + "obj": "e2" + } + ] } From e7544607341481b222dd8b4c603f80fd4a28273f Mon Sep 17 00:00:00 2001 From: Hongyang Date: Sun, 27 Sep 2020 20:19:40 +0800 Subject: [PATCH 05/17] add more tests --- .../MemoryScopeTests.cs | 20 +++++++++++++++++++ .../test.settings.json | 15 ++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs index 00891d9e13..2644a280ed 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs @@ -459,6 +459,26 @@ public async Task SettingsMemoryScopeTest() .AssertReply("e1") .Send("settings.myArray[1].obj") .AssertReply("e2") + .Send("settings.nestedArray[0][0]") + .AssertReply("a") + .Send("settings.nestedArray[0][1]") + .AssertReply("b") + .Send("settings.nestedArray[1][0]") + .AssertReply("c") + .Send("settings.nestedArray[1][1]") + .AssertReply("d") + .Send("settings.numberArray[0]") + .AssertReply("0") + .Send("settings.numberArray[1]") + .AssertReply("1") + .Send("settings.sequentialObjectArray[0][0]") // object with number index would be converted into array + .AssertReply("a") + .Send("settings.sequentialObjectArray[0][1]") + .AssertReply("b") + .Send("settings.sequentialObjectArray[1][0]") + .AssertReply("c") + .Send("settings.sequentialObjectArray[1][1]") + .AssertReply("d") .StartTestAsync(); } diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json b/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json index a91e2c9e25..3414122ace 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json +++ b/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json @@ -19,5 +19,20 @@ { "obj": "e2" } + ], + "nestedArray": [ + [ "a", "b" ], + [ "c", "d" ] + ], + "numberArray": [ 0, 1, 2 ], + "sequentialObjectArray": [ + { + "0": "a", + "1": "b" + }, + { + "0": "c", + "1": "d" + } ] } From 2f0478e40feb5b4e627aa64119c129e0e47d9f5a Mon Sep 17 00:00:00 2001 From: hond Date: Mon, 28 Sep 2020 14:58:11 +0800 Subject: [PATCH 06/17] add more comments --- .../Memory/Scopes/SettingsMemoryScope.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs index 3101fdac16..50b3ab57d1 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs @@ -80,6 +80,35 @@ protected static Dictionary LoadSettings(IConfiguration configur return settings; } + /// + /// Generate a node tree with the flatten settings. + /// For example: + /// { + /// "array":["item1", "item2"], + /// "object":{"array":["item1"], "2":"numberkey"} + /// } + /// + /// Would generate a flatten settings like: + /// array:0 item1 + /// array:1 item2 + /// object:array:0 item1 + /// object:2 numberkey + /// + /// After Converting it from flatten settings into node tree, would get: + /// + /// null + /// | | + /// array object + /// | | | | + /// 0 1 array 2 + /// | | | | + /// item1 item2 0 numberkey + /// | + /// item1 + /// The result is a Tree. + /// + /// Configurations with key value pairs. + /// The root node of the tree. private static Node ConvertFlattenSettingToNode(List> kvs) { var root = new Node(null); From 1969743a0c9bf7495c1e2130d642a0ad5c1f1c15 Mon Sep 17 00:00:00 2001 From: hond Date: Tue, 29 Sep 2020 15:32:32 +0800 Subject: [PATCH 07/17] refine code --- .../Memory/Scopes/SettingsMemoryScope.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs index 50b3ab57d1..1b23014841 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs @@ -143,7 +143,7 @@ private static Node ConvertFlattenSettingToNode(List pairs.Add(new Tuple(int.Parse(u.Value, CultureInfo.InvariantCulture), ConvertNodeToObject(u)))); var maxIndex = pairs.Select(u => u.Item1).Max(); var list = new object[maxIndex + 1]; - foreach (var pair in pairs) - { - list[pair.Item1] = pair.Item2; - } + pairs.ForEach(p => list[p.Item1] = p.Item2); return list; } @@ -176,6 +173,9 @@ private static object ConvertNodeToObject(Node node) /// private class Node { + /// + /// Initializes a new instance of the class. + /// public Node(string value) { Value = value; From d8010d54a3ce289bd20143b34ac2e6b1a2d1ec5b Mon Sep 17 00:00:00 2001 From: hond Date: Tue, 13 Oct 2020 17:18:54 +0800 Subject: [PATCH 08/17] retrigger From 5968f1a58fa6287d6ecfe04c61ac4cfc45dc6c54 Mon Sep 17 00:00:00 2001 From: hond Date: Tue, 13 Oct 2020 17:38:13 +0800 Subject: [PATCH 09/17] retrigger From 44f3417cea564f25eab75e86eaa8a07c36c87cef Mon Sep 17 00:00:00 2001 From: hond Date: Wed, 14 Oct 2020 14:32:39 +0800 Subject: [PATCH 10/17] Make languagePolicy a property --- .../Schemas/Microsoft.Test.Script.schema | 6 ++++++ .../TestScript.cs | 18 ++++++++++++++---- .../MultiLanguageRecognizerTests.cs | 3 +-- .../TestUtils.cs | 4 ++-- ...geRecognizerTest_LanguagePolicy.test.dialog | 3 +++ 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/Schemas/Microsoft.Test.Script.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/Schemas/Microsoft.Test.Script.schema index fed15cbf4c..050367c59b 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/Schemas/Microsoft.Test.Script.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/Schemas/Microsoft.Test.Script.schema @@ -10,6 +10,12 @@ "title": "Dialog", "description": "The root dialog to execute the test script against." }, + "languagePolicy": { + "$kind": "Microsoft.LanguagePolicy", + "type": "object", + "title": "Language policy", + "description": "Defines fall back languages to try per user input language." + }, "description": { "type": "string", "title": "Description", diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/TestScript.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/TestScript.cs index 65311ae8fe..d29306689f 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/TestScript.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/TestScript.cs @@ -75,6 +75,17 @@ public TestScript() [JsonProperty("locale")] public string Locale { get; set; } = "en-us"; + /// + /// Gets or sets the language policy. + /// + /// + /// the language policy. + /// + [JsonProperty("languagePolicy")] +#pragma warning disable CA2227 // Collection properties should be read only + public LanguagePolicy LanguagePolicy { get; set; } +#pragma warning restore CA2227 // Collection properties should be read only + /// /// Gets the mock data for Microsoft.HttpRequest. /// @@ -143,9 +154,8 @@ public TestAdapter DefaultTestAdapter(ResourceExplorer resourceExplorer, [Caller /// Name of the test. /// The bot logic. /// optional test adapter. - /// The default language policy. /// Runs the exchange between the user and the bot. - public async Task ExecuteAsync(ResourceExplorer resourceExplorer, [CallerMemberName] string testName = null, BotCallbackHandler callback = null, TestAdapter adapter = null, LanguagePolicy languagePolicy = null) + public async Task ExecuteAsync(ResourceExplorer resourceExplorer, [CallerMemberName] string testName = null, BotCallbackHandler callback = null, TestAdapter adapter = null) { if (adapter == null) { @@ -186,9 +196,9 @@ await adapter.ProcessActivityAsync( .UseResourceExplorer(resourceExplorer) .UseLanguageGeneration(); - if (languagePolicy != null) + if (LanguagePolicy != null) { - dm.UseLanguagePolicy(languagePolicy); + dm.UseLanguagePolicy(LanguagePolicy); } foreach (var testAction in Script) diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/MultiLanguageRecognizerTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/MultiLanguageRecognizerTests.cs index af4215eae2..bc24810ff0 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/MultiLanguageRecognizerTests.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/MultiLanguageRecognizerTests.cs @@ -50,8 +50,7 @@ public async Task MultiLanguageRecognizerTest_DefaultFallback() [Fact] public async Task MultiLanguageRecognizerTest_LanguagePolicy() { - var languagePolicy = new LanguagePolicy("en-gb"); - await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer, languagePolicy: languagePolicy); + await TestUtils.RunTestScript(_resourceExplorerFixture.ResourceExplorer); } } } diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/TestUtils.cs b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/TestUtils.cs index 9e4c281fbf..35d412cf83 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/TestUtils.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/TestUtils.cs @@ -22,12 +22,12 @@ public static IEnumerable GetTestScripts(string relativeFolder) return Directory.EnumerateFiles(testFolder, "*.test.dialog", SearchOption.AllDirectories).Select(s => new object[] { Path.GetFileName(s) }).ToArray(); } - public static async Task RunTestScript(ResourceExplorer resourceExplorer, string resourceId = null, IConfiguration configuration = null, [CallerMemberName] string testName = null, LanguagePolicy languagePolicy = null) + public static async Task RunTestScript(ResourceExplorer resourceExplorer, string resourceId = null, IConfiguration configuration = null, [CallerMemberName] string testName = null) { var script = resourceExplorer.LoadType(resourceId ?? $"{testName}.test.dialog"); script.Configuration = configuration ?? new ConfigurationBuilder().AddInMemoryCollection().Build(); script.Description = script.Description ?? resourceId; - await script.ExecuteAsync(testName: testName, resourceExplorer: resourceExplorer, languagePolicy: languagePolicy).ConfigureAwait(false); + await script.ExecuteAsync(testName: testName, resourceExplorer: resourceExplorer).ConfigureAwait(false); } public static string GetProjectPath() diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/MultiLanguageRecognizerTests/MultiLanguageRecognizerTest_LanguagePolicy.test.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/MultiLanguageRecognizerTests/MultiLanguageRecognizerTest_LanguagePolicy.test.dialog index 8e96b728ea..8d9bc1c97e 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/MultiLanguageRecognizerTests/MultiLanguageRecognizerTest_LanguagePolicy.test.dialog +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/MultiLanguageRecognizerTests/MultiLanguageRecognizerTest_LanguagePolicy.test.dialog @@ -93,6 +93,9 @@ ], "defaultResultProperty": "dialog.result" }, + "languagePolicy": { + "": [ "en-gb", "" ] + }, "locale": "", "script": [ { From 27bdc03d51b6adea43973e20f35c41b51a1a9e41 Mon Sep 17 00:00:00 2001 From: hond Date: Wed, 14 Oct 2020 14:44:05 +0800 Subject: [PATCH 11/17] revert --- .../Memory/Scopes/SettingsMemoryScope.cs | 186 ++++++++---------- .../MemoryScopeTests.cs | 24 --- .../test.settings.json | 23 +-- 3 files changed, 78 insertions(+), 155 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs index 1b23014841..6b8747cd4b 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs/Memory/Scopes/SettingsMemoryScope.cs @@ -73,123 +73,91 @@ protected static Dictionary LoadSettings(IConfiguration configur if (configuration != null) { // load configuration into settings dictionary - var root = ConvertFlattenSettingToNode(configuration.AsEnumerable().ToList()); - root.Children.ForEach(u => settings.Add(u.Value, ConvertNodeToObject(u))); - } - - return settings; - } - - /// - /// Generate a node tree with the flatten settings. - /// For example: - /// { - /// "array":["item1", "item2"], - /// "object":{"array":["item1"], "2":"numberkey"} - /// } - /// - /// Would generate a flatten settings like: - /// array:0 item1 - /// array:1 item2 - /// object:array:0 item1 - /// object:2 numberkey - /// - /// After Converting it from flatten settings into node tree, would get: - /// - /// null - /// | | - /// array object - /// | | | | - /// 0 1 array 2 - /// | | | | - /// item1 item2 0 numberkey - /// | - /// item1 - /// The result is a Tree. - /// - /// Configurations with key value pairs. - /// The root node of the tree. - private static Node ConvertFlattenSettingToNode(List> kvs) - { - var root = new Node(null); - foreach (var child in kvs) - { - var keyChain = child.Key.Split(':'); - var currentNode = root; - foreach (var item in keyChain) + foreach (var child in configuration.AsEnumerable()) { - var matchItem = currentNode.Children.FirstOrDefault(u => u?.Value == item); - if (matchItem == null) - { - // Remove all the leaf children - currentNode.Children.RemoveAll(u => u.Children.Count == 0); + var keys = child.Key.Split(':'); - // Append new child into current node - var node = new Node(item); - currentNode.Children.Add(node); - currentNode = node; + // initialize all parts of path up to the key/value we are attempting to set + dynamic parent = null; + var parentKey = string.Empty; + dynamic node = settings; + for (var i = 0; i < keys.Length - 1; i++) + { + var key = keys[i]; + if (!node.ContainsKey(key)) + { + node[key] = new Dictionary(); + } + + parent = node; + parentKey = key; + node = node[key]; } - else + + if (child.Value != null) { - currentNode = matchItem; + var lastKey = keys.Last(); + var hasIndex = int.TryParse(lastKey, out var index); + if (hasIndex) + { + // if node is dictionary, and has zero elements then convert to array + var dict = node as IDictionary; + if (dict != null && dict.Count == 0) + { + // replace parent with array + parent[parentKey] = new object[index + 1]; + node = parent[parentKey]; + } + + // if it's still a dictionary that's because we have a non-number value in it + if (dict != null && dict.Count > 0) + { + // store using key as string + node[lastKey] = child.Value; + } + else + { + // it's an array + var arr = (object[])node; + if (arr.Length < index + 1) + { + // auto-resize to be bigger if we need to + // NOTE: keys seem to be reverse indexed, which means we should have already "right-sized" the array + Array.Resize(ref arr, index + 1); + parent[parentKey] = arr; + node = arr; + } + + // store using keyValue as an index + arr[index] = child.Value; + } + } + else + { + if (node is object[] arr) + { + // we got a non-number key but we have building an array, convert the array to dictionary + // NOTE: keys is sorting reverse which means we should we always start out with a dictionary for nonnumberic keys + var dict = new Dictionary(); + for (var i = 0; i < arr.Length; i++) + { + if (arr[i] != null) + { + dict[i.ToString(CultureInfo.InvariantCulture)] = arr[i]; + } + } + + parent[parentKey] = dict; + node = dict; + } + + node[lastKey] = child.Value; + } } } - - currentNode.Children.Add(new Node(child.Value)); } - return root; - } - - private static object ConvertNodeToObject(Node node) - { - // If the child is leaf node, return its value directly. - if (node.Children.Count == 1 && node.Children[0].Children.Count == 0) - { - return node.Children[0].Value; - } - - if (node.Children.All(u => int.TryParse(u.Value, out var number) && number >= 0)) - { - // all children are int number, treat it as Array - var pairs = new List>(); - node.Children.ForEach(u => pairs.Add(new Tuple(int.Parse(u.Value, CultureInfo.InvariantCulture), ConvertNodeToObject(u)))); - var maxIndex = pairs.Select(u => u.Item1).Max(); - var list = new object[maxIndex + 1]; - pairs.ForEach(p => list[p.Item1] = p.Item2); - - return list; - } - - // Convert all children into dictionary - var result = new Dictionary(); - node.Children.ForEach(u => result.Add(u.Value, ConvertNodeToObject(u))); - - return result; - } - - /// - /// The setting node. - /// - private class Node - { - /// - /// Initializes a new instance of the class. - /// - public Node(string value) - { - Value = value; - } - - /// - /// Gets or sets value of the node. If the node is not leaf, value presents the current path. - /// - public string Value { get; set; } - - /// - /// Gets or sets children of the node. - /// - public List Children { get; set; } = new List(); + return settings; } } } diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs index 2644a280ed..550c5bc884 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Tests/MemoryScopeTests.cs @@ -455,30 +455,6 @@ public async Task SettingsMemoryScopeTest() .AssertReply("three") .Send("settings.fakeArray.zzz") .AssertReply("cat") - .Send("settings.myArray[0]") - .AssertReply("e1") - .Send("settings.myArray[1].obj") - .AssertReply("e2") - .Send("settings.nestedArray[0][0]") - .AssertReply("a") - .Send("settings.nestedArray[0][1]") - .AssertReply("b") - .Send("settings.nestedArray[1][0]") - .AssertReply("c") - .Send("settings.nestedArray[1][1]") - .AssertReply("d") - .Send("settings.numberArray[0]") - .AssertReply("0") - .Send("settings.numberArray[1]") - .AssertReply("1") - .Send("settings.sequentialObjectArray[0][0]") // object with number index would be converted into array - .AssertReply("a") - .Send("settings.sequentialObjectArray[0][1]") - .AssertReply("b") - .Send("settings.sequentialObjectArray[1][0]") - .AssertReply("c") - .Send("settings.sequentialObjectArray[1][1]") - .AssertReply("d") .StartTestAsync(); } diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json b/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json index 3414122ace..7d1c6334a6 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json +++ b/tests/Microsoft.Bot.Builder.Dialogs.Tests/test.settings.json @@ -13,26 +13,5 @@ "zzz": "cat", "2": "two", "3": "three" - }, - "myarray": [ - "e1", - { - "obj": "e2" - } - ], - "nestedArray": [ - [ "a", "b" ], - [ "c", "d" ] - ], - "numberArray": [ 0, 1, 2 ], - "sequentialObjectArray": [ - { - "0": "a", - "1": "b" - }, - { - "0": "c", - "1": "d" - } - ] + } } From 3c64026f24fb4b3183f0458cce401d1991066c02 Mon Sep 17 00:00:00 2001 From: hond Date: Wed, 14 Oct 2020 16:34:23 +0800 Subject: [PATCH 12/17] update schema --- .../testbot.schema | 2009 +++++++------- tests/tests.schema | 2342 ++++++++--------- 2 files changed, 2125 insertions(+), 2226 deletions(-) diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema index 17ac9f84b7..796ed1680d 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema @@ -4,9 +4,6 @@ "title": "Component kinds", "description": "These are all of the kinds that can be created by the loader.", "oneOf": [ - { - "$ref": "#/definitions/AzureQueues.ContinueConversationLater" - }, { "$ref": "#/definitions/Microsoft.ActivityTemplate" }, @@ -49,6 +46,9 @@ { "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" }, + { + "$ref": "#/definitions/Microsoft.ContinueConversationLater" + }, { "$ref": "#/definitions/Microsoft.ContinueLoop" }, @@ -447,81 +447,6 @@ } ], "definitions": { - "AzureQueues.ContinueConversationLater": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue Conversation Later (Queue)", - "description": "Continue conversation at later time (via Azure Storage Queue).", - "type": "object", - "required": [ - "date", - "connectionString", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "date": { - "$ref": "#/definitions/stringExpression", - "title": "Date", - "description": "Date in the future as a ISO string when the conversation should continue.", - "examples": [ - "=addHours(utcNow(), 1)" - ] - }, - "connectionString": { - "$ref": "#/definitions/stringExpression", - "title": "Connection String", - "description": "Connection string for connecting to an Azure Storage account.", - "examples": [ - "=settings.connectionString" - ] - }, - "queueName": { - "$ref": "#/definitions/stringExpression", - "title": "Queue Name", - "description": "Name of the queue that your azure function is bound to.", - "examples": [ - "activities" - ], - "default": "activities" - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "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": "AzureQueues.ContinueConversationLater" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, "Microsoft.ActivityTemplate": { "$role": "implements(Microsoft.IActivityTemplate)", "title": "Microsoft ActivityTemplate", @@ -624,7 +549,239 @@ "description": "Schema to fill in.", "anyOf": [ { - "$ref": "#/definitions/schema" + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "type": "integer", + "minimum": 0, + "default": 0 + }, + "simpleTypes": { + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "stringArray": { + "type": "array", + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + } + }, + "type": [ + "object", + "boolean" + ], + "properties": { + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "writeOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minLength": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + } + ], + "default": true + }, + "maxItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "maxProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "required": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" + }, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "definitions": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "patternProperties": { + "type": "object", + "propertyNames": { + "format": "regex" + }, + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" + } + ] + } + }, + "propertyNames": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "const": true, + "enum": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": true + }, + "type": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" + }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "contentEncoding": { + "type": "string" + }, + "if": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "then": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "else": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "allOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "anyOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "oneOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "not": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "default": true }, { "type": "string", @@ -779,7 +936,7 @@ "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", "oneOf": [ { - "$ref": "#/definitions/botframework.json/definitions/Attachment", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", "title": "Object", "description": "Attachment object." }, @@ -794,7 +951,7 @@ "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", "oneOf": [ { - "$ref": "#/definitions/botframework.json/definitions/Attachment", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", "title": "Object", "description": "Attachment object." }, @@ -1399,7 +1556,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", "title": "Action", "description": "Card action for the choice." }, @@ -1851,7 +2008,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", "title": "Action", "description": "Card action for the choice." }, @@ -2023,6 +2180,64 @@ } } }, + "Microsoft.ContinueConversationLater": { + "$role": "implements(Microsoft.IDialog)", + "title": "Continue Conversation Later (Queue)", + "description": "Continue conversation at later time (via Azure Storage Queue).", + "type": "object", + "required": [ + "date", + "connectionString", + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "date": { + "$ref": "#/definitions/stringExpression", + "title": "Date", + "description": "Date in the future as a ISO string when the conversation should continue.", + "examples": [ + "=addHours(utcNow(), 1)" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Value to send in the activity.value." + }, + "$kind": { + "title": "Kind of dialog object", + "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.ContinueConversationLater" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, "Microsoft.ContinueLoop": { "$role": "implements(Microsoft.IDialog)", "title": "Continue Loop", @@ -3478,58 +3693,561 @@ "type": "string" }, { - "$ref": "#/definitions/botframework.json/definitions/Activity", "required": [ "type" - ] - }, - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - } - ] - }, - "Microsoft.IDialog": { - "title": "Microsoft Dialogs", - "description": "Components which derive from Dialog", - "$role": "interface", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/AzureQueues.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.Test.AssertCondition" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "$ref": "#/definitions/Microsoft.CancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.ContinueLoop" - }, - { + ], + "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", + "title": "Activity", + "type": "object", + "properties": { + "type": { + "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", + "type": "string", + "title": "type" + }, + "id": { + "description": "Contains an ID that uniquely identifies the activity on the channel.", + "type": "string", + "title": "id" + }, + "timestamp": { + "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", + "type": "string", + "format": "date-time", + "title": "timestamp" + }, + "localTimestamp": { + "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", + "type": "string", + "format": "date-time", + "title": "localTimestamp" + }, + "localTimezone": { + "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", + "type": "string", + "title": "localTimezone" + }, + "serviceUrl": { + "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", + "type": "string", + "title": "serviceUrl" + }, + "channelId": { + "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", + "type": "string", + "title": "channelId" + }, + "from": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Identifies the sender of the message.", + "title": "from" + }, + "conversation": { + "description": "Identifies the conversation to which the activity belongs.", + "title": "conversation", + "type": "object", + "required": [ + "conversationType", + "id", + "isGroup", + "name" + ], + "properties": { + "isGroup": { + "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", + "type": "boolean", + "title": "isGroup" + }, + "conversationType": { + "description": "Indicates the type of the conversation in channels that distinguish between conversation types", + "type": "string", + "title": "conversationType" + }, + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "enum": [ + "bot", + "user" + ], + "type": "string", + "title": "role" + } + } + }, + "recipient": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Identifies the recipient of the message.", + "title": "recipient" + }, + "textFormat": { + "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", + "type": "string", + "title": "textFormat" + }, + "attachmentLayout": { + "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", + "type": "string", + "title": "attachmentLayout" + }, + "membersAdded": { + "description": "The collection of members added to the conversation.", + "type": "array", + "title": "membersAdded", + "items": { + "description": "Channel account information needed to route a message", + "title": "ChannelAccount", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "type": "string", + "title": "role" + } + } + } + }, + "membersRemoved": { + "description": "The collection of members removed from the conversation.", + "type": "array", + "title": "membersRemoved", + "items": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items" + } + }, + "reactionsAdded": { + "description": "The collection of reactions added to the conversation.", + "type": "array", + "title": "reactionsAdded", + "items": { + "description": "Message reaction object", + "title": "MessageReaction", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Message reaction type. Possible values include: 'like', 'plusOne'", + "type": "string", + "title": "type" + } + } + } + }, + "reactionsRemoved": { + "description": "The collection of reactions removed from the conversation.", + "type": "array", + "title": "reactionsRemoved", + "items": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/reactionsAdded/items" + } + }, + "topicName": { + "description": "The updated topic name of the conversation.", + "type": "string", + "title": "topicName" + }, + "historyDisclosed": { + "description": "Indicates whether the prior history of the channel is disclosed.", + "type": "boolean", + "title": "historyDisclosed" + }, + "locale": { + "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", + "type": "string", + "title": "locale" + }, + "text": { + "description": "The text content of the message.", + "type": "string", + "title": "text" + }, + "speak": { + "description": "The text to speak.", + "type": "string", + "title": "speak" + }, + "inputHint": { + "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", + "type": "string", + "title": "inputHint" + }, + "summary": { + "description": "The text to display if the channel cannot render cards.", + "type": "string", + "title": "summary" + }, + "suggestedActions": { + "description": "The suggested actions for the activity.", + "title": "suggestedActions", + "type": "object", + "required": [ + "actions", + "to" + ], + "properties": { + "to": { + "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", + "type": "array", + "title": "to", + "items": { + "title": "Id", + "description": "Id of recipient.", + "type": "string" + } + }, + "actions": { + "description": "Actions that can be shown to the user", + "type": "array", + "title": "actions", + "items": { + "description": "A clickable action", + "title": "CardAction", + "type": "object", + "required": [ + "title", + "type", + "value" + ], + "properties": { + "type": { + "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", + "type": "string", + "title": "type" + }, + "title": { + "description": "Text description which appears on the button", + "type": "string", + "title": "title" + }, + "image": { + "description": "Image URL which will appear on the button, next to text label", + "type": "string", + "title": "image" + }, + "text": { + "description": "Text for this action", + "type": "string", + "title": "text" + }, + "displayText": { + "description": "(Optional) text to display in the chat feed if the button is clicked", + "type": "string", + "title": "displayText" + }, + "value": { + "description": "Supplementary parameter for action. Content of this property depends on the ActionType", + "title": "value" + }, + "channelData": { + "description": "Channel-specific data associated with this action", + "title": "channelData" + } + } + } + } + } + }, + "attachments": { + "description": "Attachments", + "type": "array", + "title": "attachments", + "items": { + "description": "An attachment within an activity", + "title": "Attachment", + "type": "object", + "required": [ + "contentType" + ], + "properties": { + "contentType": { + "description": "mimetype/Contenttype for the file", + "type": "string", + "title": "contentType" + }, + "contentUrl": { + "description": "Content Url", + "type": "string", + "title": "contentUrl" + }, + "content": { + "type": "object", + "description": "Embedded content", + "title": "content" + }, + "name": { + "description": "(OPTIONAL) The name of the attachment", + "type": "string", + "title": "name" + }, + "thumbnailUrl": { + "description": "(OPTIONAL) Thumbnail associated with attachment", + "type": "string", + "title": "thumbnailUrl" + } + } + } + }, + "entities": { + "description": "Represents the entities that were mentioned in the message.", + "type": "array", + "title": "entities", + "items": { + "description": "Metadata object pertaining to an activity", + "title": "Entity", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Type of this entity (RFC 3987 IRI)", + "type": "string", + "title": "type" + } + } + } + }, + "channelData": { + "description": "Contains channel-specific content.", + "title": "channelData" + }, + "action": { + "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", + "type": "string", + "title": "action" + }, + "replyToId": { + "description": "Contains the ID of the message to which this message is a reply.", + "type": "string", + "title": "replyToId" + }, + "label": { + "description": "A descriptive label for the activity.", + "type": "string", + "title": "label" + }, + "valueType": { + "description": "The type of the activity's value object.", + "type": "string", + "title": "valueType" + }, + "value": { + "description": "A value that is associated with the activity.", + "title": "value" + }, + "name": { + "description": "The name of the operation associated with an invoke or event activity.", + "type": "string", + "title": "name" + }, + "relatesTo": { + "description": "A reference to another conversation or activity.", + "title": "relatesTo", + "type": "object", + "required": [ + "bot", + "channelId", + "conversation", + "serviceUrl" + ], + "properties": { + "activityId": { + "description": "(Optional) ID of the activity to refer to", + "type": "string", + "title": "activityId" + }, + "user": { + "description": "(Optional) User participating in this conversation", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "title": "user" + }, + "bot": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Bot participating in this conversation", + "title": "bot" + }, + "conversation": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/conversation", + "description": "Conversation reference", + "title": "conversation" + }, + "channelId": { + "description": "Channel ID", + "type": "string", + "title": "channelId" + }, + "serviceUrl": { + "description": "Service endpoint where operations concerning the referenced conversation may be performed", + "type": "string", + "title": "serviceUrl" + } + } + }, + "code": { + "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", + "type": "string", + "title": "code" + }, + "expiration": { + "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", + "type": "string", + "format": "date-time", + "title": "expiration" + }, + "importance": { + "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", + "type": "string", + "title": "importance" + }, + "deliveryMode": { + "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", + "type": "string", + "title": "deliveryMode" + }, + "listenFor": { + "description": "List of phrases and references that speech and language priming systems should listen for", + "type": "array", + "title": "listenFor", + "items": { + "type": "string", + "title": "Phrase", + "description": "Phrase to listen for." + } + }, + "textHighlights": { + "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", + "type": "array", + "title": "textHighlights", + "items": { + "description": "Refers to a substring of content within another field", + "title": "TextHighlight", + "type": "object", + "required": [ + "occurrence", + "text" + ], + "properties": { + "text": { + "description": "Defines the snippet of text to highlight", + "type": "string", + "title": "text" + }, + "occurrence": { + "description": "Occurrence of the text field within the referenced text, if multiple exist.", + "type": "number", + "title": "occurrence" + } + } + } + }, + "semanticAction": { + "description": "An optional programmatic action accompanying this request", + "title": "semanticAction", + "type": "object", + "required": [ + "entities", + "id" + ], + "properties": { + "id": { + "description": "ID of this action", + "type": "string", + "title": "id" + }, + "entities": { + "description": "Entities associated with this action", + "type": "object", + "title": "entities", + "additionalProperties": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/entities/items" + } + } + } + } + } + }, + { + "$ref": "#/definitions/Microsoft.ActivityTemplate" + }, + { + "$ref": "#/definitions/Microsoft.StaticActivityTemplate" + } + ] + }, + "Microsoft.IDialog": { + "title": "Microsoft Dialogs", + "description": "Components which derive from Dialog", + "$role": "interface", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/Microsoft.QnAMakerDialog" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog" + }, + { + "$ref": "#/definitions/Microsoft.Test.AssertCondition" + }, + { + "$ref": "#/definitions/Microsoft.BeginDialog" + }, + { + "$ref": "#/definitions/Microsoft.BeginSkill" + }, + { + "$ref": "#/definitions/Microsoft.BreakLoop" + }, + { + "$ref": "#/definitions/Microsoft.CancelAllDialogs" + }, + { + "$ref": "#/definitions/Microsoft.CancelDialog" + }, + { + "$ref": "#/definitions/Microsoft.ContinueConversationLater" + }, + { + "$ref": "#/definitions/Microsoft.ContinueLoop" + }, + { "$ref": "#/definitions/Microsoft.DebugBreak" }, { @@ -7907,7 +8625,7 @@ }, "properties": { "activity": { - "$ref": "#/definitions/botframework.json/definitions/Activity", + "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1", "title": "Activity", "description": "A static Activity to used.", "required": [ @@ -8787,6 +9505,13 @@ "description": "The root dialog to execute the test script against.", "$ref": "#/definitions/Microsoft.IDialog" }, + "languagePolicy": { + "$kind": "Microsoft.LanguagePolicy", + "type": "object", + "title": "Language policy", + "description": "Defines fall back languages to try per user input language.", + "$ref": "#/definitions/Microsoft.LanguagePolicy" + }, "description": { "type": "string", "title": "Description", @@ -11328,920 +12053,136 @@ "$role": "expression", "title": "Integer or expression", "description": "Integer constant or expression to evaluate.", - "oneOf": [ - { - "type": "integer", - "title": "Integer", - "description": "Integer constant.", - "default": 0, - "examples": [ - 15 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.age" - ] - } - ] - }, - "numberExpression": { - "$role": "expression", - "title": "Number or expression", - "description": "Number constant or expression to evaluate.", - "oneOf": [ - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "default": 0, - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=dialog.quantity" - ] - } - ] - }, - "objectExpression": { - "$role": "expression", - "title": "Object or expression", - "description": "Object or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "role": { - "title": "$role", - "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", - "type": "string", - "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - }, - "valueExpression": { - "$role": "expression", - "title": "Any or expression", - "description": "Any constant or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "type": "string", - "title": "String", - "description": "Interpolated string.", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant", - "examples": [ - false - ] - }, - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=..." - ] - } - ] - }, - "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/schema" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "default": true, - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/schema" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/schema" - }, - "maxProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/schema/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/schema" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/schema" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } + "oneOf": [ + { + "type": "integer", + "title": "Integer", + "description": "Integer constant.", + "default": 0, + "examples": [ + 15 ] }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/schema" - }, - "then": { - "$ref": "#/definitions/schema" - }, - "else": { - "$ref": "#/definitions/schema" - }, - "allOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/schema" + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=user.age" + ] } - } + ] }, - "botframework.json": { - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ChannelAccount": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } - }, - "ConversationAccount": { - "description": "Channel account information for a conversation", - "title": "ConversationAccount", - "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } - }, - "MessageReaction": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } - }, - "CardAction": { - "description": "A clickable action", - "title": "CardAction", - "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } + "numberExpression": { + "$role": "expression", + "title": "Number or expression", + "description": "Number constant or expression to evaluate.", + "oneOf": [ + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "default": 0, + "examples": [ + 15.5 + ] }, - "SuggestedActions": { - "description": "SuggestedActions that can be performed", - "title": "SuggestedActions", + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=dialog.quantity" + ] + } + ] + }, + "objectExpression": { + "$role": "expression", + "title": "Object or expression", + "description": "Object or expression to evaluate.", + "oneOf": [ + { "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "$ref": "#/definitions/botframework.json/definitions/CardAction" - } - } - } + "title": "Object", + "description": "Object constant." }, - "Attachment": { - "description": "An attachment within an activity", - "title": "Attachment", - "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "role": { + "title": "$role", + "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", + "type": "string", + "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" + }, + "stringExpression": { + "$role": "expression", + "title": "String or expression", + "description": "Interpolated string or expression to evaluate.", + "oneOf": [ + { + "type": "string", + "title": "String", + "description": "Interpolated string", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] }, - "Entity": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=concat('x','y','z')" + ] + } + ] + }, + "valueExpression": { + "$role": "expression", + "title": "Any or expression", + "description": "Any constant or expression to evaluate.", + "oneOf": [ + { "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } + "title": "Object", + "description": "Object constant." }, - "ConversationReference": { - "description": "An object relating to a particular point in a conversation", - "title": "ConversationReference", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } + { + "type": "array", + "title": "Array", + "description": "Array constant." }, - "TextHighlight": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } + { + "type": "string", + "title": "String", + "description": "Interpolated string.", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] }, - "SemanticAction": { - "description": "Represents a reference to a programmatic action", - "title": "SemanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - } - } + { + "type": "boolean", + "title": "Boolean", + "description": "Boolean constant", + "examples": [ + false + ] }, - "Activity": { - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation" - }, - "recipient": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", - "title": "suggestedActions" - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Attachment" - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "$ref": "#/definitions/botframework.json/definitions/ConversationReference", - "title": "relatesTo" - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "$ref": "#/definitions/botframework.json/definitions/TextHighlight" - } - }, - "semanticAction": { - "$ref": "#/definitions/botframework.json/definitions/SemanticAction", - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction" - } - } + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=..." + ] } - } + ] } } } diff --git a/tests/tests.schema b/tests/tests.schema index 5f17a138c4..0fe1cd4874 100644 --- a/tests/tests.schema +++ b/tests/tests.schema @@ -659,7 +659,239 @@ "description": "Schema to fill in.", "anyOf": [ { - "$ref": "#/definitions/schema" + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "type": "integer", + "minimum": 0, + "default": 0 + }, + "simpleTypes": { + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "stringArray": { + "type": "array", + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + } + }, + "type": [ + "object", + "boolean" + ], + "properties": { + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "writeOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minLength": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + } + ], + "default": true + }, + "maxItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "maxProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "required": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" + }, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "definitions": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "patternProperties": { + "type": "object", + "propertyNames": { + "format": "regex" + }, + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" + } + ] + } + }, + "propertyNames": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "const": true, + "enum": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": true + }, + "type": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" + }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "contentEncoding": { + "type": "string" + }, + "if": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "then": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "else": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "allOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "anyOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "oneOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "not": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "default": true }, { "type": "string", @@ -814,7 +1046,7 @@ "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", "oneOf": [ { - "$ref": "#/definitions/botframework.json/definitions/Attachment", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", "title": "Object", "description": "Attachment object." }, @@ -829,7 +1061,7 @@ "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", "oneOf": [ { - "$ref": "#/definitions/botframework.json/definitions/Attachment", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", "title": "Object", "description": "Attachment object." }, @@ -1434,7 +1666,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", "title": "Action", "description": "Card action for the choice." }, @@ -1886,7 +2118,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", "title": "Action", "description": "Card action for the choice." }, @@ -3571,181 +3803,684 @@ "type": "string" }, { - "$ref": "#/definitions/botframework.json/definitions/Activity", "required": [ "type" - ] - }, - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - } - ] - }, - "Microsoft.IDialog": { - "title": "Microsoft Dialogs", - "description": "Components which derive from Dialog", - "$role": "interface", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.Test.AssertCondition" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "$ref": "#/definitions/Microsoft.CancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.ContinueLoop" - }, - { - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "$ref": "#/definitions/Microsoft.DeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperties" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "$ref": "#/definitions/Microsoft.GetActivityMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationMembers" - }, - { - "$ref": "#/definitions/Microsoft.GotoAction" - }, - { - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "$ref": "#/definitions/Microsoft.SetProperties" - }, - { - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "$ref": "#/definitions/Microsoft.SignOutUser" - }, - { - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "$ref": "#/definitions/Microsoft.TelemetryTrackEvent" - }, - { - "$ref": "#/definitions/Microsoft.ThrowException" - }, - { - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "$ref": "#/definitions/Microsoft.UpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.Ask" - }, - { - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "$ref": "#/definitions/Microsoft.TextInput" - }, - { - "$ref": "#/definitions/Testbot.JavascriptAction" - }, - { - "$ref": "#/definitions/Testbot.Multiply" - }, - { - "$ref": "#/definitions/CustomAction.dialog" - }, - { - "$ref": "#/definitions/CustomAction2.dialog" - } - ] - }, - "Microsoft.IEntityRecognizer": { - "$role": "interface", + ], + "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", + "title": "Activity", + "type": "object", + "properties": { + "type": { + "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", + "type": "string", + "title": "type" + }, + "id": { + "description": "Contains an ID that uniquely identifies the activity on the channel.", + "type": "string", + "title": "id" + }, + "timestamp": { + "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", + "type": "string", + "format": "date-time", + "title": "timestamp" + }, + "localTimestamp": { + "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", + "type": "string", + "format": "date-time", + "title": "localTimestamp" + }, + "localTimezone": { + "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", + "type": "string", + "title": "localTimezone" + }, + "serviceUrl": { + "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", + "type": "string", + "title": "serviceUrl" + }, + "channelId": { + "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", + "type": "string", + "title": "channelId" + }, + "from": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Identifies the sender of the message.", + "title": "from" + }, + "conversation": { + "description": "Identifies the conversation to which the activity belongs.", + "title": "conversation", + "type": "object", + "required": [ + "conversationType", + "id", + "isGroup", + "name" + ], + "properties": { + "isGroup": { + "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", + "type": "boolean", + "title": "isGroup" + }, + "conversationType": { + "description": "Indicates the type of the conversation in channels that distinguish between conversation types", + "type": "string", + "title": "conversationType" + }, + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "enum": [ + "bot", + "user" + ], + "type": "string", + "title": "role" + } + } + }, + "recipient": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Identifies the recipient of the message.", + "title": "recipient" + }, + "textFormat": { + "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", + "type": "string", + "title": "textFormat" + }, + "attachmentLayout": { + "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", + "type": "string", + "title": "attachmentLayout" + }, + "membersAdded": { + "description": "The collection of members added to the conversation.", + "type": "array", + "title": "membersAdded", + "items": { + "description": "Channel account information needed to route a message", + "title": "ChannelAccount", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "type": "string", + "title": "role" + } + } + } + }, + "membersRemoved": { + "description": "The collection of members removed from the conversation.", + "type": "array", + "title": "membersRemoved", + "items": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items" + } + }, + "reactionsAdded": { + "description": "The collection of reactions added to the conversation.", + "type": "array", + "title": "reactionsAdded", + "items": { + "description": "Message reaction object", + "title": "MessageReaction", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Message reaction type. Possible values include: 'like', 'plusOne'", + "type": "string", + "title": "type" + } + } + } + }, + "reactionsRemoved": { + "description": "The collection of reactions removed from the conversation.", + "type": "array", + "title": "reactionsRemoved", + "items": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/reactionsAdded/items" + } + }, + "topicName": { + "description": "The updated topic name of the conversation.", + "type": "string", + "title": "topicName" + }, + "historyDisclosed": { + "description": "Indicates whether the prior history of the channel is disclosed.", + "type": "boolean", + "title": "historyDisclosed" + }, + "locale": { + "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", + "type": "string", + "title": "locale" + }, + "text": { + "description": "The text content of the message.", + "type": "string", + "title": "text" + }, + "speak": { + "description": "The text to speak.", + "type": "string", + "title": "speak" + }, + "inputHint": { + "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", + "type": "string", + "title": "inputHint" + }, + "summary": { + "description": "The text to display if the channel cannot render cards.", + "type": "string", + "title": "summary" + }, + "suggestedActions": { + "description": "The suggested actions for the activity.", + "title": "suggestedActions", + "type": "object", + "required": [ + "actions", + "to" + ], + "properties": { + "to": { + "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", + "type": "array", + "title": "to", + "items": { + "title": "Id", + "description": "Id of recipient.", + "type": "string" + } + }, + "actions": { + "description": "Actions that can be shown to the user", + "type": "array", + "title": "actions", + "items": { + "description": "A clickable action", + "title": "CardAction", + "type": "object", + "required": [ + "title", + "type", + "value" + ], + "properties": { + "type": { + "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", + "type": "string", + "title": "type" + }, + "title": { + "description": "Text description which appears on the button", + "type": "string", + "title": "title" + }, + "image": { + "description": "Image URL which will appear on the button, next to text label", + "type": "string", + "title": "image" + }, + "text": { + "description": "Text for this action", + "type": "string", + "title": "text" + }, + "displayText": { + "description": "(Optional) text to display in the chat feed if the button is clicked", + "type": "string", + "title": "displayText" + }, + "value": { + "description": "Supplementary parameter for action. Content of this property depends on the ActionType", + "title": "value" + }, + "channelData": { + "description": "Channel-specific data associated with this action", + "title": "channelData" + } + } + } + } + } + }, + "attachments": { + "description": "Attachments", + "type": "array", + "title": "attachments", + "items": { + "description": "An attachment within an activity", + "title": "Attachment", + "type": "object", + "required": [ + "contentType" + ], + "properties": { + "contentType": { + "description": "mimetype/Contenttype for the file", + "type": "string", + "title": "contentType" + }, + "contentUrl": { + "description": "Content Url", + "type": "string", + "title": "contentUrl" + }, + "content": { + "type": "object", + "description": "Embedded content", + "title": "content" + }, + "name": { + "description": "(OPTIONAL) The name of the attachment", + "type": "string", + "title": "name" + }, + "thumbnailUrl": { + "description": "(OPTIONAL) Thumbnail associated with attachment", + "type": "string", + "title": "thumbnailUrl" + } + } + } + }, + "entities": { + "description": "Represents the entities that were mentioned in the message.", + "type": "array", + "title": "entities", + "items": { + "description": "Metadata object pertaining to an activity", + "title": "Entity", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Type of this entity (RFC 3987 IRI)", + "type": "string", + "title": "type" + } + } + } + }, + "channelData": { + "description": "Contains channel-specific content.", + "title": "channelData" + }, + "action": { + "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", + "type": "string", + "title": "action" + }, + "replyToId": { + "description": "Contains the ID of the message to which this message is a reply.", + "type": "string", + "title": "replyToId" + }, + "label": { + "description": "A descriptive label for the activity.", + "type": "string", + "title": "label" + }, + "valueType": { + "description": "The type of the activity's value object.", + "type": "string", + "title": "valueType" + }, + "value": { + "description": "A value that is associated with the activity.", + "title": "value" + }, + "name": { + "description": "The name of the operation associated with an invoke or event activity.", + "type": "string", + "title": "name" + }, + "relatesTo": { + "description": "A reference to another conversation or activity.", + "title": "relatesTo", + "type": "object", + "required": [ + "bot", + "channelId", + "conversation", + "serviceUrl" + ], + "properties": { + "activityId": { + "description": "(Optional) ID of the activity to refer to", + "type": "string", + "title": "activityId" + }, + "user": { + "description": "(Optional) User participating in this conversation", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "title": "user" + }, + "bot": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Bot participating in this conversation", + "title": "bot" + }, + "conversation": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/conversation", + "description": "Conversation reference", + "title": "conversation" + }, + "channelId": { + "description": "Channel ID", + "type": "string", + "title": "channelId" + }, + "serviceUrl": { + "description": "Service endpoint where operations concerning the referenced conversation may be performed", + "type": "string", + "title": "serviceUrl" + } + } + }, + "code": { + "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", + "type": "string", + "title": "code" + }, + "expiration": { + "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", + "type": "string", + "format": "date-time", + "title": "expiration" + }, + "importance": { + "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", + "type": "string", + "title": "importance" + }, + "deliveryMode": { + "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", + "type": "string", + "title": "deliveryMode" + }, + "listenFor": { + "description": "List of phrases and references that speech and language priming systems should listen for", + "type": "array", + "title": "listenFor", + "items": { + "type": "string", + "title": "Phrase", + "description": "Phrase to listen for." + } + }, + "textHighlights": { + "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", + "type": "array", + "title": "textHighlights", + "items": { + "description": "Refers to a substring of content within another field", + "title": "TextHighlight", + "type": "object", + "required": [ + "occurrence", + "text" + ], + "properties": { + "text": { + "description": "Defines the snippet of text to highlight", + "type": "string", + "title": "text" + }, + "occurrence": { + "description": "Occurrence of the text field within the referenced text, if multiple exist.", + "type": "number", + "title": "occurrence" + } + } + } + }, + "semanticAction": { + "description": "An optional programmatic action accompanying this request", + "title": "semanticAction", + "type": "object", + "required": [ + "entities", + "id" + ], + "properties": { + "id": { + "description": "ID of this action", + "type": "string", + "title": "id" + }, + "entities": { + "description": "Entities associated with this action", + "type": "object", + "title": "entities", + "additionalProperties": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/entities/items" + } + } + } + } + } + }, + { + "$ref": "#/definitions/Microsoft.ActivityTemplate" + }, + { + "$ref": "#/definitions/Microsoft.StaticActivityTemplate" + } + ] + }, + "Microsoft.IDialog": { + "title": "Microsoft Dialogs", + "description": "Components which derive from Dialog", + "$role": "interface", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/Microsoft.QnAMakerDialog" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog" + }, + { + "$ref": "#/definitions/Microsoft.Test.AssertCondition" + }, + { + "$ref": "#/definitions/Microsoft.BeginDialog" + }, + { + "$ref": "#/definitions/Microsoft.BeginSkill" + }, + { + "$ref": "#/definitions/Microsoft.BreakLoop" + }, + { + "$ref": "#/definitions/Microsoft.CancelAllDialogs" + }, + { + "$ref": "#/definitions/Microsoft.CancelDialog" + }, + { + "$ref": "#/definitions/Microsoft.ContinueConversationLater" + }, + { + "$ref": "#/definitions/Microsoft.ContinueLoop" + }, + { + "$ref": "#/definitions/Microsoft.DebugBreak" + }, + { + "$ref": "#/definitions/Microsoft.DeleteActivity" + }, + { + "$ref": "#/definitions/Microsoft.DeleteProperties" + }, + { + "$ref": "#/definitions/Microsoft.DeleteProperty" + }, + { + "$ref": "#/definitions/Microsoft.EditActions" + }, + { + "$ref": "#/definitions/Microsoft.EditArray" + }, + { + "$ref": "#/definitions/Microsoft.EmitEvent" + }, + { + "$ref": "#/definitions/Microsoft.EndDialog" + }, + { + "$ref": "#/definitions/Microsoft.EndTurn" + }, + { + "$ref": "#/definitions/Microsoft.Foreach" + }, + { + "$ref": "#/definitions/Microsoft.ForeachPage" + }, + { + "$ref": "#/definitions/Microsoft.GetActivityMembers" + }, + { + "$ref": "#/definitions/Microsoft.GetConversationMembers" + }, + { + "$ref": "#/definitions/Microsoft.GotoAction" + }, + { + "$ref": "#/definitions/Microsoft.HttpRequest" + }, + { + "$ref": "#/definitions/Microsoft.IfCondition" + }, + { + "$ref": "#/definitions/Microsoft.LogAction" + }, + { + "$ref": "#/definitions/Microsoft.RepeatDialog" + }, + { + "$ref": "#/definitions/Microsoft.ReplaceDialog" + }, + { + "$ref": "#/definitions/Microsoft.SendActivity" + }, + { + "$ref": "#/definitions/Microsoft.SetProperties" + }, + { + "$ref": "#/definitions/Microsoft.SetProperty" + }, + { + "$ref": "#/definitions/Microsoft.SignOutUser" + }, + { + "$ref": "#/definitions/Microsoft.SwitchCondition" + }, + { + "$ref": "#/definitions/Microsoft.TelemetryTrackEvent" + }, + { + "$ref": "#/definitions/Microsoft.ThrowException" + }, + { + "$ref": "#/definitions/Microsoft.TraceActivity" + }, + { + "$ref": "#/definitions/Microsoft.UpdateActivity" + }, + { + "$ref": "#/definitions/Microsoft.Ask" + }, + { + "$ref": "#/definitions/Microsoft.AttachmentInput" + }, + { + "$ref": "#/definitions/Microsoft.ChoiceInput" + }, + { + "$ref": "#/definitions/Microsoft.ConfirmInput" + }, + { + "$ref": "#/definitions/Microsoft.DateTimeInput" + }, + { + "$ref": "#/definitions/Microsoft.NumberInput" + }, + { + "$ref": "#/definitions/Microsoft.OAuthInput" + }, + { + "$ref": "#/definitions/Microsoft.TextInput" + }, + { + "$ref": "#/definitions/Testbot.JavascriptAction" + }, + { + "$ref": "#/definitions/Testbot.Multiply" + }, + { + "$ref": "#/definitions/CustomAction.dialog" + }, + { + "$ref": "#/definitions/CustomAction2.dialog" + } + ] + }, + "Microsoft.IEntityRecognizer": { + "$role": "interface", "title": "Entity Recognizers", "description": "Components which derive from EntityRecognizer.", "type": "object", @@ -8006,7 +8741,7 @@ }, "properties": { "activity": { - "$ref": "#/definitions/botframework.json/definitions/Activity", + "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1", "title": "Activity", "description": "A static Activity to used.", "required": [ @@ -8886,6 +9621,13 @@ "description": "The root dialog to execute the test script against.", "$ref": "#/definitions/Microsoft.IDialog" }, + "languagePolicy": { + "$kind": "Microsoft.LanguagePolicy", + "type": "object", + "title": "Language policy", + "description": "Defines fall back languages to try per user input language.", + "$ref": "#/definitions/Microsoft.LanguagePolicy" + }, "description": { "type": "string", "title": "Description", @@ -11298,215 +12040,22 @@ "title": "Arg1", "description": "Value from callers memory to use as arg 1" }, - "arg2": { - "$ref": "#/definitions/numberExpression", - "title": "Arg2", - "description": "Value from callers memory to use as arg 2" - }, - "result": { - "$ref": "#/definitions/stringExpression", - "title": "Result", - "description": "Property to store the result in" - }, - "$kind": { - "title": "Kind of dialog object", - "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": "Testbot.Multiply" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "arrayExpression": { - "$role": "expression", - "title": "Array or expression", - "description": "Array or expression to evaluate.", - "oneOf": [ - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "booleanExpression": { - "$role": "expression", - "title": "Boolean or expression", - "description": "Boolean constant or expression to evaluate.", - "oneOf": [ - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant.", - "default": false, - "examples": [ - false - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.isVip" - ] - } - ] - }, - "component": { - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "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.]*$" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "condition": { - "$role": "expression", - "title": "Boolean condition", - "description": "Boolean constant or expression to evaluate.", - "oneOf": [ - { - "$ref": "#/definitions/expression" - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean value.", - "default": true, - "examples": [ - false - ] - } - ] - }, - "equalsExpression": { - "$role": "expression", - "type": "string", - "title": "Expression", - "description": "Expression starting with =.", - "pattern": "^=.*\\S.*", - "examples": [ - "=user.name" - ] - }, - "expression": { - "$role": "expression", - "type": "string", - "title": "Expression", - "description": "Expression to evaluate.", - "pattern": "^.*\\S.*", - "examples": [ - "user.age > 13" - ] - }, - "integerExpression": { - "$role": "expression", - "title": "Integer or expression", - "description": "Integer constant or expression to evaluate.", - "oneOf": [ - { - "type": "integer", - "title": "Integer", - "description": "Integer constant.", - "default": 0, - "examples": [ - 15 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.age" - ] - } - ] - }, - "numberExpression": { - "$role": "expression", - "title": "Number or expression", - "description": "Number constant or expression to evaluate.", - "oneOf": [ - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "default": 0, - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=dialog.quantity" - ] - } - ] - }, - "objectExpression": { - "$role": "expression", - "title": "Object or expression", - "description": "Object or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "role": { - "title": "$role", - "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", - "type": "string", - "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" - }, - "root": { - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { + "arg2": { + "$ref": "#/definitions/numberExpression", + "title": "Arg2", + "description": "Value from callers memory to use as arg 2" + }, + "result": { + "$ref": "#/definitions/stringExpression", + "title": "Result", + "description": "Property to store the result in" + }, "$kind": { "title": "Kind of dialog object", "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": "root" + "const": "Testbot.Multiply" }, "$designer": { "title": "Designer information", @@ -11515,30 +12064,44 @@ } } }, - "stringExpression": { + "arrayExpression": { "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", + "title": "Array or expression", + "description": "Array or expression to evaluate.", "oneOf": [ { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", + "type": "array", + "title": "Array", + "description": "Array constant." + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "booleanExpression": { + "$role": "expression", + "title": "Boolean or expression", + "description": "Boolean constant or expression to evaluate.", + "oneOf": [ + { + "type": "boolean", + "title": "Boolean", + "description": "Boolean constant.", + "default": false, "examples": [ - "Hello ${user.name}" + false ] }, { "$ref": "#/definitions/equalsExpression", "examples": [ - "=concat('x','y','z')" + "=user.isVip" ] } ] }, - "test": { - "type": "object", + "component": { "required": [ "$kind" ], @@ -11554,8 +12117,7 @@ "title": "Kind of dialog object", "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": "test" + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$" }, "$designer": { "title": "Designer information", @@ -11564,837 +12126,233 @@ } } }, - "valueExpression": { + "condition": { "$role": "expression", - "title": "Any or expression", - "description": "Any constant or expression to evaluate.", + "title": "Boolean condition", + "description": "Boolean constant or expression to evaluate.", "oneOf": [ { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "type": "string", - "title": "String", - "description": "Interpolated string.", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] + "$ref": "#/definitions/expression" }, { "type": "boolean", "title": "Boolean", - "description": "Boolean constant", + "description": "Boolean value.", + "default": true, "examples": [ false ] - }, + } + ] + }, + "equalsExpression": { + "$role": "expression", + "type": "string", + "title": "Expression", + "description": "Expression starting with =.", + "pattern": "^=.*\\S.*", + "examples": [ + "=user.name" + ] + }, + "expression": { + "$role": "expression", + "type": "string", + "title": "Expression", + "description": "Expression to evaluate.", + "pattern": "^.*\\S.*", + "examples": [ + "user.age > 13" + ] + }, + "integerExpression": { + "$role": "expression", + "title": "Integer or expression", + "description": "Integer constant or expression to evaluate.", + "oneOf": [ { - "type": "number", - "title": "Number", - "description": "Number constant.", + "type": "integer", + "title": "Integer", + "description": "Integer constant.", + "default": 0, "examples": [ - 15.5 + 15 ] }, { "$ref": "#/definitions/equalsExpression", "examples": [ - "=..." + "=user.age" ] } ] }, - "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/schema" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "default": true, - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/schema" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/schema" - }, - "maxProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/schema/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/schema" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/schema" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/schema" - }, - "then": { - "$ref": "#/definitions/schema" - }, - "else": { - "$ref": "#/definitions/schema" - }, - "allOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/schema" - } - } - }, - "botframework.json": { - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ChannelAccount": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } + "numberExpression": { + "$role": "expression", + "title": "Number or expression", + "description": "Number constant or expression to evaluate.", + "oneOf": [ + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "default": 0, + "examples": [ + 15.5 + ] }, - "ConversationAccount": { - "description": "Channel account information for a conversation", - "title": "ConversationAccount", + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=dialog.quantity" + ] + } + ] + }, + "objectExpression": { + "$role": "expression", + "title": "Object or expression", + "description": "Object or expression to evaluate.", + "oneOf": [ + { "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } + "title": "Object", + "description": "Object constant." }, - "MessageReaction": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "role": { + "title": "$role", + "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", + "type": "string", + "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" + }, + "root": { + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "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": "root" }, - "CardAction": { - "description": "A clickable action", - "title": "CardAction", + "$designer": { + "title": "Designer information", "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "stringExpression": { + "$role": "expression", + "title": "String or expression", + "description": "Interpolated string or expression to evaluate.", + "oneOf": [ + { + "type": "string", + "title": "String", + "description": "Interpolated string", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] }, - "SuggestedActions": { - "description": "SuggestedActions that can be performed", - "title": "SuggestedActions", - "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "$ref": "#/definitions/botframework.json/definitions/CardAction" - } - } - } + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=concat('x','y','z')" + ] + } + ] + }, + "test": { + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "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": "test" }, - "Attachment": { - "description": "An attachment within an activity", - "title": "Attachment", + "$designer": { + "title": "Designer information", "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } - }, - "Entity": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "valueExpression": { + "$role": "expression", + "title": "Any or expression", + "description": "Any constant or expression to evaluate.", + "oneOf": [ + { "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } + "title": "Object", + "description": "Object constant." }, - "ConversationReference": { - "description": "An object relating to a particular point in a conversation", - "title": "ConversationReference", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } + { + "type": "array", + "title": "Array", + "description": "Array constant." }, - "TextHighlight": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } + { + "type": "string", + "title": "String", + "description": "Interpolated string.", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] }, - "SemanticAction": { - "description": "Represents a reference to a programmatic action", - "title": "SemanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - } - } + { + "type": "boolean", + "title": "Boolean", + "description": "Boolean constant", + "examples": [ + false + ] }, - "Activity": { - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation" - }, - "recipient": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", - "title": "suggestedActions" - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Attachment" - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "$ref": "#/definitions/botframework.json/definitions/ConversationReference", - "title": "relatesTo" - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "$ref": "#/definitions/botframework.json/definitions/TextHighlight" - } - }, - "semanticAction": { - "$ref": "#/definitions/botframework.json/definitions/SemanticAction", - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction" - } - } + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=..." + ] } - } + ] } } } From 1f44ff758947f58a267a7af6e4d59eb4f23e93cf Mon Sep 17 00:00:00 2001 From: hond Date: Wed, 14 Oct 2020 17:02:17 +0800 Subject: [PATCH 13/17] update schema --- .../Schemas/Microsoft.Test.Script.schema | 1 - tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema | 4 +--- tests/tests.schema | 4 +--- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/Schemas/Microsoft.Test.Script.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/Schemas/Microsoft.Test.Script.schema index 050367c59b..a0326f799b 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/Schemas/Microsoft.Test.Script.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Testing/Schemas/Microsoft.Test.Script.schema @@ -11,7 +11,6 @@ "description": "The root dialog to execute the test script against." }, "languagePolicy": { - "$kind": "Microsoft.LanguagePolicy", "type": "object", "title": "Language policy", "description": "Defines fall back languages to try per user input language." diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema index 796ed1680d..f73c6dda56 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema @@ -9506,11 +9506,9 @@ "$ref": "#/definitions/Microsoft.IDialog" }, "languagePolicy": { - "$kind": "Microsoft.LanguagePolicy", "type": "object", "title": "Language policy", - "description": "Defines fall back languages to try per user input language.", - "$ref": "#/definitions/Microsoft.LanguagePolicy" + "description": "Defines fall back languages to try per user input language." }, "description": { "type": "string", diff --git a/tests/tests.schema b/tests/tests.schema index 0fe1cd4874..bbaab513ea 100644 --- a/tests/tests.schema +++ b/tests/tests.schema @@ -9622,11 +9622,9 @@ "$ref": "#/definitions/Microsoft.IDialog" }, "languagePolicy": { - "$kind": "Microsoft.LanguagePolicy", "type": "object", "title": "Language policy", - "description": "Defines fall back languages to try per user input language.", - "$ref": "#/definitions/Microsoft.LanguagePolicy" + "description": "Defines fall back languages to try per user input language." }, "description": { "type": "string", From 53f3616b785a3ed371bd7d9957554e120a9d79a0 Mon Sep 17 00:00:00 2001 From: hond Date: Mon, 19 Oct 2020 09:32:41 +0800 Subject: [PATCH 14/17] update schema --- .../testbot.schema | 1897 ++++++++-------- tests/tests.schema | 1994 +++++++++-------- 2 files changed, 2059 insertions(+), 1832 deletions(-) diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema index f73c6dda56..17ac9f84b7 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema @@ -4,6 +4,9 @@ "title": "Component kinds", "description": "These are all of the kinds that can be created by the loader.", "oneOf": [ + { + "$ref": "#/definitions/AzureQueues.ContinueConversationLater" + }, { "$ref": "#/definitions/Microsoft.ActivityTemplate" }, @@ -46,9 +49,6 @@ { "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, { "$ref": "#/definitions/Microsoft.ContinueLoop" }, @@ -447,6 +447,81 @@ } ], "definitions": { + "AzureQueues.ContinueConversationLater": { + "$role": "implements(Microsoft.IDialog)", + "title": "Continue Conversation Later (Queue)", + "description": "Continue conversation at later time (via Azure Storage Queue).", + "type": "object", + "required": [ + "date", + "connectionString", + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "date": { + "$ref": "#/definitions/stringExpression", + "title": "Date", + "description": "Date in the future as a ISO string when the conversation should continue.", + "examples": [ + "=addHours(utcNow(), 1)" + ] + }, + "connectionString": { + "$ref": "#/definitions/stringExpression", + "title": "Connection String", + "description": "Connection string for connecting to an Azure Storage account.", + "examples": [ + "=settings.connectionString" + ] + }, + "queueName": { + "$ref": "#/definitions/stringExpression", + "title": "Queue Name", + "description": "Name of the queue that your azure function is bound to.", + "examples": [ + "activities" + ], + "default": "activities" + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Value to send in the activity.value." + }, + "$kind": { + "title": "Kind of dialog object", + "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": "AzureQueues.ContinueConversationLater" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, "Microsoft.ActivityTemplate": { "$role": "implements(Microsoft.IActivityTemplate)", "title": "Microsoft ActivityTemplate", @@ -549,239 +624,7 @@ "description": "Schema to fill in.", "anyOf": [ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "maxProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "then": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "else": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "allOf": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "default": true + "$ref": "#/definitions/schema" }, { "type": "string", @@ -936,7 +779,7 @@ "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", "oneOf": [ { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", + "$ref": "#/definitions/botframework.json/definitions/Attachment", "title": "Object", "description": "Attachment object." }, @@ -951,7 +794,7 @@ "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", "oneOf": [ { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", + "$ref": "#/definitions/botframework.json/definitions/Attachment", "title": "Object", "description": "Attachment object." }, @@ -1556,7 +1399,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", + "$ref": "#/definitions/botframework.json/definitions/CardAction", "title": "Action", "description": "Card action for the choice." }, @@ -2008,7 +1851,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", + "$ref": "#/definitions/botframework.json/definitions/CardAction", "title": "Action", "description": "Card action for the choice." }, @@ -2180,64 +2023,6 @@ } } }, - "Microsoft.ContinueConversationLater": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue Conversation Later (Queue)", - "description": "Continue conversation at later time (via Azure Storage Queue).", - "type": "object", - "required": [ - "date", - "connectionString", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "date": { - "$ref": "#/definitions/stringExpression", - "title": "Date", - "description": "Date in the future as a ISO string when the conversation should continue.", - "examples": [ - "=addHours(utcNow(), 1)" - ] - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "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.ContinueConversationLater" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, "Microsoft.ContinueLoop": { "$role": "implements(Microsoft.IDialog)", "title": "Continue Loop", @@ -3693,513 +3478,10 @@ "type": "string" }, { + "$ref": "#/definitions/botframework.json/definitions/Activity", "required": [ "type" - ], - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation", - "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } - }, - "recipient": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/reactionsAdded/items" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "title": "suggestedActions", - "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "description": "A clickable action", - "title": "CardAction", - "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } - } - } - } - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "description": "An attachment within an activity", - "title": "Attachment", - "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "title": "relatesTo", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/conversation", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } - } - }, - "semanticAction": { - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/entities/items" - } - } - } - } - } + ] }, { "$ref": "#/definitions/Microsoft.ActivityTemplate" @@ -4220,6 +3502,9 @@ { "$ref": "#/definitions/Microsoft.QnAMakerDialog" }, + { + "$ref": "#/definitions/AzureQueues.ContinueConversationLater" + }, { "$ref": "#/definitions/Microsoft.AdaptiveDialog" }, @@ -4241,9 +3526,6 @@ { "$ref": "#/definitions/Microsoft.CancelDialog" }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, { "$ref": "#/definitions/Microsoft.ContinueLoop" }, @@ -8625,7 +7907,7 @@ }, "properties": { "activity": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1", + "$ref": "#/definitions/botframework.json/definitions/Activity", "title": "Activity", "description": "A static Activity to used.", "required": [ @@ -9505,11 +8787,6 @@ "description": "The root dialog to execute the test script against.", "$ref": "#/definitions/Microsoft.IDialog" }, - "languagePolicy": { - "type": "object", - "title": "Language policy", - "description": "Defines fall back languages to try per user input language." - }, "description": { "type": "string", "title": "Description", @@ -12061,126 +11338,910 @@ 15 ] }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.age" - ] - } - ] - }, - "numberExpression": { - "$role": "expression", - "title": "Number or expression", - "description": "Number constant or expression to evaluate.", - "oneOf": [ - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "default": 0, - "examples": [ - 15.5 + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=user.age" + ] + } + ] + }, + "numberExpression": { + "$role": "expression", + "title": "Number or expression", + "description": "Number constant or expression to evaluate.", + "oneOf": [ + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "default": 0, + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=dialog.quantity" + ] + } + ] + }, + "objectExpression": { + "$role": "expression", + "title": "Object or expression", + "description": "Object or expression to evaluate.", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Object constant." + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "role": { + "title": "$role", + "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", + "type": "string", + "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" + }, + "stringExpression": { + "$role": "expression", + "title": "String or expression", + "description": "Interpolated string or expression to evaluate.", + "oneOf": [ + { + "type": "string", + "title": "String", + "description": "Interpolated string", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=concat('x','y','z')" + ] + } + ] + }, + "valueExpression": { + "$role": "expression", + "title": "Any or expression", + "description": "Any constant or expression to evaluate.", + "oneOf": [ + { + "type": "object", + "title": "Object", + "description": "Object constant." + }, + { + "type": "array", + "title": "Array", + "description": "Array constant." + }, + { + "type": "string", + "title": "String", + "description": "Interpolated string.", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] + }, + { + "type": "boolean", + "title": "Boolean", + "description": "Boolean constant", + "examples": [ + false + ] + }, + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=..." + ] + } + ] + }, + "schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/schema" + } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "type": "integer", + "minimum": 0, + "default": 0 + }, + "simpleTypes": { + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "stringArray": { + "type": "array", + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + } + }, + "type": [ + "object", + "boolean" + ], + "default": true, + "properties": { + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "writeOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minLength": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { + "$ref": "#/definitions/schema" + }, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "$ref": "#/definitions/schema/definitions/schemaArray" + } + ], + "default": true + }, + "maxItems": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minItems": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { + "$ref": "#/definitions/schema" + }, + "maxProperties": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minProperties": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "required": { + "$ref": "#/definitions/schema/definitions/stringArray" + }, + "additionalProperties": { + "$ref": "#/definitions/schema" + }, + "definitions": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "patternProperties": { + "type": "object", + "propertyNames": { + "format": "regex" + }, + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "$ref": "#/definitions/schema/definitions/stringArray" + } + ] + } + }, + "propertyNames": { + "$ref": "#/definitions/schema" + }, + "const": true, + "enum": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": true + }, + "type": { + "anyOf": [ + { + "$ref": "#/definitions/schema/definitions/simpleTypes" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/schema/definitions/simpleTypes" + }, + "minItems": 1, + "uniqueItems": true + } ] }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=dialog.quantity" - ] + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "contentEncoding": { + "type": "string" + }, + "if": { + "$ref": "#/definitions/schema" + }, + "then": { + "$ref": "#/definitions/schema" + }, + "else": { + "$ref": "#/definitions/schema" + }, + "allOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "anyOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "oneOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "not": { + "$ref": "#/definitions/schema" } - ] + } }, - "objectExpression": { - "$role": "expression", - "title": "Object or expression", - "description": "Object or expression to evaluate.", - "oneOf": [ - { + "botframework.json": { + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ChannelAccount": { + "description": "Channel account information needed to route a message", + "title": "ChannelAccount", "type": "object", - "title": "Object", - "description": "Object constant." + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "type": "string", + "title": "role" + } + } }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "role": { - "title": "$role", - "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", - "type": "string", - "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] + "ConversationAccount": { + "description": "Channel account information for a conversation", + "title": "ConversationAccount", + "type": "object", + "required": [ + "conversationType", + "id", + "isGroup", + "name" + ], + "properties": { + "isGroup": { + "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", + "type": "boolean", + "title": "isGroup" + }, + "conversationType": { + "description": "Indicates the type of the conversation in channels that distinguish between conversation types", + "type": "string", + "title": "conversationType" + }, + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "enum": [ + "bot", + "user" + ], + "type": "string", + "title": "role" + } + } }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - }, - "valueExpression": { - "$role": "expression", - "title": "Any or expression", - "description": "Any constant or expression to evaluate.", - "oneOf": [ - { + "MessageReaction": { + "description": "Message reaction object", + "title": "MessageReaction", "type": "object", - "title": "Object", - "description": "Object constant." + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Message reaction type. Possible values include: 'like', 'plusOne'", + "type": "string", + "title": "type" + } + } }, - { - "type": "array", - "title": "Array", - "description": "Array constant." + "CardAction": { + "description": "A clickable action", + "title": "CardAction", + "type": "object", + "required": [ + "title", + "type", + "value" + ], + "properties": { + "type": { + "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", + "type": "string", + "title": "type" + }, + "title": { + "description": "Text description which appears on the button", + "type": "string", + "title": "title" + }, + "image": { + "description": "Image URL which will appear on the button, next to text label", + "type": "string", + "title": "image" + }, + "text": { + "description": "Text for this action", + "type": "string", + "title": "text" + }, + "displayText": { + "description": "(Optional) text to display in the chat feed if the button is clicked", + "type": "string", + "title": "displayText" + }, + "value": { + "description": "Supplementary parameter for action. Content of this property depends on the ActionType", + "title": "value" + }, + "channelData": { + "description": "Channel-specific data associated with this action", + "title": "channelData" + } + } }, - { - "type": "string", - "title": "String", - "description": "Interpolated string.", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] + "SuggestedActions": { + "description": "SuggestedActions that can be performed", + "title": "SuggestedActions", + "type": "object", + "required": [ + "actions", + "to" + ], + "properties": { + "to": { + "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", + "type": "array", + "title": "to", + "items": { + "title": "Id", + "description": "Id of recipient.", + "type": "string" + } + }, + "actions": { + "description": "Actions that can be shown to the user", + "type": "array", + "title": "actions", + "items": { + "$ref": "#/definitions/botframework.json/definitions/CardAction" + } + } + } }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant", - "examples": [ - false - ] + "Attachment": { + "description": "An attachment within an activity", + "title": "Attachment", + "type": "object", + "required": [ + "contentType" + ], + "properties": { + "contentType": { + "description": "mimetype/Contenttype for the file", + "type": "string", + "title": "contentType" + }, + "contentUrl": { + "description": "Content Url", + "type": "string", + "title": "contentUrl" + }, + "content": { + "type": "object", + "description": "Embedded content", + "title": "content" + }, + "name": { + "description": "(OPTIONAL) The name of the attachment", + "type": "string", + "title": "name" + }, + "thumbnailUrl": { + "description": "(OPTIONAL) Thumbnail associated with attachment", + "type": "string", + "title": "thumbnailUrl" + } + } + }, + "Entity": { + "description": "Metadata object pertaining to an activity", + "title": "Entity", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Type of this entity (RFC 3987 IRI)", + "type": "string", + "title": "type" + } + } + }, + "ConversationReference": { + "description": "An object relating to a particular point in a conversation", + "title": "ConversationReference", + "type": "object", + "required": [ + "bot", + "channelId", + "conversation", + "serviceUrl" + ], + "properties": { + "activityId": { + "description": "(Optional) ID of the activity to refer to", + "type": "string", + "title": "activityId" + }, + "user": { + "description": "(Optional) User participating in this conversation", + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "title": "user" + }, + "bot": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Bot participating in this conversation", + "title": "bot" + }, + "conversation": { + "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", + "description": "Conversation reference", + "title": "conversation" + }, + "channelId": { + "description": "Channel ID", + "type": "string", + "title": "channelId" + }, + "serviceUrl": { + "description": "Service endpoint where operations concerning the referenced conversation may be performed", + "type": "string", + "title": "serviceUrl" + } + } + }, + "TextHighlight": { + "description": "Refers to a substring of content within another field", + "title": "TextHighlight", + "type": "object", + "required": [ + "occurrence", + "text" + ], + "properties": { + "text": { + "description": "Defines the snippet of text to highlight", + "type": "string", + "title": "text" + }, + "occurrence": { + "description": "Occurrence of the text field within the referenced text, if multiple exist.", + "type": "number", + "title": "occurrence" + } + } }, - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "examples": [ - 15.5 - ] + "SemanticAction": { + "description": "Represents a reference to a programmatic action", + "title": "SemanticAction", + "type": "object", + "required": [ + "entities", + "id" + ], + "properties": { + "id": { + "description": "ID of this action", + "type": "string", + "title": "id" + }, + "entities": { + "description": "Entities associated with this action", + "type": "object", + "title": "entities", + "additionalProperties": { + "$ref": "#/definitions/botframework.json/definitions/Entity" + } + } + } }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=..." - ] + "Activity": { + "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", + "title": "Activity", + "type": "object", + "properties": { + "type": { + "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", + "type": "string", + "title": "type" + }, + "id": { + "description": "Contains an ID that uniquely identifies the activity on the channel.", + "type": "string", + "title": "id" + }, + "timestamp": { + "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", + "type": "string", + "format": "date-time", + "title": "timestamp" + }, + "localTimestamp": { + "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", + "type": "string", + "format": "date-time", + "title": "localTimestamp" + }, + "localTimezone": { + "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", + "type": "string", + "title": "localTimezone" + }, + "serviceUrl": { + "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", + "type": "string", + "title": "serviceUrl" + }, + "channelId": { + "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", + "type": "string", + "title": "channelId" + }, + "from": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Identifies the sender of the message.", + "title": "from" + }, + "conversation": { + "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", + "description": "Identifies the conversation to which the activity belongs.", + "title": "conversation" + }, + "recipient": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Identifies the recipient of the message.", + "title": "recipient" + }, + "textFormat": { + "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", + "type": "string", + "title": "textFormat" + }, + "attachmentLayout": { + "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", + "type": "string", + "title": "attachmentLayout" + }, + "membersAdded": { + "description": "The collection of members added to the conversation.", + "type": "array", + "title": "membersAdded", + "items": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" + } + }, + "membersRemoved": { + "description": "The collection of members removed from the conversation.", + "type": "array", + "title": "membersRemoved", + "items": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" + } + }, + "reactionsAdded": { + "description": "The collection of reactions added to the conversation.", + "type": "array", + "title": "reactionsAdded", + "items": { + "$ref": "#/definitions/botframework.json/definitions/MessageReaction" + } + }, + "reactionsRemoved": { + "description": "The collection of reactions removed from the conversation.", + "type": "array", + "title": "reactionsRemoved", + "items": { + "$ref": "#/definitions/botframework.json/definitions/MessageReaction" + } + }, + "topicName": { + "description": "The updated topic name of the conversation.", + "type": "string", + "title": "topicName" + }, + "historyDisclosed": { + "description": "Indicates whether the prior history of the channel is disclosed.", + "type": "boolean", + "title": "historyDisclosed" + }, + "locale": { + "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", + "type": "string", + "title": "locale" + }, + "text": { + "description": "The text content of the message.", + "type": "string", + "title": "text" + }, + "speak": { + "description": "The text to speak.", + "type": "string", + "title": "speak" + }, + "inputHint": { + "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", + "type": "string", + "title": "inputHint" + }, + "summary": { + "description": "The text to display if the channel cannot render cards.", + "type": "string", + "title": "summary" + }, + "suggestedActions": { + "description": "The suggested actions for the activity.", + "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", + "title": "suggestedActions" + }, + "attachments": { + "description": "Attachments", + "type": "array", + "title": "attachments", + "items": { + "$ref": "#/definitions/botframework.json/definitions/Attachment" + } + }, + "entities": { + "description": "Represents the entities that were mentioned in the message.", + "type": "array", + "title": "entities", + "items": { + "$ref": "#/definitions/botframework.json/definitions/Entity" + } + }, + "channelData": { + "description": "Contains channel-specific content.", + "title": "channelData" + }, + "action": { + "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", + "type": "string", + "title": "action" + }, + "replyToId": { + "description": "Contains the ID of the message to which this message is a reply.", + "type": "string", + "title": "replyToId" + }, + "label": { + "description": "A descriptive label for the activity.", + "type": "string", + "title": "label" + }, + "valueType": { + "description": "The type of the activity's value object.", + "type": "string", + "title": "valueType" + }, + "value": { + "description": "A value that is associated with the activity.", + "title": "value" + }, + "name": { + "description": "The name of the operation associated with an invoke or event activity.", + "type": "string", + "title": "name" + }, + "relatesTo": { + "description": "A reference to another conversation or activity.", + "$ref": "#/definitions/botframework.json/definitions/ConversationReference", + "title": "relatesTo" + }, + "code": { + "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", + "type": "string", + "title": "code" + }, + "expiration": { + "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", + "type": "string", + "format": "date-time", + "title": "expiration" + }, + "importance": { + "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", + "type": "string", + "title": "importance" + }, + "deliveryMode": { + "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", + "type": "string", + "title": "deliveryMode" + }, + "listenFor": { + "description": "List of phrases and references that speech and language priming systems should listen for", + "type": "array", + "title": "listenFor", + "items": { + "type": "string", + "title": "Phrase", + "description": "Phrase to listen for." + } + }, + "textHighlights": { + "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", + "type": "array", + "title": "textHighlights", + "items": { + "$ref": "#/definitions/botframework.json/definitions/TextHighlight" + } + }, + "semanticAction": { + "$ref": "#/definitions/botframework.json/definitions/SemanticAction", + "description": "An optional programmatic action accompanying this request", + "title": "semanticAction" + } + } } - ] + } } } } diff --git a/tests/tests.schema b/tests/tests.schema index bbaab513ea..959aa925c8 100644 --- a/tests/tests.schema +++ b/tests/tests.schema @@ -313,6 +313,9 @@ { "$ref": "#/definitions/Microsoft.Test.AssertCondition" }, + { + "$ref": "#/definitions/Microsoft.Test.AssertNoActivity" + }, { "$ref": "#/definitions/Microsoft.Test.AssertReply" }, @@ -376,6 +379,9 @@ { "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" }, + { + "$ref": "#/definitions/Teams.GetMeetingParticipant" + }, { "$ref": "#/definitions/Teams.OnAppBasedLinkQuery" }, @@ -559,7 +565,7 @@ }, "Microsoft.ActivityTemplate": { "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft ActivityTemplate", + "title": "Microsoft activity template", "type": "object", "required": [ "template", @@ -594,7 +600,7 @@ }, "Microsoft.AdaptiveDialog": { "$role": "implements(Microsoft.IDialog)", - "title": "Adaptive Dialog", + "title": "Adaptive dialog", "description": "Flexible, data driven dialog that can adapt to the conversation.", "type": "object", "required": [ @@ -633,7 +639,7 @@ }, "generator": { "$kind": "Microsoft.ILanguageGenerator", - "title": "Language Generator", + "title": "Language generator", "description": "Language generator that generates bot responses.", "$ref": "#/definitions/Microsoft.ILanguageGenerator" }, @@ -659,239 +665,7 @@ "description": "Schema to fill in.", "anyOf": [ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "maxProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "then": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "else": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - }, - "allOf": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" - } - }, - "default": true + "$ref": "#/definitions/schema" }, { "type": "string", @@ -916,7 +690,7 @@ }, "Microsoft.AgeEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Age Entity Recognizer", + "title": "Age entity recognizer", "description": "Recognizer which recognizes age.", "type": "object", "required": [ @@ -949,7 +723,7 @@ "implements(Microsoft.IDialog)", "extends(Microsoft.SendActivity)" ], - "title": "Send Activity to Ask a question", + "title": "Send activity to ask a question", "description": "This is an action which sends an activity to the user when a response is expected", "type": "object", "required": [ @@ -965,7 +739,7 @@ "properties": { "expectedProperties": { "$ref": "#/definitions/arrayExpression", - "title": "Expected Properties", + "title": "Expected properties", "description": "Properties expected from the user.", "examples": [ [ @@ -981,7 +755,7 @@ }, "defaultOperation": { "$ref": "#/definitions/stringExpression", - "title": "Default Operation", + "title": "Default operation", "description": "Sets the default operation that will be used when no operation is recognized in the response to this Ask.", "examples": [ "Add()", @@ -1046,7 +820,7 @@ "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", "oneOf": [ { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", + "$ref": "#/definitions/botframework.json/definitions/Attachment", "title": "Object", "description": "Attachment object." }, @@ -1061,7 +835,7 @@ "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", "oneOf": [ { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", + "$ref": "#/definitions/botframework.json/definitions/Attachment", "title": "Object", "description": "Attachment object." }, @@ -1273,7 +1047,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the dialog that is called can process the current activity.", "default": true }, @@ -1331,7 +1105,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the skill will be started using the activity in the current turn context instead of the activity in the Activity property.", "default": true, "examples": [ @@ -1364,13 +1138,13 @@ }, "connectionName": { "$ref": "#/definitions/stringExpression", - "title": "OAuth Connection Name (SSO)", + "title": "OAuth connection name (SSO)", "description": "The OAuth Connection Name, that would be used to perform Single SignOn with a skill.", "default": "=settings.connectionName" }, "skillAppId": { "$ref": "#/definitions/stringExpression", - "title": "Skill App ID", + "title": "Skill App Id", "description": "The Microsoft App ID for the skill." }, "skillEndpoint": { @@ -1389,7 +1163,7 @@ }, "allowInterruptions": { "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", + "title": "Allow interruptions", "description": "A boolean expression that determines whether the parent should be allowed to interrupt the skill.", "default": true, "examples": [ @@ -1413,7 +1187,7 @@ }, "Microsoft.BreakLoop": { "$role": "implements(Microsoft.IDialog)", - "title": "Break Loop", + "title": "Break loop", "description": "Stop executing this loop", "type": "object", "required": [ @@ -1485,7 +1259,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the caller dialog is told it should process the current activity.", "default": true }, @@ -1545,7 +1319,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the caller dialog is told it should process the current activity.", "default": true }, @@ -1666,7 +1440,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", + "$ref": "#/definitions/botframework.json/definitions/CardAction", "title": "Action", "description": "Card action for the choice." }, @@ -1923,7 +1697,7 @@ }, "Microsoft.ConditionalSelector": { "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Conditional Trigger Selector", + "title": "Conditional trigger selector", "description": "Use a rule selector based on a condition", "type": "object", "required": [ @@ -2028,7 +1802,7 @@ ] }, "choiceOptions": { - "title": "Choice Options", + "title": "Choice options", "description": "Choice Options or expression which provides Choice Options to control display choices to the user.", "oneOf": [ { @@ -2118,7 +1892,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", + "$ref": "#/definitions/botframework.json/definitions/CardAction", "title": "Action", "description": "Card action for the choice." }, @@ -2262,7 +2036,7 @@ }, "Microsoft.ConfirmationEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Confirmation Entity Recognizer", + "title": "Confirmation entity recognizer", "description": "Recognizer which recognizes confirmation choices (yes/no).", "type": "object", "required": [ @@ -2292,7 +2066,7 @@ }, "Microsoft.ContinueConversationLater": { "$role": "implements(Microsoft.IDialog)", - "title": "Continue Conversation Later (Queue)", + "title": "Continue conversation later (Queue)", "description": "Continue conversation at later time (via Azure Storage Queue).", "type": "object", "required": [ @@ -2350,7 +2124,7 @@ }, "Microsoft.ContinueLoop": { "$role": "implements(Microsoft.IDialog)", - "title": "Continue Loop", + "title": "Continue loop", "description": "Stop executing this template and continue with the next iteration of the loop.", "type": "object", "required": [ @@ -2393,7 +2167,7 @@ }, "Microsoft.CrossTrainedRecognizerSet": { "$role": "implements(Microsoft.IRecognizer)", - "title": "Cross-trained Recognizer Set", + "title": "Cross-trained recognizer set", "description": "Recognizer for selecting between cross trained recognizers.", "type": "object", "required": [ @@ -2438,7 +2212,7 @@ }, "Microsoft.CurrencyEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Currency Entity Recognizer", + "title": "Currency entity recognizer", "description": "Recognizer which recognizes currency.", "type": "object", "required": [ @@ -2468,7 +2242,7 @@ }, "Microsoft.DateTimeEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "DateTime Entity Recognizer", + "title": "Date and time entity recognizer", "description": "Recognizer which recognizes dates and time fragments.", "type": "object", "required": [ @@ -2524,7 +2298,7 @@ "defaultValue": { "$ref": "#/definitions/stringExpression", "format": "date-time", - "title": "Default Date", + "title": "Default date", "description": "'Property' will be set to the value or the result of the expression when max turn count is exceeded.", "examples": [ "=user.birthday" @@ -2817,7 +2591,7 @@ }, "Microsoft.DeleteProperty": { "$role": "implements(Microsoft.IDialog)", - "title": "Delete Property", + "title": "Delete property", "description": "Delete a property and any value it holds.", "type": "object", "required": [ @@ -2866,7 +2640,7 @@ }, "Microsoft.DimensionEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Dimension Entity Recognizer", + "title": "Dimension entity recognizer", "description": "Recognizer which recognizes dimension.", "type": "object", "required": [ @@ -2997,7 +2771,7 @@ "oneOf": [ { "type": "string", - "title": "Enum", + "title": "Change type", "description": "Standard change type.", "enum": [ "push", @@ -3027,7 +2801,7 @@ }, "resultProperty": { "$ref": "#/definitions/stringExpression", - "title": "Result Property", + "title": "Result property", "description": "Property to store the result of this action." }, "value": { @@ -3056,7 +2830,7 @@ }, "Microsoft.EmailEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Email Entity Recognizer", + "title": "Email entity recognizer", "description": "Recognizer which recognizes email.", "type": "object", "required": [ @@ -3270,7 +3044,7 @@ }, "Microsoft.FirstSelector": { "$role": "implements(Microsoft.ITriggerSelector)", - "title": "First Trigger Selector", + "title": "First trigger selector", "description": "Selector for first true rule", "type": "object", "required": [ @@ -3454,7 +3228,7 @@ }, "Microsoft.GetActivityMembers": { "$role": "implements(Microsoft.IDialog)", - "title": "Get Activity Members", + "title": "Get activity members", "description": "Get the members who are participating in an activity. (BotFrameworkAdapter only)", "type": "object", "required": [ @@ -3483,7 +3257,7 @@ }, "activityId": { "$ref": "#/definitions/stringExpression", - "title": "ActivityId", + "title": "Activity Id", "description": "Activity ID or expression to an activityId to use to get the members. If none is defined then the current activity id will be used.", "examples": [ "$lastActivity" @@ -3513,7 +3287,7 @@ }, "Microsoft.GetConversationMembers": { "$role": "implements(Microsoft.IDialog)", - "title": "Get Converation Members", + "title": "Get conversation members", "description": "Get the members who are participating in an conversation. (BotFrameworkAdapter only)", "type": "object", "required": [ @@ -3564,7 +3338,7 @@ }, "Microsoft.GotoAction": { "$role": "implements(Microsoft.IDialog)", - "title": "Go to Action", + "title": "Go to action", "description": "Go to an an action by id.", "type": "object", "required": [ @@ -3613,7 +3387,7 @@ }, "Microsoft.GuidEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Guid Entity Recognizer", + "title": "Guid entity recognizer", "description": "Recognizer which recognizes guids.", "type": "object", "required": [ @@ -3643,7 +3417,7 @@ }, "Microsoft.HashtagEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Hashtag Entity Recognizer", + "title": "Hashtag entity recognizer", "description": "Recognizer which recognizes Hashtags.", "type": "object", "required": [ @@ -3803,513 +3577,10 @@ "type": "string" }, { + "$ref": "#/definitions/botframework.json/definitions/Activity", "required": [ "type" - ], - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation", - "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } - }, - "recipient": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/reactionsAdded/items" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "title": "suggestedActions", - "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "description": "A clickable action", - "title": "CardAction", - "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } - } - } - } - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "description": "An attachment within an activity", - "title": "Attachment", - "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "title": "relatesTo", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/conversation", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } - } - }, - "semanticAction": { - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/entities/items" - } - } - } - } - } + ] }, { "$ref": "#/definitions/Microsoft.ActivityTemplate" @@ -4320,7 +3591,7 @@ ] }, "Microsoft.IDialog": { - "title": "Microsoft Dialogs", + "title": "Microsoft dialogs", "description": "Components which derive from Dialog", "$role": "interface", "oneOf": [ @@ -4465,6 +3736,9 @@ { "$ref": "#/definitions/Microsoft.TextInput" }, + { + "$ref": "#/definitions/Teams.GetMeetingParticipant" + }, { "$ref": "#/definitions/Testbot.JavascriptAction" }, @@ -4481,7 +3755,7 @@ }, "Microsoft.IEntityRecognizer": { "$role": "interface", - "title": "Entity Recognizers", + "title": "Entity recognizers", "description": "Components which derive from EntityRecognizer.", "type": "object", "oneOf": [ @@ -4563,7 +3837,7 @@ ] }, "Microsoft.IRecognizer": { - "title": "Microsoft Recognizer", + "title": "Microsoft recognizer", "description": "Components which derive from Recognizer class", "$role": "interface", "oneOf": [ @@ -4571,10 +3845,10 @@ "type": "string" }, { - "$ref": "#/definitions/Microsoft.LuisRecognizer" + "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" }, { - "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" + "$ref": "#/definitions/Microsoft.LuisRecognizer" }, { "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" @@ -5001,7 +4275,7 @@ }, "Microsoft.IpEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Ip Entity Recognizer", + "title": "IP entity recognizer", "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", "type": "object", "required": [ @@ -5030,7 +4304,7 @@ } }, "Microsoft.LanguagePolicy": { - "title": "Language Policy", + "title": "Language policy", "description": "This represents a policy map for locales lookups to use for language", "type": "object", "required": [ @@ -5110,7 +4384,7 @@ }, "traceActivity": { "$ref": "#/definitions/booleanExpression", - "title": "Send Trace Activity", + "title": "Send trace activity", "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator)." }, "$kind": { @@ -5153,17 +4427,17 @@ }, "applicationId": { "$ref": "#/definitions/stringExpression", - "title": "LUIS Application ID", + "title": "LUIS application id", "description": "Application ID for your model from the LUIS service." }, "version": { "$ref": "#/definitions/stringExpression", - "title": "LUIS Version", + "title": "LUIS version", "description": "Optional version to target. If null then predictionOptions.Slot is used." }, "endpoint": { "$ref": "#/definitions/stringExpression", - "title": "LUIS Endpoint", + "title": "LUIS endpoint", "description": "Endpoint to use for LUIS service like https://westus.api.cognitive.microsoft.com." }, "endpointKey": { @@ -5173,7 +4447,7 @@ }, "externalEntityRecognizer": { "$kind": "Microsoft.IRecognizer", - "title": "External Entity Recognizer", + "title": "External entity recognizer", "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", "$ref": "#/definitions/Microsoft.IRecognizer" }, @@ -5243,7 +4517,7 @@ }, "preferExternalEntities": { "$ref": "#/definitions/booleanExpression", - "title": "Prefer External Entities", + "title": "Prefer external entities", "description": "True to prefer external entities to those generated by LUIS models." }, "slot": { @@ -5269,7 +4543,7 @@ }, "Microsoft.MentionEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Mentions Entity Recognizer", + "title": "Mentions entity recognizer", "description": "Recognizer which recognizes @Mentions", "type": "object", "required": [ @@ -5299,7 +4573,7 @@ }, "Microsoft.MostSpecificSelector": { "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Most Specific Trigger Selector", + "title": "Most specific trigger selector", "description": "Select most specific true events with optional additional selector", "type": "object", "required": [ @@ -5385,7 +4659,7 @@ }, "Microsoft.NumberEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Number Entity Recognizer", + "title": "Number entity recognizer", "description": "Recognizer which recognizes numbers.", "type": "object", "required": [ @@ -5586,7 +4860,7 @@ }, "Microsoft.NumberRangeEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "NumberRange Entity Recognizer", + "title": "Number range entity recognizer", "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", "type": "object", "required": [ @@ -5716,7 +4990,7 @@ }, "allowInterruptions": { "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", + "title": "Allow interruptions", "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", "default": true, "examples": [ @@ -6335,7 +5609,7 @@ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], - "title": "On Continue Conversation", + "title": "On continue conversation", "description": "Actions to perform when a conversation is started up again from a ContinueConversationLater action.", "type": "object", "required": [ @@ -6666,7 +5940,7 @@ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], - "title": "On Error", + "title": "On error", "description": "Action to perform when an 'Error' dialog event occurs.", "type": "object", "required": [ @@ -7331,7 +6605,7 @@ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], - "title": "On QnAMaker Match", + "title": "On QnAMaker match", "description": "Actions to perform on when an match from QnAMaker is found.", "type": "object", "required": [ @@ -7588,7 +6862,7 @@ }, "Microsoft.OrchestratorRecognizer": { "$role": "implements(Microsoft.IRecognizer)", - "title": "Orchestrator Recognizer", + "title": "Orchestrator recognizer", "description": "Orchestrator recognizer.", "type": "object", "required": [ @@ -7617,7 +6891,7 @@ }, "snapshotPath": { "$ref": "#/definitions/stringExpression", - "title": "Endpoint Key", + "title": "Endpoint key", "description": "SnapShot file path.", "default": "=settings.orchestrator.shapshotpath" }, @@ -7668,7 +6942,7 @@ }, "Microsoft.OrdinalEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Ordinal Entity Recognizer", + "title": "Ordinal entity recognizer", "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", "type": "object", "required": [ @@ -7698,7 +6972,7 @@ }, "Microsoft.PercentageEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Percentage Entity Recognizer", + "title": "Percentage entity recognizer", "description": "Recognizer which recognizes percentages.", "type": "object", "required": [ @@ -7728,7 +7002,7 @@ }, "Microsoft.PhoneNumberEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Phone Number Entity Recognizer", + "title": "Phone number entity recognizer", "description": "Recognizer which recognizes phone numbers.", "type": "object", "required": [ @@ -7758,7 +7032,7 @@ }, "Microsoft.QnAMakerDialog": { "$role": "implements(Microsoft.IDialog)", - "title": "QnAMaker Dialog", + "title": "QnAMaker dialog", "description": "Dialog which uses QnAMAker knowledge base to answer questions.", "type": "object", "required": [ @@ -7783,7 +7057,7 @@ }, "endpointKey": { "$ref": "#/definitions/stringExpression", - "title": "Endpoint Key", + "title": "Endpoint key", "description": "Endpoint key for the QnA Maker KB.", "default": "=settings.qna.endpointkey" }, @@ -7830,7 +7104,7 @@ }, "strictFilters": { "$ref": "#/definitions/arrayExpression", - "title": "Strict Filters", + "title": "Strict filters", "description": "Metadata filters to use when calling the QnA Maker KB.", "items": { "type": "object", @@ -7866,7 +7140,7 @@ }, "rankerType": { "$ref": "#/definitions/stringExpression", - "title": "Ranker Type", + "title": "Ranker type", "description": "Type of Ranker.", "oneOf": [ { @@ -7890,7 +7164,7 @@ "description": "Join operator for Strict Filters.", "oneOf": [ { - "title": "Join Operator", + "title": "Join operator", "description": "Value of Join Operator to be used as conjunction with Strict Filter values.", "enum": [ "AND", @@ -7919,7 +7193,7 @@ }, "Microsoft.QnAMakerRecognizer": { "$role": "implements(Microsoft.IRecognizer)", - "title": "QnAMaker Recognizer", + "title": "QnAMaker recognizer", "description": "Recognizer for generating QnAMatch intents from a KB.", "type": "object", "required": [ @@ -7944,12 +7218,12 @@ "knowledgeBaseId": { "$ref": "#/definitions/stringExpression", "title": "KnowledgeBase Id", - "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", + "description": "Knowledge base Id of your QnA Maker knowledge base.", "default": "=settings.qna.knowledgebaseid" }, "endpointKey": { "$ref": "#/definitions/stringExpression", - "title": "Endpoint Key", + "title": "Endpoint key", "description": "Endpoint key for the QnA Maker KB.", "default": "=settings.qna.endpointkey" }, @@ -7970,7 +7244,7 @@ }, "strictFilters": { "$ref": "#/definitions/arrayExpression", - "title": "Strict Filters", + "title": "Strict filters", "description": "Metadata filters to use when calling the QnA Maker KB.", "items": { "type": "object", @@ -8000,7 +7274,7 @@ }, "isTest": { "$ref": "#/definitions/booleanExpression", - "title": "IsTest", + "title": "Use test environment", "description": "True, if pointing to Test environment, else false.", "examples": [ true, @@ -8008,7 +7282,7 @@ ] }, "rankerType": { - "title": "Ranker Type", + "title": "Ranker type", "description": "Type of Ranker.", "oneOf": [ { @@ -8033,7 +7307,7 @@ "description": "Join operator for Strict Filters.", "oneOf": [ { - "title": "Join Operator", + "title": "Join operator", "description": "Value of Join Operator to be used as onjuction with Strict Filter values.", "enum": [ "AND", @@ -8048,7 +7322,7 @@ }, "includeDialogNameInMetadata": { "$ref": "#/definitions/booleanExpression", - "title": "Include Dialog Name", + "title": "Include dialog name", "description": "When set to false, the dialog name will not be passed to QnAMaker. (default) is true", "default": true, "examples": [ @@ -8080,12 +7354,12 @@ }, "context": { "$ref": "#/definitions/objectExpression", - "title": "QnARequestContext", + "title": "QnA request context", "description": "Context to use for ranking." }, "qnaId": { "$ref": "#/definitions/integerExpression", - "title": "QnAId", + "title": "QnA Id", "description": "A number or expression which is the QnAId to paass to QnAMaker API." }, "$kind": { @@ -8139,7 +7413,7 @@ }, "Microsoft.RecognizerSet": { "$role": "implements(Microsoft.IRecognizer)", - "title": "Recognizer Set", + "title": "Recognizer set", "description": "Creates the union of the intents and entities of the recognizers in the set.", "type": "object", "required": [ @@ -8184,7 +7458,7 @@ }, "Microsoft.RegexEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Regex Entity Recognizer", + "title": "Regex entity recognizer", "description": "Recognizer which recognizes patterns of input based on regex.", "type": "object", "required": [ @@ -8339,7 +7613,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the dialog that is called can process the current activity.", "default": true }, @@ -8416,7 +7690,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the dialog that is called can process the current activity.", "default": true }, @@ -8436,7 +7710,7 @@ }, "Microsoft.ResourceMultiLanguageGenerator": { "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Resource Multi-Language Generator", + "title": "Resource multi-language generator", "description": "MultiLanguage Generator which is bound to resource by resource Id.", "type": "object", "required": [ @@ -8463,7 +7737,7 @@ }, "languagePolicy": { "type": "object", - "title": "Language Policy", + "title": "Language policy", "description": "Set alternate language policy for this generator. If not set, the global language policy will be used." }, "$kind": { @@ -8670,7 +7944,7 @@ }, "Microsoft.SignOutUser": { "$role": "implements(Microsoft.IDialog)", - "title": "Sign Out User", + "title": "Sign out user", "description": "Sign a user out that was logged in previously using OAuthInput.", "type": "object", "required": [ @@ -8697,7 +7971,7 @@ }, "connectionName": { "$ref": "#/definitions/stringExpression", - "title": "Connection Name", + "title": "Connection name", "description": "Connection name that was used with OAuthInput to log a user in." }, "disabled": { @@ -8725,7 +7999,7 @@ }, "Microsoft.StaticActivityTemplate": { "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft Static Activity Template", + "title": "Microsoft static activity template", "description": "This allows you to define a static Activity object", "type": "object", "required": [ @@ -8741,7 +8015,7 @@ }, "properties": { "activity": { - "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1", + "$ref": "#/definitions/botframework.json/definitions/Activity", "title": "Activity", "description": "A static Activity to used.", "required": [ @@ -8867,7 +8141,7 @@ "Microsoft.TelemetryTrackEvent": { "$role": "implements(Microsoft.IDialog)", "type": "object", - "title": "Telemetry - Track Event", + "title": "Telemetry - track event", "description": "Track a custom event using the registered Telemetry Client.", "required": [ "url", @@ -8897,7 +8171,7 @@ }, "eventName": { "$ref": "#/definitions/stringExpression", - "title": "Event Name", + "title": "Event name", "description": "The name of the event to track.", "examples": [ "MyEventStarted", @@ -8928,7 +8202,7 @@ }, "Microsoft.TemperatureEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Temperature Recognizer", + "title": "Temperature recognizer", "description": "Recognizer which recognizes temperatures.", "type": "object", "required": [ @@ -8958,7 +8232,7 @@ }, "Microsoft.TemplateEngineLanguageGenerator": { "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Template Multi-Language Generator", + "title": "Template multi-language generator", "description": "Template Generator which allows only inline evaluation of templates.", "type": "object", "required": [ @@ -9035,9 +8309,44 @@ } } }, + "Microsoft.Test.AssertNoActivity": { + "$role": "implements(Microsoft.Test.ITestAction)", + "title": "Assert Reply Activity", + "description": "Asserts that there is no activity.", + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "description": { + "type": "string", + "title": "Description", + "description": "The description of the assertion" + }, + "$kind": { + "title": "Kind of dialog object", + "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.Test.AssertNoActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, "Microsoft.Test.AssertReply": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Assert Reply", + "title": "Assert reply", "description": "Asserts that a reply text is valid.", "type": "object", "required": [ @@ -9053,12 +8362,12 @@ "properties": { "text": { "type": "string", - "title": "Reply Text", + "title": "Reply text", "description": "Expected reply text" }, "exact": { "type": "boolean", - "title": "Exact Match", + "title": "Exact match", "description": "If true then an exact match must happen, if false then the reply activity.text must contain the reply text. [Default:false]" }, "description": { @@ -9073,7 +8382,7 @@ }, "assertions": { "type": "array", - "title": "Assertions to perform to validate Activity that is sent by the dialog", + "title": "Assertions to validate activity", "description": "Sequence of expressions which must evaluate to true.", "items": { "$ref": "#/definitions/condition", @@ -9100,7 +8409,7 @@ }, "Microsoft.Test.AssertReplyActivity": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Assert Reply Activity", + "title": "Assert reply activity", "description": "Asserts that a reply activity is valid.", "type": "object", "required": [ @@ -9127,7 +8436,7 @@ }, "assertions": { "type": "array", - "title": "Assertions to perform to validate Activity that is sent by the dialog", + "title": "Assertions to validate Activity that is sent by the dialog", "description": "Sequence of expressions which must evaluate to true.", "items": { "$ref": "#/definitions/condition", @@ -9154,7 +8463,7 @@ }, "Microsoft.Test.AssertReplyOneOf": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Assert Reply OneOf", + "title": "Assert activity text matches at least one", "description": "Asserts that a reply text is one of multiple optional responses.", "type": "object", "required": [ @@ -9180,7 +8489,7 @@ }, "exact": { "type": "boolean", - "title": "Exact Match", + "title": "Exact match", "description": "If true then an exact match must happen, if false then the reply activity.text must contain the reply text. [Default:false]" }, "description": { @@ -9195,7 +8504,7 @@ }, "assertions": { "type": "array", - "title": "Assertions to perform to validate Activity that is sent by the dialog", + "title": "Assertions to validate activity", "description": "Sequence of expressions which must evaluate to true.", "items": { "$ref": "#/definitions/condition", @@ -9222,7 +8531,7 @@ }, "Microsoft.Test.CustomEvent": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "User Event", + "title": "User event", "description": "Sends event to the bot from the user.", "type": "object", "required": [ @@ -9240,7 +8549,7 @@ "properties": { "name": { "type": "string", - "title": "Event Name", + "title": "Event name", "description": "Event name to send to the bot." }, "value": { @@ -9264,7 +8573,7 @@ }, "Microsoft.Test.HttpRequestSequenceMock": { "$role": "implements(Microsoft.Test.IHttpRequestMock)", - "title": "HttpRequest Sequence Mock", + "title": "HTTP request sequence mock", "description": "Mock HttpRequest in sequence order.", "type": "object", "required": [ @@ -9305,7 +8614,7 @@ }, "matchType": { "type": "string", - "title": "Body Match Type", + "title": "Body match type", "description": "The match type for body.", "enum": [ "Exact", @@ -9335,12 +8644,12 @@ "description": "Mocked http response.", "properties": { "statusCode": { - "title": "Status Code", + "title": "Status code", "description": "The status code. Default is OK(200).", "oneOf": [ { "type": "string", - "title": "String Status Code", + "title": "String status code", "description": "Use string as status code.", "enum": [ "Continue", @@ -9397,7 +8706,7 @@ }, { "type": "number", - "title": "Number Status Code", + "title": "Number status code", "description": "Use number as status code.", "examples": [ 200 @@ -9408,7 +8717,7 @@ }, "reasonPhrase": { "type": "string", - "title": "Reason Phrase", + "title": "Reason phrase", "description": "The reason phrase.", "examples": [ "Server is stolen." @@ -9469,7 +8778,7 @@ } }, "Microsoft.Test.IHttpRequestMock": { - "title": "Microsoft Test IHttpRequestMock", + "title": "HTTP request mock", "description": "Components which derive from HttpRequestMock class", "$role": "interface", "oneOf": [ @@ -9484,12 +8793,12 @@ ] }, "Microsoft.Test.IPropertyMock": { - "title": "Microsoft Test IPropertyMock", + "title": "Property mock", "description": "Components which derive from PropertyMock class", "$role": "interface" }, "Microsoft.Test.ITestAction": { - "title": "Microsoft Test ITestAction", + "title": "Test action", "description": "Components which derive from TestAction class", "$role": "interface", "oneOf": [ @@ -9498,6 +8807,9 @@ "title": "Reference to Microsoft.Test.ITestAction", "description": "Reference to Microsoft.Test.ITestAction .dialog file." }, + { + "$ref": "#/definitions/Microsoft.Test.AssertNoActivity" + }, { "$ref": "#/definitions/Microsoft.Test.AssertReply" }, @@ -9534,7 +8846,7 @@ ] }, "Microsoft.Test.IUserTokenMock": { - "title": "Microsoft Test IUserTokenMock", + "title": "User token mock", "description": "Components which derive from UserTokenMock class", "$role": "interface", "oneOf": [ @@ -9599,7 +8911,7 @@ }, "Microsoft.Test.Script": { "$role": [], - "title": "Test Script", + "title": "Test script", "description": "Defines a sequence of test actions to perform to validate the behavior of dialogs.", "type": "object", "required": [ @@ -9621,11 +8933,6 @@ "description": "The root dialog to execute the test script against.", "$ref": "#/definitions/Microsoft.IDialog" }, - "languagePolicy": { - "type": "object", - "title": "Language policy", - "description": "Defines fall back languages to try per user input language." - }, "description": { "type": "string", "title": "Description", @@ -9633,7 +8940,7 @@ }, "httpRequestMocks": { "type": "array", - "title": "Http Request Mocks", + "title": "Http request mocks", "description": "Mock data for Microsoft.HttpRequest.", "items": { "$kind": "Microsoft.Test.IHttpRequestMock", @@ -9642,7 +8949,7 @@ }, "userTokenMocks": { "type": "array", - "title": "User Token Mocks", + "title": "User token mocks", "description": "Mock data for Microsoft.OAuthInput.", "items": { "$kind": "Microsoft.Test.IUserTokenMock", @@ -9666,7 +8973,7 @@ }, "enableTrace": { "type": "boolean", - "title": "Enable Trace Activity", + "title": "Enable trace activity", "description": "Enable trace activities in the unit test (default is false)", "default": false }, @@ -9747,7 +9054,7 @@ }, "Microsoft.Test.UserActivity": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Send Activity", + "title": "Send activity", "description": "Sends activity to the bot.", "type": "object", "required": [ @@ -9770,7 +9077,7 @@ }, "user": { "type": "string", - "title": "User Name", + "title": "User name", "description": "The activity.from.id and activity.from.name will be this if specified." }, "$kind": { @@ -9805,7 +9112,7 @@ "properties": { "membersAdded": { "type": "array", - "title": "Members Added", + "title": "Members added", "description": "Names of the members to add", "items": { "type": "string", @@ -9815,7 +9122,7 @@ }, "membersRemoved": { "type": "array", - "title": "Members Removed", + "title": "Members removed", "description": "Names of the members to remove", "items": { "type": "string", @@ -9839,7 +9146,7 @@ }, "Microsoft.Test.UserDelay": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Delay Execution", + "title": "Delay execution", "description": "Delays text script for time period.", "type": "object", "required": [ @@ -9875,7 +9182,7 @@ }, "Microsoft.Test.UserSays": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "User Text", + "title": "User text", "description": "Sends text to the bot from the user.", "type": "object", "required": [ @@ -9897,7 +9204,7 @@ }, "user": { "type": "string", - "title": "User Name", + "title": "User name", "description": "The activity.from.id and activity.from.name will be this if specified." }, "$kind": { @@ -9916,7 +9223,7 @@ }, "Microsoft.Test.UserTokenBasicMock": { "$role": "implements(Microsoft.Test.IUserTokenMock)", - "title": "Microsoft Test UserTokenBasicMock", + "title": "User token mock", "description": "Mock Basic UserToken", "type": "object", "required": [ @@ -9934,7 +9241,7 @@ "properties": { "connectionName": { "type": "string", - "title": "Connection Name", + "title": "Connection name", "description": "The connection name.", "examples": [ "graph" @@ -9942,7 +9249,7 @@ }, "channelId": { "type": "string", - "title": "Channel ID", + "title": "Channel Id", "description": "The channel ID. If empty, same as adapter.Conversation.ChannelId.", "examples": [ "test" @@ -9950,7 +9257,7 @@ }, "userId": { "type": "string", - "title": "User ID", + "title": "User Id", "description": "The user ID. If empty, same as adapter.Conversation.User.Id.", "examples": [ "user1" @@ -9966,7 +9273,7 @@ }, "magicCode": { "type": "string", - "title": "Magic Code", + "title": "Magic code", "description": "The optional magic code to associate with this token.", "examples": [ "000000" @@ -9988,7 +9295,7 @@ }, "Microsoft.Test.UserTyping": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Send Typing", + "title": "Send typing", "description": "Sends typing activity to the bot.", "type": "object", "required": [ @@ -10004,7 +9311,7 @@ "properties": { "user": { "type": "string", - "title": "User Name", + "title": "User name", "description": "The activity.from.id and activity.from.name will be this if specified." }, "$kind": { @@ -10339,7 +9646,7 @@ }, "Microsoft.TrueSelector": { "$role": "implements(Microsoft.ITriggerSelector)", - "title": "True Trigger Selector", + "title": "True trigger selector", "description": "Selector for all true events", "type": "object", "required": [ @@ -10427,7 +9734,7 @@ }, "Microsoft.UrlEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Confirmation Url Recognizer", + "title": "Url recognizer", "description": "Recognizer which recognizes urls.", "type": "object", "required": [ @@ -10455,16 +9762,12 @@ } } }, - "Teams.OnAppBasedLinkQuery": { - "$role": [ - "implements(Microsoft.ITrigger)", - "extends(Microsoft.OnCondition)" - ], - "title": "OnTeamsAppBasedLinkQuery", - "description": "Actions triggered when a Teams activity is received with activity.name == 'composeExtension/queryLink'.", + "Teams.GetMeetingParticipant": { + "$role": "implements(Microsoft.IDialog)", + "title": "Get meeting participant", + "description": "Get teams meeting partipant information.", "type": "object", "required": [ - "actions", "$kind" ], "additionalProperties": false, @@ -10475,41 +9778,120 @@ } }, "properties": { - "condition": { - "$ref": "#/definitions/condition", - "title": "Condition", - "description": "Condition (expression).", + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", "examples": [ - "user.vip == true" + "user.participantInfo" ] }, - "actions": { - "type": "array", - "title": "Actions", - "description": "Sequence of actions to execute.", - "items": { - "$kind": "Microsoft.IDialog", - "$ref": "#/definitions/Microsoft.IDialog" - } + "meetingId": { + "$ref": "#/definitions/stringExpression", + "title": "Meeting Id", + "description": "Meeting Id or expression to a meetingId to use to get the participant information. Default value is the current turn.activity.channelData.meeting.id.", + "examples": [ + "=turn.activity.channelData.meeting.id" + ] }, - "priority": { - "$ref": "#/definitions/integerExpression", - "title": "Priority", - "description": "Priority for trigger with 0 being the highest and < 0 ignored." + "participantId": { + "$ref": "#/definitions/stringExpression", + "title": "Participant Id", + "description": "Participant Id or expression to a participantId to use to get the participant information. Default value is the current turn.activity.from.aadObjectId.", + "examples": [ + "=turn.activity.from.aadObjectId" + ] }, - "runOnce": { - "$ref": "#/definitions/booleanExpression", - "title": "Run Once", - "description": "True if rule should run once per unique conditions", + "tenantId": { + "$ref": "#/definitions/stringExpression", + "title": "Tenant Id", + "description": "Tenant Id or expression to a tenantId to use to get the participant information. Default value is the current $turn.activity.channelData.tenant.id.", "examples": [ - true, - "=f(x)" + "=turn.activity.channelData.tenant.id" ] }, - "$kind": { - "title": "Kind of dialog object", - "description": "Defines the valid properties for the component you are configuring (from a dialog .schema file)", - "type": "string", + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "=user.age > 3" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "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": "Teams.GetMeetingParticipant" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Teams.OnAppBasedLinkQuery": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "OnTeamsAppBasedLinkQuery", + "description": "Actions triggered when a Teams activity is received with activity.name == 'composeExtension/queryLink'.", + "type": "object", + "required": [ + "actions", + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "condition": { + "$ref": "#/definitions/condition", + "title": "Condition", + "description": "Condition (expression).", + "examples": [ + "user.vip == true" + ] + }, + "actions": { + "type": "array", + "title": "Actions", + "description": "Sequence of actions to execute.", + "items": { + "$kind": "Microsoft.IDialog", + "$ref": "#/definitions/Microsoft.IDialog" + } + }, + "priority": { + "$ref": "#/definitions/integerExpression", + "title": "Priority", + "description": "Priority for trigger with 0 being the highest and < 0 ignored." + }, + "runOnce": { + "$ref": "#/definitions/booleanExpression", + "title": "Run Once", + "description": "True if rule should run once per unique conditions", + "examples": [ + true, + "=f(x)" + ] + }, + "$kind": { + "title": "Kind of dialog object", + "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": "Teams.OnAppBasedLinkQuery" }, @@ -12351,6 +11733,790 @@ ] } ] + }, + "schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/schema" + } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "type": "integer", + "minimum": 0, + "default": 0 + }, + "simpleTypes": { + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "stringArray": { + "type": "array", + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + } + }, + "type": [ + "object", + "boolean" + ], + "default": true, + "properties": { + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "writeOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minLength": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { + "$ref": "#/definitions/schema" + }, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "$ref": "#/definitions/schema/definitions/schemaArray" + } + ], + "default": true + }, + "maxItems": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minItems": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { + "$ref": "#/definitions/schema" + }, + "maxProperties": { + "$ref": "#/definitions/schema/definitions/nonNegativeInteger" + }, + "minProperties": { + "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" + }, + "required": { + "$ref": "#/definitions/schema/definitions/stringArray" + }, + "additionalProperties": { + "$ref": "#/definitions/schema" + }, + "definitions": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "patternProperties": { + "type": "object", + "propertyNames": { + "format": "regex" + }, + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/schema" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/definitions/schema" + }, + { + "$ref": "#/definitions/schema/definitions/stringArray" + } + ] + } + }, + "propertyNames": { + "$ref": "#/definitions/schema" + }, + "const": true, + "enum": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": true + }, + "type": { + "anyOf": [ + { + "$ref": "#/definitions/schema/definitions/simpleTypes" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/schema/definitions/simpleTypes" + }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "contentEncoding": { + "type": "string" + }, + "if": { + "$ref": "#/definitions/schema" + }, + "then": { + "$ref": "#/definitions/schema" + }, + "else": { + "$ref": "#/definitions/schema" + }, + "allOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "anyOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "oneOf": { + "$ref": "#/definitions/schema/definitions/schemaArray" + }, + "not": { + "$ref": "#/definitions/schema" + } + } + }, + "botframework.json": { + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ChannelAccount": { + "description": "Channel account information needed to route a message", + "title": "ChannelAccount", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "type": "string", + "title": "role" + } + } + }, + "ConversationAccount": { + "description": "Channel account information for a conversation", + "title": "ConversationAccount", + "type": "object", + "required": [ + "conversationType", + "id", + "isGroup", + "name" + ], + "properties": { + "isGroup": { + "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", + "type": "boolean", + "title": "isGroup" + }, + "conversationType": { + "description": "Indicates the type of the conversation in channels that distinguish between conversation types", + "type": "string", + "title": "conversationType" + }, + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "enum": [ + "bot", + "user" + ], + "type": "string", + "title": "role" + } + } + }, + "MessageReaction": { + "description": "Message reaction object", + "title": "MessageReaction", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Message reaction type. Possible values include: 'like', 'plusOne'", + "type": "string", + "title": "type" + } + } + }, + "CardAction": { + "description": "A clickable action", + "title": "CardAction", + "type": "object", + "required": [ + "title", + "type", + "value" + ], + "properties": { + "type": { + "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", + "type": "string", + "title": "type" + }, + "title": { + "description": "Text description which appears on the button", + "type": "string", + "title": "title" + }, + "image": { + "description": "Image URL which will appear on the button, next to text label", + "type": "string", + "title": "image" + }, + "text": { + "description": "Text for this action", + "type": "string", + "title": "text" + }, + "displayText": { + "description": "(Optional) text to display in the chat feed if the button is clicked", + "type": "string", + "title": "displayText" + }, + "value": { + "description": "Supplementary parameter for action. Content of this property depends on the ActionType", + "title": "value" + }, + "channelData": { + "description": "Channel-specific data associated with this action", + "title": "channelData" + } + } + }, + "SuggestedActions": { + "description": "SuggestedActions that can be performed", + "title": "SuggestedActions", + "type": "object", + "required": [ + "actions", + "to" + ], + "properties": { + "to": { + "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", + "type": "array", + "title": "to", + "items": { + "title": "Id", + "description": "Id of recipient.", + "type": "string" + } + }, + "actions": { + "description": "Actions that can be shown to the user", + "type": "array", + "title": "actions", + "items": { + "$ref": "#/definitions/botframework.json/definitions/CardAction" + } + } + } + }, + "Attachment": { + "description": "An attachment within an activity", + "title": "Attachment", + "type": "object", + "required": [ + "contentType" + ], + "properties": { + "contentType": { + "description": "mimetype/Contenttype for the file", + "type": "string", + "title": "contentType" + }, + "contentUrl": { + "description": "Content Url", + "type": "string", + "title": "contentUrl" + }, + "content": { + "type": "object", + "description": "Embedded content", + "title": "content" + }, + "name": { + "description": "(OPTIONAL) The name of the attachment", + "type": "string", + "title": "name" + }, + "thumbnailUrl": { + "description": "(OPTIONAL) Thumbnail associated with attachment", + "type": "string", + "title": "thumbnailUrl" + } + } + }, + "Entity": { + "description": "Metadata object pertaining to an activity", + "title": "Entity", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Type of this entity (RFC 3987 IRI)", + "type": "string", + "title": "type" + } + } + }, + "ConversationReference": { + "description": "An object relating to a particular point in a conversation", + "title": "ConversationReference", + "type": "object", + "required": [ + "bot", + "channelId", + "conversation", + "serviceUrl" + ], + "properties": { + "activityId": { + "description": "(Optional) ID of the activity to refer to", + "type": "string", + "title": "activityId" + }, + "user": { + "description": "(Optional) User participating in this conversation", + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "title": "user" + }, + "bot": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Bot participating in this conversation", + "title": "bot" + }, + "conversation": { + "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", + "description": "Conversation reference", + "title": "conversation" + }, + "channelId": { + "description": "Channel ID", + "type": "string", + "title": "channelId" + }, + "serviceUrl": { + "description": "Service endpoint where operations concerning the referenced conversation may be performed", + "type": "string", + "title": "serviceUrl" + } + } + }, + "TextHighlight": { + "description": "Refers to a substring of content within another field", + "title": "TextHighlight", + "type": "object", + "required": [ + "occurrence", + "text" + ], + "properties": { + "text": { + "description": "Defines the snippet of text to highlight", + "type": "string", + "title": "text" + }, + "occurrence": { + "description": "Occurrence of the text field within the referenced text, if multiple exist.", + "type": "number", + "title": "occurrence" + } + } + }, + "SemanticAction": { + "description": "Represents a reference to a programmatic action", + "title": "SemanticAction", + "type": "object", + "required": [ + "entities", + "id" + ], + "properties": { + "id": { + "description": "ID of this action", + "type": "string", + "title": "id" + }, + "entities": { + "description": "Entities associated with this action", + "type": "object", + "title": "entities", + "additionalProperties": { + "$ref": "#/definitions/botframework.json/definitions/Entity" + } + } + } + }, + "Activity": { + "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", + "title": "Activity", + "type": "object", + "properties": { + "type": { + "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", + "type": "string", + "title": "type" + }, + "id": { + "description": "Contains an ID that uniquely identifies the activity on the channel.", + "type": "string", + "title": "id" + }, + "timestamp": { + "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", + "type": "string", + "format": "date-time", + "title": "timestamp" + }, + "localTimestamp": { + "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", + "type": "string", + "format": "date-time", + "title": "localTimestamp" + }, + "localTimezone": { + "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", + "type": "string", + "title": "localTimezone" + }, + "serviceUrl": { + "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", + "type": "string", + "title": "serviceUrl" + }, + "channelId": { + "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", + "type": "string", + "title": "channelId" + }, + "from": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Identifies the sender of the message.", + "title": "from" + }, + "conversation": { + "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", + "description": "Identifies the conversation to which the activity belongs.", + "title": "conversation" + }, + "recipient": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", + "description": "Identifies the recipient of the message.", + "title": "recipient" + }, + "textFormat": { + "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", + "type": "string", + "title": "textFormat" + }, + "attachmentLayout": { + "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", + "type": "string", + "title": "attachmentLayout" + }, + "membersAdded": { + "description": "The collection of members added to the conversation.", + "type": "array", + "title": "membersAdded", + "items": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" + } + }, + "membersRemoved": { + "description": "The collection of members removed from the conversation.", + "type": "array", + "title": "membersRemoved", + "items": { + "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" + } + }, + "reactionsAdded": { + "description": "The collection of reactions added to the conversation.", + "type": "array", + "title": "reactionsAdded", + "items": { + "$ref": "#/definitions/botframework.json/definitions/MessageReaction" + } + }, + "reactionsRemoved": { + "description": "The collection of reactions removed from the conversation.", + "type": "array", + "title": "reactionsRemoved", + "items": { + "$ref": "#/definitions/botframework.json/definitions/MessageReaction" + } + }, + "topicName": { + "description": "The updated topic name of the conversation.", + "type": "string", + "title": "topicName" + }, + "historyDisclosed": { + "description": "Indicates whether the prior history of the channel is disclosed.", + "type": "boolean", + "title": "historyDisclosed" + }, + "locale": { + "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", + "type": "string", + "title": "locale" + }, + "text": { + "description": "The text content of the message.", + "type": "string", + "title": "text" + }, + "speak": { + "description": "The text to speak.", + "type": "string", + "title": "speak" + }, + "inputHint": { + "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", + "type": "string", + "title": "inputHint" + }, + "summary": { + "description": "The text to display if the channel cannot render cards.", + "type": "string", + "title": "summary" + }, + "suggestedActions": { + "description": "The suggested actions for the activity.", + "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", + "title": "suggestedActions" + }, + "attachments": { + "description": "Attachments", + "type": "array", + "title": "attachments", + "items": { + "$ref": "#/definitions/botframework.json/definitions/Attachment" + } + }, + "entities": { + "description": "Represents the entities that were mentioned in the message.", + "type": "array", + "title": "entities", + "items": { + "$ref": "#/definitions/botframework.json/definitions/Entity" + } + }, + "channelData": { + "description": "Contains channel-specific content.", + "title": "channelData" + }, + "action": { + "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", + "type": "string", + "title": "action" + }, + "replyToId": { + "description": "Contains the ID of the message to which this message is a reply.", + "type": "string", + "title": "replyToId" + }, + "label": { + "description": "A descriptive label for the activity.", + "type": "string", + "title": "label" + }, + "valueType": { + "description": "The type of the activity's value object.", + "type": "string", + "title": "valueType" + }, + "value": { + "description": "A value that is associated with the activity.", + "title": "value" + }, + "name": { + "description": "The name of the operation associated with an invoke or event activity.", + "type": "string", + "title": "name" + }, + "relatesTo": { + "description": "A reference to another conversation or activity.", + "$ref": "#/definitions/botframework.json/definitions/ConversationReference", + "title": "relatesTo" + }, + "code": { + "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", + "type": "string", + "title": "code" + }, + "expiration": { + "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", + "type": "string", + "format": "date-time", + "title": "expiration" + }, + "importance": { + "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", + "type": "string", + "title": "importance" + }, + "deliveryMode": { + "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", + "type": "string", + "title": "deliveryMode" + }, + "listenFor": { + "description": "List of phrases and references that speech and language priming systems should listen for", + "type": "array", + "title": "listenFor", + "items": { + "type": "string", + "title": "Phrase", + "description": "Phrase to listen for." + } + }, + "textHighlights": { + "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", + "type": "array", + "title": "textHighlights", + "items": { + "$ref": "#/definitions/botframework.json/definitions/TextHighlight" + } + }, + "semanticAction": { + "$ref": "#/definitions/botframework.json/definitions/SemanticAction", + "description": "An optional programmatic action accompanying this request", + "title": "semanticAction" + } + } + } + } } } } From c37e0d1ec2e3301a355f3ca022171b87bec71614 Mon Sep 17 00:00:00 2001 From: hond Date: Mon, 19 Oct 2020 13:57:43 +0800 Subject: [PATCH 15/17] update schema --- tests/tests.schema | 2340 +++++++++++++++++++++--------------------- tests/tests.uischema | 358 +++---- 2 files changed, 1327 insertions(+), 1371 deletions(-) diff --git a/tests/tests.schema b/tests/tests.schema index 959aa925c8..38527e6d7a 100644 --- a/tests/tests.schema +++ b/tests/tests.schema @@ -665,7 +665,239 @@ "description": "Schema to fill in.", "anyOf": [ { - "$ref": "#/definitions/schema" + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "type": "integer", + "minimum": 0, + "default": 0 + }, + "simpleTypes": { + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "stringArray": { + "type": "array", + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + } + }, + "type": [ + "object", + "boolean" + ], + "properties": { + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "writeOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minLength": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + } + ], + "default": true + }, + "maxItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "maxProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "required": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" + }, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "definitions": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "patternProperties": { + "type": "object", + "propertyNames": { + "format": "regex" + }, + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" + } + ] + } + }, + "propertyNames": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "const": true, + "enum": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": true + }, + "type": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" + }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "contentEncoding": { + "type": "string" + }, + "if": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "then": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "else": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "allOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "anyOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "oneOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "not": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "default": true }, { "type": "string", @@ -820,7 +1052,7 @@ "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", "oneOf": [ { - "$ref": "#/definitions/botframework.json/definitions/Attachment", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", "title": "Object", "description": "Attachment object." }, @@ -835,7 +1067,7 @@ "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", "oneOf": [ { - "$ref": "#/definitions/botframework.json/definitions/Attachment", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", "title": "Object", "description": "Attachment object." }, @@ -1440,7 +1672,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", "title": "Action", "description": "Card action for the choice." }, @@ -1892,7 +2124,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", "title": "Action", "description": "Card action for the choice." }, @@ -3577,181 +3809,684 @@ "type": "string" }, { - "$ref": "#/definitions/botframework.json/definitions/Activity", "required": [ "type" - ] - }, - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - } - ] - }, - "Microsoft.IDialog": { - "title": "Microsoft dialogs", - "description": "Components which derive from Dialog", - "$role": "interface", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.Test.AssertCondition" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { - "$ref": "#/definitions/Microsoft.CancelDialog" - }, - { - "$ref": "#/definitions/Microsoft.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.ContinueLoop" - }, - { - "$ref": "#/definitions/Microsoft.DebugBreak" - }, - { - "$ref": "#/definitions/Microsoft.DeleteActivity" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperties" - }, - { - "$ref": "#/definitions/Microsoft.DeleteProperty" - }, - { - "$ref": "#/definitions/Microsoft.EditActions" - }, - { - "$ref": "#/definitions/Microsoft.EditArray" - }, - { - "$ref": "#/definitions/Microsoft.EmitEvent" - }, - { - "$ref": "#/definitions/Microsoft.EndDialog" - }, - { - "$ref": "#/definitions/Microsoft.EndTurn" - }, - { - "$ref": "#/definitions/Microsoft.Foreach" - }, - { - "$ref": "#/definitions/Microsoft.ForeachPage" - }, - { - "$ref": "#/definitions/Microsoft.GetActivityMembers" - }, - { - "$ref": "#/definitions/Microsoft.GetConversationMembers" - }, - { - "$ref": "#/definitions/Microsoft.GotoAction" - }, - { - "$ref": "#/definitions/Microsoft.HttpRequest" - }, - { - "$ref": "#/definitions/Microsoft.IfCondition" - }, - { - "$ref": "#/definitions/Microsoft.LogAction" - }, - { - "$ref": "#/definitions/Microsoft.RepeatDialog" - }, - { - "$ref": "#/definitions/Microsoft.ReplaceDialog" - }, - { - "$ref": "#/definitions/Microsoft.SendActivity" - }, - { - "$ref": "#/definitions/Microsoft.SetProperties" - }, - { - "$ref": "#/definitions/Microsoft.SetProperty" - }, - { - "$ref": "#/definitions/Microsoft.SignOutUser" - }, - { - "$ref": "#/definitions/Microsoft.SwitchCondition" - }, - { - "$ref": "#/definitions/Microsoft.TelemetryTrackEvent" - }, - { - "$ref": "#/definitions/Microsoft.ThrowException" - }, - { - "$ref": "#/definitions/Microsoft.TraceActivity" - }, - { - "$ref": "#/definitions/Microsoft.UpdateActivity" - }, - { - "$ref": "#/definitions/Microsoft.Ask" - }, - { - "$ref": "#/definitions/Microsoft.AttachmentInput" - }, - { - "$ref": "#/definitions/Microsoft.ChoiceInput" - }, - { - "$ref": "#/definitions/Microsoft.ConfirmInput" - }, - { - "$ref": "#/definitions/Microsoft.DateTimeInput" - }, - { - "$ref": "#/definitions/Microsoft.NumberInput" - }, - { - "$ref": "#/definitions/Microsoft.OAuthInput" - }, - { - "$ref": "#/definitions/Microsoft.TextInput" - }, - { - "$ref": "#/definitions/Teams.GetMeetingParticipant" - }, - { - "$ref": "#/definitions/Testbot.JavascriptAction" - }, - { - "$ref": "#/definitions/Testbot.Multiply" - }, - { - "$ref": "#/definitions/CustomAction.dialog" - }, - { - "$ref": "#/definitions/CustomAction2.dialog" - } - ] + ], + "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", + "title": "Activity", + "type": "object", + "properties": { + "type": { + "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", + "type": "string", + "title": "type" + }, + "id": { + "description": "Contains an ID that uniquely identifies the activity on the channel.", + "type": "string", + "title": "id" + }, + "timestamp": { + "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", + "type": "string", + "format": "date-time", + "title": "timestamp" + }, + "localTimestamp": { + "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", + "type": "string", + "format": "date-time", + "title": "localTimestamp" + }, + "localTimezone": { + "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", + "type": "string", + "title": "localTimezone" + }, + "serviceUrl": { + "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", + "type": "string", + "title": "serviceUrl" + }, + "channelId": { + "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", + "type": "string", + "title": "channelId" + }, + "from": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Identifies the sender of the message.", + "title": "from" + }, + "conversation": { + "description": "Identifies the conversation to which the activity belongs.", + "title": "conversation", + "type": "object", + "required": [ + "conversationType", + "id", + "isGroup", + "name" + ], + "properties": { + "isGroup": { + "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", + "type": "boolean", + "title": "isGroup" + }, + "conversationType": { + "description": "Indicates the type of the conversation in channels that distinguish between conversation types", + "type": "string", + "title": "conversationType" + }, + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "enum": [ + "bot", + "user" + ], + "type": "string", + "title": "role" + } + } + }, + "recipient": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Identifies the recipient of the message.", + "title": "recipient" + }, + "textFormat": { + "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", + "type": "string", + "title": "textFormat" + }, + "attachmentLayout": { + "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", + "type": "string", + "title": "attachmentLayout" + }, + "membersAdded": { + "description": "The collection of members added to the conversation.", + "type": "array", + "title": "membersAdded", + "items": { + "description": "Channel account information needed to route a message", + "title": "ChannelAccount", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "type": "string", + "title": "role" + } + } + } + }, + "membersRemoved": { + "description": "The collection of members removed from the conversation.", + "type": "array", + "title": "membersRemoved", + "items": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items" + } + }, + "reactionsAdded": { + "description": "The collection of reactions added to the conversation.", + "type": "array", + "title": "reactionsAdded", + "items": { + "description": "Message reaction object", + "title": "MessageReaction", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Message reaction type. Possible values include: 'like', 'plusOne'", + "type": "string", + "title": "type" + } + } + } + }, + "reactionsRemoved": { + "description": "The collection of reactions removed from the conversation.", + "type": "array", + "title": "reactionsRemoved", + "items": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/reactionsAdded/items" + } + }, + "topicName": { + "description": "The updated topic name of the conversation.", + "type": "string", + "title": "topicName" + }, + "historyDisclosed": { + "description": "Indicates whether the prior history of the channel is disclosed.", + "type": "boolean", + "title": "historyDisclosed" + }, + "locale": { + "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", + "type": "string", + "title": "locale" + }, + "text": { + "description": "The text content of the message.", + "type": "string", + "title": "text" + }, + "speak": { + "description": "The text to speak.", + "type": "string", + "title": "speak" + }, + "inputHint": { + "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", + "type": "string", + "title": "inputHint" + }, + "summary": { + "description": "The text to display if the channel cannot render cards.", + "type": "string", + "title": "summary" + }, + "suggestedActions": { + "description": "The suggested actions for the activity.", + "title": "suggestedActions", + "type": "object", + "required": [ + "actions", + "to" + ], + "properties": { + "to": { + "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", + "type": "array", + "title": "to", + "items": { + "title": "Id", + "description": "Id of recipient.", + "type": "string" + } + }, + "actions": { + "description": "Actions that can be shown to the user", + "type": "array", + "title": "actions", + "items": { + "description": "A clickable action", + "title": "CardAction", + "type": "object", + "required": [ + "title", + "type", + "value" + ], + "properties": { + "type": { + "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", + "type": "string", + "title": "type" + }, + "title": { + "description": "Text description which appears on the button", + "type": "string", + "title": "title" + }, + "image": { + "description": "Image URL which will appear on the button, next to text label", + "type": "string", + "title": "image" + }, + "text": { + "description": "Text for this action", + "type": "string", + "title": "text" + }, + "displayText": { + "description": "(Optional) text to display in the chat feed if the button is clicked", + "type": "string", + "title": "displayText" + }, + "value": { + "description": "Supplementary parameter for action. Content of this property depends on the ActionType", + "title": "value" + }, + "channelData": { + "description": "Channel-specific data associated with this action", + "title": "channelData" + } + } + } + } + } + }, + "attachments": { + "description": "Attachments", + "type": "array", + "title": "attachments", + "items": { + "description": "An attachment within an activity", + "title": "Attachment", + "type": "object", + "required": [ + "contentType" + ], + "properties": { + "contentType": { + "description": "mimetype/Contenttype for the file", + "type": "string", + "title": "contentType" + }, + "contentUrl": { + "description": "Content Url", + "type": "string", + "title": "contentUrl" + }, + "content": { + "type": "object", + "description": "Embedded content", + "title": "content" + }, + "name": { + "description": "(OPTIONAL) The name of the attachment", + "type": "string", + "title": "name" + }, + "thumbnailUrl": { + "description": "(OPTIONAL) Thumbnail associated with attachment", + "type": "string", + "title": "thumbnailUrl" + } + } + } + }, + "entities": { + "description": "Represents the entities that were mentioned in the message.", + "type": "array", + "title": "entities", + "items": { + "description": "Metadata object pertaining to an activity", + "title": "Entity", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Type of this entity (RFC 3987 IRI)", + "type": "string", + "title": "type" + } + } + } + }, + "channelData": { + "description": "Contains channel-specific content.", + "title": "channelData" + }, + "action": { + "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", + "type": "string", + "title": "action" + }, + "replyToId": { + "description": "Contains the ID of the message to which this message is a reply.", + "type": "string", + "title": "replyToId" + }, + "label": { + "description": "A descriptive label for the activity.", + "type": "string", + "title": "label" + }, + "valueType": { + "description": "The type of the activity's value object.", + "type": "string", + "title": "valueType" + }, + "value": { + "description": "A value that is associated with the activity.", + "title": "value" + }, + "name": { + "description": "The name of the operation associated with an invoke or event activity.", + "type": "string", + "title": "name" + }, + "relatesTo": { + "description": "A reference to another conversation or activity.", + "title": "relatesTo", + "type": "object", + "required": [ + "bot", + "channelId", + "conversation", + "serviceUrl" + ], + "properties": { + "activityId": { + "description": "(Optional) ID of the activity to refer to", + "type": "string", + "title": "activityId" + }, + "user": { + "description": "(Optional) User participating in this conversation", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "title": "user" + }, + "bot": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Bot participating in this conversation", + "title": "bot" + }, + "conversation": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/conversation", + "description": "Conversation reference", + "title": "conversation" + }, + "channelId": { + "description": "Channel ID", + "type": "string", + "title": "channelId" + }, + "serviceUrl": { + "description": "Service endpoint where operations concerning the referenced conversation may be performed", + "type": "string", + "title": "serviceUrl" + } + } + }, + "code": { + "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", + "type": "string", + "title": "code" + }, + "expiration": { + "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", + "type": "string", + "format": "date-time", + "title": "expiration" + }, + "importance": { + "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", + "type": "string", + "title": "importance" + }, + "deliveryMode": { + "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", + "type": "string", + "title": "deliveryMode" + }, + "listenFor": { + "description": "List of phrases and references that speech and language priming systems should listen for", + "type": "array", + "title": "listenFor", + "items": { + "type": "string", + "title": "Phrase", + "description": "Phrase to listen for." + } + }, + "textHighlights": { + "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", + "type": "array", + "title": "textHighlights", + "items": { + "description": "Refers to a substring of content within another field", + "title": "TextHighlight", + "type": "object", + "required": [ + "occurrence", + "text" + ], + "properties": { + "text": { + "description": "Defines the snippet of text to highlight", + "type": "string", + "title": "text" + }, + "occurrence": { + "description": "Occurrence of the text field within the referenced text, if multiple exist.", + "type": "number", + "title": "occurrence" + } + } + } + }, + "semanticAction": { + "description": "An optional programmatic action accompanying this request", + "title": "semanticAction", + "type": "object", + "required": [ + "entities", + "id" + ], + "properties": { + "id": { + "description": "ID of this action", + "type": "string", + "title": "id" + }, + "entities": { + "description": "Entities associated with this action", + "type": "object", + "title": "entities", + "additionalProperties": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/entities/items" + } + } + } + } + } + }, + { + "$ref": "#/definitions/Microsoft.ActivityTemplate" + }, + { + "$ref": "#/definitions/Microsoft.StaticActivityTemplate" + } + ] + }, + "Microsoft.IDialog": { + "title": "Microsoft dialogs", + "description": "Components which derive from Dialog", + "$role": "interface", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/Microsoft.QnAMakerDialog" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog" + }, + { + "$ref": "#/definitions/Microsoft.Test.AssertCondition" + }, + { + "$ref": "#/definitions/Microsoft.BeginDialog" + }, + { + "$ref": "#/definitions/Microsoft.BeginSkill" + }, + { + "$ref": "#/definitions/Microsoft.BreakLoop" + }, + { + "$ref": "#/definitions/Microsoft.CancelAllDialogs" + }, + { + "$ref": "#/definitions/Microsoft.CancelDialog" + }, + { + "$ref": "#/definitions/Microsoft.ContinueConversationLater" + }, + { + "$ref": "#/definitions/Microsoft.ContinueLoop" + }, + { + "$ref": "#/definitions/Microsoft.DebugBreak" + }, + { + "$ref": "#/definitions/Microsoft.DeleteActivity" + }, + { + "$ref": "#/definitions/Microsoft.DeleteProperties" + }, + { + "$ref": "#/definitions/Microsoft.DeleteProperty" + }, + { + "$ref": "#/definitions/Microsoft.EditActions" + }, + { + "$ref": "#/definitions/Microsoft.EditArray" + }, + { + "$ref": "#/definitions/Microsoft.EmitEvent" + }, + { + "$ref": "#/definitions/Microsoft.EndDialog" + }, + { + "$ref": "#/definitions/Microsoft.EndTurn" + }, + { + "$ref": "#/definitions/Microsoft.Foreach" + }, + { + "$ref": "#/definitions/Microsoft.ForeachPage" + }, + { + "$ref": "#/definitions/Microsoft.GetActivityMembers" + }, + { + "$ref": "#/definitions/Microsoft.GetConversationMembers" + }, + { + "$ref": "#/definitions/Microsoft.GotoAction" + }, + { + "$ref": "#/definitions/Microsoft.HttpRequest" + }, + { + "$ref": "#/definitions/Microsoft.IfCondition" + }, + { + "$ref": "#/definitions/Microsoft.LogAction" + }, + { + "$ref": "#/definitions/Microsoft.RepeatDialog" + }, + { + "$ref": "#/definitions/Microsoft.ReplaceDialog" + }, + { + "$ref": "#/definitions/Microsoft.SendActivity" + }, + { + "$ref": "#/definitions/Microsoft.SetProperties" + }, + { + "$ref": "#/definitions/Microsoft.SetProperty" + }, + { + "$ref": "#/definitions/Microsoft.SignOutUser" + }, + { + "$ref": "#/definitions/Microsoft.SwitchCondition" + }, + { + "$ref": "#/definitions/Microsoft.TelemetryTrackEvent" + }, + { + "$ref": "#/definitions/Microsoft.ThrowException" + }, + { + "$ref": "#/definitions/Microsoft.TraceActivity" + }, + { + "$ref": "#/definitions/Microsoft.UpdateActivity" + }, + { + "$ref": "#/definitions/Microsoft.Ask" + }, + { + "$ref": "#/definitions/Microsoft.AttachmentInput" + }, + { + "$ref": "#/definitions/Microsoft.ChoiceInput" + }, + { + "$ref": "#/definitions/Microsoft.ConfirmInput" + }, + { + "$ref": "#/definitions/Microsoft.DateTimeInput" + }, + { + "$ref": "#/definitions/Microsoft.NumberInput" + }, + { + "$ref": "#/definitions/Microsoft.OAuthInput" + }, + { + "$ref": "#/definitions/Microsoft.TextInput" + }, + { + "$ref": "#/definitions/Teams.GetMeetingParticipant" + }, + { + "$ref": "#/definitions/Testbot.JavascriptAction" + }, + { + "$ref": "#/definitions/Testbot.Multiply" + }, + { + "$ref": "#/definitions/CustomAction.dialog" + }, + { + "$ref": "#/definitions/CustomAction2.dialog" + } + ] }, "Microsoft.IEntityRecognizer": { "$role": "interface", @@ -8015,7 +8750,7 @@ }, "properties": { "activity": { - "$ref": "#/definitions/botframework.json/definitions/Activity", + "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1", "title": "Activity", "description": "A static Activity to used.", "required": [ @@ -8933,6 +9668,11 @@ "description": "The root dialog to execute the test script against.", "$ref": "#/definitions/Microsoft.IDialog" }, + "languagePolicy": { + "type": "object", + "title": "Language policy", + "description": "Defines fall back languages to try per user input language." + }, "description": { "type": "string", "title": "Description", @@ -11420,215 +12160,22 @@ "title": "Arg1", "description": "Value from callers memory to use as arg 1" }, - "arg2": { - "$ref": "#/definitions/numberExpression", - "title": "Arg2", - "description": "Value from callers memory to use as arg 2" - }, - "result": { - "$ref": "#/definitions/stringExpression", - "title": "Result", - "description": "Property to store the result in" - }, - "$kind": { - "title": "Kind of dialog object", - "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": "Testbot.Multiply" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "arrayExpression": { - "$role": "expression", - "title": "Array or expression", - "description": "Array or expression to evaluate.", - "oneOf": [ - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "booleanExpression": { - "$role": "expression", - "title": "Boolean or expression", - "description": "Boolean constant or expression to evaluate.", - "oneOf": [ - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant.", - "default": false, - "examples": [ - false - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.isVip" - ] - } - ] - }, - "component": { - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "$kind": { - "title": "Kind of dialog object", - "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.]*$" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "condition": { - "$role": "expression", - "title": "Boolean condition", - "description": "Boolean constant or expression to evaluate.", - "oneOf": [ - { - "$ref": "#/definitions/expression" - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean value.", - "default": true, - "examples": [ - false - ] - } - ] - }, - "equalsExpression": { - "$role": "expression", - "type": "string", - "title": "Expression", - "description": "Expression starting with =.", - "pattern": "^=.*\\S.*", - "examples": [ - "=user.name" - ] - }, - "expression": { - "$role": "expression", - "type": "string", - "title": "Expression", - "description": "Expression to evaluate.", - "pattern": "^.*\\S.*", - "examples": [ - "user.age > 13" - ] - }, - "integerExpression": { - "$role": "expression", - "title": "Integer or expression", - "description": "Integer constant or expression to evaluate.", - "oneOf": [ - { - "type": "integer", - "title": "Integer", - "description": "Integer constant.", - "default": 0, - "examples": [ - 15 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.age" - ] - } - ] - }, - "numberExpression": { - "$role": "expression", - "title": "Number or expression", - "description": "Number constant or expression to evaluate.", - "oneOf": [ - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "default": 0, - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=dialog.quantity" - ] - } - ] - }, - "objectExpression": { - "$role": "expression", - "title": "Object or expression", - "description": "Object or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "role": { - "title": "$role", - "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", - "type": "string", - "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" - }, - "root": { - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { + "arg2": { + "$ref": "#/definitions/numberExpression", + "title": "Arg2", + "description": "Value from callers memory to use as arg 2" + }, + "result": { + "$ref": "#/definitions/stringExpression", + "title": "Result", + "description": "Property to store the result in" + }, "$kind": { "title": "Kind of dialog object", "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": "root" + "const": "Testbot.Multiply" }, "$designer": { "title": "Designer information", @@ -11637,30 +12184,44 @@ } } }, - "stringExpression": { + "arrayExpression": { "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", + "title": "Array or expression", + "description": "Array or expression to evaluate.", "oneOf": [ { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", + "type": "array", + "title": "Array", + "description": "Array constant." + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "booleanExpression": { + "$role": "expression", + "title": "Boolean or expression", + "description": "Boolean constant or expression to evaluate.", + "oneOf": [ + { + "type": "boolean", + "title": "Boolean", + "description": "Boolean constant.", + "default": false, "examples": [ - "Hello ${user.name}" + false ] }, { "$ref": "#/definitions/equalsExpression", "examples": [ - "=concat('x','y','z')" + "=user.isVip" ] } ] }, - "test": { - "type": "object", + "component": { "required": [ "$kind" ], @@ -11676,8 +12237,7 @@ "title": "Kind of dialog object", "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": "test" + "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$" }, "$designer": { "title": "Designer information", @@ -11686,837 +12246,233 @@ } } }, - "valueExpression": { + "condition": { "$role": "expression", - "title": "Any or expression", - "description": "Any constant or expression to evaluate.", + "title": "Boolean condition", + "description": "Boolean constant or expression to evaluate.", "oneOf": [ { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "type": "string", - "title": "String", - "description": "Interpolated string.", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] + "$ref": "#/definitions/expression" }, { "type": "boolean", "title": "Boolean", - "description": "Boolean constant", + "description": "Boolean value.", + "default": true, "examples": [ false ] - }, + } + ] + }, + "equalsExpression": { + "$role": "expression", + "type": "string", + "title": "Expression", + "description": "Expression starting with =.", + "pattern": "^=.*\\S.*", + "examples": [ + "=user.name" + ] + }, + "expression": { + "$role": "expression", + "type": "string", + "title": "Expression", + "description": "Expression to evaluate.", + "pattern": "^.*\\S.*", + "examples": [ + "user.age > 13" + ] + }, + "integerExpression": { + "$role": "expression", + "title": "Integer or expression", + "description": "Integer constant or expression to evaluate.", + "oneOf": [ { - "type": "number", - "title": "Number", - "description": "Number constant.", + "type": "integer", + "title": "Integer", + "description": "Integer constant.", + "default": 0, "examples": [ - 15.5 + 15 ] }, { "$ref": "#/definitions/equalsExpression", "examples": [ - "=..." + "=user.age" ] } ] }, - "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/schema" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "default": true, - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/schema" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/schema" - }, - "maxProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/schema/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/schema" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/schema" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } - ] - }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/schema" - }, - "then": { - "$ref": "#/definitions/schema" - }, - "else": { - "$ref": "#/definitions/schema" - }, - "allOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/schema" - } - } - }, - "botframework.json": { - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ChannelAccount": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } + "numberExpression": { + "$role": "expression", + "title": "Number or expression", + "description": "Number constant or expression to evaluate.", + "oneOf": [ + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "default": 0, + "examples": [ + 15.5 + ] }, - "ConversationAccount": { - "description": "Channel account information for a conversation", - "title": "ConversationAccount", + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=dialog.quantity" + ] + } + ] + }, + "objectExpression": { + "$role": "expression", + "title": "Object or expression", + "description": "Object or expression to evaluate.", + "oneOf": [ + { "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } + "title": "Object", + "description": "Object constant." }, - "MessageReaction": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "role": { + "title": "$role", + "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", + "type": "string", + "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" + }, + "root": { + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "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": "root" }, - "CardAction": { - "description": "A clickable action", - "title": "CardAction", + "$designer": { + "title": "Designer information", "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "stringExpression": { + "$role": "expression", + "title": "String or expression", + "description": "Interpolated string or expression to evaluate.", + "oneOf": [ + { + "type": "string", + "title": "String", + "description": "Interpolated string", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] }, - "SuggestedActions": { - "description": "SuggestedActions that can be performed", - "title": "SuggestedActions", - "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "$ref": "#/definitions/botframework.json/definitions/CardAction" - } - } - } + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=concat('x','y','z')" + ] + } + ] + }, + "test": { + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "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": "test" }, - "Attachment": { - "description": "An attachment within an activity", - "title": "Attachment", + "$designer": { + "title": "Designer information", "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } - }, - "Entity": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "valueExpression": { + "$role": "expression", + "title": "Any or expression", + "description": "Any constant or expression to evaluate.", + "oneOf": [ + { "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } + "title": "Object", + "description": "Object constant." }, - "ConversationReference": { - "description": "An object relating to a particular point in a conversation", - "title": "ConversationReference", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } + { + "type": "array", + "title": "Array", + "description": "Array constant." }, - "TextHighlight": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } + { + "type": "string", + "title": "String", + "description": "Interpolated string.", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] }, - "SemanticAction": { - "description": "Represents a reference to a programmatic action", - "title": "SemanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - } - } + { + "type": "boolean", + "title": "Boolean", + "description": "Boolean constant", + "examples": [ + false + ] }, - "Activity": { - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation" - }, - "recipient": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", - "title": "suggestedActions" - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Attachment" - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "$ref": "#/definitions/botframework.json/definitions/ConversationReference", - "title": "relatesTo" - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "$ref": "#/definitions/botframework.json/definitions/TextHighlight" - } - }, - "semanticAction": { - "$ref": "#/definitions/botframework.json/definitions/SemanticAction", - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction" - } - } + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=..." + ] } - } + ] } } } diff --git a/tests/tests.uischema b/tests/tests.uischema index 76325a4da7..c81425897c 100644 --- a/tests/tests.uischema +++ b/tests/tests.uischema @@ -37,57 +37,52 @@ "subtitle": "Attachment Input" } }, - "Microsoft.BeginDialog": { + "Microsoft.ChoiceInput": { "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Begin a new dialog", - "order": [ - "dialog", - "options", - "resultProperty", - "*" - ], + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt with multi-choice", "properties": { - "resultProperty": { + "property": { "intellisenseScopes": [ "variable-scopes" ] } }, - "subtitle": "Begin Dialog" + "subtitle": "Choice Input" } }, - "Microsoft.BeginSkill": { + "Microsoft.ConfirmInput": { "form": { - "helpLink": "https://aka.ms/bf-composer-docs-connect-skill", - "label": "Connect to a skill", + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for confirmation", "properties": { - "resultProperty": { + "property": { "intellisenseScopes": [ "variable-scopes" ] } }, - "subtitle": "Skill Dialog" - } - }, - "Microsoft.BreakLoop": { - "form": { - "label": "Break out of loop", - "subtitle": "Break out of loop" + "subtitle": "Confirm Input" } }, - "Microsoft.CancelAllDialogs": { + "Microsoft.DateTimeInput": { "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Cancel all active dialogs", - "subtitle": "Cancel All Dialogs" + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a date or a time", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Date Time Input" } }, - "Microsoft.ChoiceInput": { + "Microsoft.NumberInput": { "form": { "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt with multi-choice", + "label": "Prompt for a number", "properties": { "property": { "intellisenseScopes": [ @@ -95,13 +90,24 @@ ] } }, - "subtitle": "Choice Input" + "subtitle": "Number Input" } }, - "Microsoft.ConfirmInput": { + "Microsoft.OAuthInput": { + "form": { + "helpLink": "https://aka.ms/bfc-using-oauth", + "label": "OAuth login", + "order": [ + "connectionName", + "*" + ], + "subtitle": "OAuth Input" + } + }, + "Microsoft.TextInput": { "form": { "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for confirmation", + "label": "Prompt for text", "properties": { "property": { "intellisenseScopes": [ @@ -109,27 +115,60 @@ ] } }, - "subtitle": "Confirm Input" + "subtitle": "Text Input" } }, - "Microsoft.ContinueLoop": { + "Microsoft.BeginDialog": { "form": { - "label": "Continue loop", - "subtitle": "Continue loop" + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Begin a new dialog", + "order": [ + "dialog", + "options", + "resultProperty", + "*" + ], + "properties": { + "resultProperty": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Begin Dialog" } }, - "Microsoft.DateTimeInput": { + "Microsoft.BeginSkill": { "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a date or a time", + "helpLink": "https://aka.ms/bf-composer-docs-connect-skill", + "label": "Connect to a skill", "properties": { - "property": { + "resultProperty": { "intellisenseScopes": [ "variable-scopes" ] } }, - "subtitle": "Date Time Input" + "subtitle": "Skill Dialog" + } + }, + "Microsoft.BreakLoop": { + "form": { + "label": "Break out of loop", + "subtitle": "Break out of loop" + } + }, + "Microsoft.CancelAllDialogs": { + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Cancel all active dialogs", + "subtitle": "Cancel All Dialogs" + } + }, + "Microsoft.ContinueLoop": { + "form": { + "label": "Continue loop", + "subtitle": "Continue loop" } }, "Microsoft.DebugBreak": { @@ -313,10 +352,62 @@ "subtitle": "Log Action" } }, - "Microsoft.NumberInput": { + "Microsoft.RepeatDialog": { "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a number", + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Repeat this dialog", + "order": [ + "options", + "*" + ], + "subtitle": "Repeat Dialog" + } + }, + "Microsoft.ReplaceDialog": { + "form": { + "helpLink": "https://aka.ms/bfc-understanding-dialogs", + "label": "Replace this dialog", + "order": [ + "dialog", + "options", + "*" + ], + "subtitle": "Replace Dialog" + } + }, + "Microsoft.SendActivity": { + "form": { + "helpLink": "https://aka.ms/bfc-send-activity", + "label": "Send a response", + "order": [ + "activity", + "*" + ], + "subtitle": "Send Activity" + } + }, + "Microsoft.SetProperties": { + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Set properties", + "properties": { + "assignments": { + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + } + } + }, + "subtitle": "Set Properties" + } + }, + "Microsoft.SetProperty": { + "form": { + "helpLink": "https://aka.ms/bfc-using-memory", + "label": "Set a property", "properties": { "property": { "intellisenseScopes": [ @@ -324,18 +415,55 @@ ] } }, - "subtitle": "Number Input" + "subtitle": "Set Property" } }, - "Microsoft.OAuthInput": { + "Microsoft.SignOutUser": { "form": { - "helpLink": "https://aka.ms/bfc-using-oauth", - "label": "OAuth login", - "order": [ - "connectionName", - "*" + "label": "Sign out user", + "subtitle": "Signout User" + } + }, + "Microsoft.SwitchCondition": { + "form": { + "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", + "hidden": [ + "default" ], - "subtitle": "OAuth Input" + "label": "Branch: Switch (multiple options)", + "properties": { + "cases": { + "hidden": [ + "actions" + ] + }, + "condition": { + "intellisenseScopes": [ + "user-variables" + ] + } + }, + "subtitle": "Switch Condition" + } + }, + "Microsoft.ThrowException": { + "form": { + "label": "Throw an exception", + "subtitle": "Throw an exception" + } + }, + "Microsoft.TraceActivity": { + "form": { + "helpLink": "https://aka.ms/bfc-debugging-bots", + "label": "Emit a trace event", + "subtitle": "Trace Activity" + } + }, + "Microsoft.RegexRecognizer": { + "form": { + "hidden": [ + "entities" + ] } }, "Microsoft.OnActivity": { @@ -601,133 +729,5 @@ ], "subtitle": "Unknown intent recognized" } - }, - "Microsoft.RegexRecognizer": { - "form": { - "hidden": [ - "entities" - ] - } - }, - "Microsoft.RepeatDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Repeat this dialog", - "order": [ - "options", - "*" - ], - "subtitle": "Repeat Dialog" - } - }, - "Microsoft.ReplaceDialog": { - "form": { - "helpLink": "https://aka.ms/bfc-understanding-dialogs", - "label": "Replace this dialog", - "order": [ - "dialog", - "options", - "*" - ], - "subtitle": "Replace Dialog" - } - }, - "Microsoft.SendActivity": { - "form": { - "helpLink": "https://aka.ms/bfc-send-activity", - "label": "Send a response", - "order": [ - "activity", - "*" - ], - "subtitle": "Send Activity" - } - }, - "Microsoft.SetProperties": { - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set properties", - "properties": { - "assignments": { - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - } - } - }, - "subtitle": "Set Properties" - } - }, - "Microsoft.SetProperty": { - "form": { - "helpLink": "https://aka.ms/bfc-using-memory", - "label": "Set a property", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Set Property" - } - }, - "Microsoft.SignOutUser": { - "form": { - "label": "Sign out user", - "subtitle": "Signout User" - } - }, - "Microsoft.SwitchCondition": { - "form": { - "helpLink": "https://aka.ms/bfc-controlling-conversation-flow", - "hidden": [ - "default" - ], - "label": "Branch: Switch (multiple options)", - "properties": { - "cases": { - "hidden": [ - "actions" - ] - }, - "condition": { - "intellisenseScopes": [ - "user-variables" - ] - } - }, - "subtitle": "Switch Condition" - } - }, - "Microsoft.TextInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for text", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Text Input" - } - }, - "Microsoft.ThrowException": { - "form": { - "label": "Throw an exception", - "subtitle": "Throw an exception" - } - }, - "Microsoft.TraceActivity": { - "form": { - "helpLink": "https://aka.ms/bfc-debugging-bots", - "label": "Emit a trace event", - "subtitle": "Trace Activity" - } } } From 4c2f92cc2168014bb0709109b759f3a67009eed2 Mon Sep 17 00:00:00 2001 From: hond Date: Mon, 19 Oct 2020 14:09:24 +0800 Subject: [PATCH 16/17] update schema --- .../testbot.schema | 2417 +++++++++-------- 1 file changed, 1239 insertions(+), 1178 deletions(-) diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema index 17ac9f84b7..250c19007d 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema @@ -4,9 +4,6 @@ "title": "Component kinds", "description": "These are all of the kinds that can be created by the loader.", "oneOf": [ - { - "$ref": "#/definitions/AzureQueues.ContinueConversationLater" - }, { "$ref": "#/definitions/Microsoft.ActivityTemplate" }, @@ -49,6 +46,9 @@ { "$ref": "#/definitions/Microsoft.ConfirmationEntityRecognizer" }, + { + "$ref": "#/definitions/Microsoft.ContinueConversationLater" + }, { "$ref": "#/definitions/Microsoft.ContinueLoop" }, @@ -307,6 +307,9 @@ { "$ref": "#/definitions/Microsoft.Test.AssertCondition" }, + { + "$ref": "#/definitions/Microsoft.Test.AssertNoActivity" + }, { "$ref": "#/definitions/Microsoft.Test.AssertReply" }, @@ -370,6 +373,9 @@ { "$ref": "#/definitions/Microsoft.UrlEntityRecognizer" }, + { + "$ref": "#/definitions/Teams.GetMeetingParticipant" + }, { "$ref": "#/definitions/Teams.OnAppBasedLinkQuery" }, @@ -447,84 +453,9 @@ } ], "definitions": { - "AzureQueues.ContinueConversationLater": { - "$role": "implements(Microsoft.IDialog)", - "title": "Continue Conversation Later (Queue)", - "description": "Continue conversation at later time (via Azure Storage Queue).", - "type": "object", - "required": [ - "date", - "connectionString", - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Optional id for the dialog" - }, - "disabled": { - "$ref": "#/definitions/booleanExpression", - "title": "Disabled", - "description": "Optional condition which if true will disable this action.", - "examples": [ - "user.age > 3" - ] - }, - "date": { - "$ref": "#/definitions/stringExpression", - "title": "Date", - "description": "Date in the future as a ISO string when the conversation should continue.", - "examples": [ - "=addHours(utcNow(), 1)" - ] - }, - "connectionString": { - "$ref": "#/definitions/stringExpression", - "title": "Connection String", - "description": "Connection string for connecting to an Azure Storage account.", - "examples": [ - "=settings.connectionString" - ] - }, - "queueName": { - "$ref": "#/definitions/stringExpression", - "title": "Queue Name", - "description": "Name of the queue that your azure function is bound to.", - "examples": [ - "activities" - ], - "default": "activities" - }, - "value": { - "$ref": "#/definitions/valueExpression", - "title": "Value", - "description": "Value to send in the activity.value." - }, - "$kind": { - "title": "Kind of dialog object", - "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": "AzureQueues.ContinueConversationLater" - }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, "Microsoft.ActivityTemplate": { "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft ActivityTemplate", + "title": "Microsoft activity template", "type": "object", "required": [ "template", @@ -559,7 +490,7 @@ }, "Microsoft.AdaptiveDialog": { "$role": "implements(Microsoft.IDialog)", - "title": "Adaptive Dialog", + "title": "Adaptive dialog", "description": "Flexible, data driven dialog that can adapt to the conversation.", "type": "object", "required": [ @@ -598,7 +529,7 @@ }, "generator": { "$kind": "Microsoft.ILanguageGenerator", - "title": "Language Generator", + "title": "Language generator", "description": "Language generator that generates bot responses.", "$ref": "#/definitions/Microsoft.ILanguageGenerator" }, @@ -624,7 +555,239 @@ "description": "Schema to fill in.", "anyOf": [ { - "$ref": "#/definitions/schema" + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "nonNegativeInteger": { + "type": "integer", + "minimum": 0 + }, + "nonNegativeIntegerDefault0": { + "type": "integer", + "minimum": 0, + "default": 0 + }, + "simpleTypes": { + "enum": [ + "array", + "boolean", + "integer", + "null", + "number", + "object", + "string" + ] + }, + "stringArray": { + "type": "array", + "uniqueItems": true, + "default": [], + "items": { + "type": "string" + } + } + }, + "type": [ + "object", + "boolean" + ], + "properties": { + "$schema": { + "type": "string", + "format": "uri" + }, + "$ref": { + "type": "string", + "format": "uri-reference" + }, + "$comment": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": true, + "readOnly": { + "type": "boolean", + "default": false + }, + "writeOnly": { + "type": "boolean", + "default": false + }, + "examples": { + "type": "array", + "items": true + }, + "multipleOf": { + "type": "number", + "exclusiveMinimum": 0 + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "number" + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "number" + }, + "maxLength": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minLength": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "items": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + } + ], + "default": true + }, + "maxItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minItems": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "contains": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "maxProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeInteger" + }, + "minProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/nonNegativeIntegerDefault0" + }, + "required": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" + }, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "definitions": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "properties": { + "type": "object", + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "patternProperties": { + "type": "object", + "propertyNames": { + "format": "regex" + }, + "default": {}, + "additionalProperties": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/stringArray" + } + ] + } + }, + "propertyNames": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "const": true, + "enum": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": true + }, + "type": { + "anyOf": [ + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/simpleTypes" + }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "format": { + "type": "string" + }, + "contentMediaType": { + "type": "string" + }, + "contentEncoding": { + "type": "string" + }, + "if": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "then": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "else": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + }, + "allOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "anyOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "oneOf": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0/definitions/schemaArray" + }, + "not": { + "$ref": "#/definitions/Microsoft.AdaptiveDialog/properties/schema/anyOf/0" + } + }, + "default": true }, { "type": "string", @@ -649,7 +812,7 @@ }, "Microsoft.AgeEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Age Entity Recognizer", + "title": "Age entity recognizer", "description": "Recognizer which recognizes age.", "type": "object", "required": [ @@ -682,7 +845,7 @@ "implements(Microsoft.IDialog)", "extends(Microsoft.SendActivity)" ], - "title": "Send Activity to Ask a question", + "title": "Send activity to ask a question", "description": "This is an action which sends an activity to the user when a response is expected", "type": "object", "required": [ @@ -698,7 +861,7 @@ "properties": { "expectedProperties": { "$ref": "#/definitions/arrayExpression", - "title": "Expected Properties", + "title": "Expected properties", "description": "Properties expected from the user.", "examples": [ [ @@ -714,7 +877,7 @@ }, "defaultOperation": { "$ref": "#/definitions/stringExpression", - "title": "Default Operation", + "title": "Default operation", "description": "Sets the default operation that will be used when no operation is recognized in the response to this Ask.", "examples": [ "Add()", @@ -779,7 +942,7 @@ "description": "'Property' will be set to the object or the result of this expression when max turn count is exceeded.", "oneOf": [ { - "$ref": "#/definitions/botframework.json/definitions/Attachment", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", "title": "Object", "description": "Attachment object." }, @@ -794,7 +957,7 @@ "description": "'Property' will be set to the object or the result of this expression unless it evaluates to null.", "oneOf": [ { - "$ref": "#/definitions/botframework.json/definitions/Attachment", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/attachments/items", "title": "Object", "description": "Attachment object." }, @@ -1006,7 +1169,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the dialog that is called can process the current activity.", "default": true }, @@ -1064,7 +1227,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the skill will be started using the activity in the current turn context instead of the activity in the Activity property.", "default": true, "examples": [ @@ -1097,13 +1260,13 @@ }, "connectionName": { "$ref": "#/definitions/stringExpression", - "title": "OAuth Connection Name (SSO)", + "title": "OAuth connection name (SSO)", "description": "The OAuth Connection Name, that would be used to perform Single SignOn with a skill.", "default": "=settings.connectionName" }, "skillAppId": { "$ref": "#/definitions/stringExpression", - "title": "Skill App ID", + "title": "Skill App Id", "description": "The Microsoft App ID for the skill." }, "skillEndpoint": { @@ -1122,7 +1285,7 @@ }, "allowInterruptions": { "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", + "title": "Allow interruptions", "description": "A boolean expression that determines whether the parent should be allowed to interrupt the skill.", "default": true, "examples": [ @@ -1146,7 +1309,7 @@ }, "Microsoft.BreakLoop": { "$role": "implements(Microsoft.IDialog)", - "title": "Break Loop", + "title": "Break loop", "description": "Stop executing this loop", "type": "object", "required": [ @@ -1218,7 +1381,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the caller dialog is told it should process the current activity.", "default": true }, @@ -1278,7 +1441,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the caller dialog is told it should process the current activity.", "default": true }, @@ -1399,7 +1562,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", "title": "Action", "description": "Card action for the choice." }, @@ -1656,7 +1819,7 @@ }, "Microsoft.ConditionalSelector": { "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Conditional Trigger Selector", + "title": "Conditional trigger selector", "description": "Use a rule selector based on a condition", "type": "object", "required": [ @@ -1761,7 +1924,7 @@ ] }, "choiceOptions": { - "title": "Choice Options", + "title": "Choice options", "description": "Choice Options or expression which provides Choice Options to control display choices to the user.", "oneOf": [ { @@ -1851,7 +2014,7 @@ "description": "Value to return when this choice is selected." }, "action": { - "$ref": "#/definitions/botframework.json/definitions/CardAction", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/suggestedActions/properties/actions/items", "title": "Action", "description": "Card action for the choice." }, @@ -1995,7 +2158,7 @@ }, "Microsoft.ConfirmationEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Confirmation Entity Recognizer", + "title": "Confirmation entity recognizer", "description": "Recognizer which recognizes confirmation choices (yes/no).", "type": "object", "required": [ @@ -2023,9 +2186,67 @@ } } }, + "Microsoft.ContinueConversationLater": { + "$role": "implements(Microsoft.IDialog)", + "title": "Continue conversation later (Queue)", + "description": "Continue conversation at later time (via Azure Storage Queue).", + "type": "object", + "required": [ + "date", + "connectionString", + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "user.age > 3" + ] + }, + "date": { + "$ref": "#/definitions/stringExpression", + "title": "Date", + "description": "Date in the future as a ISO string when the conversation should continue.", + "examples": [ + "=addHours(utcNow(), 1)" + ] + }, + "value": { + "$ref": "#/definitions/valueExpression", + "title": "Value", + "description": "Value to send in the activity.value." + }, + "$kind": { + "title": "Kind of dialog object", + "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.ContinueConversationLater" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, "Microsoft.ContinueLoop": { "$role": "implements(Microsoft.IDialog)", - "title": "Continue Loop", + "title": "Continue loop", "description": "Stop executing this template and continue with the next iteration of the loop.", "type": "object", "required": [ @@ -2068,7 +2289,7 @@ }, "Microsoft.CrossTrainedRecognizerSet": { "$role": "implements(Microsoft.IRecognizer)", - "title": "Cross-trained Recognizer Set", + "title": "Cross-trained recognizer set", "description": "Recognizer for selecting between cross trained recognizers.", "type": "object", "required": [ @@ -2113,7 +2334,7 @@ }, "Microsoft.CurrencyEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Currency Entity Recognizer", + "title": "Currency entity recognizer", "description": "Recognizer which recognizes currency.", "type": "object", "required": [ @@ -2143,7 +2364,7 @@ }, "Microsoft.DateTimeEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "DateTime Entity Recognizer", + "title": "Date and time entity recognizer", "description": "Recognizer which recognizes dates and time fragments.", "type": "object", "required": [ @@ -2199,7 +2420,7 @@ "defaultValue": { "$ref": "#/definitions/stringExpression", "format": "date-time", - "title": "Default Date", + "title": "Default date", "description": "'Property' will be set to the value or the result of the expression when max turn count is exceeded.", "examples": [ "=user.birthday" @@ -2492,7 +2713,7 @@ }, "Microsoft.DeleteProperty": { "$role": "implements(Microsoft.IDialog)", - "title": "Delete Property", + "title": "Delete property", "description": "Delete a property and any value it holds.", "type": "object", "required": [ @@ -2541,7 +2762,7 @@ }, "Microsoft.DimensionEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Dimension Entity Recognizer", + "title": "Dimension entity recognizer", "description": "Recognizer which recognizes dimension.", "type": "object", "required": [ @@ -2672,7 +2893,7 @@ "oneOf": [ { "type": "string", - "title": "Enum", + "title": "Change type", "description": "Standard change type.", "enum": [ "push", @@ -2702,7 +2923,7 @@ }, "resultProperty": { "$ref": "#/definitions/stringExpression", - "title": "Result Property", + "title": "Result property", "description": "Property to store the result of this action." }, "value": { @@ -2731,7 +2952,7 @@ }, "Microsoft.EmailEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Email Entity Recognizer", + "title": "Email entity recognizer", "description": "Recognizer which recognizes email.", "type": "object", "required": [ @@ -2945,7 +3166,7 @@ }, "Microsoft.FirstSelector": { "$role": "implements(Microsoft.ITriggerSelector)", - "title": "First Trigger Selector", + "title": "First trigger selector", "description": "Selector for first true rule", "type": "object", "required": [ @@ -3129,7 +3350,7 @@ }, "Microsoft.GetActivityMembers": { "$role": "implements(Microsoft.IDialog)", - "title": "Get Activity Members", + "title": "Get activity members", "description": "Get the members who are participating in an activity. (BotFrameworkAdapter only)", "type": "object", "required": [ @@ -3158,7 +3379,7 @@ }, "activityId": { "$ref": "#/definitions/stringExpression", - "title": "ActivityId", + "title": "Activity Id", "description": "Activity ID or expression to an activityId to use to get the members. If none is defined then the current activity id will be used.", "examples": [ "$lastActivity" @@ -3188,7 +3409,7 @@ }, "Microsoft.GetConversationMembers": { "$role": "implements(Microsoft.IDialog)", - "title": "Get Converation Members", + "title": "Get conversation members", "description": "Get the members who are participating in an conversation. (BotFrameworkAdapter only)", "type": "object", "required": [ @@ -3239,7 +3460,7 @@ }, "Microsoft.GotoAction": { "$role": "implements(Microsoft.IDialog)", - "title": "Go to Action", + "title": "Go to action", "description": "Go to an an action by id.", "type": "object", "required": [ @@ -3288,7 +3509,7 @@ }, "Microsoft.GuidEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Guid Entity Recognizer", + "title": "Guid entity recognizer", "description": "Recognizer which recognizes guids.", "type": "object", "required": [ @@ -3318,7 +3539,7 @@ }, "Microsoft.HashtagEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Hashtag Entity Recognizer", + "title": "Hashtag entity recognizer", "description": "Recognizer which recognizes Hashtags.", "type": "object", "required": [ @@ -3478,54 +3699,557 @@ "type": "string" }, { - "$ref": "#/definitions/botframework.json/definitions/Activity", "required": [ "type" - ] - }, - { - "$ref": "#/definitions/Microsoft.ActivityTemplate" - }, - { - "$ref": "#/definitions/Microsoft.StaticActivityTemplate" - } - ] - }, - "Microsoft.IDialog": { - "title": "Microsoft Dialogs", - "description": "Components which derive from Dialog", - "$role": "interface", - "oneOf": [ - { - "type": "string" - }, - { - "$ref": "#/definitions/Microsoft.QnAMakerDialog" - }, - { - "$ref": "#/definitions/AzureQueues.ContinueConversationLater" - }, - { - "$ref": "#/definitions/Microsoft.AdaptiveDialog" - }, - { - "$ref": "#/definitions/Microsoft.Test.AssertCondition" - }, - { - "$ref": "#/definitions/Microsoft.BeginDialog" - }, - { - "$ref": "#/definitions/Microsoft.BeginSkill" - }, - { - "$ref": "#/definitions/Microsoft.BreakLoop" - }, - { - "$ref": "#/definitions/Microsoft.CancelAllDialogs" - }, - { + ], + "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", + "title": "Activity", + "type": "object", + "properties": { + "type": { + "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", + "type": "string", + "title": "type" + }, + "id": { + "description": "Contains an ID that uniquely identifies the activity on the channel.", + "type": "string", + "title": "id" + }, + "timestamp": { + "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", + "type": "string", + "format": "date-time", + "title": "timestamp" + }, + "localTimestamp": { + "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", + "type": "string", + "format": "date-time", + "title": "localTimestamp" + }, + "localTimezone": { + "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", + "type": "string", + "title": "localTimezone" + }, + "serviceUrl": { + "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", + "type": "string", + "title": "serviceUrl" + }, + "channelId": { + "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", + "type": "string", + "title": "channelId" + }, + "from": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Identifies the sender of the message.", + "title": "from" + }, + "conversation": { + "description": "Identifies the conversation to which the activity belongs.", + "title": "conversation", + "type": "object", + "required": [ + "conversationType", + "id", + "isGroup", + "name" + ], + "properties": { + "isGroup": { + "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", + "type": "boolean", + "title": "isGroup" + }, + "conversationType": { + "description": "Indicates the type of the conversation in channels that distinguish between conversation types", + "type": "string", + "title": "conversationType" + }, + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "enum": [ + "bot", + "user" + ], + "type": "string", + "title": "role" + } + } + }, + "recipient": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Identifies the recipient of the message.", + "title": "recipient" + }, + "textFormat": { + "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", + "type": "string", + "title": "textFormat" + }, + "attachmentLayout": { + "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", + "type": "string", + "title": "attachmentLayout" + }, + "membersAdded": { + "description": "The collection of members added to the conversation.", + "type": "array", + "title": "membersAdded", + "items": { + "description": "Channel account information needed to route a message", + "title": "ChannelAccount", + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", + "type": "string", + "title": "id" + }, + "name": { + "description": "Display friendly name", + "type": "string", + "title": "name" + }, + "aadObjectId": { + "description": "This account's object ID within Azure Active Directory (AAD)", + "type": "string", + "title": "aadObjectId" + }, + "role": { + "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", + "type": "string", + "title": "role" + } + } + } + }, + "membersRemoved": { + "description": "The collection of members removed from the conversation.", + "type": "array", + "title": "membersRemoved", + "items": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items" + } + }, + "reactionsAdded": { + "description": "The collection of reactions added to the conversation.", + "type": "array", + "title": "reactionsAdded", + "items": { + "description": "Message reaction object", + "title": "MessageReaction", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Message reaction type. Possible values include: 'like', 'plusOne'", + "type": "string", + "title": "type" + } + } + } + }, + "reactionsRemoved": { + "description": "The collection of reactions removed from the conversation.", + "type": "array", + "title": "reactionsRemoved", + "items": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/reactionsAdded/items" + } + }, + "topicName": { + "description": "The updated topic name of the conversation.", + "type": "string", + "title": "topicName" + }, + "historyDisclosed": { + "description": "Indicates whether the prior history of the channel is disclosed.", + "type": "boolean", + "title": "historyDisclosed" + }, + "locale": { + "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", + "type": "string", + "title": "locale" + }, + "text": { + "description": "The text content of the message.", + "type": "string", + "title": "text" + }, + "speak": { + "description": "The text to speak.", + "type": "string", + "title": "speak" + }, + "inputHint": { + "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", + "type": "string", + "title": "inputHint" + }, + "summary": { + "description": "The text to display if the channel cannot render cards.", + "type": "string", + "title": "summary" + }, + "suggestedActions": { + "description": "The suggested actions for the activity.", + "title": "suggestedActions", + "type": "object", + "required": [ + "actions", + "to" + ], + "properties": { + "to": { + "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", + "type": "array", + "title": "to", + "items": { + "title": "Id", + "description": "Id of recipient.", + "type": "string" + } + }, + "actions": { + "description": "Actions that can be shown to the user", + "type": "array", + "title": "actions", + "items": { + "description": "A clickable action", + "title": "CardAction", + "type": "object", + "required": [ + "title", + "type", + "value" + ], + "properties": { + "type": { + "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", + "type": "string", + "title": "type" + }, + "title": { + "description": "Text description which appears on the button", + "type": "string", + "title": "title" + }, + "image": { + "description": "Image URL which will appear on the button, next to text label", + "type": "string", + "title": "image" + }, + "text": { + "description": "Text for this action", + "type": "string", + "title": "text" + }, + "displayText": { + "description": "(Optional) text to display in the chat feed if the button is clicked", + "type": "string", + "title": "displayText" + }, + "value": { + "description": "Supplementary parameter for action. Content of this property depends on the ActionType", + "title": "value" + }, + "channelData": { + "description": "Channel-specific data associated with this action", + "title": "channelData" + } + } + } + } + } + }, + "attachments": { + "description": "Attachments", + "type": "array", + "title": "attachments", + "items": { + "description": "An attachment within an activity", + "title": "Attachment", + "type": "object", + "required": [ + "contentType" + ], + "properties": { + "contentType": { + "description": "mimetype/Contenttype for the file", + "type": "string", + "title": "contentType" + }, + "contentUrl": { + "description": "Content Url", + "type": "string", + "title": "contentUrl" + }, + "content": { + "type": "object", + "description": "Embedded content", + "title": "content" + }, + "name": { + "description": "(OPTIONAL) The name of the attachment", + "type": "string", + "title": "name" + }, + "thumbnailUrl": { + "description": "(OPTIONAL) Thumbnail associated with attachment", + "type": "string", + "title": "thumbnailUrl" + } + } + } + }, + "entities": { + "description": "Represents the entities that were mentioned in the message.", + "type": "array", + "title": "entities", + "items": { + "description": "Metadata object pertaining to an activity", + "title": "Entity", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "Type of this entity (RFC 3987 IRI)", + "type": "string", + "title": "type" + } + } + } + }, + "channelData": { + "description": "Contains channel-specific content.", + "title": "channelData" + }, + "action": { + "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", + "type": "string", + "title": "action" + }, + "replyToId": { + "description": "Contains the ID of the message to which this message is a reply.", + "type": "string", + "title": "replyToId" + }, + "label": { + "description": "A descriptive label for the activity.", + "type": "string", + "title": "label" + }, + "valueType": { + "description": "The type of the activity's value object.", + "type": "string", + "title": "valueType" + }, + "value": { + "description": "A value that is associated with the activity.", + "title": "value" + }, + "name": { + "description": "The name of the operation associated with an invoke or event activity.", + "type": "string", + "title": "name" + }, + "relatesTo": { + "description": "A reference to another conversation or activity.", + "title": "relatesTo", + "type": "object", + "required": [ + "bot", + "channelId", + "conversation", + "serviceUrl" + ], + "properties": { + "activityId": { + "description": "(Optional) ID of the activity to refer to", + "type": "string", + "title": "activityId" + }, + "user": { + "description": "(Optional) User participating in this conversation", + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "title": "user" + }, + "bot": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/membersAdded/items", + "description": "Bot participating in this conversation", + "title": "bot" + }, + "conversation": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/conversation", + "description": "Conversation reference", + "title": "conversation" + }, + "channelId": { + "description": "Channel ID", + "type": "string", + "title": "channelId" + }, + "serviceUrl": { + "description": "Service endpoint where operations concerning the referenced conversation may be performed", + "type": "string", + "title": "serviceUrl" + } + } + }, + "code": { + "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", + "type": "string", + "title": "code" + }, + "expiration": { + "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", + "type": "string", + "format": "date-time", + "title": "expiration" + }, + "importance": { + "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", + "type": "string", + "title": "importance" + }, + "deliveryMode": { + "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", + "type": "string", + "title": "deliveryMode" + }, + "listenFor": { + "description": "List of phrases and references that speech and language priming systems should listen for", + "type": "array", + "title": "listenFor", + "items": { + "type": "string", + "title": "Phrase", + "description": "Phrase to listen for." + } + }, + "textHighlights": { + "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", + "type": "array", + "title": "textHighlights", + "items": { + "description": "Refers to a substring of content within another field", + "title": "TextHighlight", + "type": "object", + "required": [ + "occurrence", + "text" + ], + "properties": { + "text": { + "description": "Defines the snippet of text to highlight", + "type": "string", + "title": "text" + }, + "occurrence": { + "description": "Occurrence of the text field within the referenced text, if multiple exist.", + "type": "number", + "title": "occurrence" + } + } + } + }, + "semanticAction": { + "description": "An optional programmatic action accompanying this request", + "title": "semanticAction", + "type": "object", + "required": [ + "entities", + "id" + ], + "properties": { + "id": { + "description": "ID of this action", + "type": "string", + "title": "id" + }, + "entities": { + "description": "Entities associated with this action", + "type": "object", + "title": "entities", + "additionalProperties": { + "$ref": "#/definitions/Microsoft.Ask/properties/activity/oneOf/1/properties/entities/items" + } + } + } + } + } + }, + { + "$ref": "#/definitions/Microsoft.ActivityTemplate" + }, + { + "$ref": "#/definitions/Microsoft.StaticActivityTemplate" + } + ] + }, + "Microsoft.IDialog": { + "title": "Microsoft dialogs", + "description": "Components which derive from Dialog", + "$role": "interface", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/Microsoft.QnAMakerDialog" + }, + { + "$ref": "#/definitions/Microsoft.AdaptiveDialog" + }, + { + "$ref": "#/definitions/Microsoft.Test.AssertCondition" + }, + { + "$ref": "#/definitions/Microsoft.BeginDialog" + }, + { + "$ref": "#/definitions/Microsoft.BeginSkill" + }, + { + "$ref": "#/definitions/Microsoft.BreakLoop" + }, + { + "$ref": "#/definitions/Microsoft.CancelAllDialogs" + }, + { "$ref": "#/definitions/Microsoft.CancelDialog" }, + { + "$ref": "#/definitions/Microsoft.ContinueConversationLater" + }, { "$ref": "#/definitions/Microsoft.ContinueLoop" }, @@ -3637,6 +4361,9 @@ { "$ref": "#/definitions/Microsoft.TextInput" }, + { + "$ref": "#/definitions/Teams.GetMeetingParticipant" + }, { "$ref": "#/definitions/Testbot.JavascriptAction" }, @@ -3647,7 +4374,7 @@ }, "Microsoft.IEntityRecognizer": { "$role": "interface", - "title": "Entity Recognizers", + "title": "Entity recognizers", "description": "Components which derive from EntityRecognizer.", "type": "object", "oneOf": [ @@ -3729,7 +4456,7 @@ ] }, "Microsoft.IRecognizer": { - "title": "Microsoft Recognizer", + "title": "Microsoft recognizer", "description": "Components which derive from Recognizer class", "$role": "interface", "oneOf": [ @@ -4167,7 +4894,7 @@ }, "Microsoft.IpEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Ip Entity Recognizer", + "title": "IP entity recognizer", "description": "Recognizer which recognizes internet IP patterns (like 192.1.1.1).", "type": "object", "required": [ @@ -4196,7 +4923,7 @@ } }, "Microsoft.LanguagePolicy": { - "title": "Language Policy", + "title": "Language policy", "description": "This represents a policy map for locales lookups to use for language", "type": "object", "required": [ @@ -4276,7 +5003,7 @@ }, "traceActivity": { "$ref": "#/definitions/booleanExpression", - "title": "Send Trace Activity", + "title": "Send trace activity", "description": "If true, automatically sends a TraceActivity (view in Bot Framework Emulator)." }, "$kind": { @@ -4319,17 +5046,17 @@ }, "applicationId": { "$ref": "#/definitions/stringExpression", - "title": "LUIS Application ID", + "title": "LUIS application id", "description": "Application ID for your model from the LUIS service." }, "version": { "$ref": "#/definitions/stringExpression", - "title": "LUIS Version", + "title": "LUIS version", "description": "Optional version to target. If null then predictionOptions.Slot is used." }, "endpoint": { "$ref": "#/definitions/stringExpression", - "title": "LUIS Endpoint", + "title": "LUIS endpoint", "description": "Endpoint to use for LUIS service like https://westus.api.cognitive.microsoft.com." }, "endpointKey": { @@ -4339,7 +5066,7 @@ }, "externalEntityRecognizer": { "$kind": "Microsoft.IRecognizer", - "title": "External Entity Recognizer", + "title": "External entity recognizer", "description": "Entities recognized by this recognizer will be passed to LUIS as external entities.", "$ref": "#/definitions/Microsoft.IRecognizer" }, @@ -4409,7 +5136,7 @@ }, "preferExternalEntities": { "$ref": "#/definitions/booleanExpression", - "title": "Prefer External Entities", + "title": "Prefer external entities", "description": "True to prefer external entities to those generated by LUIS models." }, "slot": { @@ -4435,7 +5162,7 @@ }, "Microsoft.MentionEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Mentions Entity Recognizer", + "title": "Mentions entity recognizer", "description": "Recognizer which recognizes @Mentions", "type": "object", "required": [ @@ -4465,7 +5192,7 @@ }, "Microsoft.MostSpecificSelector": { "$role": "implements(Microsoft.ITriggerSelector)", - "title": "Most Specific Trigger Selector", + "title": "Most specific trigger selector", "description": "Select most specific true events with optional additional selector", "type": "object", "required": [ @@ -4551,7 +5278,7 @@ }, "Microsoft.NumberEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Number Entity Recognizer", + "title": "Number entity recognizer", "description": "Recognizer which recognizes numbers.", "type": "object", "required": [ @@ -4752,7 +5479,7 @@ }, "Microsoft.NumberRangeEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "NumberRange Entity Recognizer", + "title": "Number range entity recognizer", "description": "Recognizer which recognizes ranges of numbers (Example:2 to 5).", "type": "object", "required": [ @@ -4882,7 +5609,7 @@ }, "allowInterruptions": { "$ref": "#/definitions/booleanExpression", - "title": "Allow Interruptions", + "title": "Allow interruptions", "description": "A boolean expression that determines whether the parent should be allowed to interrupt the input.", "default": true, "examples": [ @@ -5501,7 +6228,7 @@ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], - "title": "On Continue Conversation", + "title": "On continue conversation", "description": "Actions to perform when a conversation is started up again from a ContinueConversationLater action.", "type": "object", "required": [ @@ -5832,7 +6559,7 @@ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], - "title": "On Error", + "title": "On error", "description": "Action to perform when an 'Error' dialog event occurs.", "type": "object", "required": [ @@ -6497,7 +7224,7 @@ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], - "title": "On QnAMaker Match", + "title": "On QnAMaker match", "description": "Actions to perform on when an match from QnAMaker is found.", "type": "object", "required": [ @@ -6754,7 +7481,7 @@ }, "Microsoft.OrchestratorRecognizer": { "$role": "implements(Microsoft.IRecognizer)", - "title": "Orchestrator Recognizer", + "title": "Orchestrator recognizer", "description": "Orchestrator recognizer.", "type": "object", "required": [ @@ -6783,7 +7510,7 @@ }, "snapshotPath": { "$ref": "#/definitions/stringExpression", - "title": "Endpoint Key", + "title": "Endpoint key", "description": "SnapShot file path.", "default": "=settings.orchestrator.shapshotpath" }, @@ -6834,7 +7561,7 @@ }, "Microsoft.OrdinalEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Ordinal Entity Recognizer", + "title": "Ordinal entity recognizer", "description": "Recognizer which recognizes ordinals (example: first, second, 3rd).", "type": "object", "required": [ @@ -6864,7 +7591,7 @@ }, "Microsoft.PercentageEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Percentage Entity Recognizer", + "title": "Percentage entity recognizer", "description": "Recognizer which recognizes percentages.", "type": "object", "required": [ @@ -6894,7 +7621,7 @@ }, "Microsoft.PhoneNumberEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Phone Number Entity Recognizer", + "title": "Phone number entity recognizer", "description": "Recognizer which recognizes phone numbers.", "type": "object", "required": [ @@ -6924,7 +7651,7 @@ }, "Microsoft.QnAMakerDialog": { "$role": "implements(Microsoft.IDialog)", - "title": "QnAMaker Dialog", + "title": "QnAMaker dialog", "description": "Dialog which uses QnAMAker knowledge base to answer questions.", "type": "object", "required": [ @@ -6949,7 +7676,7 @@ }, "endpointKey": { "$ref": "#/definitions/stringExpression", - "title": "Endpoint Key", + "title": "Endpoint key", "description": "Endpoint key for the QnA Maker KB.", "default": "=settings.qna.endpointkey" }, @@ -6996,7 +7723,7 @@ }, "strictFilters": { "$ref": "#/definitions/arrayExpression", - "title": "Strict Filters", + "title": "Strict filters", "description": "Metadata filters to use when calling the QnA Maker KB.", "items": { "type": "object", @@ -7032,7 +7759,7 @@ }, "rankerType": { "$ref": "#/definitions/stringExpression", - "title": "Ranker Type", + "title": "Ranker type", "description": "Type of Ranker.", "oneOf": [ { @@ -7056,7 +7783,7 @@ "description": "Join operator for Strict Filters.", "oneOf": [ { - "title": "Join Operator", + "title": "Join operator", "description": "Value of Join Operator to be used as conjunction with Strict Filter values.", "enum": [ "AND", @@ -7085,7 +7812,7 @@ }, "Microsoft.QnAMakerRecognizer": { "$role": "implements(Microsoft.IRecognizer)", - "title": "QnAMaker Recognizer", + "title": "QnAMaker recognizer", "description": "Recognizer for generating QnAMatch intents from a KB.", "type": "object", "required": [ @@ -7110,12 +7837,12 @@ "knowledgeBaseId": { "$ref": "#/definitions/stringExpression", "title": "KnowledgeBase Id", - "description": "KnowledgeBase Id of your QnA Maker KnowledgeBase.", + "description": "Knowledge base Id of your QnA Maker knowledge base.", "default": "=settings.qna.knowledgebaseid" }, "endpointKey": { "$ref": "#/definitions/stringExpression", - "title": "Endpoint Key", + "title": "Endpoint key", "description": "Endpoint key for the QnA Maker KB.", "default": "=settings.qna.endpointkey" }, @@ -7136,7 +7863,7 @@ }, "strictFilters": { "$ref": "#/definitions/arrayExpression", - "title": "Strict Filters", + "title": "Strict filters", "description": "Metadata filters to use when calling the QnA Maker KB.", "items": { "type": "object", @@ -7166,7 +7893,7 @@ }, "isTest": { "$ref": "#/definitions/booleanExpression", - "title": "IsTest", + "title": "Use test environment", "description": "True, if pointing to Test environment, else false.", "examples": [ true, @@ -7174,7 +7901,7 @@ ] }, "rankerType": { - "title": "Ranker Type", + "title": "Ranker type", "description": "Type of Ranker.", "oneOf": [ { @@ -7199,7 +7926,7 @@ "description": "Join operator for Strict Filters.", "oneOf": [ { - "title": "Join Operator", + "title": "Join operator", "description": "Value of Join Operator to be used as onjuction with Strict Filter values.", "enum": [ "AND", @@ -7214,7 +7941,7 @@ }, "includeDialogNameInMetadata": { "$ref": "#/definitions/booleanExpression", - "title": "Include Dialog Name", + "title": "Include dialog name", "description": "When set to false, the dialog name will not be passed to QnAMaker. (default) is true", "default": true, "examples": [ @@ -7246,12 +7973,12 @@ }, "context": { "$ref": "#/definitions/objectExpression", - "title": "QnARequestContext", + "title": "QnA request context", "description": "Context to use for ranking." }, "qnaId": { "$ref": "#/definitions/integerExpression", - "title": "QnAId", + "title": "QnA Id", "description": "A number or expression which is the QnAId to paass to QnAMaker API." }, "$kind": { @@ -7305,7 +8032,7 @@ }, "Microsoft.RecognizerSet": { "$role": "implements(Microsoft.IRecognizer)", - "title": "Recognizer Set", + "title": "Recognizer set", "description": "Creates the union of the intents and entities of the recognizers in the set.", "type": "object", "required": [ @@ -7350,7 +8077,7 @@ }, "Microsoft.RegexEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Regex Entity Recognizer", + "title": "Regex entity recognizer", "description": "Recognizer which recognizes patterns of input based on regex.", "type": "object", "required": [ @@ -7505,7 +8232,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the dialog that is called can process the current activity.", "default": true }, @@ -7582,7 +8309,7 @@ }, "activityProcessed": { "$ref": "#/definitions/booleanExpression", - "title": "Activity Processed", + "title": "Activity processed", "description": "When set to false, the dialog that is called can process the current activity.", "default": true }, @@ -7602,7 +8329,7 @@ }, "Microsoft.ResourceMultiLanguageGenerator": { "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Resource Multi-Language Generator", + "title": "Resource multi-language generator", "description": "MultiLanguage Generator which is bound to resource by resource Id.", "type": "object", "required": [ @@ -7629,7 +8356,7 @@ }, "languagePolicy": { "type": "object", - "title": "Language Policy", + "title": "Language policy", "description": "Set alternate language policy for this generator. If not set, the global language policy will be used." }, "$kind": { @@ -7836,7 +8563,7 @@ }, "Microsoft.SignOutUser": { "$role": "implements(Microsoft.IDialog)", - "title": "Sign Out User", + "title": "Sign out user", "description": "Sign a user out that was logged in previously using OAuthInput.", "type": "object", "required": [ @@ -7863,7 +8590,7 @@ }, "connectionName": { "$ref": "#/definitions/stringExpression", - "title": "Connection Name", + "title": "Connection name", "description": "Connection name that was used with OAuthInput to log a user in." }, "disabled": { @@ -7891,7 +8618,7 @@ }, "Microsoft.StaticActivityTemplate": { "$role": "implements(Microsoft.IActivityTemplate)", - "title": "Microsoft Static Activity Template", + "title": "Microsoft static activity template", "description": "This allows you to define a static Activity object", "type": "object", "required": [ @@ -7907,7 +8634,7 @@ }, "properties": { "activity": { - "$ref": "#/definitions/botframework.json/definitions/Activity", + "$ref": "#/definitions/Microsoft.IActivityTemplate/oneOf/1", "title": "Activity", "description": "A static Activity to used.", "required": [ @@ -8033,7 +8760,7 @@ "Microsoft.TelemetryTrackEvent": { "$role": "implements(Microsoft.IDialog)", "type": "object", - "title": "Telemetry - Track Event", + "title": "Telemetry - track event", "description": "Track a custom event using the registered Telemetry Client.", "required": [ "url", @@ -8063,7 +8790,7 @@ }, "eventName": { "$ref": "#/definitions/stringExpression", - "title": "Event Name", + "title": "Event name", "description": "The name of the event to track.", "examples": [ "MyEventStarted", @@ -8094,7 +8821,7 @@ }, "Microsoft.TemperatureEntityRecognizer": { "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Temperature Recognizer", + "title": "Temperature recognizer", "description": "Recognizer which recognizes temperatures.", "type": "object", "required": [ @@ -8124,7 +8851,7 @@ }, "Microsoft.TemplateEngineLanguageGenerator": { "$role": "implements(Microsoft.ILanguageGenerator)", - "title": "Template Multi-Language Generator", + "title": "Template multi-language generator", "description": "Template Generator which allows only inline evaluation of templates.", "type": "object", "required": [ @@ -8201,9 +8928,44 @@ } } }, + "Microsoft.Test.AssertNoActivity": { + "$role": "implements(Microsoft.Test.ITestAction)", + "title": "Assert Reply Activity", + "description": "Asserts that there is no activity.", + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "description": { + "type": "string", + "title": "Description", + "description": "The description of the assertion" + }, + "$kind": { + "title": "Kind of dialog object", + "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.Test.AssertNoActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, "Microsoft.Test.AssertReply": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Assert Reply", + "title": "Assert reply", "description": "Asserts that a reply text is valid.", "type": "object", "required": [ @@ -8219,12 +8981,12 @@ "properties": { "text": { "type": "string", - "title": "Reply Text", + "title": "Reply text", "description": "Expected reply text" }, "exact": { "type": "boolean", - "title": "Exact Match", + "title": "Exact match", "description": "If true then an exact match must happen, if false then the reply activity.text must contain the reply text. [Default:false]" }, "description": { @@ -8239,7 +9001,7 @@ }, "assertions": { "type": "array", - "title": "Assertions to perform to validate Activity that is sent by the dialog", + "title": "Assertions to validate activity", "description": "Sequence of expressions which must evaluate to true.", "items": { "$ref": "#/definitions/condition", @@ -8266,7 +9028,7 @@ }, "Microsoft.Test.AssertReplyActivity": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Assert Reply Activity", + "title": "Assert reply activity", "description": "Asserts that a reply activity is valid.", "type": "object", "required": [ @@ -8293,7 +9055,7 @@ }, "assertions": { "type": "array", - "title": "Assertions to perform to validate Activity that is sent by the dialog", + "title": "Assertions to validate Activity that is sent by the dialog", "description": "Sequence of expressions which must evaluate to true.", "items": { "$ref": "#/definitions/condition", @@ -8320,7 +9082,7 @@ }, "Microsoft.Test.AssertReplyOneOf": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Assert Reply OneOf", + "title": "Assert activity text matches at least one", "description": "Asserts that a reply text is one of multiple optional responses.", "type": "object", "required": [ @@ -8346,7 +9108,7 @@ }, "exact": { "type": "boolean", - "title": "Exact Match", + "title": "Exact match", "description": "If true then an exact match must happen, if false then the reply activity.text must contain the reply text. [Default:false]" }, "description": { @@ -8361,7 +9123,7 @@ }, "assertions": { "type": "array", - "title": "Assertions to perform to validate Activity that is sent by the dialog", + "title": "Assertions to validate activity", "description": "Sequence of expressions which must evaluate to true.", "items": { "$ref": "#/definitions/condition", @@ -8388,7 +9150,7 @@ }, "Microsoft.Test.CustomEvent": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "User Event", + "title": "User event", "description": "Sends event to the bot from the user.", "type": "object", "required": [ @@ -8406,7 +9168,7 @@ "properties": { "name": { "type": "string", - "title": "Event Name", + "title": "Event name", "description": "Event name to send to the bot." }, "value": { @@ -8430,7 +9192,7 @@ }, "Microsoft.Test.HttpRequestSequenceMock": { "$role": "implements(Microsoft.Test.IHttpRequestMock)", - "title": "HttpRequest Sequence Mock", + "title": "HTTP request sequence mock", "description": "Mock HttpRequest in sequence order.", "type": "object", "required": [ @@ -8471,7 +9233,7 @@ }, "matchType": { "type": "string", - "title": "Body Match Type", + "title": "Body match type", "description": "The match type for body.", "enum": [ "Exact", @@ -8501,12 +9263,12 @@ "description": "Mocked http response.", "properties": { "statusCode": { - "title": "Status Code", + "title": "Status code", "description": "The status code. Default is OK(200).", "oneOf": [ { "type": "string", - "title": "String Status Code", + "title": "String status code", "description": "Use string as status code.", "enum": [ "Continue", @@ -8563,7 +9325,7 @@ }, { "type": "number", - "title": "Number Status Code", + "title": "Number status code", "description": "Use number as status code.", "examples": [ 200 @@ -8574,7 +9336,7 @@ }, "reasonPhrase": { "type": "string", - "title": "Reason Phrase", + "title": "Reason phrase", "description": "The reason phrase.", "examples": [ "Server is stolen." @@ -8635,7 +9397,7 @@ } }, "Microsoft.Test.IHttpRequestMock": { - "title": "Microsoft Test IHttpRequestMock", + "title": "HTTP request mock", "description": "Components which derive from HttpRequestMock class", "$role": "interface", "oneOf": [ @@ -8650,12 +9412,12 @@ ] }, "Microsoft.Test.IPropertyMock": { - "title": "Microsoft Test IPropertyMock", + "title": "Property mock", "description": "Components which derive from PropertyMock class", "$role": "interface" }, "Microsoft.Test.ITestAction": { - "title": "Microsoft Test ITestAction", + "title": "Test action", "description": "Components which derive from TestAction class", "$role": "interface", "oneOf": [ @@ -8664,6 +9426,9 @@ "title": "Reference to Microsoft.Test.ITestAction", "description": "Reference to Microsoft.Test.ITestAction .dialog file." }, + { + "$ref": "#/definitions/Microsoft.Test.AssertNoActivity" + }, { "$ref": "#/definitions/Microsoft.Test.AssertReply" }, @@ -8700,7 +9465,7 @@ ] }, "Microsoft.Test.IUserTokenMock": { - "title": "Microsoft Test IUserTokenMock", + "title": "User token mock", "description": "Components which derive from UserTokenMock class", "$role": "interface", "oneOf": [ @@ -8765,7 +9530,7 @@ }, "Microsoft.Test.Script": { "$role": [], - "title": "Test Script", + "title": "Test script", "description": "Defines a sequence of test actions to perform to validate the behavior of dialogs.", "type": "object", "required": [ @@ -8787,6 +9552,11 @@ "description": "The root dialog to execute the test script against.", "$ref": "#/definitions/Microsoft.IDialog" }, + "languagePolicy": { + "type": "object", + "title": "Language policy", + "description": "Defines fall back languages to try per user input language." + }, "description": { "type": "string", "title": "Description", @@ -8794,7 +9564,7 @@ }, "httpRequestMocks": { "type": "array", - "title": "Http Request Mocks", + "title": "Http request mocks", "description": "Mock data for Microsoft.HttpRequest.", "items": { "$kind": "Microsoft.Test.IHttpRequestMock", @@ -8803,7 +9573,7 @@ }, "userTokenMocks": { "type": "array", - "title": "User Token Mocks", + "title": "User token mocks", "description": "Mock data for Microsoft.OAuthInput.", "items": { "$kind": "Microsoft.Test.IUserTokenMock", @@ -8827,7 +9597,7 @@ }, "enableTrace": { "type": "boolean", - "title": "Enable Trace Activity", + "title": "Enable trace activity", "description": "Enable trace activities in the unit test (default is false)", "default": false }, @@ -8908,7 +9678,7 @@ }, "Microsoft.Test.UserActivity": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Send Activity", + "title": "Send activity", "description": "Sends activity to the bot.", "type": "object", "required": [ @@ -8931,7 +9701,7 @@ }, "user": { "type": "string", - "title": "User Name", + "title": "User name", "description": "The activity.from.id and activity.from.name will be this if specified." }, "$kind": { @@ -8966,7 +9736,7 @@ "properties": { "membersAdded": { "type": "array", - "title": "Members Added", + "title": "Members added", "description": "Names of the members to add", "items": { "type": "string", @@ -8976,7 +9746,7 @@ }, "membersRemoved": { "type": "array", - "title": "Members Removed", + "title": "Members removed", "description": "Names of the members to remove", "items": { "type": "string", @@ -9000,7 +9770,7 @@ }, "Microsoft.Test.UserDelay": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Delay Execution", + "title": "Delay execution", "description": "Delays text script for time period.", "type": "object", "required": [ @@ -9036,7 +9806,7 @@ }, "Microsoft.Test.UserSays": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "User Text", + "title": "User text", "description": "Sends text to the bot from the user.", "type": "object", "required": [ @@ -9058,7 +9828,7 @@ }, "user": { "type": "string", - "title": "User Name", + "title": "User name", "description": "The activity.from.id and activity.from.name will be this if specified." }, "$kind": { @@ -9077,7 +9847,7 @@ }, "Microsoft.Test.UserTokenBasicMock": { "$role": "implements(Microsoft.Test.IUserTokenMock)", - "title": "Microsoft Test UserTokenBasicMock", + "title": "User token mock", "description": "Mock Basic UserToken", "type": "object", "required": [ @@ -9095,7 +9865,7 @@ "properties": { "connectionName": { "type": "string", - "title": "Connection Name", + "title": "Connection name", "description": "The connection name.", "examples": [ "graph" @@ -9103,7 +9873,7 @@ }, "channelId": { "type": "string", - "title": "Channel ID", + "title": "Channel Id", "description": "The channel ID. If empty, same as adapter.Conversation.ChannelId.", "examples": [ "test" @@ -9111,7 +9881,7 @@ }, "userId": { "type": "string", - "title": "User ID", + "title": "User Id", "description": "The user ID. If empty, same as adapter.Conversation.User.Id.", "examples": [ "user1" @@ -9127,7 +9897,7 @@ }, "magicCode": { "type": "string", - "title": "Magic Code", + "title": "Magic code", "description": "The optional magic code to associate with this token.", "examples": [ "000000" @@ -9149,7 +9919,7 @@ }, "Microsoft.Test.UserTyping": { "$role": "implements(Microsoft.Test.ITestAction)", - "title": "Send Typing", + "title": "Send typing", "description": "Sends typing activity to the bot.", "type": "object", "required": [ @@ -9165,7 +9935,7 @@ "properties": { "user": { "type": "string", - "title": "User Name", + "title": "User name", "description": "The activity.from.id and activity.from.name will be this if specified." }, "$kind": { @@ -9500,7 +10270,7 @@ }, "Microsoft.TrueSelector": { "$role": "implements(Microsoft.ITriggerSelector)", - "title": "True Trigger Selector", + "title": "True trigger selector", "description": "Selector for all true events", "type": "object", "required": [ @@ -9579,35 +10349,110 @@ "pattern": "^[a-zA-Z][a-zA-Z0-9.]*$", "const": "Microsoft.UpdateActivity" }, - "$designer": { - "title": "Designer information", - "type": "object", - "description": "Extra information for the Bot Framework Composer." - } - } - }, - "Microsoft.UrlEntityRecognizer": { - "$role": "implements(Microsoft.IEntityRecognizer)", - "title": "Confirmation Url Recognizer", - "description": "Recognizer which recognizes urls.", - "type": "object", - "required": [ - "$kind" - ], - "additionalProperties": false, - "patternProperties": { - "^\\$": { - "title": "Tooling property", - "description": "Open ended property for tooling." - } - }, - "properties": { + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Microsoft.UrlEntityRecognizer": { + "$role": "implements(Microsoft.IEntityRecognizer)", + "title": "Url recognizer", + "description": "Recognizer which recognizes urls.", + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "$kind": { + "title": "Kind of dialog object", + "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" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, + "Teams.GetMeetingParticipant": { + "$role": "implements(Microsoft.IDialog)", + "title": "Get meeting participant", + "description": "Get teams meeting partipant information.", + "type": "object", + "required": [ + "$kind" + ], + "additionalProperties": false, + "patternProperties": { + "^\\$": { + "title": "Tooling property", + "description": "Open ended property for tooling." + } + }, + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Optional id for the dialog" + }, + "property": { + "$ref": "#/definitions/stringExpression", + "title": "Property", + "description": "Property (named location to store information).", + "examples": [ + "user.participantInfo" + ] + }, + "meetingId": { + "$ref": "#/definitions/stringExpression", + "title": "Meeting Id", + "description": "Meeting Id or expression to a meetingId to use to get the participant information. Default value is the current turn.activity.channelData.meeting.id.", + "examples": [ + "=turn.activity.channelData.meeting.id" + ] + }, + "participantId": { + "$ref": "#/definitions/stringExpression", + "title": "Participant Id", + "description": "Participant Id or expression to a participantId to use to get the participant information. Default value is the current turn.activity.from.aadObjectId.", + "examples": [ + "=turn.activity.from.aadObjectId" + ] + }, + "tenantId": { + "$ref": "#/definitions/stringExpression", + "title": "Tenant Id", + "description": "Tenant Id or expression to a tenantId to use to get the participant information. Default value is the current $turn.activity.channelData.tenant.id.", + "examples": [ + "=turn.activity.channelData.tenant.id" + ] + }, + "disabled": { + "$ref": "#/definitions/booleanExpression", + "title": "Disabled", + "description": "Optional condition which if true will disable this action.", + "examples": [ + "=user.age > 3" + ] + }, "$kind": { "title": "Kind of dialog object", "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" + "const": "Teams.GetMeetingParticipant" }, "$designer": { "title": "Designer information", @@ -11328,920 +12173,136 @@ "$role": "expression", "title": "Integer or expression", "description": "Integer constant or expression to evaluate.", - "oneOf": [ - { - "type": "integer", - "title": "Integer", - "description": "Integer constant.", - "default": 0, - "examples": [ - 15 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=user.age" - ] - } - ] - }, - "numberExpression": { - "$role": "expression", - "title": "Number or expression", - "description": "Number constant or expression to evaluate.", - "oneOf": [ - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "default": 0, - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=dialog.quantity" - ] - } - ] - }, - "objectExpression": { - "$role": "expression", - "title": "Object or expression", - "description": "Object or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] - }, - "role": { - "title": "$role", - "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", - "type": "string", - "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" - }, - "stringExpression": { - "$role": "expression", - "title": "String or expression", - "description": "Interpolated string or expression to evaluate.", - "oneOf": [ - { - "type": "string", - "title": "String", - "description": "Interpolated string", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=concat('x','y','z')" - ] - } - ] - }, - "valueExpression": { - "$role": "expression", - "title": "Any or expression", - "description": "Any constant or expression to evaluate.", - "oneOf": [ - { - "type": "object", - "title": "Object", - "description": "Object constant." - }, - { - "type": "array", - "title": "Array", - "description": "Array constant." - }, - { - "type": "string", - "title": "String", - "description": "Interpolated string.", - "pattern": "^(?!(=)).*", - "examples": [ - "Hello ${user.name}" - ] - }, - { - "type": "boolean", - "title": "Boolean", - "description": "Boolean constant", - "examples": [ - false - ] - }, - { - "type": "number", - "title": "Number", - "description": "Number constant.", - "examples": [ - 15.5 - ] - }, - { - "$ref": "#/definitions/equalsExpression", - "examples": [ - "=..." - ] - } - ] - }, - "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Core schema meta-schema", - "definitions": { - "schemaArray": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/schema" - } - }, - "nonNegativeInteger": { - "type": "integer", - "minimum": 0 - }, - "nonNegativeIntegerDefault0": { - "type": "integer", - "minimum": 0, - "default": 0 - }, - "simpleTypes": { - "enum": [ - "array", - "boolean", - "integer", - "null", - "number", - "object", - "string" - ] - }, - "stringArray": { - "type": "array", - "uniqueItems": true, - "default": [], - "items": { - "type": "string" - } - } - }, - "type": [ - "object", - "boolean" - ], - "default": true, - "properties": { - "$schema": { - "type": "string", - "format": "uri" - }, - "$ref": { - "type": "string", - "format": "uri-reference" - }, - "$comment": { - "type": "string" - }, - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "default": true, - "readOnly": { - "type": "boolean", - "default": false - }, - "writeOnly": { - "type": "boolean", - "default": false - }, - "examples": { - "type": "array", - "items": true - }, - "multipleOf": { - "type": "number", - "exclusiveMinimum": 0 - }, - "maximum": { - "type": "number" - }, - "exclusiveMaximum": { - "type": "number" - }, - "minimum": { - "type": "number" - }, - "exclusiveMinimum": { - "type": "number" - }, - "maxLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minLength": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "pattern": { - "type": "string", - "format": "regex" - }, - "additionalItems": { - "$ref": "#/definitions/schema" - }, - "items": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/schemaArray" - } - ], - "default": true - }, - "maxItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minItems": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "uniqueItems": { - "type": "boolean", - "default": false - }, - "contains": { - "$ref": "#/definitions/schema" - }, - "maxProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeInteger" - }, - "minProperties": { - "$ref": "#/definitions/schema/definitions/nonNegativeIntegerDefault0" - }, - "required": { - "$ref": "#/definitions/schema/definitions/stringArray" - }, - "additionalProperties": { - "$ref": "#/definitions/schema" - }, - "definitions": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "properties": { - "type": "object", - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "patternProperties": { - "type": "object", - "propertyNames": { - "format": "regex" - }, - "default": {}, - "additionalProperties": { - "$ref": "#/definitions/schema" - } - }, - "dependencies": { - "type": "object", - "additionalProperties": { - "anyOf": [ - { - "$ref": "#/definitions/schema" - }, - { - "$ref": "#/definitions/schema/definitions/stringArray" - } - ] - } - }, - "propertyNames": { - "$ref": "#/definitions/schema" - }, - "const": true, - "enum": { - "type": "array", - "minItems": 1, - "uniqueItems": true, - "items": true - }, - "type": { - "anyOf": [ - { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/schema/definitions/simpleTypes" - }, - "minItems": 1, - "uniqueItems": true - } + "oneOf": [ + { + "type": "integer", + "title": "Integer", + "description": "Integer constant.", + "default": 0, + "examples": [ + 15 ] }, - "format": { - "type": "string" - }, - "contentMediaType": { - "type": "string" - }, - "contentEncoding": { - "type": "string" - }, - "if": { - "$ref": "#/definitions/schema" - }, - "then": { - "$ref": "#/definitions/schema" - }, - "else": { - "$ref": "#/definitions/schema" - }, - "allOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "anyOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "oneOf": { - "$ref": "#/definitions/schema/definitions/schemaArray" - }, - "not": { - "$ref": "#/definitions/schema" + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=user.age" + ] } - } + ] }, - "botframework.json": { - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "ChannelAccount": { - "description": "Channel account information needed to route a message", - "title": "ChannelAccount", - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "type": "string", - "title": "role" - } - } - }, - "ConversationAccount": { - "description": "Channel account information for a conversation", - "title": "ConversationAccount", - "type": "object", - "required": [ - "conversationType", - "id", - "isGroup", - "name" - ], - "properties": { - "isGroup": { - "description": "Indicates whether the conversation contains more than two participants at the time the\nactivity was generated", - "type": "boolean", - "title": "isGroup" - }, - "conversationType": { - "description": "Indicates the type of the conversation in channels that distinguish between conversation types", - "type": "string", - "title": "conversationType" - }, - "id": { - "description": "Channel id for the user or bot on this channel (Example: joe@smith.com, or @joesmith or\n123456)", - "type": "string", - "title": "id" - }, - "name": { - "description": "Display friendly name", - "type": "string", - "title": "name" - }, - "aadObjectId": { - "description": "This account's object ID within Azure Active Directory (AAD)", - "type": "string", - "title": "aadObjectId" - }, - "role": { - "description": "Role of the entity behind the account (Example: User, Bot, etc.). Possible values include:\n'user', 'bot'", - "enum": [ - "bot", - "user" - ], - "type": "string", - "title": "role" - } - } - }, - "MessageReaction": { - "description": "Message reaction object", - "title": "MessageReaction", - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Message reaction type. Possible values include: 'like', 'plusOne'", - "type": "string", - "title": "type" - } - } - }, - "CardAction": { - "description": "A clickable action", - "title": "CardAction", - "type": "object", - "required": [ - "title", - "type", - "value" - ], - "properties": { - "type": { - "description": "The type of action implemented by this button. Possible values include: 'openUrl', 'imBack',\n'postBack', 'playAudio', 'playVideo', 'showImage', 'downloadFile', 'signin', 'call',\n'payment', 'messageBack'", - "type": "string", - "title": "type" - }, - "title": { - "description": "Text description which appears on the button", - "type": "string", - "title": "title" - }, - "image": { - "description": "Image URL which will appear on the button, next to text label", - "type": "string", - "title": "image" - }, - "text": { - "description": "Text for this action", - "type": "string", - "title": "text" - }, - "displayText": { - "description": "(Optional) text to display in the chat feed if the button is clicked", - "type": "string", - "title": "displayText" - }, - "value": { - "description": "Supplementary parameter for action. Content of this property depends on the ActionType", - "title": "value" - }, - "channelData": { - "description": "Channel-specific data associated with this action", - "title": "channelData" - } - } + "numberExpression": { + "$role": "expression", + "title": "Number or expression", + "description": "Number constant or expression to evaluate.", + "oneOf": [ + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "default": 0, + "examples": [ + 15.5 + ] }, - "SuggestedActions": { - "description": "SuggestedActions that can be performed", - "title": "SuggestedActions", + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=dialog.quantity" + ] + } + ] + }, + "objectExpression": { + "$role": "expression", + "title": "Object or expression", + "description": "Object or expression to evaluate.", + "oneOf": [ + { "type": "object", - "required": [ - "actions", - "to" - ], - "properties": { - "to": { - "description": "Ids of the recipients that the actions should be shown to. These Ids are relative to the\nchannelId and a subset of all recipients of the activity", - "type": "array", - "title": "to", - "items": { - "title": "Id", - "description": "Id of recipient.", - "type": "string" - } - }, - "actions": { - "description": "Actions that can be shown to the user", - "type": "array", - "title": "actions", - "items": { - "$ref": "#/definitions/botframework.json/definitions/CardAction" - } - } - } + "title": "Object", + "description": "Object constant." }, - "Attachment": { - "description": "An attachment within an activity", - "title": "Attachment", - "type": "object", - "required": [ - "contentType" - ], - "properties": { - "contentType": { - "description": "mimetype/Contenttype for the file", - "type": "string", - "title": "contentType" - }, - "contentUrl": { - "description": "Content Url", - "type": "string", - "title": "contentUrl" - }, - "content": { - "type": "object", - "description": "Embedded content", - "title": "content" - }, - "name": { - "description": "(OPTIONAL) The name of the attachment", - "type": "string", - "title": "name" - }, - "thumbnailUrl": { - "description": "(OPTIONAL) Thumbnail associated with attachment", - "type": "string", - "title": "thumbnailUrl" - } - } + { + "$ref": "#/definitions/equalsExpression" + } + ] + }, + "role": { + "title": "$role", + "description": "Defines the role played in the dialog schema from [expression|interface|implements($kind)|extends($kind)].", + "type": "string", + "pattern": "^((expression)|(interface)|(implements\\([a-zA-Z][a-zA-Z0-9.]*\\))|(extends\\([a-zA-Z][a-zA-Z0-9.]*\\)))$" + }, + "stringExpression": { + "$role": "expression", + "title": "String or expression", + "description": "Interpolated string or expression to evaluate.", + "oneOf": [ + { + "type": "string", + "title": "String", + "description": "Interpolated string", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] }, - "Entity": { - "description": "Metadata object pertaining to an activity", - "title": "Entity", + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=concat('x','y','z')" + ] + } + ] + }, + "valueExpression": { + "$role": "expression", + "title": "Any or expression", + "description": "Any constant or expression to evaluate.", + "oneOf": [ + { "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "description": "Type of this entity (RFC 3987 IRI)", - "type": "string", - "title": "type" - } - } + "title": "Object", + "description": "Object constant." }, - "ConversationReference": { - "description": "An object relating to a particular point in a conversation", - "title": "ConversationReference", - "type": "object", - "required": [ - "bot", - "channelId", - "conversation", - "serviceUrl" - ], - "properties": { - "activityId": { - "description": "(Optional) ID of the activity to refer to", - "type": "string", - "title": "activityId" - }, - "user": { - "description": "(Optional) User participating in this conversation", - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "title": "user" - }, - "bot": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Bot participating in this conversation", - "title": "bot" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Conversation reference", - "title": "conversation" - }, - "channelId": { - "description": "Channel ID", - "type": "string", - "title": "channelId" - }, - "serviceUrl": { - "description": "Service endpoint where operations concerning the referenced conversation may be performed", - "type": "string", - "title": "serviceUrl" - } - } + { + "type": "array", + "title": "Array", + "description": "Array constant." }, - "TextHighlight": { - "description": "Refers to a substring of content within another field", - "title": "TextHighlight", - "type": "object", - "required": [ - "occurrence", - "text" - ], - "properties": { - "text": { - "description": "Defines the snippet of text to highlight", - "type": "string", - "title": "text" - }, - "occurrence": { - "description": "Occurrence of the text field within the referenced text, if multiple exist.", - "type": "number", - "title": "occurrence" - } - } + { + "type": "string", + "title": "String", + "description": "Interpolated string.", + "pattern": "^(?!(=)).*", + "examples": [ + "Hello ${user.name}" + ] }, - "SemanticAction": { - "description": "Represents a reference to a programmatic action", - "title": "SemanticAction", - "type": "object", - "required": [ - "entities", - "id" - ], - "properties": { - "id": { - "description": "ID of this action", - "type": "string", - "title": "id" - }, - "entities": { - "description": "Entities associated with this action", - "type": "object", - "title": "entities", - "additionalProperties": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - } - } + { + "type": "boolean", + "title": "Boolean", + "description": "Boolean constant", + "examples": [ + false + ] }, - "Activity": { - "description": "An Activity is the basic communication type for the Bot Framework 3.0 protocol.", - "title": "Activity", - "type": "object", - "properties": { - "type": { - "description": "Contains the activity type. Possible values include: 'message', 'contactRelationUpdate',\n'conversationUpdate', 'typing', 'endOfConversation', 'event', 'invoke', 'deleteUserData',\n'messageUpdate', 'messageDelete', 'installationUpdate', 'messageReaction', 'suggestion',\n'trace', 'handoff'", - "type": "string", - "title": "type" - }, - "id": { - "description": "Contains an ID that uniquely identifies the activity on the channel.", - "type": "string", - "title": "id" - }, - "timestamp": { - "description": "Contains the date and time that the message was sent, in UTC, expressed in ISO-8601 format.", - "type": "string", - "format": "date-time", - "title": "timestamp" - }, - "localTimestamp": { - "description": "Contains the date and time that the message was sent, in local time, expressed in ISO-8601\nformat.\nFor example, 2016-09-23T13:07:49.4714686-07:00.", - "type": "string", - "format": "date-time", - "title": "localTimestamp" - }, - "localTimezone": { - "description": "Contains the name of the timezone in which the message, in local time, expressed in IANA Time\nZone database format.\nFor example, America/Los_Angeles.", - "type": "string", - "title": "localTimezone" - }, - "serviceUrl": { - "description": "Contains the URL that specifies the channel's service endpoint. Set by the channel.", - "type": "string", - "title": "serviceUrl" - }, - "channelId": { - "description": "Contains an ID that uniquely identifies the channel. Set by the channel.", - "type": "string", - "title": "channelId" - }, - "from": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the sender of the message.", - "title": "from" - }, - "conversation": { - "$ref": "#/definitions/botframework.json/definitions/ConversationAccount", - "description": "Identifies the conversation to which the activity belongs.", - "title": "conversation" - }, - "recipient": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount", - "description": "Identifies the recipient of the message.", - "title": "recipient" - }, - "textFormat": { - "description": "Format of text fields Default:markdown. Possible values include: 'markdown', 'plain', 'xml'", - "type": "string", - "title": "textFormat" - }, - "attachmentLayout": { - "description": "The layout hint for multiple attachments. Default: list. Possible values include: 'list',\n'carousel'", - "type": "string", - "title": "attachmentLayout" - }, - "membersAdded": { - "description": "The collection of members added to the conversation.", - "type": "array", - "title": "membersAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "membersRemoved": { - "description": "The collection of members removed from the conversation.", - "type": "array", - "title": "membersRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/ChannelAccount" - } - }, - "reactionsAdded": { - "description": "The collection of reactions added to the conversation.", - "type": "array", - "title": "reactionsAdded", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "reactionsRemoved": { - "description": "The collection of reactions removed from the conversation.", - "type": "array", - "title": "reactionsRemoved", - "items": { - "$ref": "#/definitions/botframework.json/definitions/MessageReaction" - } - }, - "topicName": { - "description": "The updated topic name of the conversation.", - "type": "string", - "title": "topicName" - }, - "historyDisclosed": { - "description": "Indicates whether the prior history of the channel is disclosed.", - "type": "boolean", - "title": "historyDisclosed" - }, - "locale": { - "description": "A locale name for the contents of the text field.\nThe locale name is a combination of an ISO 639 two- or three-letter culture code associated\nwith a language\nand an ISO 3166 two-letter subculture code associated with a country or region.\nThe locale name can also correspond to a valid BCP-47 language tag.", - "type": "string", - "title": "locale" - }, - "text": { - "description": "The text content of the message.", - "type": "string", - "title": "text" - }, - "speak": { - "description": "The text to speak.", - "type": "string", - "title": "speak" - }, - "inputHint": { - "description": "Indicates whether your bot is accepting,\nexpecting, or ignoring user input after the message is delivered to the client. Possible\nvalues include: 'acceptingInput', 'ignoringInput', 'expectingInput'", - "type": "string", - "title": "inputHint" - }, - "summary": { - "description": "The text to display if the channel cannot render cards.", - "type": "string", - "title": "summary" - }, - "suggestedActions": { - "description": "The suggested actions for the activity.", - "$ref": "#/definitions/botframework.json/definitions/SuggestedActions", - "title": "suggestedActions" - }, - "attachments": { - "description": "Attachments", - "type": "array", - "title": "attachments", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Attachment" - } - }, - "entities": { - "description": "Represents the entities that were mentioned in the message.", - "type": "array", - "title": "entities", - "items": { - "$ref": "#/definitions/botframework.json/definitions/Entity" - } - }, - "channelData": { - "description": "Contains channel-specific content.", - "title": "channelData" - }, - "action": { - "description": "Indicates whether the recipient of a contactRelationUpdate was added or removed from the\nsender's contact list.", - "type": "string", - "title": "action" - }, - "replyToId": { - "description": "Contains the ID of the message to which this message is a reply.", - "type": "string", - "title": "replyToId" - }, - "label": { - "description": "A descriptive label for the activity.", - "type": "string", - "title": "label" - }, - "valueType": { - "description": "The type of the activity's value object.", - "type": "string", - "title": "valueType" - }, - "value": { - "description": "A value that is associated with the activity.", - "title": "value" - }, - "name": { - "description": "The name of the operation associated with an invoke or event activity.", - "type": "string", - "title": "name" - }, - "relatesTo": { - "description": "A reference to another conversation or activity.", - "$ref": "#/definitions/botframework.json/definitions/ConversationReference", - "title": "relatesTo" - }, - "code": { - "description": "The a code for endOfConversation activities that indicates why the conversation ended.\nPossible values include: 'unknown', 'completedSuccessfully', 'userCancelled', 'botTimedOut',\n'botIssuedInvalidMessage', 'channelFailed'", - "type": "string", - "title": "code" - }, - "expiration": { - "description": "The time at which the activity should be considered to be \"expired\" and should not be\npresented to the recipient.", - "type": "string", - "format": "date-time", - "title": "expiration" - }, - "importance": { - "description": "The importance of the activity. Possible values include: 'low', 'normal', 'high'", - "type": "string", - "title": "importance" - }, - "deliveryMode": { - "description": "A delivery hint to signal to the recipient alternate delivery paths for the activity.\nThe default delivery mode is \"default\". Possible values include: 'normal', 'notification'", - "type": "string", - "title": "deliveryMode" - }, - "listenFor": { - "description": "List of phrases and references that speech and language priming systems should listen for", - "type": "array", - "title": "listenFor", - "items": { - "type": "string", - "title": "Phrase", - "description": "Phrase to listen for." - } - }, - "textHighlights": { - "description": "The collection of text fragments to highlight when the activity contains a ReplyToId value.", - "type": "array", - "title": "textHighlights", - "items": { - "$ref": "#/definitions/botframework.json/definitions/TextHighlight" - } - }, - "semanticAction": { - "$ref": "#/definitions/botframework.json/definitions/SemanticAction", - "description": "An optional programmatic action accompanying this request", - "title": "semanticAction" - } - } + { + "type": "number", + "title": "Number", + "description": "Number constant.", + "examples": [ + 15.5 + ] + }, + { + "$ref": "#/definitions/equalsExpression", + "examples": [ + "=..." + ] } - } + ] } } } From 61ef2506469738bbd6cf98d9671b214101586ab7 Mon Sep 17 00:00:00 2001 From: hond Date: Wed, 21 Oct 2020 09:03:00 +0800 Subject: [PATCH 17/17] update schema --- .../testbot.schema | 4 +- tests/tests.schema | 4 +- tests/tests.uischema | 190 +++++++++--------- 3 files changed, 99 insertions(+), 99 deletions(-) diff --git a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema index 250c19007d..af6a7790f1 100644 --- a/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema +++ b/tests/Microsoft.Bot.Builder.TestBot.Json/testbot.schema @@ -4467,10 +4467,10 @@ "$ref": "#/definitions/Microsoft.LuisRecognizer" }, { - "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" + "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" }, { - "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" + "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" }, { "$ref": "#/definitions/Microsoft.CrossTrainedRecognizerSet" diff --git a/tests/tests.schema b/tests/tests.schema index 38527e6d7a..263d57111e 100644 --- a/tests/tests.schema +++ b/tests/tests.schema @@ -4580,10 +4580,10 @@ "type": "string" }, { - "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" + "$ref": "#/definitions/Microsoft.LuisRecognizer" }, { - "$ref": "#/definitions/Microsoft.LuisRecognizer" + "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" }, { "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" diff --git a/tests/tests.uischema b/tests/tests.uischema index c81425897c..74075ebc1d 100644 --- a/tests/tests.uischema +++ b/tests/tests.uischema @@ -23,101 +23,6 @@ } } }, - "Microsoft.AttachmentInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a file or an attachment", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Attachment Input" - } - }, - "Microsoft.ChoiceInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt with multi-choice", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Choice Input" - } - }, - "Microsoft.ConfirmInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for confirmation", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Confirm Input" - } - }, - "Microsoft.DateTimeInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a date or a time", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Date Time Input" - } - }, - "Microsoft.NumberInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for a number", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Number Input" - } - }, - "Microsoft.OAuthInput": { - "form": { - "helpLink": "https://aka.ms/bfc-using-oauth", - "label": "OAuth login", - "order": [ - "connectionName", - "*" - ], - "subtitle": "OAuth Input" - } - }, - "Microsoft.TextInput": { - "form": { - "helpLink": "https://aka.ms/bfc-ask-for-user-input", - "label": "Prompt for text", - "properties": { - "property": { - "intellisenseScopes": [ - "variable-scopes" - ] - } - }, - "subtitle": "Text Input" - } - }, "Microsoft.BeginDialog": { "form": { "helpLink": "https://aka.ms/bfc-understanding-dialogs", @@ -459,6 +364,101 @@ "subtitle": "Trace Activity" } }, + "Microsoft.AttachmentInput": { + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a file or an attachment", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Attachment Input" + } + }, + "Microsoft.ChoiceInput": { + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt with multi-choice", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Choice Input" + } + }, + "Microsoft.ConfirmInput": { + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for confirmation", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Confirm Input" + } + }, + "Microsoft.DateTimeInput": { + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a date or a time", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Date Time Input" + } + }, + "Microsoft.NumberInput": { + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for a number", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Number Input" + } + }, + "Microsoft.OAuthInput": { + "form": { + "helpLink": "https://aka.ms/bfc-using-oauth", + "label": "OAuth login", + "order": [ + "connectionName", + "*" + ], + "subtitle": "OAuth Input" + } + }, + "Microsoft.TextInput": { + "form": { + "helpLink": "https://aka.ms/bfc-ask-for-user-input", + "label": "Prompt for text", + "properties": { + "property": { + "intellisenseScopes": [ + "variable-scopes" + ] + } + }, + "subtitle": "Text Input" + } + }, "Microsoft.RegexRecognizer": { "form": { "hidden": [