diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveComponentRegistration.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveComponentRegistration.cs index 460faca91c..b5fc4fe2db 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveComponentRegistration.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/AdaptiveComponentRegistration.cs @@ -58,6 +58,7 @@ public virtual IEnumerable GetDeclarativeTypes(ResourceExplorer yield return new DeclarativeType(OnConversationUpdateActivity.Kind); yield return new DeclarativeType(OnEndOfConversationActivity.Kind); yield return new DeclarativeType(OnTypingActivity.Kind); + yield return new DeclarativeType(OnInstallationUpdateActivity.Kind); yield return new DeclarativeType(OnHandoffActivity.Kind); yield return new DeclarativeType(OnChooseIntent.Kind); yield return new DeclarativeType(OnQnAMatch.Kind); diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnInstallationUpdateActivity.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnInstallationUpdateActivity.schema new file mode 100644 index 0000000000..f9e0ad15ff --- /dev/null +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnInstallationUpdateActivity.schema @@ -0,0 +1,10 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/component/v1.0/component.schema", + "$role": [ "implements(Microsoft.ITrigger)", "extends(Microsoft.OnCondition)" ], + "title": "On InstallationUpdate activity", + "description": "Actions to perform on receipt of an activity with type 'InstallationUpdate'.", + "type": "object", + "required": [ + "actions" + ] +} diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnInstallationUpdateActivity.uischema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnInstallationUpdateActivity.uischema new file mode 100644 index 0000000000..2014fd9340 --- /dev/null +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/TriggerConditions/Microsoft.OnInstallationUpdateActivity.uischema @@ -0,0 +1,14 @@ +{ + "$schema": "https://schemas.botframework.com/schemas/ui/v1.0/ui.schema", + "form": { + "order": [ + "condition", + "*" + ], + "hidden": [ + "actions" + ], + "label": "Installation updated", + "subtitle": "Installation updated activity" + } +} diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/TriggerConditions/Activities/OnInstallationUpdateActivity.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/TriggerConditions/Activities/OnInstallationUpdateActivity.cs new file mode 100644 index 0000000000..3457953369 --- /dev/null +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/TriggerConditions/Activities/OnInstallationUpdateActivity.cs @@ -0,0 +1,25 @@ +// Licensed under the MIT License. +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using Microsoft.Bot.Schema; +using Newtonsoft.Json; + +namespace Microsoft.Bot.Builder.Dialogs.Adaptive.Conditions +{ + /// + /// Actions triggered when a InstallationUpdateActivity is received. + /// + public class OnInstallationUpdateActivity : OnActivity + { + [JsonProperty("$kind")] + public new const string Kind = "Microsoft.OnInstallationUpdateActivity"; + + [JsonConstructor] + public OnInstallationUpdateActivity(List actions = null, string condition = null, [CallerFilePath] string callerPath = "", [CallerLineNumber] int callerLine = 0) + : base(type: ActivityTypes.InstallationUpdate, actions: actions, condition: condition, callerPath: callerPath, callerLine: callerLine) + { + } + } +} diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ConditionalsTests.cs b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ConditionalsTests.cs index f28250f4fe..3921fb1b58 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ConditionalsTests.cs +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/ConditionalsTests.cs @@ -75,6 +75,13 @@ public void OnConditionWithCondition() }, $"((turn.activity.type == '{ActivityTypes.Typing}') && ((turn.dialogEvent.name == '{AdaptiveEvents.ActivityReceived}') && (turn.test == 1)))"); + AssertExpression( + new OnInstallationUpdateActivity() + { + Condition = "turn.test == 1" + }, + $"((turn.activity.type == '{ActivityTypes.InstallationUpdate}') && ((turn.dialogEvent.name == '{AdaptiveEvents.ActivityReceived}') && (turn.test == 1)))"); + AssertExpression( new OnEndOfConversationActivity() { diff --git a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/ConditionalsTests/ConditionalsTests_OnActivityTypes.test.dialog b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/ConditionalsTests/ConditionalsTests_OnActivityTypes.test.dialog index e9c322a04f..402a287d90 100644 --- a/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/ConditionalsTests/ConditionalsTests_OnActivityTypes.test.dialog +++ b/tests/Microsoft.Bot.Builder.Dialogs.Adaptive.Tests/Tests/ConditionalsTests/ConditionalsTests_OnActivityTypes.test.dialog @@ -45,6 +45,16 @@ } ] }, + { + "$kind": "Microsoft.OnInstallationUpdateActivity", + "condition": "turn.activity.text == 'OnInstallationUpdateActivity'", + "actions": [ + { + "$kind": "Microsoft.SendActivity", + "activity": "OnInstallationUpdateActivity" + } + ] + }, { "$kind": "Microsoft.OnEndOfConversationActivity", "condition": "turn.activity.text == 'OnEndOfConversationActivity'", @@ -165,6 +175,17 @@ "$kind": "Microsoft.Test.AssertReply", "text": "OnTypingActivity" }, + { + "$kind": "Microsoft.Test.UserActivity", + "activity": { + "type": "installationUpdate", + "text": "OnInstallationUpdateActivity" + } + }, + { + "$kind": "Microsoft.Test.AssertReply", + "text": "OnInstallationUpdateActivity" + }, { "$kind": "Microsoft.Test.UserActivity", "activity": { diff --git a/tests/tests.schema b/tests/tests.schema index fd2f40b450..de7bda5a20 100644 --- a/tests/tests.schema +++ b/tests/tests.schema @@ -211,6 +211,9 @@ { "$ref": "#/definitions/Microsoft.OnHandoffActivity" }, + { + "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" + }, { "$ref": "#/definitions/Microsoft.OnIntent" }, @@ -3841,10 +3844,10 @@ "type": "string" }, { - "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" + "$ref": "#/definitions/Microsoft.OrchestratorRecognizer" }, { - "$ref": "#/definitions/Microsoft.LuisRecognizer" + "$ref": "#/definitions/Microsoft.LuisRecognizer" }, { "$ref": "#/definitions/Microsoft.QnAMakerRecognizer" @@ -3934,6 +3937,9 @@ { "$ref": "#/definitions/Microsoft.OnHandoffActivity" }, + { + "$ref": "#/definitions/Microsoft.OnInstallationUpdateActivity" + }, { "$ref": "#/definitions/Microsoft.OnIntent" }, @@ -6123,6 +6129,71 @@ } } }, + "Microsoft.OnInstallationUpdateActivity": { + "$role": [ + "implements(Microsoft.ITrigger)", + "extends(Microsoft.OnCondition)" + ], + "title": "On InstallationUpdate activity", + "description": "Actions to perform on receipt of an activity with type 'InstallationUpdate'.", + "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": "Microsoft.OnInstallationUpdateActivity" + }, + "$designer": { + "title": "Designer information", + "type": "object", + "description": "Extra information for the Bot Framework Composer." + } + } + }, "Microsoft.OnIntent": { "$role": [ "implements(Microsoft.ITrigger)", @@ -7087,23 +7158,23 @@ ] }, "strictFiltersCompoundOperationType": { - "$ref": "#/definitions/stringExpression", - "title": "StrictFiltersCompoundOperationType", - "description": "Join operator for Strict Filters.", - "oneOf": [ - { - "title": "StrictFilters CompoundOperation Type", - "description": "Value of Join Operator to be used as Conjunction with Strict Filter Value.", - "enum": [ - "AND", - "OR" - ], - "default": "AND" - }, - { - "$ref": "#/definitions/equalsExpression" - } - ] + "$ref": "#/definitions/stringExpression", + "title": "strictFiltersCompoundOperationType", + "description": "Join operator for Strict Filters.", + "oneOf": [ + { + "title": "StrictFilters CompoundOperation Type", + "description": "Value of Join Operator to be used as Conjunction with Strict Filter Value.", + "enum": [ + "AND", + "OR" + ], + "default": "AND" + }, + { + "$ref": "#/definitions/equalsExpression" + } + ] }, "$kind": { "title": "Kind of dialog object", diff --git a/tests/tests.uischema b/tests/tests.uischema index 142495f58f..d3c3d3929c 100644 --- a/tests/tests.uischema +++ b/tests/tests.uischema @@ -446,6 +446,19 @@ "subtitle": "Handoff activity" } }, + "Microsoft.OnInstallationUpdateActivity": { + "form": { + "hidden": [ + "actions" + ], + "label": "Installation updated", + "order": [ + "condition", + "*" + ], + "subtitle": "Installation updated activity" + } + }, "Microsoft.OnIntent": { "form": { "hidden": [