From 2d73f701280869f477eb557f77c2e9c0b177bf3a Mon Sep 17 00:00:00 2001 From: Lu Han <32191031+luhan2017@users.noreply.github.com> Date: Wed, 19 Aug 2020 18:17:30 +0800 Subject: [PATCH 1/3] Support AllowInterruptions in BeginSkill --- .../Actions/BeginSkill.cs | 31 +++++++++++++++++++ .../Actions/Microsoft.BeginSkill.schema | 11 +++++++ 2 files changed, 42 insertions(+) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs index d63a4e6c7d..eb1e4af9ca 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs @@ -119,6 +119,15 @@ public BeginSkill([CallerFilePath] string callerPath = "", [CallerLineNumber] in [JsonProperty("activity")] public ITemplate Activity { get; set; } + /// + /// Gets or sets intteruption policy. + /// + /// + /// Bool or expression which evalutes to bool. + /// + [JsonProperty("allowInterruptions")] + public BoolExpression AllowInterruptions { get; set; } + public override async Task BeginDialogAsync(DialogContext dc, object options = null, CancellationToken cancellationToken = default) { if (Disabled != null && Disabled.GetValue(dc.State)) @@ -208,6 +217,28 @@ protected override string OnComputeId() return $"{GetType().Name}['{appId}','{activity}']"; } + protected override async Task OnPreBubbleEventAsync(DialogContext dc, DialogEvent e, CancellationToken cancellationToken) + { + if (e.Name == DialogEvents.ActivityReceived && dc.Context.Activity.Type == ActivityTypes.Message) + { + // Ask parent to perform recognition + await dc.Parent.EmitEventAsync(AdaptiveEvents.RecognizeUtterance, value: dc.Context.Activity, bubble: false, cancellationToken: cancellationToken).ConfigureAwait(false); + + // Should we allow interruptions + var canInterrupt = true; + if (this.AllowInterruptions != null) + { + var (allowInterruptions, error) = this.AllowInterruptions.TryGetValue(dc.State); + canInterrupt = error == null && allowInterruptions; + } + + // Stop bubbling if interruptions ar NOT allowed + return !canInterrupt; + } + + return false; + } + /// /// Regenerates the based on the values used during the BeingDialog call. /// diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BeginSkill.schema b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BeginSkill.schema index c891f87fba..9beb9578cb 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BeginSkill.schema +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Schemas/Actions/Microsoft.BeginSkill.schema @@ -75,6 +75,17 @@ "$kind": "Microsoft.IActivityTemplate", "title": "Activity", "description": "The activity to send to the skill." + }, + "allowInterruptions": { + "$ref": "schema:#/definitions/booleanExpression", + "title": "Allow Interruptions", + "description": "A boolean expression that determines whether the parent should be allowed to interrupt the skill.", + "default": true, + "examples": [ + true, + "=user.xyz" + ] } + } } From 2b0e6df557d43aae2f1098e403ef3ae1124fff10 Mon Sep 17 00:00:00 2001 From: Chris Mullins Date: Wed, 19 Aug 2020 10:15:58 -0700 Subject: [PATCH 2/3] Update BeginSkill.cs Spelling fix --- .../Actions/BeginSkill.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs index eb1e4af9ca..0c0620d676 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs @@ -120,7 +120,7 @@ public BeginSkill([CallerFilePath] string callerPath = "", [CallerLineNumber] in public ITemplate Activity { get; set; } /// - /// Gets or sets intteruption policy. + /// Gets or sets interruption policy. /// /// /// Bool or expression which evalutes to bool. From 5b68f3137354b955da8b49e0eba8030fc872d373 Mon Sep 17 00:00:00 2001 From: Chris Mullins Date: Wed, 19 Aug 2020 10:17:01 -0700 Subject: [PATCH 3/3] Update BeginSkill.cs Spelling fixes --- .../Actions/BeginSkill.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs index 0c0620d676..8b2dfb0b76 100644 --- a/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs +++ b/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive/Actions/BeginSkill.cs @@ -123,7 +123,7 @@ public BeginSkill([CallerFilePath] string callerPath = "", [CallerLineNumber] in /// Gets or sets interruption policy. /// /// - /// Bool or expression which evalutes to bool. + /// Bool or expression which evaluates to bool. /// [JsonProperty("allowInterruptions")] public BoolExpression AllowInterruptions { get; set; }