Отправка SMS на Java: обзор API библиотек и инструментов

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Отправка 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

Рекомендаций