Envoi de SMS en Go (Golang) : aperçu des bibliothèques API et exemples d'implémentation
L'envoi de messages SMS est l'une des fonctions clés des applications web modernes : de l'authentification à deux facteurs aux notifications de statut de commande. Dans l'écosystème Go (Golang), il existe plusieurs bibliothèques matures qui permettent d'intégrer l'envoi de SMS via des passerelles populaires (Twilio, Vonage, Clickatell, fournisseurs russes). Dans cet article, nous allons détailler comment configurer l'envoi de SMS en Go, en utilisant les meilleures pratiques et les API officielles.
Pourquoi Go pour l'envoi de SMS ?
Go est un langage compilé avec un excellent support de la concurrence, ce qui est idéal pour l'envoi asynchrone d'un grand nombre de messages. Grâce aux goroutines et aux canaux intégrés, vous pouvez traiter des milliers de requêtes SMS sans bloquer le thread principal. De plus, la bibliothèque standard net/http permet de travailler facilement avec les API REST de n'importe quel fournisseur de SMS.
Bibliothèques principales pour travailler avec les SMS en Go
- twilio-go — client officiel pour Twilio (le service international le plus populaire). Prend en charge les SMS, MMS et appels vocaux.
- vonage-go (anciennement Nexmo) — client pour l'API Vonage.
- go-sms — bibliothèque universelle avec support de plusieurs fournisseurs (SMS.ru, Twilio, Clickatell).
- gosms — wrapper simple pour les requêtes HTTP vers n'importe quelle passerelle SMS.
Installation de la bibliothèque
Pour l'exemple, nous utiliserons le client officiel Twilio. Installez le package via go get :
go get github.com/twilio/twilio-goPour le fournisseur russe SMS.ru, il existe également une bibliothèque pratique :
go get github.com/smsru/smsru-goExemple de base : envoi de SMS via Twilio
Avant de commencer, obtenez votre Account SID et Auth Token depuis la console Twilio. Voici un code fonctionnel minimal :
package main
import ( "fmt" "os"
"github.com/twilio/twilio-go" openapi "github.com/twilio/twilio-go/rest/api/v2010")
func main() { // Initialisation du client client := twilio.NewRestClientWithParams(twilio.ClientParams{ Username: os.Getenv("TWILIO_ACCOUNT_SID"), Password: os.Getenv("TWILIO_AUTH_TOKEN"), })
// Paramètres du message params := &openapi.CreateMessageParams{} params.SetTo("+1234567890") // numéro du destinataire params.SetFrom("+0987654321") // votre numéro Twilio params.SetBody("Bonjour ! Ceci est un SMS de test depuis Go !")
// Envoi resp, err := client.Api.CreateMessage(params) if err != nil { fmt.Println("Erreur d'envoi :", err) return }
fmt.Println("SMS envoyé ! SID :", *resp.Sid)}Envoi de SMS via une passerelle russe (SMS.ru)
Pour l'intégration avec SMS.ru, utilisez la bibliothèque smsru-go. Le code ressemblera à ceci :
package main
import ( "fmt" "os"
"github.com/smsru/smsru-go")
func main() { // Création du client avec la clé API client := smsru.NewClient(os.Getenv("SMSRU_API_KEY"))
// Envoi d'un seul message result, err := client.SendSMS("+79991234567", "Bonjour ! Ceci est un test depuis Go !") if err != nil { fmt.Println("Erreur :", err) return }
if result.Status == "OK" { fmt.Println("SMS envoyé ! ID :", result.SmsID) } else { fmt.Println("Erreur :", result.StatusText) }}Envoi asynchrone avec goroutines
L'un des principaux avantages de Go est la possibilité d'envoyer facilement des SMS en parallèle. Exemple d'envoi en masse :
package main
import ( "fmt" "sync")
func sendSMSAsync(client *smsru.Client, phone, message string, wg *sync.WaitGroup) { defer wg.Done() resul Aussi dans la bibliothèque
Validation des données en Swift : bibliothèque Validator
Métriques Prometheus en Rust : bibliothèques prometheus et metrics-exporter-prometheus
Rate Limiting en Java : bibliothèques, algorithmes et implémentation
Kingfisher pour Swift : guide complet avec exemples