From cd28c406db34bc10d8b580735f5c0ddf3173ebeb Mon Sep 17 00:00:00 2001 From: Lee Parrish <30470292+LeeParrishMSFT@users.noreply.github.com> Date: Wed, 7 Apr 2021 15:33:47 -0500 Subject: [PATCH] Implemented ResumeDialog in Skills --- .../skills/SkillConversationIdFactory.java | 5 ++-- .../SkillConversationIdFactoryTests.java | 28 +++++++++++++++++++ .../microsoft/bot/dialogs/SkillDialog.java | 8 ++++++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/libraries/bot-builder/src/main/java/com/microsoft/bot/builder/skills/SkillConversationIdFactory.java b/libraries/bot-builder/src/main/java/com/microsoft/bot/builder/skills/SkillConversationIdFactory.java index bee7c0fe1..a38214d25 100644 --- a/libraries/bot-builder/src/main/java/com/microsoft/bot/builder/skills/SkillConversationIdFactory.java +++ b/libraries/bot-builder/src/main/java/com/microsoft/bot/builder/skills/SkillConversationIdFactory.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.Map; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import com.microsoft.bot.builder.Storage; @@ -51,9 +52,7 @@ public CompletableFuture createSkillConversationId(SkillConversationIdFa Async.completeExceptionally(new IllegalArgumentException("options cannot be null.")); } ConversationReference conversationReference = options.getActivity().getConversationReference(); - String skillConversationId = String.format("%s-%s-%s-skillconvo", - conversationReference.getConversation().getId(), options.getBotFrameworkSkill().getId(), - conversationReference.getChannelId()); + String skillConversationId = UUID.randomUUID().toString(); SkillConversationReference skillConversationReference = new SkillConversationReference(); skillConversationReference.setConversationReference(conversationReference); diff --git a/libraries/bot-builder/src/test/java/com/microsoft/bot/builder/SkillConversationIdFactoryTests.java b/libraries/bot-builder/src/test/java/com/microsoft/bot/builder/SkillConversationIdFactoryTests.java index 864b66ff0..db67c97b0 100644 --- a/libraries/bot-builder/src/test/java/com/microsoft/bot/builder/SkillConversationIdFactoryTests.java +++ b/libraries/bot-builder/src/test/java/com/microsoft/bot/builder/SkillConversationIdFactoryTests.java @@ -64,6 +64,34 @@ public void SkillConversationIdFactoryHappyPath() { Assert.assertNull(deletedConversationReference); } + @Test + public void IdIsUniqueEachTime() { + ConversationReference conversationReference = buildConversationReference(); + + // Create skill conversation + SkillConversationIdFactoryOptions options1 = new SkillConversationIdFactoryOptions(); + options1.setActivity(buildMessageActivity(conversationReference)); + options1.setBotFrameworkSkill(buildBotFrameworkSkill()); + options1.setFromBotId(botId); + options1.setFromBotOAuthScope(botId); + + String firstId = skillConversationIdFactory.createSkillConversationId(options1).join(); + + + SkillConversationIdFactoryOptions options2 = new SkillConversationIdFactoryOptions(); + options2.setActivity(buildMessageActivity(conversationReference)); + options2.setBotFrameworkSkill(buildBotFrameworkSkill()); + options2.setFromBotId(botId); + options2.setFromBotOAuthScope(botId); + + String secondId = skillConversationIdFactory.createSkillConversationId(options2).join(); + + // Ensure that we get a different conversationId each time we call CreateSkillConversationIdAsync + Assert.assertNotEquals(firstId, secondId); + } + + + private static ConversationReference buildConversationReference() { ConversationReference conversationReference = new ConversationReference(); conversationReference.setConversation(new ConversationAccount(UUID.randomUUID().toString())); diff --git a/libraries/bot-dialogs/src/main/java/com/microsoft/bot/dialogs/SkillDialog.java b/libraries/bot-dialogs/src/main/java/com/microsoft/bot/dialogs/SkillDialog.java index 3295c03f8..0c74a9cc4 100644 --- a/libraries/bot-dialogs/src/main/java/com/microsoft/bot/dialogs/SkillDialog.java +++ b/libraries/bot-dialogs/src/main/java/com/microsoft/bot/dialogs/SkillDialog.java @@ -116,6 +116,14 @@ public CompletableFuture beginDialog(DialogContext dc, Object */ @Override public CompletableFuture continueDialog(DialogContext dc) { + + Boolean interrupted = dc.getState().getValue(TurnPath.INTERRUPTED, false, Boolean.class); + if (interrupted) { + dc.getState().setValue(TurnPath.INTERRUPTED, false); + return resumeDialog(dc, DialogReason.END_CALLED); + } + + if (!onValidateActivity(dc.getContext().getActivity())) { return CompletableFuture.completedFuture(END_OF_TURN); }