Использование библиотеки smslib4k для отправки SMS в Kotlin
В современной веб-разработке интеграция SMS-уведомлений остается востребованной задачей: двухфакторная аутентификация, уведомления о статусе заказа, напоминания и т.д. Для языка Kotlin существует удобная библиотека smslib4k, которая предоставляет единый интерфейс для работы с популярными SMS-провайдерами через REST API.
Библиотека написана на чистом Kotlin и использует корутины (kotlinx.coroutines), что позволяет выполнять асинхронную отправку сообщений. Она абстрагирует различия между разными провайдерами (Twilio, Vonage, SMS-Центр, СМС-Рай и др.), позволяя разработчику сосредоточиться на бизнес-логике.
Установка и настройка
Для использования smslib4k добавьте зависимость в build.gradle.kts:
repositories { mavenCentral()}
dependencies { implementation("io.github.smslib4k:smslib4k-core:2.1.0") // Для конкретного провайдера, например Twilio: implementation("io.github.smslib4k:smslib4k-twilio:2.1.0")}После синхронизации Gradle библиотека готова к использованию.
Базовая инициализация клиента
Каждый провайдер требует свои учетные данные. Вот пример настройки для SMS-Центр (популярного российского провайдера):
import io.github.smslib4k.core.SmsClientimport io.github.smslib4k.providers.smscenter.SmsCenterProvider
fun main() { val client = SmsClient( provider = SmsCenterProvider( login = "your_login", password = "your_password" ) ) println("SMS-клиент инициализирован")}Для Twilio структура аналогична, но требует accountSid и authToken.
Отправка одиночного SMS
Библиотека поддерживает как синхронную, так и асинхронную отправку. Рекомендуется использовать корутины:
import kotlinx.coroutines.runBlockingimport io.github.smslib4k.core.model.SmsMessage
fun main() = runBlocking { val client = createClient() // функция из предыдущего примера
val message = SmsMessage( to = "+79161234567", text = "Привет! Это тестовое сообщение из Kotlin." )
val result = client.send(message) println("Статус: ${result.status}") println("ID сообщения: ${result.messageId}")}Метод send возвращает объект SmsResult, содержащий статус (SUCCESS, FAILED, PENDING) и уникальный идентификатор от провайдера.
Массовая отправка
Для отправки одного и того же текста на несколько номеров используйте sendBatch:
val recipients = listOf( "+79161234567", "+79261234568", "+79361234569")
val batchResult = client.sendBatch( to = recipients, text = "Акция! Скидка 20% на все товары на этой неделе.")
batchResult.forEach { (phone, result) -> println("$phone: ${result.status}")}Библиотека автоматически обрабатывает ограничения провайдера на количество запросов в секунду с помощью встроенного ограничителя скорости.
Настройка дополнительных параметров
Многие провайдеры поддерживают расширенные опции: имя отправителя (альфа-имя), флаг транзакционности, время жизни сообщения. В smslib4k это реализуется через билдер:
val message = SmsMessageBuilder() .to("+79161234567") .text("Ваш код подтверждения: 1234") .sender("MyApp") // Альфа-имя (если разрешено провайдером) .ttl(300) // Время жизни в секундах .isTransactional(true) // Приоритетная доставка .build()
client.send(message)Обработка ошибок
При возникновении сетевых проблем или неверных учетных данных библиотека выбрасывает исключения. Рекомендуется оборачивать вызовы в try-catch:
t