Отправка SMS на TypeScript: обзор API и библиотек
Современные веб-приложения и сервисы часто требуют интеграции с SMS-шлюзами для отправки уведомлений, подтверждений или маркетинговых сообщений. TypeScript, как надстройка над JavaScript, предоставляет строгую типизацию, что особенно полезно при работе с внешними API. В этой статье мы рассмотрим, как организовать отправку SMS из TypeScript-приложения, используя популярные библиотеки и сервисы.
Почему TypeScript для работы с SMS API?
TypeScript добавляет статическую типизацию, что снижает количество ошибок в рантайме. При работе с SMS-провайдерами это критично, так как запросы к API часто содержат сложные структуры данных (номера телефонов, текст, параметры отправки). Типы помогают избежать опечаток в названиях полей и гарантируют корректную передачу данных.
Основные библиотеки для отправки SMS
На рынке существует несколько популярных сервисов, предоставляющих HTTP API для отправки SMS. Рассмотрим два наиболее распространённых варианта для TypeScript.
1. Twilio (официальный SDK)
Twilio — один из лидеров рынка облачных коммуникаций. Официальный SDK для Node.js полностью совместим с TypeScript и поставляется с готовыми типами.
Установка:
npm install twilio
npm install @types/twilio --save-dev // типы уже включены, но для старых версий
Пример отправки SMS:
import { Twilio } from 'twilio';
const accountSid = 'ВАШ_ACCOUNT_SID';
const authToken = 'ВАШ_AUTH_TOKEN';
const client = new Twilio(accountSid, authToken);
interface SmsParams {
to: string; // номер получателя в формате +71234567890
from: string; // номер отправителя (купленный в Twilio)
body: string; // текст сообщения
}
async function sendSms(params: SmsParams): Promise<void> {
try {
const message = await client.messages.create({
body: params.body,
from: params.from,
to: params.to,
});
console.log(`SMS отправлено. SID: ${message.sid}`);
} catch (error) {
console.error('Ошибка отправки:', error);
}
}
// Использование
sendSms({
to: '+79001234567',
from: '+15005550006',
body: 'Привет! Это тестовое сообщение из TypeScript.',
});
2. SMS Aero (REST API через fetch/axios)
SMS Aero — российский сервис, популярный для локальных проектов. Официального SDK для TypeScript нет, но можно использовать типизированные обёртки над fetch или axios.
Установка:
npm install axios
Пример с типизированным запросом:
import axios, { AxiosResponse } from 'axios';
interface SmsAeroResponse {
status: 'success' | 'error';
id?: number;
message?: string;
}
interface SmsAeroParams {
to: string;
from?: string;
text: string;
sign?: string; // подпись отправителя
}
const API_URL = 'https://gate.smsaero.ru/v2/sms/send';
const EMAIL = 'ваш_email@example.com';
const API_KEY = 'ваш_ключ';
async function sendSmsAero(params: SmsAeroParams): Promise<SmsAeroResponse> {
const auth = Buffer.from(`${EMAIL}:${API_KEY}`).toString('base64');
const response: AxiosResponse<SmsAeroResponse> = await axios.post(
API_URL,
{
number: params.to,
text: params.text,
sign: params.sign || 'SMS Aero',
},
{
headers: {
'Authorization': `Basic ${auth}`,
'Content-Type': 'application/json',
},
}
);
return response.data;
}
// Использование
sendSmsAero({
to: '79001234567',
text: 'Ваш код подтверждения: 1234',
sign: 'MyApp',
}).then(res => console.log(res));
Создание универсальной TypeScript-обёртки
Для проектов, где может потребоваться смена провайдера, удобно создать абстрактный интерфейс и фабрику.
interface SmsProvider {
send(params: SmsParams): Promise<boolean>;
}
class TwilioProvider implements SmsProvider {
async send(params: SmsParams): Promise<boolean> {
// реализация для Twilio
return true;
}
}
class SmsAeroProvider implements SmsProvider {
async send(params: SmsParams): Promise<boolean> {
// реализация для SMS Aero
return true;
}
}
function createSmsProvider(type: 'twilio' | 'smsaero'): SmsProvider {
switch (type) {
case 'twilio': return new TwilioProvider();
case 'smsaero': return new SmsAeroProvider();
default: throw new Error('Неизвестный провайдер');
}
}
Также в библиотеке
WebSocket библиотеки Swift: Starscream и URLSessionWebSocketTask
Генерация QR-кодов в Node.js: библиотека qrcode и примеры
Генератор QR-кодов на Go (Golang) с библиотекой go-qrcode
Exposed для Kotlin: полное руководство с примерами
Мониторинг приложений на Rust: библиотеки и инструменты для отслеживания производительности
Рекомендаций
Также в библиотеке
WebSocket библиотеки Swift: Starscream и URLSessionWebSocketTask
Генерация QR-кодов в Node.js: библиотека qrcode и примеры
Генератор QR-кодов на Go (Golang) с библиотекой go-qrcode
Exposed для Kotlin: полное руководство с примерами
Мониторинг приложений на Rust: библиотеки и инструменты для отслеживания производительности