Skip to content

sipgate-io/sipgateio-sendsms-java

Repository files navigation

sipgate logo

sipgate.io java send sms example

To demonstrate how to send an SMS, we queried the /sessions/sms endpoint of the sipgate REST API.

For further information regarding the sipgate REST API please visit https://api.sipgate.com/v2/doc

Prerequisites

  • JDK 8

How To Use

Navigate to the project's root directory.

Create the .env by copying the .env.example and set the values according to the comment above each variable.

The token should have the sessions:sms:write scope. For more information about personal access tokens visit https://www.sipgate.io/rest-api/authentication#personalAccessToken.

The smsId uniquely identifies the extension from which you wish to send your message. Further explanation is given in the section Web SMS Extensions.

In order to run the code you also have to set the following variable in SendSms.java:

String message = "YOUR_MESSAGE";

Optional: In order to send a delayed message uncomment the following lines and set the desired date and time in the future (up to one month):

Calendar timestamp = Calendar.getInstance();
timestamp.set(2001, 6, 24, 13, 37);
long sendAt = timestamp.getTimeInMillis()/1000;

Note: The numbering of the months starts from 0 for January to 11 for December. Calendar documentation

Additionally, in the SMS object uncomment the sendAt property.

SMS sms = new SMS(smsId, message, recipient, sendAt);

Note: The sendAt property in the SMS object is a Unix timestamp.

Run the application:

./gradlew run
How It Works

The sipgate REST API is available under the following base URL:

private static final String baseUrl = "https://api.sipgate.com/v2";

The API expects request data in JSON format. Thus the Content-Type header needs to be set accordingly. You can achieve that by using the header method from the Unirest library.

private static HttpResponse<String> sendNewSmsRequest(String tokenId, String token, SMS smsObject)
	throws UnirestException {
		return Unirest.post(baseUrl + "/sessions/sms")
			.header("Accept", "application/json")
			.header("Content-Type", "application/json")
			.basicAuth(tokenId, token)
			.body(smsObject)
			.asString();
	}

The request body contains the SMS object, which has four fields: smsId, recipient, message and an optional sendAt specified above.

public SMS(String smsId, String message, String recipient, long sendAt) {
	this.smsId = smsId;
	this.message = message;
	this.recipient = recipient;
	this.sendAt = sendAt;
}

We use the java package 'Unirest' for request generation and execution. The post method takes as argument the request URL. Headers, authorization header and the request body, are generated from header, basicAuth and body methods respectively. The request URL consists of the base URL defined above and the endpoint /sessions/sms. The method basicAuth from the 'Unirest' package takes credentials and generates the required Basic Auth header (for more information on Basic Auth see our code example).

Unirest.post(baseUrl + "/sessions/sms")
	.header("Accept", "application/json")
	.header("Content-Type", "application/json")
	.basicAuth(tokenId, token)
	.body(smsObject)
	.asString();

If OAuth should be used for Authorization instead of Basic Auth we do not use the .basicAuth(tokenId, token) mehthod. Instead we set the authorization header to Bearer followed by a space and the access token: .header("Authorization", "Bearer " + accessToken). For an example application interacting with the sipgate API using OAuth see our sipgate.io Java Oauth example.

Send SMS with custom sender number

By default 'sipgate' will be used as the sender. It is only possible to change the sender to a mobile phone number by verifying ownership of said number. In order to accomplish this, proceed as follows:

  1. Log into your sipgate account
  2. Click SMS in the sidebar (if this option is not displayed you might need to book the Web SMS feature from the Feature Store)
  3. Click the gear icon on the right side of the Caller ID box and enter the desired sender number.
  4. Proceed to follow the instructions on the website to verify the number.

Web SMS Extensions

A Web SMS extension consists of the letter 's' followed by a number (e.g. 's0'). The sipgate API uses the concept of Web SMS extensions to identify devices within your account that are enabled to send SMS. In this context the term 'device' does not necessarily refer to a hardware phone but rather a virtual connection.

You can use the sipgate api to find out what your extension is. For example:

curl \
--user tokenId:token \
https://api.sipgate.com/v2/{userId}/sms

Replace tokenId and token with your sipgate credentials and userId with your sipgate user id.

The user id consists of the letter 'w' followed by a number (e.g. 'w0'). It can be found as follows:

  1. Log into your sipgate account
  2. The URL of the page should have the form https://app.sipgate.com/{userId}/... where {userId} is your user id.

Common Issues

SMS sent successfully but no message received

Possible reasons are:

  • incorrect or mistyped phone number
  • recipient phone is not connected to network
  • long message text - delivery can take a little longer

HTTP Errors

reason errorcode
bad request (e.g. request body fields are empty or only contain spaces, timestamp is invalid etc.) 400
tokenId and/or token are wrong 401
insufficient account balance 402
no permission to use specified SMS extension (e.g. SMS feature not booked, user password must be reset in web app) 403
wrong REST API endpoint 404
wrong request method 405
wrong or missing Content-Type header with application/json 415
internal server error or unhandled bad request (e.g. smsId not set) 500

Related

Contact Us

Please let us know how we can improve this example. If you have a specific feature request or found a bug, please use Issues or fork this repository and send a pull request with your improvements.

License

This project is licensed under The Unlicense (see LICENSE file).

External Libraries

This code uses the following external libraries


sipgate.io | @sipgateio | API-doc

About

A demonstration of how to send SMS using the sipgate REST API.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published