Envio de SMS em Kotlin com a biblioteca smslib4k
No desenvolvimento web moderno, a integração de notificações SMS continua sendo uma tarefa demandada: autenticação de dois fatores, notificações de status de pedido, lembretes. Para a linguagem Kotlin, existe a biblioteca conveniente smslib4k, que fornece uma interface unificada para trabalhar com provedores SMS populares através da REST API.
A biblioteca é escrita em Kotlin puro usando corrotinas (kotlinx.coroutines) e suporta o envio assíncrono de mensagens. Ela abstrai as diferenças entre provedores (Twilio, Vonage, SMS-Центр, СМС-Рай e outros), permitindo que o desenvolvedor se concentre na lógica de negócios.
Instalação e configuração
Para usar o smslib4k, adicione a dependência no build.gradle.kts:
repositories { mavenCentral()}
dependencies { implementation("io.github.smslib4k:smslib4k-core:2.1.0") // Para um provedor específico, por exemplo Twilio: implementation("io.github.smslib4k:smslib4k-twilio:2.1.0")}Após a sincronização do Gradle, a biblioteca está pronta para uso.
Inicialização básica do cliente
Cada provedor exige suas próprias credenciais. Vejamos a configuração para o serviço SMS-Центр (provedor russo popular):
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("Cliente SMS inicializado")}Para o Twilio, a construção será semelhante, mas exigirá accountSid e authToken.
Envio de um único SMS
A biblioteca suporta tanto o envio síncrono quanto o assíncrono. Recomenda-se o uso de corrotinas:
import kotlinx.coroutines.runBlockingimport io.github.smslib4k.core.model.SmsMessage
fun main() = runBlocking { val client = createClient() // função do exemplo anterior
val message = SmsMessage( to = "+79161234567", text = "Olá! Esta é uma mensagem de teste do Kotlin." )
val result = client.send(message) println("Status: ${result.status}") println("ID da mensagem: ${result.messageId}")}O método send retorna um objeto SmsResult contendo o status (SUCCESS, FAILED, PENDING) e um identificador único do provedor.
Envio em massa
Para enviar o mesmo texto para vários números, use sendBatch:
val recipients = listOf( "+79161234567", "+79261234568", "+79361234569")
val batchResult = client.sendBatch( to = recipients, text = "Promoção! 20% de desconto em todos os produtos até o final da semana.")
batchResult.forEach { (phone, result) -> println("$phone: ${result.status}")}A biblioteca lida automaticamente com os limites de requisições por segundo do provedor, usando um rate-limiter integrado.
Configuração de parâmetros adicionais
Muitos provedores suportam opções avançadas: nome do remetente (alfa-nome), flag de transacionalidade, tempo de vida da mensagem. No smslib4k, isso é implementado através do builder:
val message = SmsMessageBuilder() .to("+79161234567") .text("Seu código de confirmação: 1234") .sender("MyApp") // alfa-nome (se permitido pelo provedor) .ttl(300) // tempo de vida em segundos .isTransactional(true) // entrega prioritária .build()
client.send(message)Tratamento de erros
A biblioteca lança exceções em caso de problemas de rede ou credenciais inválidas. Recomenda-se envolver as chamadas em try-catch:
t Também na biblioteca
Métricas Prometheus em Node.js: biblioteca prom-client para monitoramento
Envio de email em Kotlin: bibliotecas, exemplos e configuração SMTP
Parsing de HTML em Kotlin: jsoup, ktor, khtml e outras ferramentas
Anvil para Kotlin: guia completo com exemplos práticos
Validação de dados em JavaScript (Node.js): Joi, Yup, Zod