Отправка SMS на C# (.NET): Интеграция с API SMS-сервисов
В современном мире отправка SMS-сообщений остаётся востребованной задачей для уведомлений, двухфакторной аутентификации и оповещений клиентов. В экосистеме .NET нет встроенной библиотеки для отправки SMS — все операции выполняются через HTTP-запросы к API сторонних SMS-провайдеров. В этой статье мы разберём, как организовать отправку SMS на C# с использованием HttpClient, и рассмотрим примеры интеграции с популярными сервисами.
Выбор SMS-провайдера и ключевые параметры
Перед началом работы необходимо зарегистрироваться в одном из SMS-сервисов. Наиболее популярные: Twilio, Vonage (Nexmo), SMS Aero, СМСЦентр. Все они предоставляют REST API. Для отправки потребуются:
- API ключ / токен — уникальный идентификатор вашего аккаунта.
- Secret / пароль — секретный ключ для аутентификации.
- Номер отправителя (Sender ID) — строка, которая будет отображаться у получателя (например, ваш бренд).
- Номер получателя — в международном формате (например, +71234567890).
Базовая реализация на C# с HttpClient
Для работы с HTTP-запросами в .NET используется класс System.Net.Http.HttpClient. Ниже приведён пример отправки SMS через API Twilio (один из самых популярных сервисов).
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
public class SmsSender
{
private readonly HttpClient _httpClient;
private readonly string _accountSid;
private readonly string _authToken;
public SmsSender(string accountSid, string authToken)
{
_accountSid = accountSid;
_authToken = authToken;
_httpClient = new HttpClient();
}
public async Task SendSmsAsync(string to, string from, string message)
{
// URL для Twilio API
string url = $"https://api.twilio.com/2010-04-01/Accounts/{_accountSid}/Messages.json";
// Формируем данные формы
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("To", to),
new KeyValuePair<string, string>("From", from),
new KeyValuePair<string, string>("Body", message)
});
// Добавляем Basic-аутентификацию
string auth = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{_accountSid}:{_authToken}"));
_httpClient.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", auth);
// Отправляем POST-запрос
HttpResponseMessage response = await _httpClient.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"SMS отправлено успешно: {responseBody}");
}
else
{
string error = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Ошибка: {response.StatusCode} - {error}");
}
}
}
Использование класса
class Program
{
static async Task Main(string[] args)
{
// Замените на свои данные из личного кабинета Twilio
string accountSid = "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string authToken = "your_auth_token_here";
var sender = new SmsSender(accountSid, authToken);
await sender.SendSmsAsync(
to: "+71234567890",
from: "+15017122661", // номер, выделенный Twilio
message: "Привет! Это тестовое SMS из C#."
);
}
}
Альтернативные провайдеры: пример с Vonage (Nexmo)
Для Vonage API используется другой формат запроса — JSON. Пример:
public async Task SendSmsVonageAsync(string to, string from, string message)
{
string apiKey = "your_api_key";
string apiSecret = "your_api_secret";
string url = "https://rest.nexmo.com/sms/json";
var payload = new
{
api_key = apiKey,
api_secret = apiSecret,
to = to,
@from = from,
text = message
};
string json = System.Text.Json.JsonSerializer.Serialize(payload);
var content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = await _httpClient.PostAsync(url, content);
// Обработка ответа аналогична примеру выше
}
Обработка ошибок и повторные попытки
При работе с внешними API важно предусмотреть:
- Проверку кода ответа — не только 200 OK, но и 201, 202 (асинхронная отправка).
- Retry-логику — при временных ошиб
Также в библиотеке
Redis клиент для C# (.NET): StackExchange.Redis — подключение и примеры
Стандартная библиотека JavaScript (Node.js): полный обзор
Машинное обучение на PHP: обзор библиотек и инструментов
Авторизация и аутентификация в PHP: Полное руководство с примерами