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
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<name>Sinch Java SDK Server Application</name>

<properties>
<sinch.sdk.java.version>[1.0.0,)</sinch.sdk.java.version>
<sinch.sdk.java.version>[1.5.0,]</sinch.sdk.java.version>
<java.version>21</java.version>
</properties>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,30 @@
package com.mycompany.app.sms;

import com.sinch.sdk.SinchClient;
import com.sinch.sdk.domains.sms.WebHooksService;
import com.sinch.sdk.domains.sms.models.InboundText;
import com.sinch.sdk.domains.sms.models.webhooks.WebhooksEvent;
import com.sinch.sdk.domains.sms.api.v1.WebHooksService;
import com.sinch.sdk.domains.sms.models.v1.inbounds.TextMessage;
import com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ResponseStatusException;

@RestController("SMS")
public class Controller {

private final SinchClient sinchClient;
private final ServerBusinessLogic webhooksBusinessLogic;

@Value("${sms.webhooks.secret}")
private String webhooksSecret;

@Autowired
public Controller(SinchClient sinchClient, ServerBusinessLogic webhooksBusinessLogic) {
this.sinchClient = sinchClient;
Expand All @@ -27,16 +35,29 @@ public Controller(SinchClient sinchClient, ServerBusinessLogic webhooksBusinessL
value = "/SmsEvent",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Void> smsDeliveryEvent(@RequestBody String body) {
public ResponseEntity<Void> smsDeliveryEvent(
@RequestHeader Map<String, String> headers, @RequestBody String body) {

WebHooksService webhooks = sinchClient.sms().v1().webhooks();

WebHooksService webhooks = sinchClient.sms().webHooks();
// ensure valid authentication to handle request
// See
// https://developers.sinch.com/docs/sms/api-reference/sms/tag/Webhooks/#tag/Webhooks/section/Callbacks
// Contact your account manager to configure your callback sending headers validation or comment
// following line
var validAuth = webhooks.validateAuthenticationHeader(webhooksSecret, headers, body);

// token validation failed
if (!validAuth) {
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED);
}

// decode the request payload
WebhooksEvent event = webhooks.parse(body);
SmsEvent event = webhooks.parseEvent(body);

// let business layer process the request
switch (event) {
case InboundText e -> webhooksBusinessLogic.processInboundEvent(e);
case TextMessage e -> webhooksBusinessLogic.processInboundEvent(e);
default -> throw new IllegalStateException("Unexpected value: " + event);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.mycompany.app.sms;

import com.sinch.sdk.SinchClient;
import com.sinch.sdk.domains.sms.BatchesService;
import com.sinch.sdk.domains.sms.models.InboundText;
import com.sinch.sdk.domains.sms.models.requests.SendSmsBatchTextRequest;
import com.sinch.sdk.domains.sms.api.v1.BatchesService;
import com.sinch.sdk.domains.sms.models.v1.batches.request.TextRequest;
import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse;
import com.sinch.sdk.domains.sms.models.v1.inbounds.TextMessage;
import java.util.Collections;
import java.util.logging.Logger;
import org.springframework.stereotype.Component;
Expand All @@ -14,24 +15,26 @@ public class ServerBusinessLogic {
private final BatchesService batches;

public ServerBusinessLogic(SinchClient sinchClient) {
this.batches = sinchClient.sms().batches();
this.batches = sinchClient.sms().v1().batches();
}

private static final Logger LOGGER = Logger.getLogger(ServerBusinessLogic.class.getName());

public void processInboundEvent(InboundText event) {
public void processInboundEvent(TextMessage event) {

LOGGER.info("Handle event: " + event);

SendSmsBatchTextRequest smsRequest =
SendSmsBatchTextRequest.builder()
TextRequest smsRequest =
TextRequest.builder()
.setTo(Collections.singletonList(event.getFrom()))
.setBody("You sent: " + event.getBody())
.setFrom(event.getTo())
.build();

LOGGER.info("Replying with: " + smsRequest);

batches.send(smsRequest);
BatchResponse response = batches.send(smsRequest);

LOGGER.info("Response: " + response);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,6 @@ sms:
# Sets the region for SMS
# valid values are US and EU
region:

sms.webhooks.secret:

Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<name>Sinch Java SDK Client Application</name>

<properties>
<sinch.sdk.java.version>[1.0.0,)</sinch.sdk.java.version>
<sinch.sdk.java.version>[1.5.0,)</sinch.sdk.java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<maven.compiler.version>3.13.0</maven.compiler.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<name>Sinch Java SDK Server Application</name>

<properties>
<sinch.sdk.java.version>[1.0.0,)</sinch.sdk.java.version>
<sinch.sdk.java.version>[1.5.0,)</sinch.sdk.java.version>
<java.version>21</java.version>
</properties>

Expand Down
2 changes: 1 addition & 1 deletion pom-ci.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<name>Sinch Java SDK Client quickstart</name>

<properties>
<sinch.sdk.java.version>[1.0.0,)</sinch.sdk.java.version>
<sinch.sdk.java.version>[1.5.0,)</sinch.sdk.java.version>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<maven.compiler.version>3.8.0</maven.compiler.version>
Expand Down
2 changes: 1 addition & 1 deletion templates/client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<name>Sinch Java SDK Client Application</name>

<properties>
<sinch.sdk.java.version>[1.0.0,)</sinch.sdk.java.version>
<sinch.sdk.java.version>[1.5.0,)</sinch.sdk.java.version>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<maven.compiler.version>3.13.0</maven.compiler.version>
Expand Down
2 changes: 1 addition & 1 deletion templates/client/src/main/java/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public static void main(String[] args) {
// comment if unused
if (client.getConfiguration().getSmsServicePlanCredentials().isPresent()
|| client.getConfiguration().getUnifiedCredentials().isPresent()) {
SmsQuickStart sms = new SmsQuickStart(client.sms());
SmsQuickStart sms = new SmsQuickStart(client.sms().v1());
}

// Verification service dedicated business logic processing
Expand Down
2 changes: 1 addition & 1 deletion templates/client/src/main/java/sms/SmsQuickStart.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package sms;

import com.sinch.sdk.domains.sms.*;
import com.sinch.sdk.domains.sms.api.v1.SMSService;

public class SmsQuickStart {

Expand Down
2 changes: 1 addition & 1 deletion templates/client/src/main/java/sms/Snippet.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package sms;

import com.sinch.sdk.domains.sms.*;
import com.sinch.sdk.domains.sms.api.v1.SMSService;
import java.util.logging.Logger;

public class Snippet {
Expand Down
2 changes: 1 addition & 1 deletion templates/server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<name>Sinch Java SDK Server Application</name>

<properties>
<sinch.sdk.java.version>[1.0.0,)</sinch.sdk.java.version>
<sinch.sdk.java.version>[1.5.0,)</sinch.sdk.java.version>
<java.version>21</java.version>
</properties>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,31 @@
package com.mycompany.app.sms;

import com.sinch.sdk.SinchClient;
import com.sinch.sdk.domains.sms.WebHooksService;
import com.sinch.sdk.domains.sms.models.DeliveryReportBatch;
import com.sinch.sdk.domains.sms.models.DeliveryReportRecipient;
import com.sinch.sdk.domains.sms.models.InboundBinary;
import com.sinch.sdk.domains.sms.models.InboundText;
import com.sinch.sdk.domains.sms.models.webhooks.WebhooksEvent;
import com.sinch.sdk.domains.sms.api.v1.WebHooksService;
import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReport;
import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage;
import com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ResponseStatusException;

@RestController("SMS")
public class Controller {

private final SinchClient sinchClient;
private final ServerBusinessLogic webhooksBusinessLogic;

@Value("${sms.webhooks.secret}")
private String webhooksSecret;

@Autowired
public Controller(SinchClient sinchClient, ServerBusinessLogic webhooksBusinessLogic) {
this.sinchClient = sinchClient;
Expand All @@ -30,19 +36,30 @@ public Controller(SinchClient sinchClient, ServerBusinessLogic webhooksBusinessL
value = "/SmsEvent",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Void> smsDeliveryEvent(@RequestBody String body) {
public ResponseEntity<Void> smsDeliveryEvent(
@RequestHeader Map<String, String> headers, @RequestBody String body) {

WebHooksService webhooks = sinchClient.sms().v1().webhooks();

WebHooksService webhooks = sinchClient.sms().webHooks();
// ensure valid authentication to handle request
// See
// https://developers.sinch.com/docs/sms/api-reference/sms/tag/Webhooks/#tag/Webhooks/section/Callbacks
// Contact your account manager to configure your callback sending headers validation or comment
// following line
var validAuth = webhooks.validateAuthenticationHeader(webhooksSecret, headers, body);

// token validation failed
if (!validAuth) {
throw new ResponseStatusException(HttpStatus.UNAUTHORIZED);
}

// decode the request payload
WebhooksEvent event = webhooks.parse(body);
SmsEvent event = webhooks.parseEvent(body);

// let business layer process the request
switch (event) {
case InboundBinary e -> webhooksBusinessLogic.processInboundEvent(e);
case InboundText e -> webhooksBusinessLogic.processInboundEvent(e);
case DeliveryReportRecipient e -> webhooksBusinessLogic.processDeliveryReportEvent(e);
case DeliveryReportBatch e -> webhooksBusinessLogic.processDeliveryReportEvent(e);
case InboundMessage e -> webhooksBusinessLogic.processInboundEvent(e);
case DeliveryReport e -> webhooksBusinessLogic.processDeliveryReportEvent(e);
default -> throw new IllegalStateException("Unexpected value: " + event);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package com.mycompany.app.sms;

import com.sinch.sdk.domains.sms.models.DeliveryReportBatch;
import com.sinch.sdk.domains.sms.models.DeliveryReportRecipient;
import com.sinch.sdk.domains.sms.models.InboundBinary;
import com.sinch.sdk.domains.sms.models.InboundText;
import com.sinch.sdk.domains.sms.models.webhooks.WebhooksEvent;
import com.sinch.sdk.domains.sms.models.v1.deliveryreports.DeliveryReport;
import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage;
import com.sinch.sdk.domains.sms.models.v1.webhooks.SmsEvent;
import java.util.logging.Logger;
import org.springframework.stereotype.Component;

Expand All @@ -13,23 +11,15 @@ public class ServerBusinessLogic {

private static final Logger LOGGER = Logger.getLogger(ServerBusinessLogic.class.getName());

public void processInboundEvent(InboundText event) {
public void processInboundEvent(InboundMessage event) {
trace(event);
}

public void processInboundEvent(InboundBinary event) {
public void processDeliveryReportEvent(DeliveryReport event) {
trace(event);
}

public void processDeliveryReportEvent(DeliveryReportRecipient event) {
trace(event);
}

public void processDeliveryReportEvent(DeliveryReportBatch event) {
trace(event);
}

private void trace(WebhooksEvent event) {
private void trace(SmsEvent event) {
LOGGER.info("Handle event: " + event);
}
}
4 changes: 4 additions & 0 deletions templates/server/src/main/resources/application.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,7 @@ numbers.webhooks.secret:

# Secret value set for Conversation webhooks calls validation
conversation.webhooks.secret:

# Secret value set for Conversation webhooks calls validation
sms.webhooks.secret:

2 changes: 1 addition & 1 deletion tutorials/sms/auto-subscribe-app/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<description>Demo Project for auto-subscribe</description>

<properties>
<sinch.sdk.java.version>[1.0.0,)</sinch.sdk.java.version>
<sinch.sdk.java.version>[1.5.0,)</sinch.sdk.java.version>
<java.version>21</java.version>
</properties>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.mycompany.app;

import com.sinch.sdk.domains.sms.SMSService;
import com.sinch.sdk.domains.sms.models.InboundText;
import com.sinch.sdk.domains.sms.api.v1.SMSService;
import com.sinch.sdk.domains.sms.models.v1.inbounds.TextMessage;
import java.util.Objects;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
Expand All @@ -25,10 +25,10 @@ public AutoSubscribeController(SMSService smsService, AutoSubscribeService servi
public void smsDeliveryEvent(@RequestBody String body) {

// decode the request payload
var event = smsService.webHooks().parse(body);
var event = smsService.webhooks().parseEvent(body);

// let business layer process the request
if (Objects.requireNonNull(event) instanceof InboundText e) {
if (Objects.requireNonNull(event) instanceof TextMessage e) {
service.processInboundEvent(e);
} else {
throw new IllegalStateException("Unexpected value: " + event);
Expand Down
Loading