Отправка SMS на TypeScript: Обзор API библиотек для интеграции с SMS-провайдерами
Современные веб-приложения часто требуют функциональности отправки SMS-сообщений: для двухфакторной аутентификации, уведомлений или маркетинговых рассылок. TypeScript, благодаря строгой типизации и удобной интеграции с Node.js, является отличным выбором для создания надёжных SMS-сервисов. В этой статье мы рассмотрим ключевые библиотеки и подходы к отправке SMS на TypeScript, используя популярные API SMS-провайдеров.
Почему TypeScript для отправки SMS?
TypeScript добавляет статическую типизацию в JavaScript, что особенно полезно при работе с внешними API. Вы получаете:
- Автодополнение и подсказки в IDE для методов и параметров запросов.
- Типизацию ответов от SMS-шлюза, что снижает количество ошибок времени выполнения.
- Безопасную работу с асинхронностью через
async/awaitи Promise.
Основные библиотеки для отправки SMS в TypeScript
Существует несколько популярных библиотек, предоставляющих TypeScript-типы и удобные интерфейсы для интеграции с SMS-провайдерами. Рассмотрим две наиболее распространённые: Twilio и Vonage (бывший Nexmo).
1. Библиотека для Twilio
Twilio — один из лидеров рынка облачных коммуникаций. Официальный SDK twilio полностью поддерживает TypeScript и предоставляет готовые типы.
Установка:
npm install twilio
npm install @types/twilio --save-dev // если не установлены автоматически
Пример отправки SMS на TypeScript с Twilio:
import { Twilio } from 'twilio';
// Инициализация клиента
const accountSid = process.env.TWILIO_ACCOUNT_SID!;
const authToken = process.env.TWILIO_AUTH_TOKEN!;
const client = new Twilio(accountSid, authToken);
// Асинхронная функция отправки
async function sendSms(to: string, body: string): Promise<string> {
try {
const message = await client.messages.create({
body: body,
from: process.env.TWILIO_PHONE_NUMBER, // ваш номер в формате +1234567890
to: to
});
console.log(`SMS отправлено, SID: ${message.sid}`);
return message.sid;
} catch (error) {
console.error('Ошибка отправки SMS:', error);
throw error;
}
}
// Использование
sendSms('+71234567890', 'Ваш код подтверждения: 1234')
.then(sid => console.log('Успех:', sid))
.catch(err => console.error('Ошибка:', err));
2. Библиотека для Vonage (бывший Nexmo)
Vonage также предлагает мощный SDK с поддержкой TypeScript. Установка и базовая конфигурация:
npm install @vonage/server-sdk
Пример отправки SMS через Vonage на TypeScript:
import { Vonage } from '@vonage/server-sdk';
import { Auth } from '@vonage/auth';
// Настройка аутентификации
const vonage = new Vonage(new Auth({
apiKey: process.env.VONAGE_API_KEY!,
apiSecret: process.env.VONAGE_API_SECRET!
}));
async function sendSmsVonage(to: string, text: string): Promise<void> {
try {
const response = await vonage.sms.send({
to: to,
from: 'YourApp',
text: text
});
console.log('Сообщение отправлено:', response);
} catch (error) {
console.error('Ошибка:', error);
}
}
// Вызов функции
sendSmsVonage('71234567890', 'Привет от TypeScript!');
Создание универсального SMS-сервиса на TypeScript
Для гибкости можно создать абстрактный класс или интерфейс, который позволит легко переключаться между провайдерами:
// sms.interface.ts
export interface SmsProvider {
sendSms(to: string, message: string): Promise<boolean>;
}
// twilio.provider.ts
import { Twilio } from 'twilio';
export class TwilioProvider implements SmsProvider {
private client: Twilio;
constructor() {
this.client = new Twilio(process.env.TWILIO_SID!, process.env.TWILIO_TOKEN!);
}
async sendSms(to: string, message: string): Promise<boolean> {
await this.client.messages.create({ body: message, from: process.env.TWILIO_PHONE, to });
return true;
}
}
// vonage.provider.ts
import { Vonage } from '@vonage/server-sdk';
export class VonageProvider implements SmsProvider {
private vonage: Vonage;
constructor() {
this.vonage = new Vonage({ apiKey: process.env.VONAGE_KEY