Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 78 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,9 @@ MailerSend Java SDK
- [Update a blocklist monitor](#update-a-blocklist-monitor)
- [Delete a blocklist monitor](#delete-a-blocklist-monitor)

- [WhatsApp](#whatsapp)
- [Send a WhatsApp message](#send-a-whatsapp-message)
- [Send a WhatsApp message with personalization](#send-a-whatsapp-message-with-personalization)
- [Testing](#testing)
- [Support and Feedback](#support-and-feedback)
- [License](#license)
Expand All @@ -172,12 +175,12 @@ Using Maven:
<dependency>
<groupId>com.mailersend</groupId>
<artifactId>java-sdk</artifactId>
<version>2.1.0</version>
<version>2.2.0</version>
</dependency>

Using Gradle:

implementation 'com.mailersend:java-sdk:2.1.0'
implementation 'com.mailersend:java-sdk:2.2.0'

# Usage

Expand Down Expand Up @@ -4533,6 +4536,79 @@ public void deleteInvite() {
}
```

# WhatsApp

`from` takes a connected WhatsApp sender, either as its phone number in E.164 format or as its MailerSend sender ID. A sender connected with a Meta virtual number has no phone number, so it can only be addressed by its sender ID. Recipients are phone numbers in E.164 format, or a BSUID taken from an inbound message. Sending requires a token with the `whatsapp_full` scope.

### Send a WhatsApp message

```java
import com.mailersend.sdk.MailerSend;
import com.mailersend.sdk.exceptions.MailerSendException;

public void sendWhatsApp() {

MailerSend ms = new MailerSend();
ms.setToken("mailersend token");

try {

String messageId = ms.whatsapp().builder()
.from("12345678901")
.addRecipient("19191234567")
.templateId("your_template_id")
.send();

System.out.println(messageId);

} catch (MailerSendException e) {

e.printStackTrace();
}
}
```

### Send a WhatsApp message with personalization

```java
import com.mailersend.sdk.MailerSend;
import com.mailersend.sdk.exceptions.MailerSendException;
import com.mailersend.sdk.whatsapp.WhatsAppPersonalization;

public void sendWhatsAppWithPersonalization() {

MailerSend ms = new MailerSend();
ms.setToken("mailersend token");

try {

WhatsAppPersonalization p1 = new WhatsAppPersonalization("19191234567")
.setHeader(new String[]{"John"})
.setBody(new String[]{"order #1234", "tomorrow"})
.setButtons(new String[]{"https://example.com/track/1234"});

WhatsAppPersonalization p2 = new WhatsAppPersonalization("19199876543")
.setHeader(new String[]{"Jane"})
.setBody(new String[]{"order #5678", "Friday"});

String messageId = ms.whatsapp().builder()
.from("12345678901")
.addRecipient("19191234567")
.addRecipient("19199876543")
.templateId("your_template_id")
.addPersonalization(p1)
.addPersonalization(p2)
.send();

System.out.println(messageId);

} catch (MailerSendException e) {

e.printStackTrace();
}
}
```

# Testing

To run the tests you need **Java 11+** and **Maven 3.6+** installed.
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.mailersend</groupId>
<artifactId>java-sdk</artifactId>
<version>2.1.0</version>
<version>2.2.0</version>
<name>MailerSend Java SDK</name>
<description>An SDK for MailerSend API</description>
<url>https://github.com/mailersend/mailersend-java</url>
Expand Down
16 changes: 14 additions & 2 deletions src/main/java/com/mailersend/sdk/MailerSend.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import com.mailersend.sdk.scheduledmessages.ScheduledMessages;
import com.mailersend.sdk.sms.Sms;
import com.mailersend.sdk.templates.Templates;
import com.mailersend.sdk.whatsapp.WhatsApp;
import com.mailersend.sdk.tokens.Tokens;
import com.mailersend.sdk.webhooks.Webhooks;
import com.mailersend.sdk.emailverification.EmailVerification;
Expand Down Expand Up @@ -49,12 +50,13 @@ public class MailerSend {
private ScheduledMessages scheduledMessages = null;
private EmailVerification emailVerification = null;
private Sms sms = null;
private WhatsApp whatsapp = null;
private DmarcMonitoring dmarcMonitoring = null;
private BlocklistMonitoring blocklistMonitoring = null;
private SmtpUsers smtpUsers = null;
private SenderIdentities senderIdentities = null;
private Users users = null;

/**
* <p>Constructor for MailerSend.</p>
*/
Expand All @@ -73,6 +75,7 @@ public MailerSend() {
scheduledMessages = new ScheduledMessages(this);
emailVerification = new EmailVerification(this);
sms = new Sms(this);
whatsapp = new WhatsApp(this);
dmarcMonitoring = new DmarcMonitoring(this);
blocklistMonitoring = new BlocklistMonitoring(this);
smtpUsers = new SmtpUsers(this);
Expand Down Expand Up @@ -217,7 +220,16 @@ public EmailVerification emailVerification() {
public Sms sms() {
return sms;
}


/**
* Get the whatsapp access object
*
* @return The WhatsApp object
*/
public WhatsApp whatsapp() {
return whatsapp;
}

/**
* Get the DMARC monitoring access object
*
Expand Down
41 changes: 41 additions & 0 deletions src/main/java/com/mailersend/sdk/whatsapp/WhatsApp.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*************************************************
* MailerSend Java SDK
* https://github.com/mailersend/mailersend-java
*
* @author MailerSend <support@mailersend.com>
* https://mailersend.com
**************************************************/
package com.mailersend.sdk.whatsapp;

import com.mailersend.sdk.MailerSend;

/**
* <p>WhatsApp class.</p>
*
* @author mailersend
* @version $Id: $Id
*/
public class WhatsApp {

private MailerSend apiObjectReference;
private WhatsAppBuilder builder;

/**
* <p>Constructor for WhatsApp.</p>
*
* @param ref a {@link com.mailersend.sdk.MailerSend} object.
*/
public WhatsApp(MailerSend ref) {
apiObjectReference = ref;
builder = new WhatsAppBuilder(ref);
}

/**
* <p>builder.</p>
*
* @return a {@link com.mailersend.sdk.whatsapp.WhatsAppBuilder} object.
*/
public WhatsAppBuilder builder() {
return builder;
}
}
120 changes: 120 additions & 0 deletions src/main/java/com/mailersend/sdk/whatsapp/WhatsAppBuilder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
/*************************************************
* MailerSend Java SDK
* https://github.com/mailersend/mailersend-java
*
* @author MailerSend <support@mailersend.com>
* https://mailersend.com
**************************************************/
package com.mailersend.sdk.whatsapp;

import java.util.ArrayList;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mailersend.sdk.MailerSend;
import com.mailersend.sdk.MailerSendApi;
import com.mailersend.sdk.exceptions.MailerSendException;
import com.mailersend.sdk.util.JsonSerializationDeserializationStrategy;

/**
* <p>WhatsAppBuilder class.</p>
*
* @author mailersend
* @version $Id: $Id
*/
public class WhatsAppBuilder {

private WhatsAppBuilderBody builderBody;
private MailerSend apiObjectReference;

/**
* <p>Constructor for WhatsAppBuilder.</p>
*
* @param ref a {@link com.mailersend.sdk.MailerSend} object.
*/
public WhatsAppBuilder(MailerSend ref) {
apiObjectReference = ref;
builderBody = new WhatsAppBuilderBody();
}

/**
* <p>from.</p>
*
* @param from the sender to send from, either a connected WhatsApp sender's phone number in E.164 format or its MailerSend sender ID
* @return a {@link com.mailersend.sdk.whatsapp.WhatsAppBuilder} object.
*/
public WhatsAppBuilder from(String from) {
builderBody.from = from;
return this;
}

/**
* <p>addRecipient.</p>
*
* @param recipient a phone number in E.164 format, or a BSUID taken from an inbound message
* @return a {@link com.mailersend.sdk.whatsapp.WhatsAppBuilder} object.
*/
public WhatsAppBuilder addRecipient(String recipient) {
builderBody.to.add(recipient);
return this;
}

/**
* <p>templateId.</p>
*
* @param templateId the ID of the approved WhatsApp template
* @return a {@link com.mailersend.sdk.whatsapp.WhatsAppBuilder} object.
*/
public WhatsAppBuilder templateId(String templateId) {
builderBody.templateId = templateId;
return this;
}

/**
* <p>addPersonalization.</p>
*
* @param personalization a {@link com.mailersend.sdk.whatsapp.WhatsAppPersonalization} object.
* @return a {@link com.mailersend.sdk.whatsapp.WhatsAppBuilder} object.
*/
public WhatsAppBuilder addPersonalization(WhatsAppPersonalization personalization) {
if (builderBody.personalization == null) {
builderBody.personalization = new ArrayList<WhatsAppPersonalization>();
}
builderBody.personalization.add(personalization);
return this;
}

/**
* <p>send.</p>
*
* @return the ID of the created message
* @throws com.mailersend.sdk.exceptions.MailerSendException if any.
*/
public String send() throws MailerSendException {
String endpoint = "/whatsapp/send";

MailerSendApi api = new MailerSendApi();
api.setToken(apiObjectReference.getToken());

Gson gson = new GsonBuilder()
.addSerializationExclusionStrategy(new JsonSerializationDeserializationStrategy(false))
.addDeserializationExclusionStrategy(new JsonSerializationDeserializationStrategy(true))
.create();

String json = gson.toJson(builderBody);

builderBody = new WhatsAppBuilderBody();

WhatsAppSendResponse response = api.postRequest(endpoint, json, WhatsAppSendResponse.class);

if (response.messageId != null && !response.messageId.isBlank()) {
return response.messageId;
}

if (response.data != null) {
return response.data.id;
}

return null;
}
}
33 changes: 33 additions & 0 deletions src/main/java/com/mailersend/sdk/whatsapp/WhatsAppBuilderBody.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*************************************************
* MailerSend Java SDK
* https://github.com/mailersend/mailersend-java
*
* @author MailerSend <support@mailersend.com>
* https://mailersend.com
**************************************************/
package com.mailersend.sdk.whatsapp;

import java.util.ArrayList;

import com.google.gson.annotations.SerializedName;

/**
* <p>WhatsAppBuilderBody class.</p>
*
* @author mailersend
* @version $Id: $Id
*/
public class WhatsAppBuilderBody {

@SerializedName("from")
public String from;

@SerializedName("to")
public ArrayList<String> to = new ArrayList<String>();

@SerializedName("template_id")
public String templateId;

@SerializedName("personalization")
public ArrayList<WhatsAppPersonalization> personalization = null;
}
Loading