diff --git a/src/main/java/clients/symphony/api/MessagesClient.java b/src/main/java/clients/symphony/api/MessagesClient.java index 9ad5d9655..4337d6768 100755 --- a/src/main/java/clients/symphony/api/MessagesClient.java +++ b/src/main/java/clients/symphony/api/MessagesClient.java @@ -134,6 +134,41 @@ public InboundMessage sendTaggedMessage(String streamId, OutboundMessage message return sendMessage(streamId, message, false); } + public InboundMessage getMessageById(String messageId) { + String cleanMessageId = messageId.replaceAll("=", "") + .replaceAll("/", "_") + .replaceAll("\\+", "-"); + + WebTarget webTarget = botClient.getAgentClient() + .target(botClient.getConfig().getAgentUrl()) + .path(AgentConstants.GETMESSAGEBYID.replace("{mid}", cleanMessageId)); + + Invocation.Builder builder = webTarget + .request(MediaType.APPLICATION_JSON) + .header("sessionToken", botClient.getSymAuth().getSessionToken()); + + if (isKeyManTokenRequired) { + builder = builder.header("keyManagerToken", botClient.getSymAuth().getKmToken()); + } + + InboundMessage result; + try (Response response = builder.get()) { + if (response.getStatusInfo().getFamily() != SUCCESSFUL) { + try { + handleError(response, botClient); + } catch (UnauthorizedException ex) { + return getMessageById(messageId); + } + return null; + } else if (response.getStatus() == 204) { + return null; + } else { + result = response.readEntity(InboundMessage.class); + } + return result; + } + } + public List getMessagesFromStream(String streamId, long since, int skip, int limit) throws SymClientException { diff --git a/src/main/java/clients/symphony/api/constants/AgentConstants.java b/src/main/java/clients/symphony/api/constants/AgentConstants.java index 50f2f085b..010713d82 100755 --- a/src/main/java/clients/symphony/api/constants/AgentConstants.java +++ b/src/main/java/clients/symphony/api/constants/AgentConstants.java @@ -6,6 +6,7 @@ public class AgentConstants { public static final String READDATAFEED = AGENT + "/v4/datafeed/{id}/read"; public static final String CREATEMESSAGE = AGENT + "/v4/stream/{sid}/message/create"; public static final String GETMESSAGES = AGENT + "/v4/stream/{sid}/message"; + public static final String GETMESSAGEBYID = AGENT + "/v1/message/{mid}"; public static final String GETATTACHMENT = AGENT + "/v1/stream/{sid}/attachment"; public static final String SEARCHMESSAGES = AGENT + "/v1/message/search"; public static final String MESSAGEIMPORT = AGENT + "/v4/message/import"; diff --git a/src/main/java/model/InboundMessage.java b/src/main/java/model/InboundMessage.java index 4abe69b2c..8b05347b9 100755 --- a/src/main/java/model/InboundMessage.java +++ b/src/main/java/model/InboundMessage.java @@ -10,6 +10,7 @@ public class InboundMessage { private String messageId; private Long timestamp; private String message; + private InboundMessage sharedMessage; private String data; private List attachments; private User user; @@ -18,6 +19,8 @@ public class InboundMessage { private String diagnostic; private String userAgent; private String originalFormat; + private String disclaimer; + private String sid; public String getMessageId() { return messageId; @@ -43,6 +46,14 @@ public void setMessage(String message) { this.message = message; } + public InboundMessage getSharedMessage() { + return sharedMessage; + } + + public void setSharedMessage(InboundMessage sharedMessage) { + this.sharedMessage = sharedMessage; + } + public String getData() { return data; } @@ -107,6 +118,22 @@ public void setOriginalFormat(String originalFormat) { this.originalFormat = originalFormat; } + public String getDisclaimer() { + return disclaimer; + } + + public void setDisclaimer(String disclaimer) { + this.disclaimer = disclaimer; + } + + public String getSid() { + return sid; + } + + public void setSid(String sid) { + this.sid = sid; + } + public String getMessageText() { if (SymMessageParser.getInstance() == null) { return null; diff --git a/src/test/java/it/clients/symphony/api/MessagesClientTest.java b/src/test/java/it/clients/symphony/api/MessagesClientTest.java index b0eaa78fd..0beff96fe 100644 --- a/src/test/java/it/clients/symphony/api/MessagesClientTest.java +++ b/src/test/java/it/clients/symphony/api/MessagesClientTest.java @@ -26,6 +26,43 @@ public void initClient() { messagesClient = new MessagesClient(symBotClient); } + @Test + public void getMessageByIdSuccess() { + stubFor(get(urlEqualTo(AgentConstants.GETMESSAGEBYID.replace("{mid}", "mock-message_id"))) + .withHeader(HttpHeaders.ACCEPT, equalTo(MediaType.APPLICATION_JSON)) + .willReturn(aResponse() + .withStatus(200) + .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .withBody("{\n" + + " \"messageId\": \"mockMessageId\",\n" + + " \"timestamp\": 1590130725008,\n" + + " \"message\": \"

Hello

\",\n" + + " \"data\": \"{}\",\n" + + " \"user\": {\n" + + " \"userId\": 12345678901234,\n" + + " \"firstName\": \"Mock\",\n" + + " \"lastName\": \"User\",\n" + + " \"displayName\": \"Mock User\",\n" + + " \"email\": \"mock.user@symphony.com\"\n" + + " },\n" + + " \"stream\": {\n" + + " \"streamId\": \"mock_stream_id\",\n" + + " \"streamType\": \"IM\"\n" + + " },\n" + + " \"userAgent\": \"DESKTOP-40.0.0-11751-Windows-10-Chrome-81.0.4044.138\",\n" + + " \"originalFormat\": \"com.symphony.messageml.v2\",\n" + + " \"disclaimer\": \"This is mock disclaimer\",\n" + + " \"sid\": \"mock_sid\"\n" + + "}"))); + + InboundMessage message = messagesClient.getMessageById("mock+message/id"); + + assertNotNull(message); + assertEquals("mockMessageId", message.getMessageId()); + assertEquals("This is mock disclaimer", message.getDisclaimer()); + assertEquals("mock_sid", message.getSid()); + } + @Test public void getMessagesFromStreamSuccess() { stubFor(get(urlEqualTo(AgentConstants.GETMESSAGES.replace("{sid}", "1").concat("?since=1461808167175")))