Отправка SMS на Java: обзор API библиотек и инструментов
Отправка SMS-сообщений остаётся востребованной задачей в современных веб-приложениях: двухфакторная аутентификация, уведомления, маркетинговые рассылки. В Java для этой цели существует несколько зрелых библиотек и API-обёрток. В этой статье мы рассмотрим основные подходы, популярные библиотеки и приведём практические примеры кода.
Базовые подходы к отправке SMS
Все методы отправки SMS на Java можно разделить на две группы:
- Прямое HTTP-взаимодействие с API провайдера — отправка HTTP-запросов (GET/POST) к REST-сервисам SMS-шлюзов (Twilio, Vonage/Nexmo, SMS-Центр и др.).
- Использование специализированных библиотек — готовых Java-обёрток, которые инкапсулируют HTTP-вызовы, аутентификацию и обработку ответов.
Популярные библиотеки и API для Java
Рассмотрим три наиболее распространённых варианта.
1. Twilio Java SDK
Twilio — один из лидеров рынка облачных коммуникаций. Официальный Java SDK (com.twilio.sdk:twilio) предоставляет простой и типобезопасный интерфейс.
Установка (Maven):
<dependency>
<groupId>com.twilio.sdk</groupId>
<artifactId>twilio</artifactId>
<version>9.14.0</version>
</dependency>
Пример отправки SMS:
import com.twilio.Twilio;
import com.twilio.rest.api.v2010.account.Message;
import com.twilio.type.PhoneNumber;
public class SmsSender {
public static final String ACCOUNT_SID = "ваш_account_sid";
public static final String AUTH_TOKEN = "ваш_auth_token";
public static void main(String[] args) {
Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
Message message = Message.creator(
new PhoneNumber("+79261234567"), // номер получателя
new PhoneNumber("+15551234567"), // номер отправителя (из Twilio)
"Привет! Это тестовое SMS из Java."
).create();
System.out.println("SID сообщения: " + message.getSid());
}
}
2. Vonage (ранее Nexmo) Java Client
Vonage предоставляет мощный Java SDK для отправки SMS и голосовых сообщений. Поддерживает синхронные и асинхронные вызовы.
Установка (Gradle):
implementation 'com.vonage:client:7.3.0'
Пример отправки SMS:
import com.vonage.client.VonageClient;
import com.vonage.client.sms.MessageStatus;
import com.vonage.client.sms.SmsSubmissionResponse;
import com.vonage.client.sms.messages.TextMessage;
public class VonageSms {
public static void main(String[] args) {
VonageClient client = VonageClient.builder()
.apiKey("ваш_api_key")
.apiSecret("ваш_api_secret")
.build();
TextMessage message = new TextMessage(
"VonageAPI", // отправитель (до 11 символов)
"79261234567", // получатель
"Тест из Java через Vonage"
);
SmsSubmissionResponse response = client.getSmsClient().submitMessage(message);
if (response.getMessages().get(0).getStatus() == MessageStatus.OK) {
System.out.println("SMS отправлено успешно.");
}
}
}
3. Работа с SMS-шлюзами через HTTP-клиент (OkHttp, Apache HttpClient)
Если вы предпочитаете минимализм и не хотите тянуть тяжёлые SDK, можно напрямую отправлять HTTP-запросы к API любого SMS-провайдера (например, sms.ru, smsc.ru).
Пример с OkHttp для гипотетического шлюза:
import okhttp3.*;
public class HttpSmsSender {
private static final String API_URL = "https://api.smsgateway.com/send";
private static final String API_KEY = "ваш_api_key";
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder()
.add("api_key", API_KEY)
.add("to", "79261234567")
.add("message", "SMS через HTTP из Java")
.build();
Request request = new Request.Builder()
.url(API_URL)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println("Ответ: " + response.body().string());
}
}
}
Сравнительная характеристика
- Twilio — лучшая документация, поддержка Webhook, но требуется верификация номера отправителя.
- Von