From 6683cb559d45c6bc2128204c579f9ffcb1db0602 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Portier Date: Thu, 18 Dec 2025 13:50:53 +0100 Subject: [PATCH 1/4] feat (tutorials): Remove obsolete tutorial --- examples/compile.sh | 3 - .../voice/handle-incoming-call/README.md | 79 ------------------- .../voice/handle-incoming-call/pom.xml | 52 ------------ .../src/main/java/com/mycompany/app/App.java | 12 --- .../main/java/com/mycompany/app/Config.java | 37 --------- .../com/mycompany/app/WebhookController.java | 67 ---------------- .../com/mycompany/app/WebhookService.java | 33 -------- .../src/main/resources/application.yaml | 16 ---- 8 files changed, 299 deletions(-) delete mode 100755 examples/compile.sh delete mode 100644 examples/tutorials/voice/handle-incoming-call/README.md delete mode 100644 examples/tutorials/voice/handle-incoming-call/pom.xml delete mode 100644 examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/App.java delete mode 100644 examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/Config.java delete mode 100644 examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/WebhookController.java delete mode 100644 examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/WebhookService.java delete mode 100644 examples/tutorials/voice/handle-incoming-call/src/main/resources/application.yaml diff --git a/examples/compile.sh b/examples/compile.sh deleted file mode 100755 index b56bd45e4..000000000 --- a/examples/compile.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -(cd tutorials/voice/handle-incoming-call && mvn clean package) diff --git a/examples/tutorials/voice/handle-incoming-call/README.md b/examples/tutorials/voice/handle-incoming-call/README.md deleted file mode 100644 index e8faa32eb..000000000 --- a/examples/tutorials/voice/handle-incoming-call/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# Handle Incoming Call webhook application sample - -This directory contains sample related to Java SDK tutorial: [Handle incoming call](https://developers.sinch.com/docs/voice/getting-started/java/incoming-call) - -## Requirements - -- JDK 21 or later -- [Maven](https://maven.apache.org/) -- [ngrok](https://ngrok.com/docs) -- [Sinch account](https://dashboard.sinch.com) -- Having a [Sinch phone number attached to your account](https://developers.sinch.com/docs/voice/getting-started/#3-assign-your-number) - -## Usage - -### Configure application settings - -Application settings is using the SpringBoot configuration file: [`application.yaml`](src/main/resources/application.yaml) file and set: - -#### Sinch credentials -Located in `credentials.application` section (*you can find Voice application credentials you need on your [Sinch dashboard](https://dashboard.sinch.com/voice/apps)*): -- `id`: YOUR_Voice_Application_Id -- `secret`: YOUR_Voice_Application_Secret - -#### Webhook controller path -Located in `voice` section you can modify: -- `controller-path`: path the server will respond to. Default: /voice - -#### Server port -Located in `server` section: -- port: The port to be used for listening for incoming requests. Default: 8090 - -### Starting server locally - -Compile and run the application as server on your localhost. -```bash -mvn spring-boot:run -``` - -### Use ngrok to forward request to local server - -Forwarding request to same `8090` port used above: - -*Note: The `8090` value is coming from default config and can be changed (see [Server port](#Server port) configuration section)* - -```bash -ngrok http 8090 -``` - -ngrok output will contain output like the following: -``` -ngrok (Ctrl+C to quit) - -... -Forwarding https://0e64-78-117-86-140.ngrok-free.app -> http://localhost:8090 - -``` -The line -``` -Forwarding https://0e64-78-117-86-140.ngrok-free.app -> http://localhost:8090 -``` -Contains `https://0e64-78-117-86-140.ngrok-free.app` value. - -## Configure Voice application callback - -You have now a local web server responding to `/voice` path and `ngrok` instance running providing a bridge from `https://0e64-78-117-86-140.ngrok-free.app` onto local webserver. - -Last step is now to configure your dashboard to set Voice application callback to point towards your local webserver. - -The callback to be called by sinch will be in form of: ``/`` - -e.g. According to previous sample values: https://0e64-78-117-86-140.ngrok-free.app/voice - -1. Go to your Voice application configuration: [Sinch Voice Apps dashboard](https://dashboard.sinch.com/voice/apps/) -2. Edit the application setting related to the Application ID set from config file (see [Sinch credentials](#configure-application-settings)) -3. Fill `Callback URL` field with *https://0e64-78-117-86-140.ngrok-free.app/voice* - -You can now place a call to Sinch number attached to your Voice app (see [documentation](https://developers.sinch.com/docs/voice/getting-started/#3-assign-your-number) - -When calling your Sinch number attached to application, the Sinch platform will trigger an `Incoming Call Event (ICE)` toward your server your response will be served to the callee. \ No newline at end of file diff --git a/examples/tutorials/voice/handle-incoming-call/pom.xml b/examples/tutorials/voice/handle-incoming-call/pom.xml deleted file mode 100644 index 8a811136a..000000000 --- a/examples/tutorials/voice/handle-incoming-call/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - - org.springframework.boot - spring-boot-starter-parent - 3.2.5 - - - - com.sinch.sdk - sinch-sdk-java-sample-webhooks-app - 0.0.1-SNAPSHOT - Sinch Java SDK Handle Incoming Call Sample Application - Demo Project - - - [1.0.0,) - 21 - - - - - org.springframework.boot - spring-boot-starter - - - - org.springframework.boot - spring-boot-starter-web - - - - com.sinch.sdk - sinch-sdk-java - ${sinch.sdk.java.version} - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/App.java b/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/App.java deleted file mode 100644 index 195ae6025..000000000 --- a/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/App.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.mycompany.app; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class App { - - public static void main(String[] args) { - SpringApplication.run(App.class, args); - } -} diff --git a/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/Config.java b/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/Config.java deleted file mode 100644 index 8e5c046df..000000000 --- a/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/Config.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.mycompany.app; - -import com.sinch.sdk.SinchClient; -import com.sinch.sdk.domains.voice.VoiceService; -import com.sinch.sdk.models.Configuration; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; - -@org.springframework.context.annotation.Configuration -public class Config { - - @Value("${credentials.application.key}") - String applicationKey; - - @Value("${credentials.application.secret}") - String applicationSecret; - - @Value("${voice.controller-path}") - private String controllerPath; - - @Bean - public VoiceService voiceService() { - - var configuration = - Configuration.builder() - .setApplicationKey(applicationKey) - .setApplicationSecret(applicationSecret) - .build(); - - return new SinchClient(configuration).voice(); - } - - @Bean - String controllerPath() { - return controllerPath; - } -} diff --git a/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/WebhookController.java b/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/WebhookController.java deleted file mode 100644 index 55548e90d..000000000 --- a/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/WebhookController.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.mycompany.app; - -import com.sinch.sdk.domains.voice.VoiceService; -import com.sinch.sdk.domains.voice.models.webhooks.IncomingCallEvent; -import java.util.Map; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -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 -public class WebhookController { - - private final VoiceService voiceService; - private final WebhookService webhookService; - private final String controllerPath; - - @Autowired - public WebhookController( - VoiceService voiceService, WebhookService webhookService, String controllerPath) { - this.voiceService = voiceService; - this.webhookService = webhookService; - this.controllerPath = controllerPath; - } - - @PostMapping( - value = "#{controllerPath}", - consumes = MediaType.APPLICATION_JSON_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - public String voiceEvent(@RequestHeader Map headers, @RequestBody String body) { - - // ensure valid authentication before handling request - var validAuth = - voiceService - .webhooks() - .validateAuthenticatedRequest( - // The HTTP verb this controller is managing - "POST", - // The URI this path is managing - controllerPath, - // request headers - headers, - // request payload body - body); - - // token validation failed - if (!validAuth) { - throw new ResponseStatusException(HttpStatus.UNAUTHORIZED); - } - - // decode the payload request - var event = voiceService.webhooks().unserializeWebhooksEvent(body); - - if (!(event instanceof IncomingCallEvent)) { - return ""; - } - - // let business layer process the request - var response = webhookService.answered((IncomingCallEvent) event); - - return voiceService.webhooks().serializeWebhooksResponse(response); - } -} diff --git a/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/WebhookService.java b/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/WebhookService.java deleted file mode 100644 index 179108869..000000000 --- a/examples/tutorials/voice/handle-incoming-call/src/main/java/com/mycompany/app/WebhookService.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.mycompany.app; - -import com.sinch.sdk.domains.voice.models.svaml.ActionHangUp; -import com.sinch.sdk.domains.voice.models.svaml.InstructionSay; -import com.sinch.sdk.domains.voice.models.svaml.SVAMLControl; -import com.sinch.sdk.domains.voice.models.webhooks.IncomingCallEvent; -import java.util.Collections; -import java.util.logging.Logger; -import org.springframework.stereotype.Component; - -@Component -public class WebhookService { - - private static final Logger LOGGER = Logger.getLogger(WebhookService.class.getName()); - - public SVAMLControl answered(IncomingCallEvent event) { - - LOGGER.info( - "Incoming call from '%s' received for '%s' :".formatted(event.getCli(), event.getTo())); - - var hangupAction = ActionHangUp.builder().build(); - - var sayInstruction = - InstructionSay.builder() - .setText("Thank you for calling Sinch. This call will now end.") - .build(); - - return SVAMLControl.builder() - .setInstructions(Collections.singletonList(sayInstruction)) - .setAction(hangupAction) - .build(); - } -} diff --git a/examples/tutorials/voice/handle-incoming-call/src/main/resources/application.yaml b/examples/tutorials/voice/handle-incoming-call/src/main/resources/application.yaml deleted file mode 100644 index b9657be42..000000000 --- a/examples/tutorials/voice/handle-incoming-call/src/main/resources/application.yaml +++ /dev/null @@ -1,16 +0,0 @@ -# springboot related config file - -logging: - level: - com: INFO - -server: - port: 8090 - -credentials: - application: - key: 191585b9-6d7a-4660-8910-e5587fcce67f - secret: CEEvSif/2EqrJI5bUufERA== - -voice: - controller-path: /voice From 5e329fc5515e909c30706834b64494ad77ddde52 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Portier Date: Thu, 18 Dec 2025 15:37:52 +0100 Subject: [PATCH 2/4] feat (Snippets): Moving snippets from 'snippets' repository to 'examples' directory --- examples/compile.sh | 3 + .../.mvn/wrapper/maven-wrapper.properties | 19 ++ examples/snippets/README.md | 46 ++++ examples/snippets/compile.sh | 5 + examples/snippets/launcher | 20 ++ examples/snippets/mvnw | 259 ++++++++++++++++++ examples/snippets/mvnw.cmd | 149 ++++++++++ examples/snippets/pom.xml | 104 +++++++ .../src/main/java/conversation/README.md | 65 +++++ .../java/conversation/application/Create.java | 76 +++++ .../java/conversation/application/Delete.java | 50 ++++ .../java/conversation/application/Get.java | 51 ++++ .../java/conversation/application/List.java | 53 ++++ .../java/conversation/application/Update.java | 55 ++++ .../conversation/capability/Capability.java | 73 +++++ .../java/conversation/contact/Create.java | 73 +++++ .../java/conversation/contact/Delete.java | 49 ++++ .../main/java/conversation/contact/Get.java | 50 ++++ .../contact/GetChannelProfile.java | 65 +++++ .../main/java/conversation/contact/List.java | 52 ++++ .../main/java/conversation/contact/Merge.java | 55 ++++ .../java/conversation/contact/Update.java | 52 ++++ .../conversation/conversations/Create.java | 61 +++++ .../conversation/conversations/Delete.java | 49 ++++ .../java/conversation/conversations/Get.java | 50 ++++ .../conversations/InjectEvent.java | 81 ++++++ .../conversations/InjectMessage.java | 80 ++++++ .../java/conversation/conversations/List.java | 58 ++++ .../conversations/ListRecent.java | 61 +++++ .../conversations/StopActive.java | 49 ++++ .../conversation/conversations/Update.java | 54 ++++ .../main/java/conversation/events/Delete.java | 49 ++++ .../main/java/conversation/events/Get.java | 50 ++++ .../main/java/conversation/events/List.java | 56 ++++ .../main/java/conversation/events/Send.java | 74 +++++ .../java/conversation/messages/Delete.java | 49 ++++ .../main/java/conversation/messages/Get.java | 50 ++++ .../main/java/conversation/messages/List.java | 57 ++++ .../main/java/conversation/messages/Send.java | 88 ++++++ .../java/conversation/messages/Update.java | 56 ++++ .../conversation/templates/v1/Create.java | 62 +++++ .../conversation/templates/v1/Delete.java | 49 ++++ .../java/conversation/templates/v1/Get.java | 51 ++++ .../java/conversation/templates/v1/List.java | 50 ++++ .../conversation/templates/v1/Update.java | 65 +++++ .../conversation/templates/v2/Create.java | 61 +++++ .../conversation/templates/v2/Delete.java | 49 ++++ .../java/conversation/templates/v2/Get.java | 51 ++++ .../java/conversation/templates/v2/List.java | 49 ++++ .../templates/v2/ListTranslations.java | 55 ++++ .../conversation/templates/v2/Update.java | 70 +++++ .../conversation/transcoding/Transcode.java | 78 ++++++ .../java/conversation/webhooks/Create.java | 59 ++++ .../java/conversation/webhooks/Delete.java | 49 ++++ .../main/java/conversation/webhooks/Get.java | 50 ++++ .../main/java/conversation/webhooks/List.java | 52 ++++ .../java/conversation/webhooks/Update.java | 60 ++++ .../snippets/src/main/java/mailgun/README.md | 24 ++ .../messages/GetSendingQueuesStatus.java | 45 +++ .../java/mailgun/messages/GetStoredEmail.java | 46 ++++ .../mailgun/messages/PurgeSendingQueue.java | 45 +++ .../main/java/mailgun/messages/SendEmail.java | 63 +++++ .../java/mailgun/messages/SendMimeEmail.java | 96 +++++++ .../java/mailgun/templates/CopyVersion.java | 52 ++++ .../main/java/mailgun/templates/Create.java | 53 ++++ .../java/mailgun/templates/CreateVersion.java | 55 ++++ .../main/java/mailgun/templates/Delete.java | 45 +++ .../java/mailgun/templates/DeleteAll.java | 44 +++ .../java/mailgun/templates/DeleteVersion.java | 46 ++++ .../src/main/java/mailgun/templates/Get.java | 46 ++++ .../java/mailgun/templates/GetVersion.java | 48 ++++ .../src/main/java/mailgun/templates/List.java | 46 ++++ .../java/mailgun/templates/ListVersions.java | 48 ++++ .../main/java/mailgun/templates/Update.java | 49 ++++ .../java/mailgun/templates/UpdateVersion.java | 51 ++++ .../main/java/numbers/CheckAvailability.java | 46 ++++ .../numbers/DeprovisionEmergencyAddress.java | 43 +++ .../snippets/src/main/java/numbers/Get.java | 45 +++ .../java/numbers/GetEmergencyAddress.java | 45 +++ .../snippets/src/main/java/numbers/List.java | 55 ++++ .../numbers/ProvisionEmergencyAddress.java | 61 +++++ .../snippets/src/main/java/numbers/README.md | 25 ++ .../src/main/java/numbers/Release.java | 46 ++++ .../snippets/src/main/java/numbers/Rent.java | 58 ++++ .../src/main/java/numbers/RentAny.java | 64 +++++ .../numbers/SearchForAvailableNumbers.java | 60 ++++ .../src/main/java/numbers/Update.java | 50 ++++ .../numbers/ValidateEmergencyAddress.java | 61 +++++ .../src/main/java/numbers/callback/Get.java | 44 +++ .../main/java/numbers/callback/Update.java | 50 ++++ .../src/main/java/numbers/regions/List.java | 46 ++++ examples/snippets/src/main/java/sms/README.md | 30 ++ .../src/main/java/sms/batches/Cancel.java | 50 ++++ .../src/main/java/sms/batches/DryRun.java | 63 +++++ .../src/main/java/sms/batches/Get.java | 50 ++++ .../src/main/java/sms/batches/List.java | 45 +++ .../src/main/java/sms/batches/Replace.java | 59 ++++ .../src/main/java/sms/batches/Send.java | 63 +++++ .../sms/batches/SendDeliveryFeedback.java | 57 ++++ .../src/main/java/sms/batches/Update.java | 60 ++++ .../main/java/sms/deliveryReports/Get.java | 50 ++++ .../sms/deliveryReports/GetForNumber.java | 52 ++++ .../main/java/sms/deliveryReports/List.java | 45 +++ .../src/main/java/sms/groups/Create.java | 58 ++++ .../src/main/java/sms/groups/Delete.java | 49 ++++ .../src/main/java/sms/groups/Get.java | 50 ++++ .../src/main/java/sms/groups/List.java | 48 ++++ .../src/main/java/sms/groups/ListMembers.java | 51 ++++ .../src/main/java/sms/groups/Replace.java | 58 ++++ .../src/main/java/sms/groups/Update.java | 62 +++++ .../src/main/java/sms/inbounds/Get.java | 50 ++++ .../src/main/java/sms/inbounds/List.java | 45 +++ .../src/main/java/utils/Settings.java | 73 +++++ .../src/main/java/verification/README.md | 14 + .../java/verification/report/ReportById.java | 54 ++++ .../verification/report/ReportByIdentity.java | 54 ++++ .../main/java/verification/start/Start.java | 53 ++++ .../java/verification/status/GetById.java | 46 ++++ .../verification/status/GetByIdentity.java | 54 ++++ .../verification/status/GetByReference.java | 49 ++++ .../snippets/src/main/java/voice/README.md | 23 ++ .../voice/applications/AssignNumbers.java | 56 ++++ .../voice/applications/GetCallbackUrls.java | 42 +++ .../java/voice/applications/ListNumbers.java | 44 +++ .../voice/applications/UnAssignNumber.java | 52 ++++ .../applications/UpdateCallbackUrls.java | 51 ++++ .../src/main/java/voice/callouts/Call.java | 53 ++++ .../src/main/java/voice/calls/Get.java | 45 +++ .../java/voice/calls/ManageWithCallLeg.java | 65 +++++ .../src/main/java/voice/calls/Update.java | 60 ++++ .../src/main/java/voice/conferences/Call.java | 59 ++++ .../src/main/java/voice/conferences/Get.java | 45 +++ .../main/java/voice/conferences/KickAll.java | 44 +++ .../voice/conferences/KickParticipant.java | 49 ++++ .../voice/conferences/ManageParticipant.java | 62 +++++ .../src/main/resources/config.properties | 16 ++ .../src/main/resources/logging.properties | 7 + 137 files changed, 7422 insertions(+) create mode 100755 examples/compile.sh create mode 100644 examples/snippets/.mvn/wrapper/maven-wrapper.properties create mode 100644 examples/snippets/README.md create mode 100755 examples/snippets/compile.sh create mode 100755 examples/snippets/launcher create mode 100755 examples/snippets/mvnw create mode 100644 examples/snippets/mvnw.cmd create mode 100644 examples/snippets/pom.xml create mode 100644 examples/snippets/src/main/java/conversation/README.md create mode 100644 examples/snippets/src/main/java/conversation/application/Create.java create mode 100644 examples/snippets/src/main/java/conversation/application/Delete.java create mode 100644 examples/snippets/src/main/java/conversation/application/Get.java create mode 100644 examples/snippets/src/main/java/conversation/application/List.java create mode 100644 examples/snippets/src/main/java/conversation/application/Update.java create mode 100644 examples/snippets/src/main/java/conversation/capability/Capability.java create mode 100644 examples/snippets/src/main/java/conversation/contact/Create.java create mode 100644 examples/snippets/src/main/java/conversation/contact/Delete.java create mode 100644 examples/snippets/src/main/java/conversation/contact/Get.java create mode 100644 examples/snippets/src/main/java/conversation/contact/GetChannelProfile.java create mode 100644 examples/snippets/src/main/java/conversation/contact/List.java create mode 100644 examples/snippets/src/main/java/conversation/contact/Merge.java create mode 100644 examples/snippets/src/main/java/conversation/contact/Update.java create mode 100644 examples/snippets/src/main/java/conversation/conversations/Create.java create mode 100644 examples/snippets/src/main/java/conversation/conversations/Delete.java create mode 100644 examples/snippets/src/main/java/conversation/conversations/Get.java create mode 100644 examples/snippets/src/main/java/conversation/conversations/InjectEvent.java create mode 100644 examples/snippets/src/main/java/conversation/conversations/InjectMessage.java create mode 100644 examples/snippets/src/main/java/conversation/conversations/List.java create mode 100644 examples/snippets/src/main/java/conversation/conversations/ListRecent.java create mode 100644 examples/snippets/src/main/java/conversation/conversations/StopActive.java create mode 100644 examples/snippets/src/main/java/conversation/conversations/Update.java create mode 100644 examples/snippets/src/main/java/conversation/events/Delete.java create mode 100644 examples/snippets/src/main/java/conversation/events/Get.java create mode 100644 examples/snippets/src/main/java/conversation/events/List.java create mode 100644 examples/snippets/src/main/java/conversation/events/Send.java create mode 100644 examples/snippets/src/main/java/conversation/messages/Delete.java create mode 100644 examples/snippets/src/main/java/conversation/messages/Get.java create mode 100644 examples/snippets/src/main/java/conversation/messages/List.java create mode 100644 examples/snippets/src/main/java/conversation/messages/Send.java create mode 100644 examples/snippets/src/main/java/conversation/messages/Update.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v1/Create.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v1/Delete.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v1/Get.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v1/List.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v1/Update.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v2/Create.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v2/Delete.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v2/Get.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v2/List.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v2/ListTranslations.java create mode 100644 examples/snippets/src/main/java/conversation/templates/v2/Update.java create mode 100644 examples/snippets/src/main/java/conversation/transcoding/Transcode.java create mode 100644 examples/snippets/src/main/java/conversation/webhooks/Create.java create mode 100644 examples/snippets/src/main/java/conversation/webhooks/Delete.java create mode 100644 examples/snippets/src/main/java/conversation/webhooks/Get.java create mode 100644 examples/snippets/src/main/java/conversation/webhooks/List.java create mode 100644 examples/snippets/src/main/java/conversation/webhooks/Update.java create mode 100644 examples/snippets/src/main/java/mailgun/README.md create mode 100644 examples/snippets/src/main/java/mailgun/messages/GetSendingQueuesStatus.java create mode 100644 examples/snippets/src/main/java/mailgun/messages/GetStoredEmail.java create mode 100644 examples/snippets/src/main/java/mailgun/messages/PurgeSendingQueue.java create mode 100644 examples/snippets/src/main/java/mailgun/messages/SendEmail.java create mode 100644 examples/snippets/src/main/java/mailgun/messages/SendMimeEmail.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/CopyVersion.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/Create.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/CreateVersion.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/Delete.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/DeleteAll.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/DeleteVersion.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/Get.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/GetVersion.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/List.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/ListVersions.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/Update.java create mode 100644 examples/snippets/src/main/java/mailgun/templates/UpdateVersion.java create mode 100644 examples/snippets/src/main/java/numbers/CheckAvailability.java create mode 100644 examples/snippets/src/main/java/numbers/DeprovisionEmergencyAddress.java create mode 100644 examples/snippets/src/main/java/numbers/Get.java create mode 100644 examples/snippets/src/main/java/numbers/GetEmergencyAddress.java create mode 100644 examples/snippets/src/main/java/numbers/List.java create mode 100644 examples/snippets/src/main/java/numbers/ProvisionEmergencyAddress.java create mode 100644 examples/snippets/src/main/java/numbers/README.md create mode 100644 examples/snippets/src/main/java/numbers/Release.java create mode 100644 examples/snippets/src/main/java/numbers/Rent.java create mode 100644 examples/snippets/src/main/java/numbers/RentAny.java create mode 100644 examples/snippets/src/main/java/numbers/SearchForAvailableNumbers.java create mode 100644 examples/snippets/src/main/java/numbers/Update.java create mode 100644 examples/snippets/src/main/java/numbers/ValidateEmergencyAddress.java create mode 100644 examples/snippets/src/main/java/numbers/callback/Get.java create mode 100644 examples/snippets/src/main/java/numbers/callback/Update.java create mode 100644 examples/snippets/src/main/java/numbers/regions/List.java create mode 100644 examples/snippets/src/main/java/sms/README.md create mode 100644 examples/snippets/src/main/java/sms/batches/Cancel.java create mode 100644 examples/snippets/src/main/java/sms/batches/DryRun.java create mode 100644 examples/snippets/src/main/java/sms/batches/Get.java create mode 100644 examples/snippets/src/main/java/sms/batches/List.java create mode 100644 examples/snippets/src/main/java/sms/batches/Replace.java create mode 100644 examples/snippets/src/main/java/sms/batches/Send.java create mode 100644 examples/snippets/src/main/java/sms/batches/SendDeliveryFeedback.java create mode 100644 examples/snippets/src/main/java/sms/batches/Update.java create mode 100644 examples/snippets/src/main/java/sms/deliveryReports/Get.java create mode 100644 examples/snippets/src/main/java/sms/deliveryReports/GetForNumber.java create mode 100644 examples/snippets/src/main/java/sms/deliveryReports/List.java create mode 100644 examples/snippets/src/main/java/sms/groups/Create.java create mode 100644 examples/snippets/src/main/java/sms/groups/Delete.java create mode 100644 examples/snippets/src/main/java/sms/groups/Get.java create mode 100644 examples/snippets/src/main/java/sms/groups/List.java create mode 100644 examples/snippets/src/main/java/sms/groups/ListMembers.java create mode 100644 examples/snippets/src/main/java/sms/groups/Replace.java create mode 100644 examples/snippets/src/main/java/sms/groups/Update.java create mode 100644 examples/snippets/src/main/java/sms/inbounds/Get.java create mode 100644 examples/snippets/src/main/java/sms/inbounds/List.java create mode 100644 examples/snippets/src/main/java/utils/Settings.java create mode 100644 examples/snippets/src/main/java/verification/README.md create mode 100644 examples/snippets/src/main/java/verification/report/ReportById.java create mode 100644 examples/snippets/src/main/java/verification/report/ReportByIdentity.java create mode 100644 examples/snippets/src/main/java/verification/start/Start.java create mode 100644 examples/snippets/src/main/java/verification/status/GetById.java create mode 100644 examples/snippets/src/main/java/verification/status/GetByIdentity.java create mode 100644 examples/snippets/src/main/java/verification/status/GetByReference.java create mode 100644 examples/snippets/src/main/java/voice/README.md create mode 100644 examples/snippets/src/main/java/voice/applications/AssignNumbers.java create mode 100644 examples/snippets/src/main/java/voice/applications/GetCallbackUrls.java create mode 100644 examples/snippets/src/main/java/voice/applications/ListNumbers.java create mode 100644 examples/snippets/src/main/java/voice/applications/UnAssignNumber.java create mode 100644 examples/snippets/src/main/java/voice/applications/UpdateCallbackUrls.java create mode 100644 examples/snippets/src/main/java/voice/callouts/Call.java create mode 100644 examples/snippets/src/main/java/voice/calls/Get.java create mode 100644 examples/snippets/src/main/java/voice/calls/ManageWithCallLeg.java create mode 100644 examples/snippets/src/main/java/voice/calls/Update.java create mode 100644 examples/snippets/src/main/java/voice/conferences/Call.java create mode 100644 examples/snippets/src/main/java/voice/conferences/Get.java create mode 100644 examples/snippets/src/main/java/voice/conferences/KickAll.java create mode 100644 examples/snippets/src/main/java/voice/conferences/KickParticipant.java create mode 100644 examples/snippets/src/main/java/voice/conferences/ManageParticipant.java create mode 100644 examples/snippets/src/main/resources/config.properties create mode 100644 examples/snippets/src/main/resources/logging.properties diff --git a/examples/compile.sh b/examples/compile.sh new file mode 100755 index 000000000..7b868c724 --- /dev/null +++ b/examples/compile.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +(cd snippets && ./compile.sh) || exit 1 diff --git a/examples/snippets/.mvn/wrapper/maven-wrapper.properties b/examples/snippets/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 000000000..d58dfb70b --- /dev/null +++ b/examples/snippets/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/examples/snippets/README.md b/examples/snippets/README.md new file mode 100644 index 000000000..915dba61c --- /dev/null +++ b/examples/snippets/README.md @@ -0,0 +1,46 @@ +# sinch-sdk-java-snippets +Sinch Java SDK Code Snippets Repository + +This repository contains code snippets related to [Sinch JAVA SDK](https://github.com/sinch/sinch-sdk-java) + +Snippets can be used as starting point to support Sinch products from your own application. + +## Requirements +- JDK 8 or later +- [Sinch account](https://dashboard.sinch.com) + +## Snippet execution +Launcher helpers are provided to execute snippets and minimize time to setup your first Java application based onto Sinch SDK + +### Snippets execution settings +When executing a snippet you will need to provide certain information about your Sinch account (credentials, Sinch virtual phone number, ...) + +This settings can be placed directly in the snippet source or you can choose to edit the [configuration file](./src/main/resources/config.properties), in which case the settings will be shared and used automatically by each snippet. + +### Linux platform +Launch script is [here](./launcher) + +Execution: +```shell +cd snippets +launcher +``` +Where `SNIPPET_SOURCE_PATH` is path to snippet source (see [Available Snippets](#available-snippets) for available snippets) + +e.g.: +```shell +launcher numbers/SearchForAvailableNumbers +... +launcher regions/List + +``` + +## Available Snippets + +- Conversation: [README.md](src/main/java/conversation/README.md) +- Mailgun: [README.md](src/main/java/mailgun/README.md) +- Numbers: [README.md](src/main/java/numbers/README.md) +- SMS: [README.md](src/main/java/sms/README.md) +- Verification: [README.md](src/main/java/verification/README.md) +- Voice: [README.md](src/main/java/voice/README.md) + diff --git a/examples/snippets/compile.sh b/examples/snippets/compile.sh new file mode 100755 index 000000000..c121b1334 --- /dev/null +++ b/examples/snippets/compile.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +mvn clean spotless:apply || exit 1 + +./mvnw clean compile || exit 1 diff --git a/examples/snippets/launcher b/examples/snippets/launcher new file mode 100755 index 000000000..b26483116 --- /dev/null +++ b/examples/snippets/launcher @@ -0,0 +1,20 @@ +#!/bin/sh + +SNIPPET=$1 + +echo "Running \"${SNIPPET}\" snippet" + +# change +# directory separator by package separator +# supress '.java' suffix if any +CLSS=$(echo "${SNIPPET}" | sed 's/\//./g;s/\.java$//g') + +./mvnw \ + -q \ + clean \ + package \ + exec:java \ + -Djava.util.logging.config.file=src/main/resources/logging.properties \ + -Dexec.mainClass="$CLSS" \ + || exit 1 + diff --git a/examples/snippets/mvnw b/examples/snippets/mvnw new file mode 100755 index 000000000..19529ddf8 --- /dev/null +++ b/examples/snippets/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/examples/snippets/mvnw.cmd b/examples/snippets/mvnw.cmd new file mode 100644 index 000000000..b150b91ed --- /dev/null +++ b/examples/snippets/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/examples/snippets/pom.xml b/examples/snippets/pom.xml new file mode 100644 index 000000000..2f0a1d2e6 --- /dev/null +++ b/examples/snippets/pom.xml @@ -0,0 +1,104 @@ + + + 4.0.0 + + com.sinch.sdk.archetypes + sinch-java-sdk-client-snippets + 1.0-SNAPSHOT + jar + Sinch Java SDK Client Snippets + + + [1.0.0,) + 8 + 8 + 3.13.0 + UTF-8 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + src + + + + + + com.diffplug.spotless + spotless-maven-plugin + 2.40.0 + + + + + + **/*.java + + + + 1.22.0 + true + + + + + true + 2 + + + + + + + + + verify + + check + + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.5.0 + + + + exec + + + + + + + + + + + + + + com.sinch.sdk + sinch-sdk-java + ${sinch.sdk.java.version} + + + + org.slf4j + slf4j-jdk14 + 2.0.9 + + + + diff --git a/examples/snippets/src/main/java/conversation/README.md b/examples/snippets/src/main/java/conversation/README.md new file mode 100644 index 000000000..063f5ef5b --- /dev/null +++ b/examples/snippets/src/main/java/conversation/README.md @@ -0,0 +1,65 @@ +# Conversation snippets +Sinch Java SDK Code Snippets Repository for Conversation APIs + +See main [README.md](../../../../README.md) for how to execute snippets + +- Messages + - [conversation/messages/Send](./messages/Send.java) + - [conversation/messages/Update](./messages/Update.java) + - [conversation/messages/Get](./messages/Get.java) + - [conversation/messages/Delete](./messages/Delete.java) + - [conversation/messages/List](./messages/List.java) +- Application + - [conversation/application/List](./application/List.java) + - [conversation/application/Create](./application/Create.java) + - [conversation/application/Get](./application/Get.java) + - [conversation/application/Delete](./application/Delete.java) + - [conversation/application/Update](./application/Update.java) +- Contact + - [conversation/contact/List](./contact/List.java) + - [conversation/contact/Create](./contact/Create.java) + - [conversation/contact/Get](./contact/Get.java) + - [conversation/contact/Delete](./contact/Delete.java) + - [conversation/contact/Update](./contact/Update.java) + - [conversation/contact/Merge](./contact/Merge.java) + - [conversation/contact/GetChannelProfile](./contact/GetChannelProfile.java) +- Conversation + - [conversation/conversations/List](./conversations/List.java) + - [conversation/conversations/Create](./conversations/Create.java) + - [conversation/conversations/Get](./conversations/Get.java) + - [conversation/conversations/Delete](./conversations/Delete.java) + - [conversation/conversations/Update](./conversations/Update.java) + - [conversation/conversations/ListRecent](./conversations/ListRecent.java) + - [conversation/conversations/InjectEvent](./conversations/InjectEvent.java) + - [conversation/conversations/StopActive](./conversations/StopActive.java) + - [conversation/conversations/InjectMessage](./conversations/InjectMessage.java) +- Events + - [conversation/events/Send](./events/Send.java) + - [conversation/events/Get](./events/Get.java) + - [conversation/events/Delete](./events/Delete.java) + - [conversation/events/List](./events/List.java) +- Transcoding + - [conversation/transcoding/Transcode](./transcoding/Transcode.java) +- Capability + - [conversation/capability/Capability](./capability/Capability.java) +- Webhooks + - [conversation/webhooks/List](./webhooks/List.java) + - [conversation/webhooks/Create](./webhooks/Create.java) + - [conversation/webhooks/Get](./webhooks/Get.java) + - [conversation/webhooks/Update](./webhooks/Update.java) + - [conversation/webhooks/Delete](./webhooks/Delete.java) + +- Templates + - V1 + - [conversation/templates/v1/List](./templates/v1/List.java) + - [conversation/templates/v1/Create](./templates/v1/Create.java) + - [conversation/templates/v1/Update](./templates/v1/Update.java) + - [conversation/templates/v1/Get](./templates/v1/Get.java) + - [conversation/templates/v1/Delete](./templates/v1/Delete.java) + - V2 + - [conversation/templates/v2/List](./templates/v2/List.java) + - [conversation/templates/v2/Create](./templates/v2/Create.java) + - [conversation/templates/v2/ListTranslations](./templates/v2/ListTranslations.java) + - [conversation/templates/v2/Update](./templates/v2/Update.java) + - [conversation/templates/v2/Get](./templates/v2/Get.java) + - [conversation/templates/v2/Delete](./templates/v2/Delete.java) diff --git a/examples/snippets/src/main/java/conversation/application/Create.java b/examples/snippets/src/main/java/conversation/application/Create.java new file mode 100644 index 000000000..175312cbc --- /dev/null +++ b/examples/snippets/src/main/java/conversation/application/Create.java @@ -0,0 +1,76 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.application; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.AppService; +import com.sinch.sdk.domains.conversation.models.v1.app.request.AppCreateRequest; +import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; +import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentials; +import com.sinch.sdk.domains.conversation.models.v1.credentials.ConversationChannelCredentialsBuilderFactory; +import com.sinch.sdk.domains.conversation.models.v1.credentials.StaticBearerCredentials; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Logger; +import utils.Settings; + +public class Create { + + private static final Logger LOGGER = Logger.getLogger(Create.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The service plan ID and API token for the SMS channel + String smsServicePlanId = Settings.getServicePlanId().orElse("SMS_SERVICE_PLAN_ID"); + String smsApiToken = ("SMS_API_TOKEN"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + AppService appService = client.conversation().v1().app(); + + LOGGER.info( + String.format( + "Create conversation application with SMS channel for service plan ID '%s'", + smsServicePlanId)); + + ConversationChannelCredentials smsChannel = + ConversationChannelCredentialsBuilderFactory.sms( + StaticBearerCredentials.builder() + .setClaimedIdentity(smsServicePlanId) + .setToken(smsApiToken) + .build()) + .build(); + + List channelCredentials = Arrays.asList(smsChannel); + + AppCreateRequest request = + AppCreateRequest.builder() + .setChannelCredentials(channelCredentials) + .setDisplayName("Created from Java SDK snippet") + .build(); + + AppResponse response = appService.create(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/application/Delete.java b/examples/snippets/src/main/java/conversation/application/Delete.java new file mode 100644 index 000000000..541c352d3 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/application/Delete.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.application; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.AppService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the Conversation App to delete + String conversationApplicationId = "CONVERSATION_APP_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + AppService appService = client.conversation().v1().app(); + + LOGGER.info( + String.format("Delete conversation application with ID '%s'", conversationApplicationId)); + + appService.delete(conversationApplicationId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/application/Get.java b/examples/snippets/src/main/java/conversation/application/Get.java new file mode 100644 index 000000000..a86039670 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/application/Get.java @@ -0,0 +1,51 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.application; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.AppService; +import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the Conversation App to retrieve + String conversationApplicationId = "CONVERSATION_APP_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + AppService appService = client.conversation().v1().app(); + + LOGGER.info( + String.format("Get details for application with ID '%s'", conversationApplicationId)); + + AppResponse response = appService.get(conversationApplicationId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/application/List.java b/examples/snippets/src/main/java/conversation/application/List.java new file mode 100644 index 000000000..5e969c3e2 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/application/List.java @@ -0,0 +1,53 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.application; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.AppService; +import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Collection; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + AppService appService = client.conversation().v1().app(); + + LOGGER.info("List conversations"); + + Collection result = appService.list(); + + LOGGER.info("Response: "); + + result + .iterator() + .forEachRemaining( + f -> LOGGER.info(String.format("- %s (%s) : %s", f.getDisplayName(), f.getId(), f))); + } +} diff --git a/examples/snippets/src/main/java/conversation/application/Update.java b/examples/snippets/src/main/java/conversation/application/Update.java new file mode 100644 index 000000000..52cffaa72 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/application/Update.java @@ -0,0 +1,55 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.application; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.AppService; +import com.sinch.sdk.domains.conversation.models.v1.app.request.AppUpdateRequest; +import com.sinch.sdk.domains.conversation.models.v1.app.response.AppResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the Conversation App to update + String conversationApplicationId = "CONVERSATION_APP_ID"; + // New name for the Conversation App + String updatedAppName = "Updated from Java SDK snippet"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + AppService appService = client.conversation().v1().app(); + + LOGGER.info(String.format("Update application with ID '%s'", conversationApplicationId)); + + AppUpdateRequest parameters = AppUpdateRequest.builder().setDisplayName(updatedAppName).build(); + + AppResponse result = appService.update(conversationApplicationId, parameters); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/capability/Capability.java b/examples/snippets/src/main/java/conversation/capability/Capability.java new file mode 100644 index 000000000..52a3e4e45 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/capability/Capability.java @@ -0,0 +1,73 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.capability; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.CapabilityService; +import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentities; +import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentity; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.Recipient; +import com.sinch.sdk.domains.conversation.models.v1.capability.request.QueryCapabilityRequest; +import com.sinch.sdk.domains.conversation.models.v1.capability.response.QueryCapabilityResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Capability { + + private static final Logger LOGGER = Logger.getLogger(Capability.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the Conversation App where the recipient channel is configured + String conversationApplicationId = "CONVERSATION_APP_ID"; + // The channel to look up the capabilities for + ConversationChannel recipientChannel = ConversationChannel.SMS; + // The phone number of the recipient to look up the capabilities for + String recipientPhoneNumber = "RECIPIENT_PHONE_NUMBER"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + CapabilityService capabilityService = client.conversation().v1().capability(); + + Recipient channelRecipients = + ChannelRecipientIdentities.of( + ChannelRecipientIdentity.builder() + .setChannel(recipientChannel) + .setIdentity(recipientPhoneNumber) + .build()); + + QueryCapabilityRequest request = + QueryCapabilityRequest.builder() + .setAppId(conversationApplicationId) + .setRecipient(channelRecipients) + .build(); + + LOGGER.info( + String.format("Trigger capability lookup for phone number '%s'", recipientPhoneNumber)); + + QueryCapabilityResponse response = capabilityService.lookup(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/contact/Create.java b/examples/snippets/src/main/java/conversation/contact/Create.java new file mode 100644 index 000000000..bf7adae1b --- /dev/null +++ b/examples/snippets/src/main/java/conversation/contact/Create.java @@ -0,0 +1,73 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.contact; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.domains.conversation.models.v1.contact.ContactLanguage; +import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactCreateRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Arrays; +import java.util.logging.Logger; +import utils.Settings; + +public class Create { + + private static final Logger LOGGER = Logger.getLogger(Create.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The channel to use for the contact + ConversationChannel recipientChannel = ConversationChannel.SMS; + // The phone number of the contact to create + String recipientPhoneNumber = "RECIPIENT_PHONE_NUMBER"; + // The display name of the contact to create + String contactDisplayName = "Created from Java SDK snippet"; + // The language of the contact to create + ContactLanguage contactLanguage = ContactLanguage.FR; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ContactService contactService = client.conversation().v1().contact(); + + LOGGER.info("Create contact"); + + ContactCreateRequest contact = + ContactCreateRequest.builder() + .setChannelIdentities( + Arrays.asList( + ChannelIdentity.builder() + .setChannel(recipientChannel) + .setIdentity(recipientPhoneNumber) + .build())) + .setDisplayName(contactDisplayName) + .setLanguage(contactLanguage) + .build(); + + Contact result = contactService.create(contact); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/contact/Delete.java b/examples/snippets/src/main/java/conversation/contact/Delete.java new file mode 100644 index 000000000..41aab2992 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/contact/Delete.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.contact; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the contact to delete + String conversationContactId = "CONTACT_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ContactService contactService = client.conversation().v1().contact(); + + LOGGER.info(String.format("Delete conversation contact with ID '%s'", conversationContactId)); + + contactService.delete(conversationContactId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/contact/Get.java b/examples/snippets/src/main/java/conversation/contact/Get.java new file mode 100644 index 000000000..0ab543755 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/contact/Get.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.contact; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the contact to retrieve + String conversationContactId = "CONTACT_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ContactService contactService = client.conversation().v1().contact(); + + LOGGER.info(String.format("Get details for contact with ID '%s'", conversationContactId)); + + Contact result = contactService.get(conversationContactId); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/contact/GetChannelProfile.java b/examples/snippets/src/main/java/conversation/contact/GetChannelProfile.java new file mode 100644 index 000000000..0c7b95d06 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/contact/GetChannelProfile.java @@ -0,0 +1,65 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.contact; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactGetChannelProfileByContactIdRequest; +import com.sinch.sdk.domains.conversation.models.v1.contact.request.GetChannelProfileConversationChannel; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class GetChannelProfile { + + private static final Logger LOGGER = Logger.getLogger(GetChannelProfile.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the Conversation application the contact belongs to + String conversationApplicationId = "APPLICATION_ID"; + // The ID of the contact to retrieve the channel profile for + String conversationContactId = "CONTACT_ID"; + // The channel associated with the contact + GetChannelProfileConversationChannel conversationChannel = + GetChannelProfileConversationChannel.MESSENGER; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ContactService contactService = client.conversation().v1().contact(); + + ContactGetChannelProfileByContactIdRequest parametersByContactId = + ContactGetChannelProfileByContactIdRequest.builder() + .setAppId(conversationApplicationId) + .setChannel(conversationChannel) + .setContactId(conversationContactId) + .build(); + + LOGGER.info( + String.format( + "Get MESSENGER channel profile for contact with ID '%s'", conversationContactId)); + + String result = contactService.getChannelProfileByContactId(parametersByContactId); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/contact/List.java b/examples/snippets/src/main/java/conversation/contact/List.java new file mode 100644 index 000000000..281d5279e --- /dev/null +++ b/examples/snippets/src/main/java/conversation/contact/List.java @@ -0,0 +1,52 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.contact; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.domains.conversation.models.v1.contact.request.ContactListRequest; +import com.sinch.sdk.domains.conversation.models.v1.contact.response.ContactListResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ContactService contactService = client.conversation().v1().contact(); + + LOGGER.info("List contacts"); + + ContactListRequest request = ContactListRequest.builder().setPageSize(20).build(); + + ContactListResponse response = contactService.list(request); + + LOGGER.info("Response: "); + + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/conversation/contact/Merge.java b/examples/snippets/src/main/java/conversation/contact/Merge.java new file mode 100644 index 000000000..b62f122cb --- /dev/null +++ b/examples/snippets/src/main/java/conversation/contact/Merge.java @@ -0,0 +1,55 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.contact; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Merge { + + private static final Logger LOGGER = Logger.getLogger(Merge.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the contact to merge from (the source contact) + String sourceContactId = "SOURCE_CONTACT_ID"; + // The ID of the contact to merge into (the destination contact) + String destinationContactId = "DESTINATION_CONTACT_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ContactService contactService = client.conversation().v1().contact(); + + LOGGER.info( + String.format( + "Merge contact with ID '%s' onto contact with ID '%s'", + sourceContactId, destinationContactId)); + + Contact result = contactService.mergeContact(destinationContactId, sourceContactId); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/contact/Update.java b/examples/snippets/src/main/java/conversation/contact/Update.java new file mode 100644 index 000000000..a21b24a05 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/contact/Update.java @@ -0,0 +1,52 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.contact; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ContactService; +import com.sinch.sdk.domains.conversation.models.v1.contact.Contact; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the contact to update + String conversationContactId = "CONTACT_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ContactService contactService = client.conversation().v1().contact(); + + LOGGER.info(String.format("Update contact with ID '%s'", conversationContactId)); + + Contact contact = Contact.builder().setDisplayName("updated from Java SDK snippet").build(); + + Contact result = contactService.update(conversationContactId, contact); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/conversations/Create.java b/examples/snippets/src/main/java/conversation/conversations/Create.java new file mode 100644 index 000000000..55c46605c --- /dev/null +++ b/examples/snippets/src/main/java/conversation/conversations/Create.java @@ -0,0 +1,61 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.conversations; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.conversation.request.CreateConversationRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Create { + + private static final Logger LOGGER = Logger.getLogger(Create.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the application to create the conversation in + String conversationApplicationId = "APPLICATION_ID"; + // The ID of the contact to create the conversation with + String conversationContactId = "CONTACT_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConversationsService conversationsService = client.conversation().v1().conversations(); + + CreateConversationRequest request = + CreateConversationRequest.builder() + .setAppId(conversationApplicationId) + .setContactId(conversationContactId) + .build(); + + LOGGER.info( + String.format( + "Create conversation for applicatoin with ID '%s'", conversationApplicationId)); + + Conversation response = conversationsService.create(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/conversations/Delete.java b/examples/snippets/src/main/java/conversation/conversations/Delete.java new file mode 100644 index 000000000..2add75b15 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/conversations/Delete.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.conversations; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation to delete + String conversationId = "CONVERSATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConversationsService conversationsService = client.conversation().v1().conversations(); + + LOGGER.info(String.format("Delete conversation with ID '%s'", conversationId)); + + conversationsService.delete(conversationId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/conversations/Get.java b/examples/snippets/src/main/java/conversation/conversations/Get.java new file mode 100644 index 000000000..5d9edaa21 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/conversations/Get.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.conversations; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation to retrieve + String conversationId = "CONVERSATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConversationsService conversationsService = client.conversation().v1().conversations(); + + LOGGER.info(String.format("Get information for conversation with ID '%s'", conversationId)); + + Conversation response = conversationsService.get(conversationId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/conversations/InjectEvent.java b/examples/snippets/src/main/java/conversation/conversations/InjectEvent.java new file mode 100644 index 000000000..c3977c8c1 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/conversations/InjectEvent.java @@ -0,0 +1,81 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.conversations; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.ProcessingMode; +import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectEventRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversation.response.InjectEventResponse; +import com.sinch.sdk.domains.conversation.models.v1.events.AppEvent; +import com.sinch.sdk.domains.conversation.models.v1.events.types.GenericEvent; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Logger; +import utils.Settings; + +public class InjectEvent { + + private static final Logger LOGGER = Logger.getLogger(InjectEvent.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation to inject the event into + String conversationId = "CONVERSATION_ID"; + // The channel to use for the recipient + ConversationChannel recipientChannel = ConversationChannel.SMS; + // The identity of the recipient (e.g. phone number for SMS) + String recipientPhoneNumber = "RECIPIENT_PHONE_NUMBER"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConversationsService conversationsService = client.conversation().v1().conversations(); + + Map map = new HashMap<>(); + map.put("a property key", "a property value"); + + AppEvent event = GenericEvent.builder().setPayload(map).build(); + + InjectEventRequest request = + InjectEventRequest.builder() + .setAcceptTime(Instant.now()) + .setAppEvent(event) + .setChannelIdentity( + ChannelIdentity.builder() + .setChannel(recipientChannel) + .setIdentity(recipientPhoneNumber) + .build()) + .setConversationId(conversationId) + .setProcessingMode(ProcessingMode.CONVERSATION) + .build(); + + LOGGER.info("Inject event request: " + request); + + InjectEventResponse response = conversationsService.injectEvent(conversationId, request); + + LOGGER.info("Inject event response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/conversations/InjectMessage.java b/examples/snippets/src/main/java/conversation/conversations/InjectMessage.java new file mode 100644 index 000000000..da0e78f46 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/conversations/InjectMessage.java @@ -0,0 +1,80 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.conversations; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.domains.conversation.models.v1.ChannelIdentity; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.ConversationDirection; +import com.sinch.sdk.domains.conversation.models.v1.conversation.request.InjectMessageRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.time.Instant; +import java.util.logging.Logger; +import utils.Settings; + +public class InjectMessage { + + private static final Logger LOGGER = Logger.getLogger(InjectMessage.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation to inject the message into + String conversationId = "CONVERSATION_ID"; + // The ID of the contact to inject the message into + String conversationContactId = "CONTACT_ID"; + // The channel to use for the recipient + ConversationChannel recipientChannel = ConversationChannel.SMS; + // The phone number of the recipient in E.164 format + String recipientPhoneNumber = "RECIPIENT_PHONE_NUMBER"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConversationsService conversationsService = client.conversation().v1().conversations(); + + AppMessage appMessage = + AppMessage.builder() + .setBody(TextMessage.builder().setText("Text from Inject AppMessage").build()) + .build(); + + InjectMessageRequest request = + InjectMessageRequest.builder() + .setContactId(conversationContactId) + .setBody(appMessage) + .setChannelIdentity( + ChannelIdentity.builder() + .setChannel(recipientChannel) + .setIdentity(recipientPhoneNumber) + .build()) + .setDirection(ConversationDirection.TO_CONTACT) + .setAcceptTime(Instant.now()) + .build(); + + LOGGER.info(String.format("Inject message to conversation with ID '%s'", conversationId)); + + conversationsService.injectMessage(conversationId, request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/conversations/List.java b/examples/snippets/src/main/java/conversation/conversations/List.java new file mode 100644 index 000000000..17f96cca3 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/conversations/List.java @@ -0,0 +1,58 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.conversations; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the application to list conversations for + String conversationApplicationId = "APPLICATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConversationsService conversationsService = client.conversation().v1().conversations(); + + LOGGER.info( + String.format( + "List conversations for application with ID '%s'", conversationApplicationId)); + + ConversationsListRequest request = + ConversationsListRequest.builder().setAppId(conversationApplicationId).build(); + + ConversationsListResponse response = conversationsService.list(request); + + LOGGER.info("Response:"); + + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/conversation/conversations/ListRecent.java b/examples/snippets/src/main/java/conversation/conversations/ListRecent.java new file mode 100644 index 000000000..2a7fe9746 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/conversations/ListRecent.java @@ -0,0 +1,61 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.conversations; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.domains.conversation.models.v1.conversation.request.ConversationsListRecentRequest; +import com.sinch.sdk.domains.conversation.models.v1.conversation.response.ConversationsListRecentResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class ListRecent { + + private static final Logger LOGGER = Logger.getLogger(ListRecent.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the application to list recent conversations for + String conversationApplicationId = "APPLICATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConversationsService conversationsService = client.conversation().v1().conversations(); + + LOGGER.info( + String.format( + "List recent conversations for application with ID '%s'", conversationApplicationId)); + + ConversationsListRecentRequest request = + ConversationsListRecentRequest.builder() + .setOnlyActive(false) + .setAppId(conversationApplicationId) + .build(); + + ConversationsListRecentResponse response = conversationsService.listRecent(request); + + LOGGER.info("Response:"); + + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/conversation/conversations/StopActive.java b/examples/snippets/src/main/java/conversation/conversations/StopActive.java new file mode 100644 index 000000000..59bd8d6a5 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/conversations/StopActive.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.conversations; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class StopActive { + + private static final Logger LOGGER = Logger.getLogger(StopActive.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation to stop + String conversationId = "CONVERSATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConversationsService conversationsService = client.conversation().v1().conversations(); + + LOGGER.info(String.format("Stop conversation with ID '%s'", conversationId)); + + conversationsService.stopActive(conversationId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/conversations/Update.java b/examples/snippets/src/main/java/conversation/conversations/Update.java new file mode 100644 index 000000000..ccf2bb767 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/conversations/Update.java @@ -0,0 +1,54 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.conversations; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.ConversationsService; +import com.sinch.sdk.domains.conversation.models.v1.conversation.Conversation; +import com.sinch.sdk.domains.conversation.models.v1.request.MetadataUpdateStrategy; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation to update + String conversationId = "CONVERSATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConversationsService conversationsService = client.conversation().v1().conversations(); + + Conversation request = Conversation.builder().setActive(true).build(); + + LOGGER.info(String.format("Update conversation with ID '%s'", conversationId)); + + Conversation result = + conversationsService.update(conversationId, MetadataUpdateStrategy.REPLACE, request); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/events/Delete.java b/examples/snippets/src/main/java/conversation/events/Delete.java new file mode 100644 index 000000000..769b456a1 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/events/Delete.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.events; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.EventsService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the event to delete + String eventId = "EVENT_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + EventsService eventsService = client.conversation().v1().events(); + + LOGGER.info(String.format("Delete event with ID '%s' ", eventId)); + + eventsService.delete(eventId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/events/Get.java b/examples/snippets/src/main/java/conversation/events/Get.java new file mode 100644 index 000000000..dcb1061e5 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/events/Get.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.events; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.EventsService; +import com.sinch.sdk.domains.conversation.models.v1.events.ConversationEvent; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the event to retrieve + String eventId = "EVENT_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + EventsService eventsService = client.conversation().v1().events(); + + LOGGER.info(String.format("Get information for event with ID '%s'", eventId)); + + ConversationEvent response = eventsService.get(eventId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/events/List.java b/examples/snippets/src/main/java/conversation/events/List.java new file mode 100644 index 000000000..f333e3d56 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/events/List.java @@ -0,0 +1,56 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.events; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.EventsService; +import com.sinch.sdk.domains.conversation.models.v1.events.request.EventsListRequest; +import com.sinch.sdk.domains.conversation.models.v1.events.response.EventsListResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation to list events for + String conversationId = "CONVERSATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + EventsService eventsService = client.conversation().v1().events(); + + LOGGER.info(String.format("List events for conversation with ID '%s'", conversationId)); + + EventsListRequest request = + EventsListRequest.builder().setConversationId(conversationId).build(); + + EventsListResponse response = eventsService.list(request); + + LOGGER.info("Response:"); + + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/conversation/events/Send.java b/examples/snippets/src/main/java/conversation/events/Send.java new file mode 100644 index 000000000..42fd7c09f --- /dev/null +++ b/examples/snippets/src/main/java/conversation/events/Send.java @@ -0,0 +1,74 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.events; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.EventsService; +import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentities; +import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentity; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.events.AppEvent; +import com.sinch.sdk.domains.conversation.models.v1.events.request.SendEventRequest; +import com.sinch.sdk.domains.conversation.models.v1.events.response.SendEventResponse; +import com.sinch.sdk.domains.conversation.models.v1.events.types.ComposingEndEvent; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Send { + + private static final Logger LOGGER = Logger.getLogger(Send.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the Conversation Application to send the event from + String conversationApplicationId = "APPLICATION_ID"; + // The channel to use for the recipient + ConversationChannel recipientChannel = ConversationChannel.SMS; + // The identity of the recipient (e.g. phone number for SMS) + String recipientPhoneNumber = "RECIPIENT_PHONE_NUMBER"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + EventsService eventsService = client.conversation().v1().events(); + + AppEvent event = ComposingEndEvent.EMPTY; + + SendEventRequest request = + SendEventRequest.builder() + .setAppId(conversationApplicationId) + .setEvent(event) + .setRecipient( + ChannelRecipientIdentities.of( + ChannelRecipientIdentity.builder() + .setChannel(recipientChannel) + .setIdentity(recipientPhoneNumber) + .build())) + .build(); + + LOGGER.info(String.format("Send event to application with ID '%s'", conversationApplicationId)); + + SendEventResponse response = eventsService.send(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/messages/Delete.java b/examples/snippets/src/main/java/conversation/messages/Delete.java new file mode 100644 index 000000000..3a054c8eb --- /dev/null +++ b/examples/snippets/src/main/java/conversation/messages/Delete.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.MessagesService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the event to delete + String messageId = "MESSAGE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + MessagesService messagesService = client.conversation().v1().messages(); + + LOGGER.info("Deleting message: " + messageId); + + messagesService.delete(messageId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/messages/Get.java b/examples/snippets/src/main/java/conversation/messages/Get.java new file mode 100644 index 000000000..55e154c3b --- /dev/null +++ b/examples/snippets/src/main/java/conversation/messages/Get.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.MessagesService; +import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the event to retrieve + String messageId = "MESSAGE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + MessagesService messagesService = client.conversation().v1().messages(); + + LOGGER.info(String.format("Get conversation message for message with ID '%s'", messageId)); + + ConversationMessage result = messagesService.get(messageId); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/messages/List.java b/examples/snippets/src/main/java/conversation/messages/List.java new file mode 100644 index 000000000..074d65a59 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/messages/List.java @@ -0,0 +1,57 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.MessagesService; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.response.MessagesListResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the Conversation Application to list messages for + String conversationApplicationId = "APPLICATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + MessagesService messagesService = client.conversation().v1().messages(); + + LOGGER.info( + String.format("List messages for application with ID '%s'", conversationApplicationId)); + + MessagesListRequest request = + MessagesListRequest.builder().setAppId(conversationApplicationId).build(); + + MessagesListResponse response = messagesService.list(request); + + LOGGER.info("Response:"); + + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/conversation/messages/Send.java b/examples/snippets/src/main/java/conversation/messages/Send.java new file mode 100644 index 000000000..329908176 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/messages/Send.java @@ -0,0 +1,88 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.MessagesService; +import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentities; +import com.sinch.sdk.domains.conversation.models.v1.ChannelRecipientIdentity; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageRequest; +import com.sinch.sdk.domains.conversation.models.v1.messages.response.SendMessageResponse; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Send { + + private static final Logger LOGGER = Logger.getLogger(Send.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the Conversation Application to send the message from + String conversationApplicationId = "CONVERSATION_APPLICATION_ID"; + // Phone number to send the SMS message to (in E.164 format, e.g. +46701234567) + String smsRecipientPhoneNumber = "RECIPIENT_PHONE_NUMBER"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + MessagesService messagesService = client.conversation().v1().messages(); + + LOGGER.info( + String.format( + "Send SMS message with Conversation to phone number '%s'", smsRecipientPhoneNumber)); + + SendMessageRequest request = + createSMSSendMessage(conversationApplicationId, smsRecipientPhoneNumber); + + SendMessageResponse response = messagesService.sendTextMessage(request); + + LOGGER.info("Response: " + response); + } + + static SendMessageRequest createSMSSendMessage( + String applicationId, String smsRecipientPhoneNumber) { + + SendMessageRequest.Builder builder = SendMessageRequest.builder(); + + builder + .setAppId(applicationId) + .setMessage( + AppMessage.builder() + .setBody( + TextMessage.builder() + .setText("[Java SDK: Conversation Message] Sample text message") + .build()) + .build()) + .setRecipient( + ChannelRecipientIdentities.of( + ChannelRecipientIdentity.builder() + .setChannel(ConversationChannel.SMS) + .setIdentity(smsRecipientPhoneNumber) + .build())) + .build(); + + return builder.build(); + } +} diff --git a/examples/snippets/src/main/java/conversation/messages/Update.java b/examples/snippets/src/main/java/conversation/messages/Update.java new file mode 100644 index 000000000..68b3e53a6 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/messages/Update.java @@ -0,0 +1,56 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.MessagesService; +import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the message to update + String messageId = "MESSAGE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + MessagesService messagesService = client.conversation().v1().messages(); + + LOGGER.info(String.format("Update message with ID '%s'", messageId)); + + MessageUpdateRequest request = + MessageUpdateRequest.builder() + .setMetadata("metadata value set from Java SDK snippet") + .build(); + + ConversationMessage response = messagesService.update(messageId, request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v1/Create.java b/examples/snippets/src/main/java/conversation/templates/v1/Create.java new file mode 100644 index 000000000..78717cb4f --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v1/Create.java @@ -0,0 +1,62 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v1; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; +import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateTranslation; +import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Arrays; +import java.util.logging.Logger; +import utils.Settings; + +public class Create { + + private static final Logger LOGGER = Logger.getLogger(Create.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); + + TemplateV1 request = + TemplateV1.builder() + .setDefaultTranslation("en-US") + .setTranslations( + Arrays.asList( + TemplateTranslation.builder() + .setLanguageCode("en-US") + .setVersion("1234") + .setContent( + "{ \"text_message\": { \"text\" : \"my text from V1 template\"}}") + .build())) + .build(); + + LOGGER.info("Create template"); + + TemplateV1 result = templatesServiceV1.create(request); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v1/Delete.java b/examples/snippets/src/main/java/conversation/templates/v1/Delete.java new file mode 100644 index 000000000..1e637cc0b --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v1/Delete.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v1; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the template to delete + String conversationTemplateId = "TEMPLATE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); + + LOGGER.info(String.format("Delete template with ID '%s'", conversationTemplateId)); + + templatesServiceV1.delete(conversationTemplateId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v1/Get.java b/examples/snippets/src/main/java/conversation/templates/v1/Get.java new file mode 100644 index 000000000..046bc6162 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v1/Get.java @@ -0,0 +1,51 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v1; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; +import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the template to retrieve + String conversationTemplateId = "TEMPLATE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); + + LOGGER.info( + String.format("Get information about template with ID '%s'", conversationTemplateId)); + + TemplateV1 response = templatesServiceV1.get(conversationTemplateId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v1/List.java b/examples/snippets/src/main/java/conversation/templates/v1/List.java new file mode 100644 index 000000000..36570804b --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v1/List.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v1; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; +import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Collection; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); + + LOGGER.info("List templates V1"); + + Collection result = templatesServiceV1.list(); + + LOGGER.info("Response: "); + + result.iterator().forEachRemaining(f -> LOGGER.info(String.format("- %s: %s", f.getId(), f))); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v1/Update.java b/examples/snippets/src/main/java/conversation/templates/v1/Update.java new file mode 100644 index 000000000..610b551f5 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v1/Update.java @@ -0,0 +1,65 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v1; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v1.TemplatesServiceV1; +import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateTranslation; +import com.sinch.sdk.domains.conversation.templates.models.v1.TemplateV1; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Arrays; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the template to update + String conversationTemplateId = "TEMPLATE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV1 templatesServiceV1 = client.conversation().templates().v1(); + + TemplateV1 request = + TemplateV1.builder() + .setDescription("Updated description from V1 API") + .setDefaultTranslation("en-US") + .setTranslations( + Arrays.asList( + TemplateTranslation.builder() + .setLanguageCode("en-US") + .setContent( + "{ \"text_message\": { \"text\" : \"text updated from V1 template\"}}") + .build())) + .build(); + + LOGGER.info(String.format("Update template with ID '%s'", conversationTemplateId)); + + TemplateV1 result = templatesServiceV1.update(conversationTemplateId, request); + + LOGGER.info("Response: " + result); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v2/Create.java b/examples/snippets/src/main/java/conversation/templates/v2/Create.java new file mode 100644 index 000000000..921b5bfe0 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v2/Create.java @@ -0,0 +1,61 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v2; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Collections; +import java.util.logging.Logger; +import utils.Settings; + +public class Create { + + private static final Logger LOGGER = Logger.getLogger(Create.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + TemplateV2 request = + TemplateV2.builder() + .setDefaultTranslation("en-US") + .setTranslations( + Collections.singletonList( + TemplateTranslation.builder() + .setLanguageCode("en-US") + .setMessage( + TextMessage.builder().setText("my text from V2 template").build()) + .build())) + .build(); + + LOGGER.info("Create template"); + + TemplateV2 response = templatesServiceV2.create(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v2/Delete.java b/examples/snippets/src/main/java/conversation/templates/v2/Delete.java new file mode 100644 index 000000000..0be6fd2a5 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v2/Delete.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v2; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the template to delete + String conversationTemplateId = "TEMPLATE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + + LOGGER.info(String.format("Deleting template with ID '%s'", conversationTemplateId)); + + templatesServiceV2.delete(conversationTemplateId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v2/Get.java b/examples/snippets/src/main/java/conversation/templates/v2/Get.java new file mode 100644 index 000000000..57b51a9f5 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v2/Get.java @@ -0,0 +1,51 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v2; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the template to retrieve + String conversationTemplateId = "TEMPLATE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + + LOGGER.info( + String.format("Get information about template with ID '%s'", conversationTemplateId)); + + TemplateV2 response = templatesServiceV2.get(conversationTemplateId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v2/List.java b/examples/snippets/src/main/java/conversation/templates/v2/List.java new file mode 100644 index 000000000..027ded794 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v2/List.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v2; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Collection; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + + LOGGER.info("List templates V2"); + + Collection result = templatesServiceV2.list(); + + LOGGER.info("Response: "); + result.iterator().forEachRemaining(f -> LOGGER.info(String.format("- %s: %s", f.getId(), f))); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v2/ListTranslations.java b/examples/snippets/src/main/java/conversation/templates/v2/ListTranslations.java new file mode 100644 index 000000000..978e35e74 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v2/ListTranslations.java @@ -0,0 +1,55 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v2; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Collection; +import java.util.logging.Logger; +import utils.Settings; + +public class ListTranslations { + + private static final Logger LOGGER = Logger.getLogger(ListTranslations.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the template to retrieve translations for + String conversationTemplateId = "TEMPLATE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + + LOGGER.info( + String.format("List translations for template with ID '%s'", conversationTemplateId)); + + Collection response = + templatesServiceV2.listTranslations(conversationTemplateId, null); + + LOGGER.info("Response: "); + + response.iterator().forEachRemaining(f -> LOGGER.info(String.format("- %s", f))); + } +} diff --git a/examples/snippets/src/main/java/conversation/templates/v2/Update.java b/examples/snippets/src/main/java/conversation/templates/v2/Update.java new file mode 100644 index 000000000..63409f038 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/templates/v2/Update.java @@ -0,0 +1,70 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.templates.v2; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.templates.v2.TemplatesServiceV2; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.text.TextMessage; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateTranslation; +import com.sinch.sdk.domains.conversation.templates.models.v2.TemplateV2; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Collections; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the template to update + String conversationTemplateId = "TEMPLATE_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesServiceV2 templatesServiceV2 = client.conversation().templates().v2(); + + TemplateV2 request = + TemplateV2.builder() + .setDescription("Updated description from V2 API") + .setVersion(2) + .setDefaultTranslation("en-US") + .setTranslations( + Collections.singletonList( + TemplateTranslation.builder() + .setVersion("1") + .setLanguageCode("en-US") + .setMessage( + TextMessage.builder() + .setText("my updated text from V2 template") + .build()) + .build())) + .build(); + + LOGGER.info(String.format("Update template with ID '%s'", conversationTemplateId)); + + TemplateV2 response = templatesServiceV2.update(conversationTemplateId, request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/transcoding/Transcode.java b/examples/snippets/src/main/java/conversation/transcoding/Transcode.java new file mode 100644 index 000000000..9cdd777ae --- /dev/null +++ b/examples/snippets/src/main/java/conversation/transcoding/Transcode.java @@ -0,0 +1,78 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.transcoding; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.TranscodingService; +import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; +import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessage; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.location.Coordinates; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.location.LocationMessage; +import com.sinch.sdk.domains.conversation.models.v1.transcoding.request.TranscodeMessageRequest; +import com.sinch.sdk.domains.conversation.models.v1.transcoding.response.TranscodeMessageResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Arrays; +import java.util.logging.Logger; +import utils.Settings; + +public class Transcode { + + private static final Logger LOGGER = Logger.getLogger(Transcode.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // ID of the Conversation application to use for transcoding + String conversationApplicationId = "APPLICATION_ID"; + // The channel to transcode the message for + ConversationChannel conversationChannel = ConversationChannel.WHATSAPP; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TranscodingService transcodingService = client.conversation().v1().transcoding(); + + AppMessage appMessage = + AppMessage.builder() + .setBody( + LocationMessage.builder() + .setCoordinates( + Coordinates.builder() + .setLatitude(47.627980) + .setLongitude(-2.822915) + .build()) + .setTitle("Coordinates title") + .build()) + .build(); + + TranscodeMessageRequest request = + TranscodeMessageRequest.builder() + .setAppId(conversationApplicationId) + .setAppMessage(appMessage) + .setChannels(Arrays.asList(conversationChannel)) + .build(); + + LOGGER.info("Transcode message request: " + request); + + TranscodeMessageResponse response = transcodingService.transcodeMessage(request); + + LOGGER.info("Transcode message response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/webhooks/Create.java b/examples/snippets/src/main/java/conversation/webhooks/Create.java new file mode 100644 index 000000000..9b36f4761 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/webhooks/Create.java @@ -0,0 +1,59 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.webhooks; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTrigger; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Arrays; +import java.util.logging.Logger; +import utils.Settings; + +public class Create { + + private static final Logger LOGGER = Logger.getLogger(Create.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation application to create the webhook for + String conversationApplicationId = "APPLICATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + WebHooksService webHooksService = client.conversation().v1().webhooks(); + + Webhook webhookRequest = + Webhook.builder() + .setAppId(conversationApplicationId) + .setTarget("https://foo.com") + .setTriggers(Arrays.asList(WebhookTrigger.CAPABILITY)) + .build(); + + LOGGER.info("Create webhook: " + webhookRequest); + + Webhook response = webHooksService.create(webhookRequest); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/webhooks/Delete.java b/examples/snippets/src/main/java/conversation/webhooks/Delete.java new file mode 100644 index 000000000..1fc34952c --- /dev/null +++ b/examples/snippets/src/main/java/conversation/webhooks/Delete.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.webhooks; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation webhook to delete + String conversationWebhookId = "WEBHOOK_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + WebHooksService webHooksService = client.conversation().v1().webhooks(); + + LOGGER.info("Deleting webhook: " + conversationWebhookId); + + webHooksService.delete(conversationWebhookId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/conversation/webhooks/Get.java b/examples/snippets/src/main/java/conversation/webhooks/Get.java new file mode 100644 index 000000000..29974e6bd --- /dev/null +++ b/examples/snippets/src/main/java/conversation/webhooks/Get.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.webhooks; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation webhook to retrieve + String conversationWebhookId = "WEBHOOK_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + WebHooksService webHooksService = client.conversation().v1().webhooks(); + + LOGGER.info(String.format("Get information about webhook with ID '%s'", conversationWebhookId)); + + Webhook response = webHooksService.get(conversationWebhookId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/conversation/webhooks/List.java b/examples/snippets/src/main/java/conversation/webhooks/List.java new file mode 100644 index 000000000..a13b97434 --- /dev/null +++ b/examples/snippets/src/main/java/conversation/webhooks/List.java @@ -0,0 +1,52 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.webhooks; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Collection; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation application to list webhooks for + String conversationApplicationId = "APPLICATION_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + WebHooksService webHooksService = client.conversation().v1().webhooks(); + + LOGGER.info("List"); + + Collection response = webHooksService.list(conversationApplicationId); + + LOGGER.info("Response: "); + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/conversation/webhooks/Update.java b/examples/snippets/src/main/java/conversation/webhooks/Update.java new file mode 100644 index 000000000..cd55cb77a --- /dev/null +++ b/examples/snippets/src/main/java/conversation/webhooks/Update.java @@ -0,0 +1,60 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package conversation.webhooks; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.conversation.api.v1.WebHooksService; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.Webhook; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTargetType; +import com.sinch.sdk.domains.conversation.models.v1.webhooks.WebhookTrigger; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.ConversationRegion; +import java.util.Arrays; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String conversationRegion = Settings.getConversationRegion().orElse("MY_CONVERSATION_REGION"); + + // The ID of the conversation webhook to update + String conversationWebhookId = "WEBHOOK_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setConversationRegion(ConversationRegion.from(conversationRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + WebHooksService webHooksService = client.conversation().v1().webhooks(); + + Webhook webhookRequest = + Webhook.builder() + .setTarget("https://foo.com") + .setTriggers(Arrays.asList(WebhookTrigger.CAPABILITY, WebhookTrigger.CHANNEL_EVENT)) + .setTargetType(WebhookTargetType.HTTP) + .build(); + + LOGGER.info(String.format("Update webhook with ID '%s'", conversationWebhookId)); + + Webhook response = webHooksService.update(conversationWebhookId, webhookRequest); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/mailgun/README.md b/examples/snippets/src/main/java/mailgun/README.md new file mode 100644 index 000000000..4bf354736 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/README.md @@ -0,0 +1,24 @@ +# Mailgun snippets +Sinch Java SDK Code Snippets Repository for Mailgun APIs + +See the main [README.md](../../../../README.md) for how to execute snippets + +- Messages + - [mailgun/messages/SendEmail](./messages/SendEmail.java) + - [mailgun/messages/SendMimeEmail](./messages/SendMimeEmail.java) + - [mailgun/messages/GetStoredEmail](./messages/GetStoredEmail.java) + - [mailgun/messages/GetSendingQueuesStatus](./messages/GetSendingQueuesStatus.java) + - [mailgun/messages/PurgeSendingQueue](./messages/PurgeSendingQueue.java) +- Templates + - [mailgun/templates/List](./templates/List.java) + - [mailgun/templates/Create](./templates/Create.java) + - [mailgun/templates/DeleteAll](./templates/DeleteAll.java) + - [mailgun/templates/ListVersions](./templates/ListVersions.java) + - [mailgun/templates/CreateVersion](./templates/CreateVersion.java) + - [mailgun/templates/Get](./templates/Get.java) + - [mailgun/templates/Update](./templates/Update.java) + - [mailgun/templates/Delete](./templates/Delete.java) + - [mailgun/templates/GetVersion](./templates/GetVersion.java) + - [mailgun/templates/UpdateVersion](./templates/UpdateVersion.java) + - [mailgun/templates/DeleteVersion](./templates/DeleteVersion.java) + - [mailgun/templates/CopyVersion](./templates/CopyVersion.java) diff --git a/examples/snippets/src/main/java/mailgun/messages/GetSendingQueuesStatus.java b/examples/snippets/src/main/java/mailgun/messages/GetSendingQueuesStatus.java new file mode 100644 index 000000000..a150ef4ef --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/messages/GetSendingQueuesStatus.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.EmailsService; +import com.sinch.sdk.domains.mailgun.models.v1.emails.response.SendingQueuesStatusResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class GetSendingQueuesStatus { + + private static final Logger LOGGER = Logger.getLogger(GetSendingQueuesStatus.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + EmailsService emailsService = client.mailgun().v1().emails(); + + LOGGER.info(String.format("Get queue status for domain '%s'", mailgunDomain)); + + SendingQueuesStatusResponse response = emailsService.getSendingQueuesStatus(mailgunDomain); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/mailgun/messages/GetStoredEmail.java b/examples/snippets/src/main/java/mailgun/messages/GetStoredEmail.java new file mode 100644 index 000000000..6d6ff12cc --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/messages/GetStoredEmail.java @@ -0,0 +1,46 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.EmailsService; +import com.sinch.sdk.domains.mailgun.models.v1.emails.response.GetStoredEmailResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class GetStoredEmail { + + private static final Logger LOGGER = Logger.getLogger(GetStoredEmail.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String storageKey = "A_STORAGE_KEY"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + EmailsService emailsService = client.mailgun().v1().emails(); + + LOGGER.info(String.format("Get stored email with storageKey '%s'", storageKey)); + + GetStoredEmailResponse response = emailsService.getStoredEmail(mailgunDomain, storageKey); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/mailgun/messages/PurgeSendingQueue.java b/examples/snippets/src/main/java/mailgun/messages/PurgeSendingQueue.java new file mode 100644 index 000000000..3d5fd6a6a --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/messages/PurgeSendingQueue.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.EmailsService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class PurgeSendingQueue { + + private static final Logger LOGGER = Logger.getLogger(PurgeSendingQueue.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String storageHostToBePurged = "A_STORAGE_HOST_TO_BE_PURGED"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + EmailsService emailsService = client.mailgun().v1().emails(); + + LOGGER.info(String.format("Purge domain '%s'", mailgunDomain)); + + emailsService.purgeSendingQueue(mailgunDomain, storageHostToBePurged); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/mailgun/messages/SendEmail.java b/examples/snippets/src/main/java/mailgun/messages/SendEmail.java new file mode 100644 index 000000000..f0cadfe7c --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/messages/SendEmail.java @@ -0,0 +1,63 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.EmailsService; +import com.sinch.sdk.domains.mailgun.models.v1.emails.request.SendEmailHtmlInlineRequest; +import com.sinch.sdk.domains.mailgun.models.v1.emails.request.SendEmailRequest; +import com.sinch.sdk.domains.mailgun.models.v1.emails.response.SendEmailResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.Arrays; +import java.util.logging.Logger; +import utils.Settings; + +public class SendEmail { + + private static final Logger LOGGER = Logger.getLogger(SendEmail.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String recipient = "A_RECIPIENT_EMAIL_ADDRESS"; + String from = "A_FROM_EMAIL_ADDRESS"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + EmailsService emailsService = client.mailgun().v1().emails(); + + LOGGER.info(String.format("Send email to '%s'", recipient)); + + SendEmailRequest request = createTextEmail(recipient, from); + + SendEmailResponse response = emailsService.sendEmail(mailgunDomain, request); + + LOGGER.info("Response: " + response); + } + + static SendEmailRequest createTextEmail(String recipient, String from) { + + return SendEmailHtmlInlineRequest.builder() + .setFrom(from) + .setTo(Arrays.asList(recipient)) + .setText("\uD83D\uDCE7 Text sent from Sinch SDK Java snippet") + .setHtml("📧 HTML sent from Sinch SDK Java snippet") + .setSubject("\uD83D\uDCE7 Hello from Sinch SDK Java snippet") + .build(); + } +} diff --git a/examples/snippets/src/main/java/mailgun/messages/SendMimeEmail.java b/examples/snippets/src/main/java/mailgun/messages/SendMimeEmail.java new file mode 100644 index 000000000..7ff76b3ca --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/messages/SendMimeEmail.java @@ -0,0 +1,96 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.messages; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.EmailsService; +import com.sinch.sdk.domains.mailgun.models.v1.emails.request.SendMimeEmailRequest; +import com.sinch.sdk.domains.mailgun.models.v1.emails.response.SendEmailResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Arrays; +import java.util.logging.Logger; +import utils.Settings; + +public class SendMimeEmail { + + private static final Logger LOGGER = Logger.getLogger(SendMimeEmail.class.getName()); + + public static void main(String[] args) throws IOException { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String recipient = "A_RECIPIENT_EMAIL_ADDRESS"; + String from = "A_FROM_EMAIL_ADDRESS"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + EmailsService emailsService = client.mailgun().v1().emails(); + + LOGGER.info(String.format("Send MIME email to '%s'", recipient)); + + SendMimeEmailRequest request = createMime(recipient, from); + + SendEmailResponse response = emailsService.sendMimeEmail(mailgunDomain, request); + + LOGGER.info("Response: " + response); + } + + static SendMimeEmailRequest createMime(String recipient, String from) throws IOException { + String mimeBody = + "From: %s\n" + + "Subject: SendMime Email sent from Sinch Java SDK snippet\n" + + "Content-Type: multipart/alternative; boundary=\"boundary-string\"\n" + + "\n" + + "--boundary-string\n" + + "Content-Type: text/plain; charset=\"utf-8\"\n" + + "Content-Transfer-Encoding: quoted-printable\n" + + "Content-Disposition: inline\n" + + "\n" + + "Plain text email goes here!\n" + + "This is the fallback if email client does not support HTML\n" + + "\n" + + "--boundary-string\n" + + "Content-Type: text/html; charset=\"utf-8\"\n" + + "Content-Transfer-Encoding: quoted-printable\n" + + "Content-Disposition: inline\n" + + "\n" + + "

