From 5056851301dd99f287cda0659ea85322e8adfbb4 Mon Sep 17 00:00:00 2001 From: tracyboehrer Date: Fri, 25 Jun 2021 09:45:56 -0500 Subject: [PATCH] Added Skill x-ms-conversation-id request header --- .../bot/connector/ConversationConstants.java | 17 +++++++++++++++++ .../bot/connector/rest/RestConversations.java | 17 +++++++++++++---- .../integration/BotFrameworkHttpClient.java | 18 +++++++++++++----- 3 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 libraries/bot-connector/src/main/java/com/microsoft/bot/connector/ConversationConstants.java diff --git a/libraries/bot-connector/src/main/java/com/microsoft/bot/connector/ConversationConstants.java b/libraries/bot-connector/src/main/java/com/microsoft/bot/connector/ConversationConstants.java new file mode 100644 index 000000000..d158a5799 --- /dev/null +++ b/libraries/bot-connector/src/main/java/com/microsoft/bot/connector/ConversationConstants.java @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.microsoft.bot.connector; + +/** + * Values and constants used for Conversation specific info. + */ +public final class ConversationConstants { + private ConversationConstants() { + } + + /** + * The name of Http Request Header to add Conversation Id to skills requests. + */ + public static final String CONVERSATION_ID_HTTP_HEADERNAME = "x-ms-conversation-id"; +} diff --git a/libraries/bot-connector/src/main/java/com/microsoft/bot/connector/rest/RestConversations.java b/libraries/bot-connector/src/main/java/com/microsoft/bot/connector/rest/RestConversations.java index aea20187c..82bce2eed 100644 --- a/libraries/bot-connector/src/main/java/com/microsoft/bot/connector/rest/RestConversations.java +++ b/libraries/bot-connector/src/main/java/com/microsoft/bot/connector/rest/RestConversations.java @@ -7,6 +7,7 @@ package com.microsoft.bot.connector.rest; import com.microsoft.bot.connector.Async; +import com.microsoft.bot.connector.ConversationConstants; import com.microsoft.bot.restclient.ServiceResponseBuilder; import com.microsoft.bot.schema.Activity; import com.microsoft.bot.schema.AttachmentData; @@ -111,15 +112,18 @@ CompletableFuture> updateActivity( @Header("User-Agent") String userAgent ); - @Headers({ "Content-Type: application/json; charset=utf-8", - "x-ms-logging-context: com.microsoft.bot.schema.Conversations replyToActivity" }) + @Headers({ + "Content-Type: application/json; charset=utf-8", + "x-ms-logging-context: com.microsoft.bot.schema.Conversations replyToActivity" + }) @POST("v3/conversations/{conversationId}/activities/{activityId}") CompletableFuture> replyToActivity( @Path("conversationId") String conversationId, @Path("activityId") String activityId, @Body Activity activity, @Header("accept-language") String acceptLanguage, - @Header("User-Agent") String userAgent + @Header("User-Agent") String userAgent, + @Header(ConversationConstants.CONVERSATION_ID_HTTP_HEADERNAME) String conversationIdHeader ); @Headers({ "Content-Type: application/json; charset=utf-8", @@ -454,7 +458,12 @@ public CompletableFuture replyToActivity( Validator.validate(activity); return service.replyToActivity( - conversationId, activityId, activity, client.getAcceptLanguage(), client.getUserAgent() + conversationId, + activityId, + activity, + client.getAcceptLanguage(), + client.getUserAgent(), + conversationId ) .thenApply(responseBodyResponse -> { diff --git a/libraries/bot-integration-core/src/main/java/com/microsoft/bot/integration/BotFrameworkHttpClient.java b/libraries/bot-integration-core/src/main/java/com/microsoft/bot/integration/BotFrameworkHttpClient.java index e7cea3c96..3450927e5 100644 --- a/libraries/bot-integration-core/src/main/java/com/microsoft/bot/integration/BotFrameworkHttpClient.java +++ b/libraries/bot-integration-core/src/main/java/com/microsoft/bot/integration/BotFrameworkHttpClient.java @@ -3,6 +3,7 @@ package com.microsoft.bot.integration; +import com.microsoft.bot.connector.ConversationConstants; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -195,8 +196,12 @@ protected CompletableFuture buildCredentials(String appId, Strin }); } - private CompletableFuture> securePostActivity(URI toUrl, - Activity activity, String token, Class type) { + private CompletableFuture> securePostActivity( + URI toUrl, + Activity activity, + String token, + Class type + ) { String jsonContent = ""; try { ObjectMapper mapper = new JacksonAdapter().serializer(); @@ -208,7 +213,7 @@ private CompletableFuture> securePostA try { RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonContent); - Request request = buildRequest(toUrl, body, token); + Request request = buildRequest(activity, toUrl, body, token); Response response = httpClient.newCall(request).execute(); T result = Serialization.getAs(response.body().string(), type); @@ -219,14 +224,17 @@ private CompletableFuture> securePostA } } - private Request buildRequest(URI url, RequestBody body, String token) { - + private Request buildRequest(Activity activity, URI url, RequestBody body, String token) { HttpUrl.Builder httpBuilder = HttpUrl.parse(url.toString()).newBuilder(); Request.Builder requestBuilder = new Request.Builder().url(httpBuilder.build()); if (token != null) { requestBuilder.addHeader("Authorization", String.format("Bearer %s", token)); } + requestBuilder.addHeader( + ConversationConstants.CONVERSATION_ID_HTTP_HEADERNAME, + activity.getConversation().getId() + ); requestBuilder.post(body); return requestBuilder.build(); }