Envoi de SMS en C# (.NET) : Intégration avec l'API des services SMS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Envoi de SMS en C# (.NET) : Guide complet d'intégration avec l'API



Dans le monde moderne, les notifications par SMS restent l'un des moyens les plus fiables de communiquer avec l'utilisateur. Dans l'écosystème C# (.NET), il existe de nombreuses approches pour envoyer des messages — des requêtes HTTP directes à l'utilisation de packages NuGet spécialisés. Dans cet article, nous allons voir comment configurer l'envoi de SMS via des services populaires (Twilio, sms.ru, Smsc) en utilisant une implémentation pure avec HttpClient, ainsi qu'examiner une bibliothèque prête à l'emploi pour travailler avec les fournisseurs russes.



Choix de l'approche : bibliothèque ou HTTP pur ?

Pour envoyer des SMS en C#, il existe deux voies principales :

  • Utilisation du SDK officiel (par exemple, Twilio pour .NET) — offre une interface typée, une gestion intégrée des erreurs et une documentation.
  • Travail direct avec l'API REST via HttpClient — contrôle total sur la requête, dépendances minimales, possibilité de travailler avec n'importe quel fournisseur.

La deuxième option est préférable à des fins éducatives et pour les projets nécessitant de la flexibilité. Examinons-la en détail.



Implémentation de base de l'envoi de SMS via l'API HTTP

Créons une classe SmsService qui enverra des messages via l'API de sms.ru (ou tout autre service avec un format similaire).



using System;using System.Net.Http;using System.Threading.Tasks;

public class SmsService{ private readonly HttpClient _httpClient; private readonly string _apiKey;

public SmsService(string apiKey) { _httpClient = new HttpClient(); _apiKey = apiKey; }

public async Task<string> SendSmsAsync(string phone, string message) { var url = $"https://sms.ru/sms/send?api_id={_apiKey}&to={phone}&msg={Uri.EscapeDataString(message)}&json=1"; var response = await _httpClient.GetAsync(url); return await response.Content.ReadAsStringAsync(); }}


Utilisation :

var sms = new SmsService("VOTRE_CLÉ_API");string result = await sms.SendSmsAsync("+79123456789", "Bonjour ! Ceci est un message de test.");Console.WriteLine(result);


Optimisation : asynchrone et gestion des erreurs

Dans un projet réel, il est nécessaire d'ajouter la validation du numéro, les tentatives de répétition en cas d'échec et la journalisation. Version améliorée :



public async Task<SmsResult> SendSmsAsync(string phone, string message){    try    {        if (string.IsNullOrWhiteSpace(phone) || phone.Length < 10)            return new SmsResult { Success = false, Error = "Format de numéro invalide" };

var url = $"https://sms.ru/sms/send?api_id={_apiKey}&to={phone}&msg={Uri.EscapeDataString(message)}&json=1"; var response = await _httpClient.GetAsync(url); var json = await response.Content.ReadAsStringAsync();

// Analyse JSON (vous pouvez utiliser System.Text.Json) var result = JsonSerializer.Deserialize<SmsApiResponse>(json); return new SmsResult { Success = result?.Status == "OK", Response = json }; } catch (HttpRequestException ex) { return new SmsResult { Success = false, Error = $"Erreur réseau : {ex.Message}" }; }}


Pour analyser la réponse, créez un modèle simple :

public class SmsApiResponse{    public string Status { get; set; }    public int Balance { get; set; }}


Bibliothèque prête à l'emploi : Twilio pour .NET

Si vous avez besoin d'une solution prête pour la production, utilisez le SDK Twilio (NuGet : Twilio). Exemple :



using Twilio;using Twilio.Rest.Api.V2010.Account;

TwilioClient.Init("ACCOUNT_SID", "AUTH_TOKEN");

var message = MessageResource.Create( body: "Bonjour de C#!", from: new PhoneNumber("+1234567890"), to: new PhoneNumber("+79123456789"));

Console.WriteL

Recommendations