diff --git a/.travis.yml b/.travis.yml
index 2a8614b0..c71a5afe 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,11 +3,5 @@ dist: trusty
before_script: cd api/
script: mvn test -Ptest -DskipTests=false -Dhttps.protocols=TLSv1.2 -DmessageBirdAccessKey=test_iQpAp0KCs5GCsMpDhIx2leuNB -DmessageBirdMSISDN=31612345678
jdk:
- - oraclejdk8
- - oraclejdk9
- - openjdk7
- - openjdk8
-matrix:
- include:
- - jdk: oraclejdk7
- dist: precise
+ - oraclejdk11
+ - openjdk11
diff --git a/README.md b/README.md
index 247b1e45..fbacf4fe 100644
--- a/README.md
+++ b/README.md
@@ -23,27 +23,7 @@ cd java-rest-api/api
mvn install
```
-If you are using maven simply add the messagebird API to your dependencies like this:
-
-```
-
- com.messagebird
- messagebird-api
- 2.1.1
-
-```
-
-In case you are building without maven you still need maven to build the libraries but
-then simply copy the following jar's over to your project
-
-```
-messagebird-api-2.1.1.jar
-jackson-core-2.9.8.jar
-jackson-databind-2.9.8.jar
-jackson-dataformat-csv-2.9.8.jar
-jackson-annotations-2.9.8.jar
-```
-
+If you are using maven, please refer to the [mvn repository](https://mvnrepository.com/artifact/com.messagebird/messagebird-api) and choose your desired package version.
Examples
--------
diff --git a/api/pom.xml b/api/pom.xml
index 6715612f..65bdd1ba 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -4,7 +4,7 @@
com.messagebird
messagebird-api
- 2.1.2
@@ -43,7 +43,7 @@
scm:git:git@github.com:messagebird/java-rest-api.git
git@github.com:messagebird/java-rest-api.git
HEAD
-
+
@@ -67,7 +67,7 @@
disable-doclint
- [1.8,)
+ [11,)
none
@@ -140,7 +140,7 @@
org.apache.maven.plugins
maven-javadoc-plugin
- 3.0.0
+ 3.1.0
package
@@ -177,8 +177,8 @@
maven-compiler-plugin
3.7.0
- 1.7
- 1.7
+ 11
+ 11
diff --git a/api/src/main/java/com/messagebird/MessageBirdClient.java b/api/src/main/java/com/messagebird/MessageBirdClient.java
index 6f2132cd..57c42f29 100644
--- a/api/src/main/java/com/messagebird/MessageBirdClient.java
+++ b/api/src/main/java/com/messagebird/MessageBirdClient.java
@@ -855,12 +855,27 @@ public void deleteConversationWebhook(final String webhookId)
* @param request Webhook to create.
* @return Newly created webhook.
*/
- public ConversationWebhook sendConversationWebhook(final ConversationWebhookRequest request)
+ public ConversationWebhook sendConversationWebhook(final ConversationWebhookCreateRequest request)
throws UnauthorizedException, GeneralException {
String url = CONVERSATIONS_BASE_URL + CONVERSATION_WEBHOOK_PATH;
return messageBirdService.sendPayLoad(url, request, ConversationWebhook.class);
}
+ /**
+ * Update an existing webhook.
+ *
+ * @param request update request.
+ * @return Updated webhook.
+ */
+ public ConversationWebhook updateConversationWebhook(final String id, final ConversationWebhookUpdateRequest request) throws UnauthorizedException, GeneralException {
+ if (id == null || id.isEmpty()) {
+ throw new IllegalArgumentException("Conversation webhook ID must be specified.");
+ }
+
+ String url = CONVERSATIONS_BASE_URL + CONVERSATION_WEBHOOK_PATH + "/" + id;
+ return messageBirdService.sendPayLoad("PATCH", url, request, ConversationWebhook.class);
+ }
+
/**
* Gets a single webhook.
*
diff --git a/api/src/main/java/com/messagebird/MessageBirdServiceImpl.java b/api/src/main/java/com/messagebird/MessageBirdServiceImpl.java
index abe70e7d..09a4f758 100644
--- a/api/src/main/java/com/messagebird/MessageBirdServiceImpl.java
+++ b/api/src/main/java/com/messagebird/MessageBirdServiceImpl.java
@@ -57,7 +57,7 @@ public class MessageBirdServiceImpl implements MessageBirdService {
private final String accessKey;
private final String serviceUrl;
- private final String clientVersion = "2.1.1";
+ private final String clientVersion = "3.0.0";
private final String userAgentString;
private Proxy proxy = null;
diff --git a/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhook.java b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhook.java
index 32365eab..91689f97 100644
--- a/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhook.java
+++ b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhook.java
@@ -2,6 +2,7 @@
import java.util.Date;
import java.util.List;
+import java.util.stream.Collectors;
/**
* Webhooks enable real-time notifications of conversation events to be
@@ -15,6 +16,7 @@ public class ConversationWebhook {
private String id;
private String channelId;
private String url;
+ private ConversationWebhookStatus status;
private List events;
private Date createdDatetime;
private Date updatedDatetime;
@@ -43,6 +45,14 @@ public void setUrl(String url) {
this.url = url;
}
+ public ConversationWebhookStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(ConversationWebhookStatus status) {
+ this.status = status;
+ }
+
public List getEvents() {
return events;
}
@@ -73,9 +83,12 @@ public String toString() {
"id='" + id + '\'' +
", channelId='" + channelId + '\'' +
", url='" + url + '\'' +
- ", events=" + events +
+ ", status='" + status + '\'' +
+ ", events=" + events.stream().map(ConversationWebhookEvent::toString).collect(Collectors.joining(",")) +
", createdDatetime=" + createdDatetime +
", updatedDatetime=" + updatedDatetime +
'}';
}
+
+
}
diff --git a/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookBaseRequest.java b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookBaseRequest.java
new file mode 100644
index 00000000..47b1d6b1
--- /dev/null
+++ b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookBaseRequest.java
@@ -0,0 +1,41 @@
+package com.messagebird.objects.conversations;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Contains common fields for webhook requests.
+ */
+public abstract class ConversationWebhookBaseRequest {
+ protected String url;
+ protected List events;
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public List getEvents() {
+ return events;
+ }
+
+ public void setEvents(List events) {
+ this.events = events;
+ }
+
+ protected abstract String getRequestName();
+
+ protected abstract String getStringRepresentationOfExtraParameters();
+
+ @Override
+ public String toString() {
+ return getRequestName() + "{" +
+ getStringRepresentationOfExtraParameters() + '\'' +
+ ", url='" + url + '\'' +
+ ", events=" + events.stream().map(ConversationWebhookEvent::toString).collect(Collectors.joining(",")) +
+ '}';
+ }
+}
diff --git a/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookCreateRequest.java b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookCreateRequest.java
new file mode 100644
index 00000000..1b7c3864
--- /dev/null
+++ b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookCreateRequest.java
@@ -0,0 +1,31 @@
+package com.messagebird.objects.conversations;
+
+import java.util.List;
+
+/**
+ * Request object used to create webhooks.
+ */
+public class ConversationWebhookCreateRequest extends ConversationWebhookBaseRequest{
+
+ private String channelId;
+
+ public ConversationWebhookCreateRequest(
+ final String channelId,
+ final String url,
+ final List events
+ ) {
+ this.channelId = channelId;
+ this.url = url;
+ this.events = events;
+ }
+
+ @Override
+ protected String getRequestName() {
+ return "ConversationWebhookCreateRequest";
+ }
+
+ @Override
+ protected String getStringRepresentationOfExtraParameters() {
+ return "channelId='" + channelId;
+ }
+}
diff --git a/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookRequest.java b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookRequest.java
deleted file mode 100644
index c12737e7..00000000
--- a/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookRequest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.messagebird.objects.conversations;
-
-import java.util.List;
-
-/**
- * Request object used to create webhooks.
- */
-public class ConversationWebhookRequest {
-
- private String channelId;
- private String url;
- private List events;
-
- public ConversationWebhookRequest(
- final String channelId,
- final String url,
- final List events
- ) {
- this.channelId = channelId;
- this.url = url;
- this.events = events;
- }
-
- public ConversationWebhookRequest() {
- //
- }
-
- public String getChannelId() {
- return channelId;
- }
-
- public void setChannelId(String channelId) {
- this.channelId = channelId;
- }
-
- public String getUrl() {
- return url;
- }
-
- public void setUrl(String url) {
- this.url = url;
- }
-
- public List getEvents() {
- return events;
- }
-
- public void setEvents(List events) {
- this.events = events;
- }
-
- @Override
- public String toString() {
- return "ConversationWebhookRequest{" +
- "channelId='" + channelId + '\'' +
- ", url='" + url + '\'' +
- ", events=" + events +
- '}';
- }
-}
diff --git a/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookStatus.java b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookStatus.java
new file mode 100644
index 00000000..0e5dd186
--- /dev/null
+++ b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookStatus.java
@@ -0,0 +1,43 @@
+package com.messagebird.objects.conversations;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Indicates whether a conversation webhook is enabled or disabled.
+ */
+public enum ConversationWebhookStatus {
+ ENABLED("enabled"),
+ DISABLED("disabled");
+
+ private final String status;
+
+ ConversationWebhookStatus(final String status) {
+ this.status = status;
+ }
+
+ @JsonCreator
+ public static ConversationWebhookStatus forValue(final String value) {
+ for (ConversationWebhookStatus conversationWebhookStatus : ConversationWebhookStatus.values()) {
+ if (conversationWebhookStatus.getStatus().equals(value)) {
+ return conversationWebhookStatus;
+ }
+ }
+
+ return null;
+ }
+
+ @JsonValue
+ public String toJson() {
+ return getStatus();
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ @Override
+ public String toString() {
+ return getStatus();
+ }
+}
diff --git a/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookUpdateRequest.java b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookUpdateRequest.java
new file mode 100644
index 00000000..c882ef41
--- /dev/null
+++ b/api/src/main/java/com/messagebird/objects/conversations/ConversationWebhookUpdateRequest.java
@@ -0,0 +1,38 @@
+package com.messagebird.objects.conversations;
+
+import java.util.List;
+
+/**
+ * Request object used to update webhook.
+ */
+public class ConversationWebhookUpdateRequest extends ConversationWebhookBaseRequest {
+ private ConversationWebhookStatus status;
+
+ public ConversationWebhookUpdateRequest(
+ final ConversationWebhookStatus status,
+ final String url,
+ final List events
+ ) {
+ this.status = status;
+ this.url = url;
+ this.events = events;
+ }
+
+ public ConversationWebhookStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(ConversationWebhookStatus status) {
+ this.status = status;
+ }
+
+ @Override
+ protected String getRequestName() {
+ return "ConversationWebhookUpdateRequest";
+ }
+
+ @Override
+ protected String getStringRepresentationOfExtraParameters() {
+ return "status='" + status;
+ }
+}
diff --git a/api/src/test/java/com/messagebird/ConversationWebhooksTest.java b/api/src/test/java/com/messagebird/ConversationWebhooksTest.java
index 1e64eba8..ccfd627d 100644
--- a/api/src/test/java/com/messagebird/ConversationWebhooksTest.java
+++ b/api/src/test/java/com/messagebird/ConversationWebhooksTest.java
@@ -3,43 +3,53 @@
import com.messagebird.exceptions.GeneralException;
import com.messagebird.exceptions.NotFoundException;
import com.messagebird.exceptions.UnauthorizedException;
-import com.messagebird.objects.conversations.ConversationWebhook;
-import com.messagebird.objects.conversations.ConversationWebhookEvent;
-import com.messagebird.objects.conversations.ConversationWebhookList;
-import com.messagebird.objects.conversations.ConversationWebhookRequest;
+import com.messagebird.objects.conversations.*;
+import org.junit.Before;
import org.junit.Test;
-import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import static com.messagebird.TestUtil.*;
import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
public class ConversationWebhooksTest {
+ private static final String WHID = "whid";
+ private static final String CONVERSATIONS_WEBHOOK_URL = "https://conversations.messagebird.com/v1/webhooks";
+ private static final String CHANID = "chanid";
+ private static final String HTTPS_EXAMPLE_COM_WEBHOOKS = "https://example.com/webhooks";
- private static final String EMPTY_RESPONSE_BODY = "";
- private static final String JSON_WEBHOOK = "{\"id\": \"whid\",\"url\": \"https://example.com/webhooks\",\"channelId\": \"chanid\",\"events\": [\"message.created\"],\"createdDatetime\": \"2018-08-30T09:34:36Z\",\"updatedDatetime\": null}";
- private static final String JSON_WEBHOOK_LIST = "{\"offset\": 10,\"limit\": 5,\"count\": 1,\"totalCount\": 11,\"items\": [{\"id\": \"whid\",\"url\": \"https://example.com/webhooks\",\"channelId\": \"chanid\",\"events\": [\"message.created\"],\"createdDatetime\": \"2018-08-24T14:46:39Z\",\"updatedDatetime\": null}]}";
- private static final int STATUS_NO_CONTENT = 204;
+ private MessageBirdService mockMessageBirdService;
+ private MessageBirdClient messageBirdClient;
+
+ @Before
+ public void setUp() {
+ mockMessageBirdService = mock(MessageBirdService.class);
+ messageBirdClient = new MessageBirdClient(mockMessageBirdService);
+ }
@Test
public void testDeleteConversationWebhook() throws GeneralException, NotFoundException, UnauthorizedException {
- MessageBirdService messageBirdService = SpyService
- .expects("DELETE", "webhooks/whid")
- .withConversationsAPIBaseURL()
- .andReturns(new APIResponse(EMPTY_RESPONSE_BODY, STATUS_NO_CONTENT));
- MessageBirdClient messageBirdClient = new MessageBirdClient(messageBirdService);
+ doNothing().when(mockMessageBirdService).deleteByID(HTTPS_EXAMPLE_COM_WEBHOOKS, WHID);
+ messageBirdClient.deleteConversationWebhook(WHID);
- messageBirdClient.deleteConversationWebhook("whid");
+ verify(mockMessageBirdService, times(1)).deleteByID(CONVERSATIONS_WEBHOOK_URL, WHID);
}
@Test
public void testListConversationWebhooks() throws GeneralException, UnauthorizedException {
- MessageBirdService messageBirdService = SpyService
- .expects("GET", "webhooks?offset=10&limit=5")
- .withConversationsAPIBaseURL()
- .andReturns(new APIResponse(JSON_WEBHOOK_LIST));
- MessageBirdClient messageBirdClient = new MessageBirdClient(messageBirdService);
+ ConversationWebhookList conversationWebhookListResponse = mock(ConversationWebhookList.class);
+ ConversationWebhook conversationWebhook = new ConversationWebhook();
+ conversationWebhook.setId(WHID);
+ when(conversationWebhookListResponse.getItems()).thenReturn(Collections.singletonList(conversationWebhook));
+ when(conversationWebhookListResponse.getLimit()).thenReturn(5);
+ when(conversationWebhookListResponse.getOffset()).thenReturn(10);
+ when(conversationWebhookListResponse.getTotalCount()).thenReturn(11);
+ when(mockMessageBirdService.requestList(CONVERSATIONS_WEBHOOK_URL, 10, 5, ConversationWebhookList.class))
+ .thenReturn(conversationWebhookListResponse);
ConversationWebhookList conversationWebhookList
= messageBirdClient.listConversationWebhooks(10, 5);
@@ -47,44 +57,70 @@ public void testListConversationWebhooks() throws GeneralException, Unauthorized
assertEquals(Integer.valueOf(10), conversationWebhookList.getOffset());
assertEquals(Integer.valueOf(5), conversationWebhookList.getLimit());
assertEquals(Integer.valueOf(11), conversationWebhookList.getTotalCount());
- assertEquals("whid", conversationWebhookList.getItems().get(0).getId());
+ assertEquals(WHID, conversationWebhookList.getItems().get(0).getId());
}
@Test
public void testSendConversationWebhook() throws GeneralException, UnauthorizedException {
- ConversationWebhookRequest request = new ConversationWebhookRequest(
- "chanid",
- "https://example.com/webhooks",
- Arrays.asList(
- ConversationWebhookEvent.CONVERSATION_CREATED,
- ConversationWebhookEvent.MESSAGE_CREATED
- )
- );
-
- MessageBirdService messageBirdService = SpyService
- .expects("POST", "webhooks", request)
- .withConversationsAPIBaseURL()
- .andReturns(new APIResponse(JSON_WEBHOOK));
- MessageBirdClient messageBirdClient = new MessageBirdClient(messageBirdService);
+ ConversationWebhookCreateRequest request = createConversationWebhookRequest();
+
+ ConversationWebhook conversationWebhookResponse = new ConversationWebhook();
+ conversationWebhookResponse.setId(WHID);
+
+ when(mockMessageBirdService.sendPayLoad(CONVERSATIONS_WEBHOOK_URL, request, ConversationWebhook.class))
+ .thenReturn(conversationWebhookResponse);
ConversationWebhook conversationWebhook = messageBirdClient.sendConversationWebhook(request);
- assertEquals("whid", conversationWebhook.getId());
+ assertEquals(WHID, conversationWebhook.getId());
+ }
+
+ @Test
+ public void testUpdateConversationWebhook() throws GeneralException, UnauthorizedException {
+ ConversationWebhookUpdateRequest request = createConversationWebhookUpdateRequest();
+
+ ConversationWebhook conversationWebhookResponse = new ConversationWebhook();
+ conversationWebhookResponse.setId(WHID);
+ conversationWebhookResponse.setUpdatedDatetime(new Date());
+
+ when(mockMessageBirdService.sendPayLoad("PATCH",CONVERSATIONS_WEBHOOK_URL + "/chanid", request, ConversationWebhook.class))
+ .thenReturn(conversationWebhookResponse);
+
+ ConversationWebhook conversationWebhook = messageBirdClient.updateConversationWebhook(CHANID, request);
+
+ assertEquals(WHID, conversationWebhook.getId());
+ assertNotNull(conversationWebhook.getUpdatedDatetime());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testUpdateConversationWebhookWithNullWebhookId() throws GeneralException, UnauthorizedException {
+ ConversationWebhookUpdateRequest request = createConversationWebhookUpdateRequest();
+
+ messageBirdClient = new MessageBirdClient(null);
+
+ messageBirdClient.updateConversationWebhook(null, request);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testUpdateConversationWebhookWithEmptyWebhookId() throws GeneralException, UnauthorizedException {
+ ConversationWebhookUpdateRequest request = createConversationWebhookUpdateRequest();
+
+ messageBirdClient = new MessageBirdClient(null);
+
+ messageBirdClient.updateConversationWebhook("", request);
}
@Test
public void testViewConversationWebhook() throws GeneralException, NotFoundException, UnauthorizedException {
- MessageBirdService messageBirdService = SpyService
- .expects("GET", "webhooks/whid")
- .withConversationsAPIBaseURL()
- .andReturns(new APIResponse(JSON_WEBHOOK));
- MessageBirdClient messageBirdClient = new MessageBirdClient(messageBirdService);
+ ConversationWebhook conversationWebhookResponse = createConversationWebhook();
+ when(mockMessageBirdService.requestByID(CONVERSATIONS_WEBHOOK_URL, WHID, ConversationWebhook.class))
+ .thenReturn(conversationWebhookResponse);
- ConversationWebhook conversationWebhook = messageBirdClient.viewConversationWebhook("whid");
+ ConversationWebhook conversationWebhook = messageBirdClient.viewConversationWebhook(WHID);
- assertEquals("whid", conversationWebhook.getId());
- assertEquals("https://example.com/webhooks", conversationWebhook.getUrl());
- assertEquals("chanid", conversationWebhook.getChannelId());
+ assertEquals(WHID, conversationWebhook.getId());
+ assertEquals(HTTPS_EXAMPLE_COM_WEBHOOKS, conversationWebhook.getUrl());
+ assertEquals(CHANID, conversationWebhook.getChannelId());
assertEquals(1, conversationWebhook.getEvents().size());
assertEquals(ConversationWebhookEvent.MESSAGE_CREATED, conversationWebhook.getEvents().get(0));
}
diff --git a/api/src/test/java/com/messagebird/TestUtil.java b/api/src/test/java/com/messagebird/TestUtil.java
index c49642e8..584b6834 100644
--- a/api/src/test/java/com/messagebird/TestUtil.java
+++ b/api/src/test/java/com/messagebird/TestUtil.java
@@ -1,12 +1,10 @@
package com.messagebird;
import com.messagebird.objects.*;
+import com.messagebird.objects.conversations.*;
import com.messagebird.objects.voicecalls.*;
-import java.util.Collections;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.util.*;
class TestUtil {
@@ -148,4 +146,36 @@ static ContactList createContactList() {
return contactList;
}
+ static ConversationWebhook createConversationWebhook() {
+ ConversationWebhook conversationWebhookResponse = new ConversationWebhook();
+ conversationWebhookResponse.setId("whid");
+ conversationWebhookResponse.setUrl("https://example.com/webhooks");
+ conversationWebhookResponse.setChannelId("chanid");
+ conversationWebhookResponse.setEvents(Collections.singletonList(
+ ConversationWebhookEvent.MESSAGE_CREATED
+ ));
+ return conversationWebhookResponse;
+ }
+
+ static ConversationWebhookUpdateRequest createConversationWebhookUpdateRequest() {
+ return new ConversationWebhookUpdateRequest(
+ ConversationWebhookStatus.ENABLED,
+ "https://example.com/webhooks",
+ Arrays.asList(
+ ConversationWebhookEvent.CONVERSATION_UPDATED,
+ ConversationWebhookEvent.MESSAGE_UPDATED
+ )
+ );
+ }
+
+ static ConversationWebhookCreateRequest createConversationWebhookRequest() {
+ return new ConversationWebhookCreateRequest(
+ "chanid",
+ "https://example.com/webhooks",
+ Arrays.asList(
+ ConversationWebhookEvent.CONVERSATION_CREATED,
+ ConversationWebhookEvent.MESSAGE_CREATED
+ )
+ );
+ }
}
diff --git a/examples/pom.xml b/examples/pom.xml
index 00936a20..88d378fd 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -6,7 +6,7 @@
com.messagebird
examples
- 2.1.1
+ 3.0.0
@@ -20,7 +20,8 @@
com.messagebird
messagebird-api
- 2.1.1
+ 3.0.0
+ compile
@@ -49,8 +50,8 @@
maven-compiler-plugin
3.1
- 1.7
- 1.7
+ 11
+ 11
diff --git a/examples/src/main/java/ExampleUpdateConversationWebhook.java b/examples/src/main/java/ExampleUpdateConversationWebhook.java
new file mode 100644
index 00000000..37b46955
--- /dev/null
+++ b/examples/src/main/java/ExampleUpdateConversationWebhook.java
@@ -0,0 +1,83 @@
+import com.messagebird.MessageBirdClient;
+import com.messagebird.MessageBirdService;
+import com.messagebird.MessageBirdServiceImpl;
+import com.messagebird.exceptions.GeneralException;
+import com.messagebird.exceptions.UnauthorizedException;
+import com.messagebird.objects.conversations.*;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class ExampleUpdateConversationWebhook {
+
+ public static void main(String[] args) {
+ if (args.length < 1 || args.length > 8) {
+ System.out.println("Please at least specify your access key and a max of 8 arguments.\n" +
+ "You can also specify a webhook id, enabled or not, url of webhook and events. Default value would be used if you don't\n" +
+ "Events can be a maximum of 4 between conversation.created, conversation.updated, message.created, message.updated\n" +
+ "If third argument is enabled, then status of the webhook will be updated to enabled, otherwise will be disabled\n\n" +
+ "Usage : java -jar test_accesskey(Required) webhook_title(Optional) enabled(Optional) webhook-url(Optional) event1(Optional) event2(Optional) event3(Optional) event4(Optional)");
+ return;
+ }
+
+ //First create your service object
+ final MessageBirdService wsr = new MessageBirdServiceImpl(args[0]);
+
+ //Add the service to the client
+ final MessageBirdClient messageBirdClient = new MessageBirdClient(wsr);
+
+ try {
+ //Creating webHook object to send client
+ System.out.println("Updating conversation webhook..");
+
+ ConversationWebhookUpdateRequest request = new ConversationWebhookUpdateRequest(
+ getStatus(args) ,
+ getWebhookUrl(args),
+ getConversationWebHookEvents(args)
+ );
+
+ //Sending ConversationWebHook update request
+ final ConversationWebhook conversationWebhookResponse = messageBirdClient.updateConversationWebhook(args[1], request);
+ //Display conversationWebhook response
+ System.out.println(conversationWebhookResponse);
+ } catch (GeneralException | UnauthorizedException exception) {
+ exception.printStackTrace();
+ }
+ }
+
+ private static ConversationWebhookStatus getStatus(String[] args) {
+ return (args.length <= 3 || args[2].equals("enabled")) ? ConversationWebhookStatus.ENABLED : ConversationWebhookStatus.DISABLED;
+ }
+
+ private static String getWebhookUrl(String[] args) {
+ return args.length > 4 ? args[3] : "https://example-web-hook-url";
+ }
+
+ private static List parseConversationWebHookEvents(String[] args) {
+ List conversationWebhookEventList = new ArrayList<>();
+
+ for (String arg : args ) {
+ ConversationWebhookEvent event = ConversationWebhookEvent.forValue(arg);
+
+ if (event == null) {
+ System.out.println("Skipping unrecognized event " + arg);
+ continue;
+ }
+
+ conversationWebhookEventList.add(event);
+ }
+
+ return conversationWebhookEventList;
+ }
+
+ private static List getConversationWebHookEvents(String[] args) {
+ if (args.length < 5)
+ return Arrays.asList(ConversationWebhookEvent.CONVERSATION_CREATED, ConversationWebhookEvent.MESSAGE_CREATED);
+
+ String[] arrayOfEvents = new String[args.length - 4];
+ System.arraycopy(args, 4, arrayOfEvents, 0, args.length - 4);
+
+ return parseConversationWebHookEvents(arrayOfEvents);
+ }
+}