Отправка SMS на TypeScript: API библиотеки для интеграции с SMS-провайдерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Отправка 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                    

Рекомендаций