Отправка SMS на Java: обзор API библиотек (Twilio, Nexmo, SMS-шлюзы)

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

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

Начать курс

Отправка SMS на Java: обзор API библиотек и примеры интеграции

Отправка SMS-сообщений остаётся востребованной функцией для многих современных Java-приложений: от двухфакторной аутентификации и уведомлений до маркетинговых рассылок. В этой статье мы рассмотрим основные способы интеграции SMS-функционала в Java-проекты, включая использование популярных облачных API (Twilio, Nexmo) и прямое взаимодействие с SMS-шлюзом. Вы узнаете, как подключить библиотеку, настроить клиент и отправить первое сообщение.

1. Почему стоит использовать API библиотеки для отправки SMS?

Ручная работа с SMPP-протоколом или прямым подключением к GSM-модему требует глубоких знаний телекоммуникаций и часто приводит к проблемам с надёжностью. Готовые библиотеки решают эти задачи «из коробки»:

  • Простота интеграции — достаточно добавить зависимость в Maven/Gradle.
  • Надёжность — провайдеры гарантируют доставку и предоставляют мониторинг.
  • Поддержка юникода — кириллица и спецсимволы обрабатываются автоматически.
  • Статусы доставки — вы всегда знаете, получено ли сообщение.
  • Масштабирование — облачные сервисы справляются с тысячами запросов в секунду.

2. Twilio: самая популярная библиотека для SMS

Twilio — де-факто стандарт для отправки SMS и голосовых сообщений. Java SDK позволяет интегрировать функционал за считанные минуты.

2.1. Подключение

Добавьте зависимость в pom.xml (Maven):

<dependency>
    <groupId>com.twilio.sdk</groupId>
    <artifactId>twilio</artifactId>
    <version>9.10.0</version>
</dependency>

2.2. Отправка простого 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 = "your_account_sid";
    public static final String AUTH_TOKEN = "your_auth_token";

    public static void main(String[] args) {
        Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
        Message message = Message.creator(
                new PhoneNumber("+71234567890"),   // номер получателя
                new PhoneNumber("+79876543210"),   // номер отправителя (из Twilio)
                "Привет! Это тестовое SMS из Java-приложения.")
            .create();

        System.out.println("SMS отправлено. SID: " + message.getSid());
    }
}

Важно: номера должны быть в международном формате (E.164).
Стоимость: Twilio взимает плату за каждое сообщение (около $0.0079 для РФ). Есть бесплатный тестовый баланс.

3. Nexmo (Vonage): альтернатива с гибкими тарифами

Nexmo (ныне часть Vonage) также предлагает Java SDK. Библиотека отличается простым синтаксисом и хорошей поддержкой кириллицы.

3.1. Подключение

<dependency>
    <groupId>com.vonage</groupId>
    <artifactId>server-sdk</artifactId>
    <version>6.5.0</version>
</dependency>

3.2. Пример отправки

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 NexmoSms {
    public static void main(String[] args) {
        VonageClient client = VonageClient.builder()
            .apiKey("your_api_key")
            .apiSecret("your_api_secret")
            .build();

        TextMessage message = new TextMessage(
            "Vonage APIs",
            "71234567890",
            "Тест SMS от Nexmo на Java"
        );

        SmsSubmissionResponse response = client.getSmsClient().submitMessage(message);
        if (response.getMessages().get(0).getStatus() == MessageStatus.OK) {
            System.out.println("Сообщение отправлено успешно.");
        } else {
            System.out.println("Ошибка: " + response.getMessages().get(0).getErrorText());
        }
    }
}

Особенность: Nexmo требует регистрации отправителя (отображаемое имя) для некоторых стран. Для тестов можно использовать "Vonage APIs".

4. Прямое подключение к SMS-шлюзу (HTTP API)

Если вы используете локальный SMS-шлюз (например, Gammu или Kannel), можно отправлять запросы напрямую через HTTP. Этот метод не требует внешних библиоте

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