Envoi de SMS en Kotlin avec la bibliothèque smslib4k
Dans le développement web moderne, l'intégration de notifications SMS reste une tâche courante : authentification à deux facteurs, notifications de statut de commande, rappels. Pour le langage Kotlin, il existe une bibliothèque pratique smslib4k qui fournit une interface unifiée pour travailler avec les fournisseurs SMS populaires via l'API REST.
La bibliothèque est écrite en Kotlin pur en utilisant les coroutines (kotlinx.coroutines) et prend en charge l'envoi asynchrone de messages. Elle abstrait les différences entre les fournisseurs (Twilio, Vonage, SMS-Centre, SMS-Rai, etc.), permettant au développeur de se concentrer sur la logique métier.
Installation et configuration
Pour utiliser smslib4k, ajoutez la dépendance dans build.gradle.kts :
repositories { mavenCentral()}
dependencies { implementation("io.github.smslib4k:smslib4k-core:2.1.0") // Pour un fournisseur spécifique, par exemple Twilio : implementation("io.github.smslib4k:smslib4k-twilio:2.1.0")}Après la synchronisation Gradle, la bibliothèque est prête à être utilisée.
Initialisation de base du client
Chaque fournisseur nécessite ses propres identifiants. Considérons la configuration pour le service SMS-Centre (fournisseur russe populaire) :
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("Client SMS initialisé")}Pour Twilio, la construction sera similaire, mais nécessitera accountSid et authToken.
Envoi d'un SMS unique
La bibliothèque prend en charge à la fois l'envoi synchrone et asynchrone. Il est recommandé d'utiliser les coroutines :
import kotlinx.coroutines.runBlockingimport io.github.smslib4k.core.model.SmsMessage
fun main() = runBlocking { val client = createClient() // fonction de l'exemple précédent
val message = SmsMessage( to = "+79161234567", text = "Bonjour ! Ceci est un message de test depuis Kotlin." )
val result = client.send(message) println("Statut : ${result.status}") println("ID du message : ${result.messageId}")}La méthode send retourne un objet SmsResult contenant le statut (SUCCESS, FAILED, PENDING) et un identifiant unique du fournisseur.
Envoi en masse
Pour envoyer un même texte à plusieurs numéros, utilisez sendBatch :
val recipients = listOf( "+79161234567", "+79261234568", "+79361234569")
val batchResult = client.sendBatch( to = recipients, text = "Promotion ! 20% de réduction sur tous les articles jusqu'à la fin de la semaine.")
batchResult.forEach { (phone, result) -> println("$phone : ${result.status}")}La bibliothèque gère automatiquement les limites du fournisseur sur le nombre de requêtes par seconde, en utilisant un limiteur de débit intégré.
Configuration des paramètres supplémentaires
De nombreux fournisseurs prennent en charge des options avancées : nom de l'expéditeur (alpha-nom), indicateur de transactionalité, durée de vie du message. Dans smslib4k, cela est implémenté via un builder :
val message = SmsMessageBuilder() .to("+79161234567") .text("Votre code de confirmation : 1234") .sender("MonApp") // alpha-nom (si autorisé par le fournisseur) .ttl(300) // durée de vie en secondes .isTransactional(true) // livraison prioritaire .build()
client.send(message)Gestion des erreurs
La bibliothèque lève des exceptions en cas de problèmes réseau ou d'identifiants incorrects. Il est recommandé d'encadrer les appels avec try-catch :
t Aussi dans la bibliothèque
Parsing HTML en Rust : bibliothèques et exemples pour le web scraping
Programmation réactive en Rust : bibliothèques, frameworks et exemples pratiques
Journalisation en Rust : aperçu des meilleures bibliothèques et outils