This is the HTML Section!

\n" + + "

This is what displays in most modern email clients

\n" + + "\n" + + "--boundary-string--\n" + + "\n" + + "\n"; + + File tempFile; + tempFile = File.createTempFile("sinch-sdk-java", ".txt"); + tempFile.deleteOnExit(); + try (BufferedWriter out = new BufferedWriter(new FileWriter(tempFile))) { + out.write(String.format(mimeBody, from)); + } catch (IOException e) { + throw e; + } + + return SendMimeEmailRequest.builder() + .setTo(Arrays.asList(recipient)) + .setMessage(tempFile) + .build(); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/CopyVersion.java b/examples/snippets/src/main/java/mailgun/templates/CopyVersion.java new file mode 100644 index 000000000..11e3030d8 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/CopyVersion.java @@ -0,0 +1,52 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.domains.mailgun.models.v1.templates.VersionDetails; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class CopyVersion { + + private static final Logger LOGGER = Logger.getLogger(CopyVersion.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + String mailgunTemplateVersionName = "A_TEMPLATE_VERSION_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info(String.format("Copy template version '%s'", mailgunTemplateVersionName)); + + VersionDetails value = + templatesService.copyVersion( + mailgunDomain, + mailgunTemplateName, + mailgunTemplateVersionName, + mailgunTemplateVersionName + " (cloned)"); + + LOGGER.info("Response:" + value); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/Create.java b/examples/snippets/src/main/java/mailgun/templates/Create.java new file mode 100644 index 000000000..410d55bd6 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/Create.java @@ -0,0 +1,53 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.domains.mailgun.models.v1.templates.Template; +import com.sinch.sdk.domains.mailgun.models.v1.templates.request.CreateTemplateRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Create { + + private static final Logger LOGGER = Logger.getLogger(Create.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info("Create a template"); + + CreateTemplateRequest request = + CreateTemplateRequest.builder() + .setName(mailgunTemplateName) + .setDescription("my description value") + .build(); + + Template value = templatesService.create(mailgunDomain, request); + + LOGGER.info("Response:" + value); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/CreateVersion.java b/examples/snippets/src/main/java/mailgun/templates/CreateVersion.java new file mode 100644 index 000000000..2a9cff32a --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/CreateVersion.java @@ -0,0 +1,55 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.domains.mailgun.models.v1.templates.VersionDetails; +import com.sinch.sdk.domains.mailgun.models.v1.templates.request.CreateVersionRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class CreateVersion { + + private static final Logger LOGGER = Logger.getLogger(CreateVersion.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + String mailgunTemplateVersionName = "A_TEMPLATE_VERSION_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info("Create a template's version"); + + CreateVersionRequest request = + CreateVersionRequest.builder() + .setTemplate("

{{firstname}} {{lastname}}

") + .setTag(mailgunTemplateVersionName) + .build(); + + VersionDetails value = + templatesService.createVersion(mailgunDomain, mailgunTemplateName, request); + + LOGGER.info("Response:" + value); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/Delete.java b/examples/snippets/src/main/java/mailgun/templates/Delete.java new file mode 100644 index 000000000..14add0024 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/Delete.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info(String.format("Deleting template '%s'", mailgunTemplateName)); + + templatesService.delete(mailgunDomain, mailgunTemplateName); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/DeleteAll.java b/examples/snippets/src/main/java/mailgun/templates/DeleteAll.java new file mode 100644 index 000000000..ab6a6d7a3 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/DeleteAll.java @@ -0,0 +1,44 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class DeleteAll { + + private static final Logger LOGGER = Logger.getLogger(DeleteAll.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info(String.format("Deleting all templates for domain '%s'", mailgunDomain)); + + templatesService.deleteAll(mailgunDomain); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/DeleteVersion.java b/examples/snippets/src/main/java/mailgun/templates/DeleteVersion.java new file mode 100644 index 000000000..a3c9fcde6 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/DeleteVersion.java @@ -0,0 +1,46 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class DeleteVersion { + + private static final Logger LOGGER = Logger.getLogger(DeleteVersion.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + String mailgunTemplateVersionName = "A_TEMPLATE_VERSION_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info(String.format("Delete template version '%s'", mailgunTemplateVersionName)); + + templatesService.deleteVersion(mailgunDomain, mailgunTemplateName, mailgunTemplateVersionName); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/Get.java b/examples/snippets/src/main/java/mailgun/templates/Get.java new file mode 100644 index 000000000..ecc479d97 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/Get.java @@ -0,0 +1,46 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.domains.mailgun.models.v1.templates.Template; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info(String.format("Get information for template '%s'", mailgunTemplateName)); + + Template value = templatesService.get(mailgunDomain, mailgunTemplateName); + + LOGGER.info("Response: " + value); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/GetVersion.java b/examples/snippets/src/main/java/mailgun/templates/GetVersion.java new file mode 100644 index 000000000..e0a6303e0 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/GetVersion.java @@ -0,0 +1,48 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.domains.mailgun.models.v1.templates.VersionDetails; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class GetVersion { + + private static final Logger LOGGER = Logger.getLogger(GetVersion.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + String mailgunTemplateVersionName = "A_TEMPLATE_VERSION_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + LOGGER.info( + String.format("Get template information for version '%s'", mailgunTemplateVersionName)); + + VersionDetails value = + templatesService.getVersion(mailgunDomain, mailgunTemplateName, mailgunTemplateVersionName); + + LOGGER.info("Response: " + value); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/List.java b/examples/snippets/src/main/java/mailgun/templates/List.java new file mode 100644 index 000000000..825a8d81b --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/List.java @@ -0,0 +1,46 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.domains.mailgun.models.v1.templates.response.ListTemplatesResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info("List templates"); + + ListTemplatesResponse response = templatesService.list(mailgunDomain); + + LOGGER.info("Response:"); + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/ListVersions.java b/examples/snippets/src/main/java/mailgun/templates/ListVersions.java new file mode 100644 index 000000000..03e4a01c3 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/ListVersions.java @@ -0,0 +1,48 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.domains.mailgun.models.v1.templates.response.ListVersionsResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class ListVersions { + + private static final Logger LOGGER = Logger.getLogger(ListVersions.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info("List versions"); + + ListVersionsResponse response = + templatesService.listVersions(mailgunDomain, mailgunTemplateName); + + LOGGER.info("Response:"); + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/Update.java b/examples/snippets/src/main/java/mailgun/templates/Update.java new file mode 100644 index 000000000..de729972d --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/Update.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.domains.mailgun.models.v1.templates.request.UpdateTemplateRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info(String.format("Update template '%s'", mailgunTemplateName)); + + UpdateTemplateRequest request = + UpdateTemplateRequest.builder().setDescription("New description value").build(); + + templatesService.update(mailgunDomain, mailgunTemplateName, request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/mailgun/templates/UpdateVersion.java b/examples/snippets/src/main/java/mailgun/templates/UpdateVersion.java new file mode 100644 index 000000000..be2659034 --- /dev/null +++ b/examples/snippets/src/main/java/mailgun/templates/UpdateVersion.java @@ -0,0 +1,51 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package mailgun.templates; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.mailgun.api.v1.TemplatesService; +import com.sinch.sdk.domains.mailgun.models.v1.templates.request.UpdateVersionRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.MailgunRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class UpdateVersion { + + private static final Logger LOGGER = Logger.getLogger(UpdateVersion.class.getName()); + + public static void main(String[] args) { + + String mailgunApiKey = Settings.getMailgunApiKey().orElse("MY_MAILGUN_API_KEY"); + String mailgunRegion = Settings.getMailgunRegion().orElse("MY_MAILGUN_REGION"); + + String mailgunDomain = "A_MAILGUN_DOMAIN"; + String mailgunTemplateName = "A_TEMPLATE_NAME"; + String mailgunTemplateVersionName = "A_TEMPLATE_VERSION_NAME"; + + Configuration configuration = + Configuration.builder() + .setMailgunApiKey(mailgunApiKey) + .setMailgunRegion(MailgunRegion.from(mailgunRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + TemplatesService templatesService = client.mailgun().v1().templates(); + + LOGGER.info(String.format("Update template's version '%s'", mailgunTemplateVersionName)); + + UpdateVersionRequest request = + UpdateVersionRequest.builder().setComment("a comment value modified from snippet").build(); + + templatesService.updateVersion( + mailgunDomain, mailgunTemplateName, mailgunTemplateVersionName, request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/numbers/CheckAvailability.java b/examples/snippets/src/main/java/numbers/CheckAvailability.java new file mode 100644 index 000000000..18e5092c2 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/CheckAvailability.java @@ -0,0 +1,46 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.response.AvailableNumber; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class CheckAvailability { + + private static final Logger LOGGER = Logger.getLogger(CheckAvailability.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String phoneNumber = "A_PHONE_NUMBER_TO_CHECK"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + LOGGER.info("CheckAvailability for: " + phoneNumber); + + AvailableNumber value = numbersService.checkAvailability(phoneNumber); + + LOGGER.info("Response: " + value); + } +} diff --git a/examples/snippets/src/main/java/numbers/DeprovisionEmergencyAddress.java b/examples/snippets/src/main/java/numbers/DeprovisionEmergencyAddress.java new file mode 100644 index 000000000..5c6b0950e --- /dev/null +++ b/examples/snippets/src/main/java/numbers/DeprovisionEmergencyAddress.java @@ -0,0 +1,43 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class DeprovisionEmergencyAddress { + private static final Logger LOGGER = + Logger.getLogger(DeprovisionEmergencyAddress.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + LOGGER.info("De-provisioning EmergencyAddress for: " + phoneNumber); + + numbersService.deprovisionEmergencyAddress(phoneNumber); + } +} diff --git a/examples/snippets/src/main/java/numbers/Get.java b/examples/snippets/src/main/java/numbers/Get.java new file mode 100644 index 000000000..b5c19b986 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/Get.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.ActiveNumber; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + LOGGER.info("Get for: " + phoneNumber); + ActiveNumber value = numbersService.get(phoneNumber); + + LOGGER.info("Response: " + value); + } +} diff --git a/examples/snippets/src/main/java/numbers/GetEmergencyAddress.java b/examples/snippets/src/main/java/numbers/GetEmergencyAddress.java new file mode 100644 index 000000000..e57f1e959 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/GetEmergencyAddress.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.EmergencyAddress; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class GetEmergencyAddress { + private static final Logger LOGGER = Logger.getLogger(GetEmergencyAddress.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + LOGGER.info("Get EmergencyAddress for: " + phoneNumber); + + EmergencyAddress response = numbersService.getEmergencyAddress(phoneNumber); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/numbers/List.java b/examples/snippets/src/main/java/numbers/List.java new file mode 100644 index 000000000..25765c458 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/List.java @@ -0,0 +1,55 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.NumberType; +import com.sinch.sdk.domains.numbers.models.v1.request.ActiveNumbersListQueryParameters; +import com.sinch.sdk.domains.numbers.models.v1.response.ActiveNumberListResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + LOGGER.info("Listing active numbers"); + + ActiveNumberListResponse response = + numbersService.list( + ActiveNumbersListQueryParameters.builder() + .setRegionCode("US") + .setType(NumberType.LOCAL) + .build()); + + LOGGER.info("Response"); + + response + .iterator() + .forEachRemaining(f -> LOGGER.info(String.format("%s: %s", f.getPhoneNumber(), f))); + } +} diff --git a/examples/snippets/src/main/java/numbers/ProvisionEmergencyAddress.java b/examples/snippets/src/main/java/numbers/ProvisionEmergencyAddress.java new file mode 100644 index 000000000..cef1783d6 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/ProvisionEmergencyAddress.java @@ -0,0 +1,61 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.EmergencyAddress; +import com.sinch.sdk.domains.numbers.models.v1.request.EmergencyAddressRequest; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class ProvisionEmergencyAddress { + + private static final Logger LOGGER = Logger.getLogger(ProvisionEmergencyAddress.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + LOGGER.info("Provisioning EmergencyAddress for: " + phoneNumber); + + EmergencyAddress emergencyAddress = + EmergencyAddress.builder() + .setStreetNumber("3500") + .setStreetInfo("Lenox Rd NE") + .setCity("Atlanta") + .setState("GA") + .setPostalCode("30326") + .build(); + + EmergencyAddressRequest request = + EmergencyAddressRequest.builder() + .setDisplayName("Emergency Address Display Name") + .setAddress(emergencyAddress) + .build(); + EmergencyAddress value = numbersService.provisionEmergencyAddress(phoneNumber, request); + + LOGGER.info("Response: " + value); + } +} diff --git a/examples/snippets/src/main/java/numbers/README.md b/examples/snippets/src/main/java/numbers/README.md new file mode 100644 index 000000000..ca3f95208 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/README.md @@ -0,0 +1,25 @@ +# Numbers snippets +Sinch Java SDK Code Snippets Repository for Numbers APIs + +See main [README.md](../../../../README.md) for how to execute snippets + +- Numbers + - [numbers/Rent](Rent.java) + - [numbers/RentAny](RentAny.java) + - [numbers/SearchForAvailableNumbers](SearchForAvailableNumbers.java) + - [numbers/CheckAvailability](CheckAvailability.java) + - [numbers/List](List.java) + - [numbers/Update](Update.java) + - [numbers/Get](Get.java) + - [numbers/Release](Release.java) +- Emergency Addresses + - [numbers/ValidateEmergencyAddress](ValidateEmergencyAddress.java) + - [numbers/ProvisionEmergencyAddress](ProvisionEmergencyAddress.java) + - [numbers/GetEmergencyAddress](GetEmergencyAddress.java) + - [numbers/DeprovisionEmergencyAddress](DeprovisionEmergencyAddress.java) +- Regions + - [numbers/regions/List](List.java) +- Callbacks + - [numbers/callback/Get](Get.java) + - [numbers/callback/Update](Update.java) + diff --git a/examples/snippets/src/main/java/numbers/Release.java b/examples/snippets/src/main/java/numbers/Release.java new file mode 100644 index 000000000..1acb34f2d --- /dev/null +++ b/examples/snippets/src/main/java/numbers/Release.java @@ -0,0 +1,46 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.ActiveNumber; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Release { + + private static final Logger LOGGER = Logger.getLogger(Release.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + LOGGER.info("Release for: " + phoneNumber); + + ActiveNumber value = numbersService.release(phoneNumber); + + LOGGER.info("Response: " + value); + } +} diff --git a/examples/snippets/src/main/java/numbers/Rent.java b/examples/snippets/src/main/java/numbers/Rent.java new file mode 100644 index 000000000..dc62237e5 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/Rent.java @@ -0,0 +1,58 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.ActiveNumber; +import com.sinch.sdk.domains.numbers.models.v1.SmsConfiguration; +import com.sinch.sdk.domains.numbers.models.v1.request.AvailableNumberRentRequest; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Rent { + + private static final Logger LOGGER = Logger.getLogger(Rent.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String servicePlanIdToAssociateWithTheNumber = + Settings.getServicePlanId().orElse("MY_SERVICE_PLAN_ID"); + + // Available numbers list can be retrieved by using list() function from available service, see + // the SearchAvailableSnippet or + // https://developers.sinch.com/docs/numbers/getting-started/java-sdk/searchavailable + String phoneNumberToBeRented = "AVAILABLE_PHONE_NUMBER_TO_BE_RENTED"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + SmsConfiguration smsConfiguration = + SmsConfiguration.builder().setServicePlanId(servicePlanIdToAssociateWithTheNumber).build(); + + AvailableNumberRentRequest parameters = + AvailableNumberRentRequest.builder().setSmsConfiguration(smsConfiguration).build(); + + ActiveNumber response = numbersService.rent(phoneNumberToBeRented, parameters); + + LOGGER.info(String.format("Rented number: %s", response)); + } +} diff --git a/examples/snippets/src/main/java/numbers/RentAny.java b/examples/snippets/src/main/java/numbers/RentAny.java new file mode 100644 index 000000000..215e2b472 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/RentAny.java @@ -0,0 +1,64 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.ActiveNumber; +import com.sinch.sdk.domains.numbers.models.v1.NumberType; +import com.sinch.sdk.domains.numbers.models.v1.SmsConfiguration; +import com.sinch.sdk.domains.numbers.models.v1.request.AvailableNumberRentAnyRequest; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class RentAny { + + private static final Logger LOGGER = Logger.getLogger(RentAny.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String servicePlanIdToAssociateWithTheNumber = + Settings.getServicePlanId().orElse("MY_SERVICE_PLAN_ID"); + + // ISO 3166-1 alpha-2 country code of the phone number. e.g. "US", "GB", "SE"... + // See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 for details + String regionCode = "MY_REGION_CODE"; + + NumberType numberType = NumberType.LOCAL; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + SmsConfiguration smsConfiguration = + SmsConfiguration.builder().setServicePlanId(servicePlanIdToAssociateWithTheNumber).build(); + + AvailableNumberRentAnyRequest parameters = + AvailableNumberRentAnyRequest.builder() + .setType(numberType) + .setRegionCode(regionCode) + .setSmsConfiguration(smsConfiguration) + .build(); + + ActiveNumber response = numbersService.rentAny(parameters); + + LOGGER.info(String.format("Rented number: %s", response)); + } +} diff --git a/examples/snippets/src/main/java/numbers/SearchForAvailableNumbers.java b/examples/snippets/src/main/java/numbers/SearchForAvailableNumbers.java new file mode 100644 index 000000000..88b7806ce --- /dev/null +++ b/examples/snippets/src/main/java/numbers/SearchForAvailableNumbers.java @@ -0,0 +1,60 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.NumberType; +import com.sinch.sdk.domains.numbers.models.v1.request.AvailableNumbersListQueryParameters; +import com.sinch.sdk.domains.numbers.models.v1.response.AvailableNumberListResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class SearchForAvailableNumbers { + + private static final Logger LOGGER = Logger.getLogger(SearchForAvailableNumbers.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + // ISO 3166-1 alpha-2 country code of the phone number. e.g. "US", "GB", "SE"... + // See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 for details + String regionCode = "MY_REGION_CODE"; + NumberType type = NumberType.LOCAL; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + AvailableNumbersListQueryParameters parameters = + AvailableNumbersListQueryParameters.builder() + .setRegionCode(regionCode) + .setType(type) + .build(); + + LOGGER.info("Looking for available numbers"); + + AvailableNumberListResponse response = numbersService.searchForAvailableNumbers(parameters); + + response + .iterator() + .forEachRemaining( + number -> LOGGER.info(String.format("Available number details: %s", number))); + } +} diff --git a/examples/snippets/src/main/java/numbers/Update.java b/examples/snippets/src/main/java/numbers/Update.java new file mode 100644 index 000000000..2ac4d5655 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/Update.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.ActiveNumber; +import com.sinch.sdk.domains.numbers.models.v1.request.ActiveNumberUpdateRequest; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + String displayName = "Updated with Sinch Java SDK"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + ActiveNumberUpdateRequest updateRequest = + ActiveNumberUpdateRequest.builder().setDisplayName(displayName).build(); + + ActiveNumber response = numbersService.update(phoneNumber, updateRequest); + + LOGGER.info(String.format("Updated number: %s", response)); + } +} diff --git a/examples/snippets/src/main/java/numbers/ValidateEmergencyAddress.java b/examples/snippets/src/main/java/numbers/ValidateEmergencyAddress.java new file mode 100644 index 000000000..e60610211 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/ValidateEmergencyAddress.java @@ -0,0 +1,61 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.NumbersService; +import com.sinch.sdk.domains.numbers.models.v1.EmergencyAddress; +import com.sinch.sdk.domains.numbers.models.v1.request.EmergencyAddressRequest; +import com.sinch.sdk.domains.numbers.models.v1.response.ValidateAddressResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class ValidateEmergencyAddress { + private static final Logger LOGGER = Logger.getLogger(ValidateEmergencyAddress.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + NumbersService numbersService = client.numbers().v1(); + + LOGGER.info("Validate EmergencyAddress for: " + phoneNumber); + + EmergencyAddress emergencyAddress = + EmergencyAddress.builder() + .setStreetNumber("3500") + .setStreetInfo("Lenox Road NE") + .setCity("Atlanta") + .setState("GA") + .setPostalCode("30326") + .build(); + + EmergencyAddressRequest request = + EmergencyAddressRequest.builder() + .setDisplayName("Emergency Address Display Name") + .setAddress(emergencyAddress) + .build(); + ValidateAddressResponse value = numbersService.validateEmergencyAddress(phoneNumber, request); + + LOGGER.info("Response: " + value); + } +} diff --git a/examples/snippets/src/main/java/numbers/callback/Get.java b/examples/snippets/src/main/java/numbers/callback/Get.java new file mode 100644 index 000000000..b4d38a442 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/callback/Get.java @@ -0,0 +1,44 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers.callback; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.CallbackConfigurationService; +import com.sinch.sdk.domains.numbers.models.v1.callbacks.response.CallbackConfigurationResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + CallbackConfigurationService callbackConfigurationService = client.numbers().v1().callback(); + + LOGGER.info("Get"); + + CallbackConfigurationResponse value = callbackConfigurationService.get(); + + LOGGER.info("Response :" + value); + } +} diff --git a/examples/snippets/src/main/java/numbers/callback/Update.java b/examples/snippets/src/main/java/numbers/callback/Update.java new file mode 100644 index 000000000..a7e26b055 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/callback/Update.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers.callback; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.CallbackConfigurationService; +import com.sinch.sdk.domains.numbers.models.v1.callbacks.request.CallbackConfigurationUpdateRequest; +import com.sinch.sdk.domains.numbers.models.v1.callbacks.response.CallbackConfigurationResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + String hmac = "NEW_HMAC_SECRET"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + CallbackConfigurationService callbackConfigurationService = client.numbers().v1().callback(); + + LOGGER.info("Update callback HMAC secret"); + + CallbackConfigurationUpdateRequest parameters = + CallbackConfigurationUpdateRequest.builder().setHmacSecret(hmac).build(); + + CallbackConfigurationResponse value = callbackConfigurationService.update(parameters); + + LOGGER.info("Response :" + value); + } +} diff --git a/examples/snippets/src/main/java/numbers/regions/List.java b/examples/snippets/src/main/java/numbers/regions/List.java new file mode 100644 index 000000000..b09859be8 --- /dev/null +++ b/examples/snippets/src/main/java/numbers/regions/List.java @@ -0,0 +1,46 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package numbers.regions; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.numbers.api.v1.AvailableRegionsService; +import com.sinch.sdk.domains.numbers.models.v1.regions.available.response.AvailableRegionListResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + AvailableRegionsService availableRegionsService = client.numbers().v1().regions(); + + LOGGER.info("List"); + + AvailableRegionListResponse response = availableRegionsService.list(); + + LOGGER.info("Available regions:"); + + response.iterator().forEachRemaining(item -> LOGGER.info(String.format("- %s", item))); + } +} diff --git a/examples/snippets/src/main/java/sms/README.md b/examples/snippets/src/main/java/sms/README.md new file mode 100644 index 000000000..fc963201a --- /dev/null +++ b/examples/snippets/src/main/java/sms/README.md @@ -0,0 +1,30 @@ +# SMS snippets +Sinch Java SDK Code Snippets Repository for SMS APIs + +See main [README.md](../../../../README.md) for how to execute snippets + +- Batches + - [sms/batches/Send](./batches/Send.java) + - [sms/batches/List](./batches/List.java) + - [sms/batches/DryRun](./batches/DryRun.java) + - [sms/batches/Get](./batches/Get.java) + - [sms/batches/Update](./batches/Update.java) + - [sms/batches/Replace](./batches/Replace.java) + - [sms/batches/Cancel](./batches/Cancel.java) + - [sms/batches/SendDeliveryFeedback](./batches/SendDeliveryFeedback.java) +- Delivery reports + - [sms/deliveryReports/Get](./deliveryReports/Get.java) + - [sms/deliveryReports/GetForNumber](./deliveryReports/GetForNumber.java) + - [sms/deliveryReports/List](./deliveryReports/List.java) +- Inbounds + - [sms/inbounds/List](./inbounds/List.java) + - [sms/inbounds/Get](./inbounds/Get.java) +- Groups + - [sms/groups/List](./groups/List.java) + - [sms/groups/Create](./groups/Create.java) + - [sms/groups/Get](./groups/Get.java) + - [sms/groups/Update](./groups/Update.java) + - [sms/groups/Replace](./groups/Replace.java) + - [sms/groups/Delete](./groups/Delete.java) + - [sms/groups/ListMembers](./groups/ListMembers.java) + \ No newline at end of file diff --git a/examples/snippets/src/main/java/sms/batches/Cancel.java b/examples/snippets/src/main/java/sms/batches/Cancel.java new file mode 100644 index 000000000..63d130522 --- /dev/null +++ b/examples/snippets/src/main/java/sms/batches/Cancel.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.batches; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Cancel { + + private static final Logger LOGGER = Logger.getLogger(Cancel.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // ID of the batch to cancel + String batchId = "BATCH_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + BatchesService batchesService = client.sms().v1().batches(); + + LOGGER.info(String.format("Cancelling batch with ID '%s'", batchId)); + + BatchResponse response = batchesService.cancel(batchId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/batches/DryRun.java b/examples/snippets/src/main/java/sms/batches/DryRun.java new file mode 100644 index 000000000..576794047 --- /dev/null +++ b/examples/snippets/src/main/java/sms/batches/DryRun.java @@ -0,0 +1,63 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.batches; + +import com.sinch.sdk.SinchClient; +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.DryRunResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Logger; +import utils.Settings; + +public class DryRun { + + private static final Logger LOGGER = Logger.getLogger(DryRun.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // Sender could be a: + // - phone number: e.g. Sinch virtual number in E164 format + // - alphanumeric sender ID: e.g. a brand name "BRAND" + // - US short code: e.g. "12345" + String sender = Settings.getPhoneNumber().orElse("SENDER_NUMBER"); + // The recipient phone number, in E.164 format (e.g., +46701234567) + List recipients = Arrays.asList("RECIPIENT_PHONE_NUMBER"); + // The body of the SMS message + String body = "A body text here"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + BatchesService batchesService = client.sms().v1().batches(); + + LOGGER.info("DryRun Request"); + + TextRequest request = + TextRequest.builder().setFrom(sender).setTo(recipients).setBody(body).build(); + + DryRunResponse response = batchesService.dryRun(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/batches/Get.java b/examples/snippets/src/main/java/sms/batches/Get.java new file mode 100644 index 000000000..ab0396d59 --- /dev/null +++ b/examples/snippets/src/main/java/sms/batches/Get.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.batches; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The ID of the SMS batch to retrieve + String batchId = "BATCH_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + BatchesService batchesService = client.sms().v1().batches(); + + LOGGER.info(String.format("Get information for batch with ID '%s'", batchId)); + + BatchResponse response = batchesService.get(batchId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/batches/List.java b/examples/snippets/src/main/java/sms/batches/List.java new file mode 100644 index 000000000..8bf2d5027 --- /dev/null +++ b/examples/snippets/src/main/java/sms/batches/List.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.batches; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + BatchesService batchesService = client.sms().v1().batches(); + + LOGGER.info("List batches"); + + LOGGER.info("Response:"); + + batchesService.list().iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/sms/batches/Replace.java b/examples/snippets/src/main/java/sms/batches/Replace.java new file mode 100644 index 000000000..07f039e67 --- /dev/null +++ b/examples/snippets/src/main/java/sms/batches/Replace.java @@ -0,0 +1,59 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.batches; + +import com.sinch.sdk.SinchClient; +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.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Logger; +import utils.Settings; + +public class Replace { + + private static final Logger LOGGER = Logger.getLogger(Replace.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // ID of the SMS batch to replace + String batchId = "BATCH_ID"; + // New values to replace in the batch (phone number, in E.164 format (e.g., +46701234567) + List recipients = Arrays.asList("NEW_RECIPIENT_PHONE_NUMBER"); + // New body of the SMS message + String body = "A message body updated"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + BatchesService batchesService = client.sms().v1().batches(); + + LOGGER.info(String.format("Replacing batch with ID '%s'", batchId)); + + TextRequest request = TextRequest.builder().setTo(recipients).setBody(body).build(); + + BatchResponse response = batchesService.replace(batchId, request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/batches/Send.java b/examples/snippets/src/main/java/sms/batches/Send.java new file mode 100644 index 000000000..e86a9ce1f --- /dev/null +++ b/examples/snippets/src/main/java/sms/batches/Send.java @@ -0,0 +1,63 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.batches; + +import com.sinch.sdk.SinchClient; +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.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Logger; +import utils.Settings; + +public class Send { + + private static final Logger LOGGER = Logger.getLogger(Send.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // Sender could be a: + // - phone number: e.g. Sinch virtual number in E164 format + // - alphanumeric sender ID: e.g. a brand name "BRAND" + // - US short code: e.g. "12345" + String sender = Settings.getPhoneNumber().orElse("SENDER_NUMBER"); + // The recipient phone number, in E.164 format (e.g., +46701234567) + List recipients = Arrays.asList("RECIPIENT_PHONE_NUMBER"); + // The body of the SMS message + String body = "This is a test SMS message using the Sinch Java SDK."; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + BatchesService batchesService = client.sms().v1().batches(); + + LOGGER.info(String.format("Sending SMS Text to recipients '%s'", recipients)); + + TextRequest request = + TextRequest.builder().setTo(recipients).setBody(body).setFrom(sender).build(); + + BatchResponse response = batchesService.send(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/batches/SendDeliveryFeedback.java b/examples/snippets/src/main/java/sms/batches/SendDeliveryFeedback.java new file mode 100644 index 000000000..bfd1d8f65 --- /dev/null +++ b/examples/snippets/src/main/java/sms/batches/SendDeliveryFeedback.java @@ -0,0 +1,57 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.batches; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.request.SendDeliveryFeedbackRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Logger; +import utils.Settings; + +public class SendDeliveryFeedback { + + private static final Logger LOGGER = Logger.getLogger(SendDeliveryFeedback.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The batch ID from which the message was sent + String batchId = "BATCH_ID"; + // The recipient phone number, in E.164 format (e.g., +46701234567) + List recipients = Arrays.asList("RECIPIENT_PHONE_NUMBER"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + BatchesService batchesService = client.sms().v1().batches(); + + LOGGER.info(String.format("Sending delivery feedback for batch with ID '%s'", batchId)); + + SendDeliveryFeedbackRequest request = + SendDeliveryFeedbackRequest.builder().setRecipients(recipients).build(); + + batchesService.sendDeliveryFeedback(batchId, request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/sms/batches/Update.java b/examples/snippets/src/main/java/sms/batches/Update.java new file mode 100644 index 000000000..22264947e --- /dev/null +++ b/examples/snippets/src/main/java/sms/batches/Update.java @@ -0,0 +1,60 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.batches; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.BatchesService; +import com.sinch.sdk.domains.sms.models.v1.batches.request.UpdateTextRequest; +import com.sinch.sdk.domains.sms.models.v1.batches.response.BatchResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // ID of the SMS batch to update + String batchId = "BATCH_ID"; + // Phone numbers to remove from the batch (in E.164 format, e.g., +46701234567) + List toRemove = Arrays.asList("+11111111111", "+29999999999"); + // Phone numbers to add to the batch (in E.164 format, e.g., +46701234567) + List toAdd = Arrays.asList("+123456789", "+987654321"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + BatchesService batchesService = client.sms().v1().batches(); + + LOGGER.info(String.format("Updating batch with ID '%s'", batchId)); + + UpdateTextRequest request = + UpdateTextRequest.builder().setToRemove(toRemove).setToAdd(toAdd).build(); + + BatchResponse response = batchesService.update(batchId, request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/deliveryReports/Get.java b/examples/snippets/src/main/java/sms/deliveryReports/Get.java new file mode 100644 index 000000000..71469b041 --- /dev/null +++ b/examples/snippets/src/main/java/sms/deliveryReports/Get.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.deliveryReports; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.BatchDeliveryReport; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The ID of the SMS batch to retrieve the delivery report for + String batchId = "BATCH_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + DeliveryReportsService deliveryReportsService = client.sms().v1().deliveryReports(); + + LOGGER.info(String.format("Get delivery report for batch with ID '%s'", batchId)); + + BatchDeliveryReport response = deliveryReportsService.get(batchId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/deliveryReports/GetForNumber.java b/examples/snippets/src/main/java/sms/deliveryReports/GetForNumber.java new file mode 100644 index 000000000..f72ee1cbd --- /dev/null +++ b/examples/snippets/src/main/java/sms/deliveryReports/GetForNumber.java @@ -0,0 +1,52 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.deliveryReports; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.domains.sms.models.v1.deliveryreports.RecipientDeliveryReport; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class GetForNumber { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The ID of the SMS batch to retrieve the delivery report for + String batchId = "BATCH_ID"; + // The phone number to retrieve the delivery report for + String phoneNumber = "RECIPIENT_PHONE_NUMBER"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + DeliveryReportsService deliveryReportsService = client.sms().v1().deliveryReports(); + + LOGGER.info(String.format("Get delivery report for number '%s'", phoneNumber)); + + RecipientDeliveryReport response = deliveryReportsService.getForNumber(batchId, phoneNumber); + + LOGGER.info("Response :" + response); + } +} diff --git a/examples/snippets/src/main/java/sms/deliveryReports/List.java b/examples/snippets/src/main/java/sms/deliveryReports/List.java new file mode 100644 index 000000000..d2aac71d9 --- /dev/null +++ b/examples/snippets/src/main/java/sms/deliveryReports/List.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.deliveryReports; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.DeliveryReportsService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + DeliveryReportsService deliveryReportsService = client.sms().v1().deliveryReports(); + + LOGGER.info("List Delivery Reports"); + + LOGGER.info("Response:"); + deliveryReportsService.list().iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/sms/groups/Create.java b/examples/snippets/src/main/java/sms/groups/Create.java new file mode 100644 index 000000000..88f4680c7 --- /dev/null +++ b/examples/snippets/src/main/java/sms/groups/Create.java @@ -0,0 +1,58 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.groups; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Logger; +import utils.Settings; + +public class Create { + + private static final Logger LOGGER = Logger.getLogger(Create.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The name of the group to create + String groupName = "Sinch Java SDK group"; + // The members to include in the group (Phone numbers in E.164 format) + Set members = new HashSet<>(Arrays.asList("PHONE_NUMBER")); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + GroupsService groupsService = client.sms().v1().groups(); + + LOGGER.info("Creating group"); + + GroupRequest request = GroupRequest.builder().setName(groupName).setMembers(members).build(); + + Group response = groupsService.create(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/groups/Delete.java b/examples/snippets/src/main/java/sms/groups/Delete.java new file mode 100644 index 000000000..e48a6aaf6 --- /dev/null +++ b/examples/snippets/src/main/java/sms/groups/Delete.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.groups; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Delete { + + private static final Logger LOGGER = Logger.getLogger(Delete.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The ID of the group to delete + String groupId = "GROUP_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + GroupsService groupsService = client.sms().v1().groups(); + + LOGGER.info(String.format("Deleting group with ID '%s'", groupId)); + + groupsService.delete(groupId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/sms/groups/Get.java b/examples/snippets/src/main/java/sms/groups/Get.java new file mode 100644 index 000000000..e4c66f446 --- /dev/null +++ b/examples/snippets/src/main/java/sms/groups/Get.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.groups; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The ID of the group to retrieve + String groupId = "GROUP_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + GroupsService groupsService = client.sms().v1().groups(); + + LOGGER.info(String.format("Get information for group with ID '%s'", groupId)); + + Group response = groupsService.get(groupId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/groups/List.java b/examples/snippets/src/main/java/sms/groups/List.java new file mode 100644 index 000000000..acdc1251d --- /dev/null +++ b/examples/snippets/src/main/java/sms/groups/List.java @@ -0,0 +1,48 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.groups; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.response.ListGroupsResponse; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + GroupsService groupsService = client.sms().v1().groups(); + + LOGGER.info("List groups"); + + ListGroupsResponse response = groupsService.list(); + + LOGGER.info("Response:"); + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/sms/groups/ListMembers.java b/examples/snippets/src/main/java/sms/groups/ListMembers.java new file mode 100644 index 000000000..78411fdf6 --- /dev/null +++ b/examples/snippets/src/main/java/sms/groups/ListMembers.java @@ -0,0 +1,51 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.groups; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.Collection; +import java.util.logging.Logger; +import utils.Settings; + +public class ListMembers { + + private static final Logger LOGGER = Logger.getLogger(ListMembers.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The ID of the group to retrieve members from + String groupId = "GROUP_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + GroupsService groupsService = client.sms().v1().groups(); + + LOGGER.info(String.format("List members within group with ID '%s'", groupId)); + + Collection response = groupsService.listMembers(groupId); + + LOGGER.info("Response:"); + response.iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/sms/groups/Replace.java b/examples/snippets/src/main/java/sms/groups/Replace.java new file mode 100644 index 000000000..3d6e0cbd9 --- /dev/null +++ b/examples/snippets/src/main/java/sms/groups/Replace.java @@ -0,0 +1,58 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.groups; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Logger; +import utils.Settings; + +public class Replace { + + private static final Logger LOGGER = Logger.getLogger(Replace.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The ID of the group to replace members for + String groupId = "GROUP_ID"; + // The new members to set for the group (Phone numbers in E.164 format) + Set members = new HashSet<>(Arrays.asList("RECIPIENT_PHONE_NUMBER")); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + GroupsService groupsService = client.sms().v1().groups(); + + GroupRequest request = GroupRequest.builder().setMembers(members).build(); + + LOGGER.info(String.format("Replace group with ID '%s'", groupId)); + + Group response = groupsService.replace(groupId, request); + + LOGGER.info("Response :" + response); + } +} diff --git a/examples/snippets/src/main/java/sms/groups/Update.java b/examples/snippets/src/main/java/sms/groups/Update.java new file mode 100644 index 000000000..31e4bc855 --- /dev/null +++ b/examples/snippets/src/main/java/sms/groups/Update.java @@ -0,0 +1,62 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.groups; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.GroupsService; +import com.sinch.sdk.domains.sms.models.v1.groups.Group; +import com.sinch.sdk.domains.sms.models.v1.groups.request.GroupUpdateRequest; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The ID of the group to update + String groupId = "GROUP_ID"; + // New name for the group + String groupName = "Updated Group Name from Java SDK"; + // Members to remove from the group + List toRemove = Arrays.asList("+11111111111", "+29999999999"); + // Members to add to the group + List toAdd = Arrays.asList("+123456789", "+987654321"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + GroupsService groupsService = client.sms().v1().groups(); + + GroupUpdateRequest request = + GroupUpdateRequest.builder().setName(groupName).setAdd(toAdd).setRemove(toRemove).build(); + + LOGGER.info(String.format("Update group with ID '%s'", groupId)); + + Group response = groupsService.update(groupId, request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/inbounds/Get.java b/examples/snippets/src/main/java/sms/inbounds/Get.java new file mode 100644 index 000000000..7ce3bb07b --- /dev/null +++ b/examples/snippets/src/main/java/sms/inbounds/Get.java @@ -0,0 +1,50 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.inbounds; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.InboundsService; +import com.sinch.sdk.domains.sms.models.v1.inbounds.InboundMessage; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + // The ID of the inbound message to retrieve + String inboundId = "INBOUND_ID"; + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + InboundsService inboundsService = client.sms().v1().inbounds(); + + LOGGER.info(String.format("Get inbound message with ID '%s'", inboundId)); + + InboundMessage response = inboundsService.get(inboundId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/sms/inbounds/List.java b/examples/snippets/src/main/java/sms/inbounds/List.java new file mode 100644 index 000000000..4e70a13f9 --- /dev/null +++ b/examples/snippets/src/main/java/sms/inbounds/List.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package sms.inbounds; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.sms.api.v1.InboundsService; +import com.sinch.sdk.models.Configuration; +import com.sinch.sdk.models.SMSRegion; +import java.util.logging.Logger; +import utils.Settings; + +public class List { + + private static final Logger LOGGER = Logger.getLogger(List.class.getName()); + + public static void main(String[] args) { + + String projectId = Settings.getProjectId().orElse("MY_PROJECT_ID"); + String keyId = Settings.getKeyId().orElse("MY_KEY_ID"); + String keySecret = Settings.getKeySecret().orElse("MY_KEY_SECRET"); + String smsRegion = Settings.getSMSRegion().orElse("MY_SMS_REGION"); + + Configuration configuration = + Configuration.builder() + .setProjectId(projectId) + .setKeyId(keyId) + .setKeySecret(keySecret) + .setSmsRegion(SMSRegion.from(smsRegion)) + .build(); + + SinchClient client = new SinchClient(configuration); + + InboundsService inboundsService = client.sms().v1().inbounds(); + + LOGGER.info("List inbounds messages"); + + LOGGER.info("Response:"); + inboundsService.list().iterator().forEachRemaining(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/utils/Settings.java b/examples/snippets/src/main/java/utils/Settings.java new file mode 100644 index 000000000..361fb8f50 --- /dev/null +++ b/examples/snippets/src/main/java/utils/Settings.java @@ -0,0 +1,73 @@ +package utils; + +import com.sinch.sdk.core.utils.StringUtil; +import java.util.Optional; +import java.util.Properties; + +public class Settings { + + private static final Properties properties; + + static { + properties = new Properties(); + try { + // load a properties file from class path, inside static method + properties.load(Settings.class.getClassLoader().getResourceAsStream("config.properties")); + } catch (Exception ioe) { + // ignore exception: properties file is just an helper + } + } + + public static Optional get(String key) { + + String value = properties.getProperty(key); + if (StringUtil.isEmpty(value)) { + return Optional.empty(); + } + return Optional.of(value.trim()); + } + + public static Optional getProjectId() { + return get("SINCH_PROJECT_ID"); + } + + public static Optional getKeyId() { + return get("SINCH_KEY_ID"); + } + + public static Optional getKeySecret() { + return get("SINCH_KEY_SECRET"); + } + + public static Optional getServicePlanId() { + return get("SINCH_SERVICE_PLAN_ID"); + } + + public static Optional getSMSRegion() { + return get("SINCH_SMS_REGION"); + } + + public static Optional getApplicationKey() { + return get("SINCH_APPLICATION_API_KEY"); + } + + public static Optional getApplicationSecret() { + return get("SINCH_APPLICATION_API_SECRET"); + } + + public static Optional getMailgunApiKey() { + return get("SINCH_MAILGUN_SERVICE_API_KEY"); + } + + public static Optional getMailgunRegion() { + return get("SINCH_MAILGUN_REGION"); + } + + public static Optional getConversationRegion() { + return get("SINCH_CONVERSATION_REGION"); + } + + public static Optional getPhoneNumber() { + return get("SINCH_PHONE_NUMBER"); + } +} diff --git a/examples/snippets/src/main/java/verification/README.md b/examples/snippets/src/main/java/verification/README.md new file mode 100644 index 000000000..b9b2886eb --- /dev/null +++ b/examples/snippets/src/main/java/verification/README.md @@ -0,0 +1,14 @@ +# Verification snippets +Sinch Java SDK Code Snippets Repository for Verification APIs + +See main [README.md](../../../../README.md) for how to execute snippets + +- Start + - [verification/start/Start](./start/Start.java) +- Report + - [verification/report/ReportById](./report/ReportById.java) + - [verification/report/ReportByIdentity](./report/ReportByIdentity.java) +- Status + - [verification/status/GetById](./status/GetById.java) + - [verification/status/GetByIdentity](./status/GetByIdentity.java) + - [verification/status/GetByReference](./status/GetByReference.java) diff --git a/examples/snippets/src/main/java/verification/report/ReportById.java b/examples/snippets/src/main/java/verification/report/ReportById.java new file mode 100644 index 000000000..9edc1b9b2 --- /dev/null +++ b/examples/snippets/src/main/java/verification/report/ReportById.java @@ -0,0 +1,54 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package verification.report; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.verification.api.v1.VerificationReportService; +import com.sinch.sdk.domains.verification.models.v1.report.request.VerificationReportRequestSms; +import com.sinch.sdk.domains.verification.models.v1.report.response.VerificationReportResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class ReportById { + + private static final Logger LOGGER = Logger.getLogger(ReportById.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The id you received back from the API call when starting verification by SMS + String verificationId = "VERIFICATION_ID"; + // The OTP is the code the user received via SMS as part of the verification process. + String receivedVerificationCode = "OTP_CODE"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + VerificationReportService verificationReportService = + client.verification().v1().verificationReport(); + + LOGGER.info( + String.format("Report SMS verification code for verification ID '%s'", verificationId)); + + VerificationReportRequestSms request = + VerificationReportRequestSms.builder().setCode(receivedVerificationCode).build(); + + VerificationReportResponse response = + verificationReportService.reportSmsById(verificationId, request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/verification/report/ReportByIdentity.java b/examples/snippets/src/main/java/verification/report/ReportByIdentity.java new file mode 100644 index 000000000..31a378965 --- /dev/null +++ b/examples/snippets/src/main/java/verification/report/ReportByIdentity.java @@ -0,0 +1,54 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package verification.report; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.verification.api.v1.VerificationReportService; +import com.sinch.sdk.domains.verification.models.v1.NumberIdentity; +import com.sinch.sdk.domains.verification.models.v1.report.request.VerificationReportRequestSms; +import com.sinch.sdk.domains.verification.models.v1.report.response.VerificationReportResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class ReportByIdentity { + + private static final Logger LOGGER = Logger.getLogger(ReportByIdentity.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The phone number being verified via SMS. + String phoneNumber = "PHONE_NUMBER"; + // The OTP is the code the user received via SMS as part of the verification process. + String receivedVerificationCode = "OTP_CODE"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + VerificationReportService verificationReportService = + client.verification().v1().verificationReport(); + + LOGGER.info(String.format("Report SMS verification code for phone number '%s'", phoneNumber)); + + VerificationReportRequestSms request = + VerificationReportRequestSms.builder().setCode(receivedVerificationCode).build(); + + VerificationReportResponse response = + verificationReportService.reportSmsByIdentity(NumberIdentity.valueOf(phoneNumber), request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/verification/start/Start.java b/examples/snippets/src/main/java/verification/start/Start.java new file mode 100644 index 000000000..8feedd571 --- /dev/null +++ b/examples/snippets/src/main/java/verification/start/Start.java @@ -0,0 +1,53 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package verification.start; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.verification.api.v1.VerificationStartService; +import com.sinch.sdk.domains.verification.models.v1.NumberIdentity; +import com.sinch.sdk.domains.verification.models.v1.start.request.VerificationStartRequestSms; +import com.sinch.sdk.domains.verification.models.v1.start.response.VerificationStartResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Start { + + private static final Logger LOGGER = Logger.getLogger(Start.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The phone number you want to verify, in E.164 format (e.g. +46701234567). + String phoneNumber = "PHONE_NUMBER"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + VerificationStartService verificationStartService = + client.verification().v1().verificationStart(); + + LOGGER.info(String.format("Start a verification by SMS onto phone number '%s'", phoneNumber)); + + VerificationStartRequestSms request = + VerificationStartRequestSms.builder() + .setIdentity(NumberIdentity.valueOf(phoneNumber)) + .build(); + + VerificationStartResponse response = verificationStartService.startSms(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/verification/status/GetById.java b/examples/snippets/src/main/java/verification/status/GetById.java new file mode 100644 index 000000000..68d273ab9 --- /dev/null +++ b/examples/snippets/src/main/java/verification/status/GetById.java @@ -0,0 +1,46 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package verification.status; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.verification.api.v1.VerificationStatusService; +import com.sinch.sdk.domains.verification.models.v1.status.response.VerificationStatusResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class GetById { + + private static final Logger LOGGER = Logger.getLogger(GetById.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The id you received back from the API call when starting verification + String verificationId = "VERIFICATION_ID"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + VerificationStatusService verificationStatusService = + client.verification().v1().verificationStatus(); + + LOGGER.info(String.format("Verification status for verification ID '%s'", verificationId)); + + VerificationStatusResponse response = verificationStatusService.getById(verificationId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/verification/status/GetByIdentity.java b/examples/snippets/src/main/java/verification/status/GetByIdentity.java new file mode 100644 index 000000000..48a9b0234 --- /dev/null +++ b/examples/snippets/src/main/java/verification/status/GetByIdentity.java @@ -0,0 +1,54 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package verification.status; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.verification.api.v1.VerificationStatusService; +import com.sinch.sdk.domains.verification.models.v1.NumberIdentity; +import com.sinch.sdk.domains.verification.models.v1.VerificationMethod; +import com.sinch.sdk.domains.verification.models.v1.status.response.VerificationStatusResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class GetByIdentity { + + private static final Logger LOGGER = Logger.getLogger(GetByIdentity.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The phone number you are verifying, in E.164 format (e.g. +46701234567). + // This should be the same number you used when starting the verification. + String phoneNumber = "PHONE_NUMBER"; + // The verification method you used when starting the verification. + VerificationMethod verificationMethod = VerificationMethod.SMS; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + VerificationStatusService verificationStatusService = + client.verification().v1().verificationStatus(); + + LOGGER.info(String.format("Verification status for phone number '%s'", phoneNumber)); + + NumberIdentity identity = NumberIdentity.valueOf(phoneNumber); + + VerificationStatusResponse response = + verificationStatusService.getByIdentity(identity, verificationMethod); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/verification/status/GetByReference.java b/examples/snippets/src/main/java/verification/status/GetByReference.java new file mode 100644 index 000000000..e1896dd18 --- /dev/null +++ b/examples/snippets/src/main/java/verification/status/GetByReference.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package verification.status; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.verification.api.v1.VerificationStatusService; +import com.sinch.sdk.domains.verification.models.v1.status.response.VerificationStatusResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class GetByReference { + + private static final Logger LOGGER = Logger.getLogger(GetByReference.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The reference you defined when starting the verification process. + String verificationReference = "VERIFICATION_REFERENCE"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + VerificationStatusService verificationStatusService = + client.verification().v1().verificationStatus(); + + LOGGER.info( + String.format( + "Verification status for verification with reference '%s'", verificationReference)); + + VerificationStatusResponse response = + verificationStatusService.getByReference(verificationReference); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/voice/README.md b/examples/snippets/src/main/java/voice/README.md new file mode 100644 index 000000000..8cee1e56a --- /dev/null +++ b/examples/snippets/src/main/java/voice/README.md @@ -0,0 +1,23 @@ +# Voice snippets +Sinch Java SDK Code Snippets Repository for Voice APIs + +See main [README.md](../../../../README.md) for how to execute snippets + +- Callouts + - [voice/callouts/Call](./callouts/Call.java) +- Calls + - [voice/calls/Get](./calls/Get.java) + - [voice/calls/ManageWithCallLeg](./calls/ManageWithCallLeg.java) + - [voice/calls/Update](./calls/Update.java) +- Conferences + - [voice/conferences/Call](./conferences/Call.java) + - [voice/conferences/Get](./conferences/Get.java) + - [voice/conferences/KickAll](./conferences/KickAll.java) + - [voice/conferences/ManageParticipant](./conferences/ManageParticipant.java) + - [voice/conferences/KickParticipant](./conferences/KickParticipant.java) +- Applications + - [voice/applications/ListNumbers](./applications/ListNumbers.java) + - [voice/applications/AssignNumbers](./applications/AssignNumbers.java) + - [voice/applications/UnAssignNumber](./applications/UnAssignNumber.java) + - [voice/applications/GetCallbackUrls](./applications/GetCallbackUrls.java) + - [voice/applications/UpdateCallbackUrls](./applications/UpdateCallbackUrls.java) diff --git a/examples/snippets/src/main/java/voice/applications/AssignNumbers.java b/examples/snippets/src/main/java/voice/applications/AssignNumbers.java new file mode 100644 index 000000000..586de654c --- /dev/null +++ b/examples/snippets/src/main/java/voice/applications/AssignNumbers.java @@ -0,0 +1,56 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.applications; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ApplicationsService; +import com.sinch.sdk.domains.voice.models.v1.applications.Capability; +import com.sinch.sdk.domains.voice.models.v1.applications.request.UpdateNumbersRequest; +import com.sinch.sdk.models.Configuration; +import java.util.Arrays; +import java.util.logging.Logger; +import utils.Settings; + +public class AssignNumbers { + + private static final Logger LOGGER = Logger.getLogger(AssignNumbers.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The Sinch virtual phone number to assign to the application, in E.164 format (e.g., + // +12025550123) + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ApplicationsService applicationsService = client.voice().v1().applications(); + + LOGGER.info( + String.format("Assign number '%s' to application '%s'", phoneNumber, applicationKey)); + + UpdateNumbersRequest request = + UpdateNumbersRequest.builder() + .setNumbers(Arrays.asList(phoneNumber)) + .setApplicationKey(applicationKey) + .setCapability(Capability.VOICE) + .build(); + + applicationsService.assignNumbers(request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/voice/applications/GetCallbackUrls.java b/examples/snippets/src/main/java/voice/applications/GetCallbackUrls.java new file mode 100644 index 000000000..fc96fec22 --- /dev/null +++ b/examples/snippets/src/main/java/voice/applications/GetCallbackUrls.java @@ -0,0 +1,42 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.applications; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ApplicationsService; +import com.sinch.sdk.domains.voice.models.v1.applications.Callbacks; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class GetCallbackUrls { + + private static final Logger LOGGER = Logger.getLogger(GetCallbackUrls.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ApplicationsService applicationsService = client.voice().v1().applications(); + + LOGGER.info(String.format("Get callback URLs for application key '%s'", applicationKey)); + + Callbacks response = applicationsService.getCallbackUrls(applicationKey); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/voice/applications/ListNumbers.java b/examples/snippets/src/main/java/voice/applications/ListNumbers.java new file mode 100644 index 000000000..a2ce12e06 --- /dev/null +++ b/examples/snippets/src/main/java/voice/applications/ListNumbers.java @@ -0,0 +1,44 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.applications; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ApplicationsService; +import com.sinch.sdk.domains.voice.models.v1.applications.response.OwnedNumbersResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class ListNumbers { + + private static final Logger LOGGER = Logger.getLogger(ListNumbers.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ApplicationsService applicationsService = client.voice().v1().applications(); + + LOGGER.info("Get assigned numbers"); + + OwnedNumbersResponse response = applicationsService.listNumbers(); + + LOGGER.info("Response: "); + + response.getNumbers().forEach(f -> LOGGER.info(f.toString())); + } +} diff --git a/examples/snippets/src/main/java/voice/applications/UnAssignNumber.java b/examples/snippets/src/main/java/voice/applications/UnAssignNumber.java new file mode 100644 index 000000000..3ca0d7c91 --- /dev/null +++ b/examples/snippets/src/main/java/voice/applications/UnAssignNumber.java @@ -0,0 +1,52 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.applications; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ApplicationsService; +import com.sinch.sdk.domains.voice.models.v1.applications.request.UnAssignNumberRequest; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class UnAssignNumber { + + private static final Logger LOGGER = Logger.getLogger(UnAssignNumber.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The phone number to unassign from the application, in E.164 format (e.g., +12025550123) + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ApplicationsService applicationsService = client.voice().v1().applications(); + + LOGGER.info( + String.format("Un-assign number '%s' from application '%s'", phoneNumber, applicationKey)); + + UnAssignNumberRequest request = + UnAssignNumberRequest.builder() + .setNumber(phoneNumber) + .setApplicationKey(applicationKey) + .build(); + + applicationsService.unassignNumber(request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/voice/applications/UpdateCallbackUrls.java b/examples/snippets/src/main/java/voice/applications/UpdateCallbackUrls.java new file mode 100644 index 000000000..34a4e0ecf --- /dev/null +++ b/examples/snippets/src/main/java/voice/applications/UpdateCallbackUrls.java @@ -0,0 +1,51 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.applications; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ApplicationsService; +import com.sinch.sdk.domains.voice.models.v1.applications.Callbacks; +import com.sinch.sdk.domains.voice.models.v1.applications.CallbacksUrl; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class UpdateCallbackUrls { + + private static final Logger LOGGER = Logger.getLogger(UpdateCallbackUrls.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The new callback URL to set for the application + String callbackURL = "https://my.callback.url/voice"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ApplicationsService applicationsService = client.voice().v1().applications(); + + Callbacks request = + Callbacks.builder().setUrl(CallbacksUrl.builder().setPrimary(callbackURL).build()).build(); + + LOGGER.info( + String.format( + "Update callback URLs for application key '%s': '%s'", applicationKey, request)); + + applicationsService.updateCallbackUrls(applicationKey, request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/voice/callouts/Call.java b/examples/snippets/src/main/java/voice/callouts/Call.java new file mode 100644 index 000000000..56a352c3b --- /dev/null +++ b/examples/snippets/src/main/java/voice/callouts/Call.java @@ -0,0 +1,53 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.callouts; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.CalloutsService; +import com.sinch.sdk.domains.voice.models.v1.callouts.request.CalloutRequestTTS; +import com.sinch.sdk.domains.voice.models.v1.destination.DestinationPstn; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Call { + + private static final Logger LOGGER = Logger.getLogger(Call.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The phone number you want to call, in E.164 format (e.g., +12025550123) + String recipientPhoneNumber = "RECIPIENT_PHONE_NUMBER"; + String textToSpeech = "Hello, this is a call initiated from Sinch Java SDK. Goodbye."; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + CalloutsService calloutsService = client.voice().v1().callouts(); + + LOGGER.info(String.format("Calling phone number '%s'", recipientPhoneNumber)); + + CalloutRequestTTS request = + CalloutRequestTTS.builder() + .setDestination(DestinationPstn.from(recipientPhoneNumber)) + .setText(textToSpeech) + .build(); + + String response = calloutsService.call(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/voice/calls/Get.java b/examples/snippets/src/main/java/voice/calls/Get.java new file mode 100644 index 000000000..b38c83b3a --- /dev/null +++ b/examples/snippets/src/main/java/voice/calls/Get.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.calls; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.CallsService; +import com.sinch.sdk.domains.voice.models.v1.calls.response.CallInformation; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The ID of the call to retrieve + String callId = "CALL_ID"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + CallsService callsService = client.voice().v1().calls(); + + LOGGER.info(String.format("Get information for call with ID '%s'", callId)); + + CallInformation response = callsService.get(callId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/voice/calls/ManageWithCallLeg.java b/examples/snippets/src/main/java/voice/calls/ManageWithCallLeg.java new file mode 100644 index 000000000..532f4f5c1 --- /dev/null +++ b/examples/snippets/src/main/java/voice/calls/ManageWithCallLeg.java @@ -0,0 +1,65 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.calls; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.CallsService; +import com.sinch.sdk.domains.voice.models.v1.calls.request.CallLeg; +import com.sinch.sdk.domains.voice.models.v1.svaml.SvamlControl; +import com.sinch.sdk.domains.voice.models.v1.svaml.action.SvamlAction; +import com.sinch.sdk.domains.voice.models.v1.svaml.action.SvamlActionHangup; +import com.sinch.sdk.domains.voice.models.v1.svaml.instruction.SvamlInstruction; +import com.sinch.sdk.domains.voice.models.v1.svaml.instruction.SvamlInstructionSay; +import com.sinch.sdk.models.Configuration; +import java.util.Collection; +import java.util.Collections; +import java.util.logging.Logger; +import utils.Settings; + +public class ManageWithCallLeg { + + private static final Logger LOGGER = Logger.getLogger(ManageWithCallLeg.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The ID of the call to manage + String callId = "CALL_ID"; + // The call leg to manage + CallLeg callLeg = CallLeg.CALLEE; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + CallsService callsService = client.voice().v1().calls(); + + LOGGER.info(String.format("Manage call with ID '%s'", callId)); + + SvamlAction action = SvamlActionHangup.DEFAULT; + + Collection instructions = + Collections.singletonList( + SvamlInstructionSay.builder() + .setText("Hello, the call is over, hanging up now. Goodbye") + .build()); + + SvamlControl request = + SvamlControl.builder().setInstructions(instructions).setAction(action).build(); + + callsService.manageWithCallLeg(callId, callLeg, request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/voice/calls/Update.java b/examples/snippets/src/main/java/voice/calls/Update.java new file mode 100644 index 000000000..f48808491 --- /dev/null +++ b/examples/snippets/src/main/java/voice/calls/Update.java @@ -0,0 +1,60 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.calls; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.CallsService; +import com.sinch.sdk.domains.voice.models.v1.svaml.SvamlControl; +import com.sinch.sdk.domains.voice.models.v1.svaml.action.SvamlAction; +import com.sinch.sdk.domains.voice.models.v1.svaml.action.SvamlActionHangup; +import com.sinch.sdk.domains.voice.models.v1.svaml.instruction.SvamlInstruction; +import com.sinch.sdk.domains.voice.models.v1.svaml.instruction.SvamlInstructionSay; +import com.sinch.sdk.models.Configuration; +import java.util.Collection; +import java.util.Collections; +import java.util.logging.Logger; +import utils.Settings; + +public class Update { + + private static final Logger LOGGER = Logger.getLogger(Update.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The ID of the call to update + String callId = "CALL_ID"; + // The instruction to be performed + SvamlInstruction instruction = SvamlInstructionSay.builder().setText("Goodbye").build(); + // The instruction to add to the call + SvamlAction action = SvamlActionHangup.DEFAULT; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + CallsService callsService = client.voice().v1().calls(); + + LOGGER.info(String.format("Updating call with ID '%s'", callId)); + + Collection instructions = Collections.singletonList(instruction); + + SvamlControl request = + SvamlControl.builder().setInstructions(instructions).setAction(action).build(); + + callsService.update(callId, request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/voice/conferences/Call.java b/examples/snippets/src/main/java/voice/conferences/Call.java new file mode 100644 index 000000000..106677886 --- /dev/null +++ b/examples/snippets/src/main/java/voice/conferences/Call.java @@ -0,0 +1,59 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.conferences; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ConferencesService; +import com.sinch.sdk.domains.voice.models.v1.callouts.request.CalloutRequestConference; +import com.sinch.sdk.domains.voice.models.v1.destination.DestinationPstn; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Call { + + private static final Logger LOGGER = Logger.getLogger(Call.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + String phoneNumber = Settings.getPhoneNumber().orElse("MY_SINCH_PHONE_NUMBER"); + + // An existing or to be created conference ID + String conferenceId = "CONFERENCE_ID"; + // The phone number to be called and added to the conference, in E.164 format (e.g., + // +12025550123) + String recipientPhoneNumber = "RECIPIENT_PHONE_NUMBER"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConferencesService conferencesService = client.voice().v1().conferences(); + + LOGGER.info( + String.format( + "Joining conference '%s' for phone number '%s'", conferenceId, recipientPhoneNumber)); + + CalloutRequestConference request = + CalloutRequestConference.builder() + .setDestination(DestinationPstn.from(recipientPhoneNumber)) + .setCli(phoneNumber) + .setConferenceId(conferenceId) + .build(); + + String response = conferencesService.call(request); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/voice/conferences/Get.java b/examples/snippets/src/main/java/voice/conferences/Get.java new file mode 100644 index 000000000..08cd7b849 --- /dev/null +++ b/examples/snippets/src/main/java/voice/conferences/Get.java @@ -0,0 +1,45 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.conferences; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ConferencesService; +import com.sinch.sdk.domains.voice.models.v1.conferences.response.GetConferenceInfoResponse; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class Get { + + private static final Logger LOGGER = Logger.getLogger(Get.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The ID of the conference to retrieve + String conferenceId = "CONFERENCE_ID"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConferencesService conferencesService = client.voice().v1().conferences(); + + LOGGER.info(String.format("Get info for conference with ID '%s'", conferenceId)); + + GetConferenceInfoResponse response = conferencesService.get(conferenceId); + + LOGGER.info("Response: " + response); + } +} diff --git a/examples/snippets/src/main/java/voice/conferences/KickAll.java b/examples/snippets/src/main/java/voice/conferences/KickAll.java new file mode 100644 index 000000000..109946fa5 --- /dev/null +++ b/examples/snippets/src/main/java/voice/conferences/KickAll.java @@ -0,0 +1,44 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.conferences; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ConferencesService; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class KickAll { + + private static final Logger LOGGER = Logger.getLogger(KickAll.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The ID of the conference to remove all participants from + String conferenceId = "CONFERENCE_ID"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConferencesService conferencesService = client.voice().v1().conferences(); + + LOGGER.info(String.format("Kick all participants from conference with ID '%s'", conferenceId)); + + conferencesService.kickAll(conferenceId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/voice/conferences/KickParticipant.java b/examples/snippets/src/main/java/voice/conferences/KickParticipant.java new file mode 100644 index 000000000..eb900cc4a --- /dev/null +++ b/examples/snippets/src/main/java/voice/conferences/KickParticipant.java @@ -0,0 +1,49 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.conferences; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ConferencesService; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class KickParticipant { + + private static final Logger LOGGER = Logger.getLogger(KickParticipant.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The ID of the conference to remove a participant from + String conferenceId = "CONFERENCE_ID"; + // The Call ID of the participant to remove from the conference + String callId = "CALL_ID"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConferencesService conferencesService = client.voice().v1().conferences(); + + LOGGER.info( + String.format( + "Kick participant with call ID '%s' for conference with ID '%s'", + callId, conferenceId)); + + conferencesService.kickParticipant(conferenceId, callId); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/java/voice/conferences/ManageParticipant.java b/examples/snippets/src/main/java/voice/conferences/ManageParticipant.java new file mode 100644 index 000000000..eb5f0fa8c --- /dev/null +++ b/examples/snippets/src/main/java/voice/conferences/ManageParticipant.java @@ -0,0 +1,62 @@ +/** + * Sinch Java Snippet + * + *

This snippet is available at https://github.com/sinch/sinch-sdk-java-snippets + * + *

See https://github.com/sinch/sinch-sdk-java-snippets/blob/main/README.md for details + */ +package voice.conferences; + +import com.sinch.sdk.SinchClient; +import com.sinch.sdk.domains.voice.api.v1.ConferencesService; +import com.sinch.sdk.domains.voice.models.v1.MusicOnHold; +import com.sinch.sdk.domains.voice.models.v1.conferences.request.ManageConferenceParticipantRequest; +import com.sinch.sdk.models.Configuration; +import java.util.logging.Logger; +import utils.Settings; + +public class ManageParticipant { + + private static final Logger LOGGER = Logger.getLogger(ManageParticipant.class.getName()); + + public static void main(String[] args) { + + String applicationKey = Settings.getApplicationKey().orElse("MY_APPLICATION_KEY"); + String applicationSecret = Settings.getApplicationSecret().orElse("MY_APPLICATION_SECRET"); + + // The ID of the conference to manage a participant in + String conferenceId = "CONFERENCE_ID"; + // The Call ID of the participant to manage in the conference + String callId = "CALL_ID"; + + Configuration configuration = + Configuration.builder() + .setApplicationKey(applicationKey) + .setApplicationSecret(applicationSecret) + .build(); + + SinchClient client = new SinchClient(configuration); + + ConferencesService conferencesService = client.voice().v1().conferences(); + + ManageConferenceParticipantRequest.CommandEnum command = + ManageConferenceParticipantRequest.CommandEnum.MUTE; + MusicOnHold moh = MusicOnHold.MUSIC1; + + LOGGER.info( + String.format( + "Manage participant with ID '%s' for conference with ID '%s'. Setting command to '%s'" + + " and music on hold to '%s'", + callId, conferenceId, command, moh)); + + ManageConferenceParticipantRequest request = + ManageConferenceParticipantRequest.builder() + .setCommand(command) + .setMusicOnHold(moh) + .build(); + + conferencesService.manageParticipant(conferenceId, callId, request); + + LOGGER.info("Done"); + } +} diff --git a/examples/snippets/src/main/resources/config.properties b/examples/snippets/src/main/resources/config.properties new file mode 100644 index 000000000..0bbca3ef6 --- /dev/null +++ b/examples/snippets/src/main/resources/config.properties @@ -0,0 +1,16 @@ +SINCH_PROJECT_ID= +SINCH_KEY_ID= +SINCH_KEY_SECRET= + +SINCH_SERVICE_PLAN_ID= +SINCH_SMS_REGION= + +SINCH_CONVERSATION_REGION= + +SINCH_APPLICATION_API_KEY= +SINCH_APPLICATION_API_SECRET= + +SINCH_MAILGUN_SERVICE_API_KEY= +SINCH_MAILGUN_REGION= + +SINCH_PHONE_NUMBER= diff --git a/examples/snippets/src/main/resources/logging.properties b/examples/snippets/src/main/resources/logging.properties new file mode 100644 index 000000000..85f27b08b --- /dev/null +++ b/examples/snippets/src/main/resources/logging.properties @@ -0,0 +1,7 @@ +handlers = java.util.logging.ConsoleHandler + +com.sinch.level = INFO + +java.util.logging.ConsoleHandler.level = INFO +java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter +java.util.logging.SimpleFormatter.format=[%4$-7s] [%2$s] %5$s%n From 791ea3291ed66fc87994c3175b16243db53fe54e Mon Sep 17 00:00:00 2001 From: Jean-Pierre Portier Date: Thu, 18 Dec 2025 15:52:08 +0100 Subject: [PATCH 3/4] test (Examples): Remove tests execution from SDK compilation for examples compilation --- .github/workflows/samples-compilation.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/samples-compilation.yaml b/.github/workflows/samples-compilation.yaml index d41f652ef..e61d9b4d9 100644 --- a/.github/workflows/samples-compilation.yaml +++ b/.github/workflows/samples-compilation.yaml @@ -17,7 +17,7 @@ jobs: cache: maven - name: Building run: | - mvn clean install -DskipTests=true -Dspotless.apply.skip=true + mvn clean install -DskipTests=true -Dspotless.apply.skip=true -DskipUTs -DskipITs cd sample-app mvn -B clean package cd ../examples From d59ad2d3434719225fc3b52226f55c5f8d15c715 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Portier Date: Thu, 18 Dec 2025 16:02:32 +0100 Subject: [PATCH 4/4] doc: README update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6fb5caf8e..995bc76a9 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ To enhance the onboarding experience, the following resources are available: - Sinch Online Developers Documentation: https://developers.sinch.com - Java SDK Online Javadoc: https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/latest - Java SDK Quickstart Repository: A repository with tutorials and templates to help you quickly start a new project: https://github.com/sinch/sinch-sdk-java-quickstart -- Java SDK Snippets Repository: A collection of basic code snippets for reference: https://github.com/sinch/sinch-sdk-java-snippets +- Java SDK Snippets: A collection of basic code snippets for reference: [snippets](examples/snippets/README.md) ## Third-party dependencies The SDK relies on the following third-party dependencies: