From 66e4a394ab04532365a3b335d6b66557648cba52 Mon Sep 17 00:00:00 2001 From: Ted Date: Wed, 7 Aug 2019 12:22:37 -0700 Subject: [PATCH] return semantic response as dialog result (#2069) * return semanticAction response in dialog result * add null check --- .../Mocks/MockSkillTransport.cs | 4 ++-- .../Microsoft.Bot.Builder.Skills/ISkillTransport.cs | 2 +- .../SkillCallingRequestHandler.cs | 1 + .../Microsoft.Bot.Builder.Skills/SkillDialog.cs | 6 +++--- .../SkillWebSocketTransport.cs | 8 ++++---- .../Dialogs/RouterDialog.cs | 2 +- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills.Tests/Mocks/MockSkillTransport.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills.Tests/Mocks/MockSkillTransport.cs index 0fe9722a8e..717a06154e 100644 --- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills.Tests/Mocks/MockSkillTransport.cs +++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills.Tests/Mocks/MockSkillTransport.cs @@ -19,11 +19,11 @@ public void Disconnect() { } - public Task ForwardToSkillAsync(SkillManifest skillManifest, IServiceClientCredentials serviceClientCredentials, ITurnContext dialogContext, Activity activity, Action tokenRequestHandler = null, Action fallbackHandler = null) + public Task ForwardToSkillAsync(SkillManifest skillManifest, IServiceClientCredentials serviceClientCredentials, ITurnContext dialogContext, Activity activity, Action tokenRequestHandler = null, Action fallbackHandler = null) { _activityForwarded = activity; - return Task.FromResult(true); + return Task.FromResult(null); } public bool CheckIfSkillInvoked() diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/ISkillTransport.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/ISkillTransport.cs index 953a9ac971..57d4b01826 100644 --- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/ISkillTransport.cs +++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/ISkillTransport.cs @@ -8,7 +8,7 @@ namespace Microsoft.Bot.Builder.Skills { public interface ISkillTransport { - Task ForwardToSkillAsync(SkillManifest skillManifest, IServiceClientCredentials serviceClientCredentials, ITurnContext dialogContext, Activity activity, Action tokenRequestHandler = null, Action fallbackHandler = null); + Task ForwardToSkillAsync(SkillManifest skillManifest, IServiceClientCredentials serviceClientCredentials, ITurnContext dialogContext, Activity activity, Action tokenRequestHandler = null, Action fallbackHandler = null); Task CancelRemoteDialogsAsync(SkillManifest skillManifest, IServiceClientCredentials serviceClientCredentials, ITurnContext turnContext); diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillCallingRequestHandler.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillCallingRequestHandler.cs index db99c1cfb9..80c87c8a59 100644 --- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillCallingRequestHandler.cs +++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillCallingRequestHandler.cs @@ -77,6 +77,7 @@ public SkillCallingRequestHandler( } else if (activity.Type == ActivityTypes.EndOfConversation) { + var result = await _turnContext.SendActivityAsync(activity).ConfigureAwait(false); if (_handoffActivityHandler != null) { _handoffActivityHandler(activity); diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillDialog.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillDialog.cs index 224b5a6ff2..1257bbb6ab 100644 --- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillDialog.cs +++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillDialog.cs @@ -314,12 +314,12 @@ private async Task ForwardToSkillAsync(DialogContext innerDc, { try { - var endOfConversation = await _skillTransport.ForwardToSkillAsync(_skillManifest, _serviceClientCredentials, innerDc.Context, activity, GetTokenRequestCallback(innerDc), GetFallbackCallback(innerDc)); + var endOfConversationActivity = await _skillTransport.ForwardToSkillAsync(_skillManifest, _serviceClientCredentials, innerDc.Context, activity, GetTokenRequestCallback(innerDc), GetFallbackCallback(innerDc)); - if (endOfConversation) + if (endOfConversationActivity != null) { await innerDc.Context.SendActivityAsync(new Activity(type: ActivityTypes.Trace, text: $"<--Ending the skill conversation with the {_skillManifest.Name} Skill and handing off to Parent Bot.")); - return await innerDc.EndDialogAsync(); + return await innerDc.EndDialogAsync(endOfConversationActivity.SemanticAction?.Entities); } else { diff --git a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketTransport.cs b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketTransport.cs index 42cdf4c91f..5e125ab3c3 100644 --- a/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketTransport.cs +++ b/lib/csharp/microsoft.bot.builder.skills/Microsoft.Bot.Builder.Skills/SkillWebSocketTransport.cs @@ -19,7 +19,7 @@ public class SkillWebSocketTransport : ISkillTransport { private IStreamingTransportClient _streamingTransportClient; private readonly IBotTelemetryClient _botTelemetryClient; - private bool endOfConversation = false; + private Activity endOfConversationActivity; public SkillWebSocketTransport( IBotTelemetryClient botTelemetryClient, @@ -29,7 +29,7 @@ public SkillWebSocketTransport( _streamingTransportClient = streamingTransportClient; } - public async Task ForwardToSkillAsync(SkillManifest skillManifest, IServiceClientCredentials serviceClientCredentials, ITurnContext turnContext, Activity activity, Action tokenRequestHandler = null, Action fallbackHandler = null) + public async Task ForwardToSkillAsync(SkillManifest skillManifest, IServiceClientCredentials serviceClientCredentials, ITurnContext turnContext, Activity activity, Action tokenRequestHandler = null, Action fallbackHandler = null) { if (_streamingTransportClient == null) { @@ -67,7 +67,7 @@ public async Task ForwardToSkillAsync(SkillManifest skillManifest, IServic await _streamingTransportClient.SendAsync(request); - return endOfConversation; + return endOfConversationActivity; } public async Task CancelRemoteDialogsAsync(SkillManifest skillManifest, IServiceClientCredentials appCredentials, ITurnContext turnContext) @@ -108,7 +108,7 @@ private Action GetHandoffActivityCallback() { return (activity) => { - endOfConversation = true; + endOfConversationActivity = activity; }; } diff --git a/lib/csharp/microsoft.bot.builder.solutions/microsoft.bot.builder.solutions/Dialogs/RouterDialog.cs b/lib/csharp/microsoft.bot.builder.solutions/microsoft.bot.builder.solutions/Dialogs/RouterDialog.cs index 862feb9560..798fade1dc 100644 --- a/lib/csharp/microsoft.bot.builder.solutions/microsoft.bot.builder.solutions/Dialogs/RouterDialog.cs +++ b/lib/csharp/microsoft.bot.builder.solutions/microsoft.bot.builder.solutions/Dialogs/RouterDialog.cs @@ -52,7 +52,7 @@ public RouterDialog(string dialogId, IBotTelemetryClient telemetryClient) { await OnEventAsync(innerDc).ConfigureAwait(false); } - else if (!string.IsNullOrEmpty(activity.Text)) + else { var result = await innerDc.ContinueDialogAsync().ConfigureAwait(false);