Новое

Реализация SMS‑рассылок на Node.js и JavaScript: практическое руководство

Node.js позволяет быстро отправлять SMS через популярные API, используя axios или fetch. В 2026 году большинство провайдеров предоставляют REST‑интерфейсы с JSON‑payload, что упрощает интеграцию в микросервисные архитектуры.

Как выбрать подходящий SMS‑API для Node.js

Выбор провайдера зависит от географии, стоимости, SLA и API‑функционала. Сравните основные параметры в таблице ниже.

ПровайдерГеографияТип APIСтоимость
TwilioМеждународноREST (JSON)0.0075 $/SMS
Yandex.SMSРоссия, СНГREST (JSON)0.005 $/SMS
ClickSendМеждународноREST (JSON)0.006 $/SMS

Для 2026 года рекомендуем использовать API с OAuth‑2.0, так как он обеспечивает более надёжную авторизацию и масштабируемость.

Ключевые требования к API: авторизация, формат данных, доставка

Обязательно проверь наличие:

  • OAuth‑2.0 или API‑ключей с ограничением доступа
  • Поддержку JSON и XML
  • Отчёты о доставке (delivery receipts)
  • Коды ошибок и документацию

Подготовка проекта Node.js для работы с SMS‑API

  1. Инициализируйте npm‑проект: npm init -y
  2. Установите axios и типы (если используете TypeScript): npm i axios
  3. Создайте файл smsService.js:
const axios = require('axios');

const smsApiUrl = 'https://api.example.com/v1/messages';
const apiKey = process.env.SMS_API_KEY;

async function sendSMS(phone, text) {
  try {
    const response = await axios.post(smsApiUrl, {
      to: phone,
      message: text
    }, {
      headers: {
        'Authorization': `Bearer ${apiKey}`,
        'Content-Type': 'application/json'
      }
    });
    return response.data;
  } catch (err) {
    console.error('SMS send error:', err.response?.data || err.message);
    throw err;
  }
}

module.exports = { sendSMS };

Установите переменную окружения SMS_API_KEY в .env файле.

Проверка отправки SMS и обработка ответов

Большинство провайдеров возвращают объект с полями status, messageId и cost. Обработайте их следующим образом:

const result = await sendSMS('+79161234567', 'Привет!');
if (result.status === 'queued') {
  console.log(`SMS queued, ID: ${result.messageId}`);
}

Расширенные возможности: шаблоны и массовые рассылки

Для больших списков используйте пакет p-limit или bottleneck для управления лимитами. Также рекомендую хранить шаблоны в базах данных (PostgreSQL, MongoDB) и заменять переменные через Mustache или handlebars.

const Mustache = require('mustache');
const template = 'Здравствуйте, {{name}}! Ваш код: {{code}}';
const payload = Mustache.render(template, {name: 'Иван', code: '1234'});
await sendSMS('+79161234567', payload);

Быстрый пример массовой рассылки

const Bottleneck = require('bottleneck');
const limiter = new Bottleneck({ maxConcurrent: 5, minTime: 200 });

async function batchSend(numbers, message) {
  const promises = numbers.map(num => limiter.schedule(() => sendSMS(num, message)));
  return Promise.allSettled(promises);
}

Тестирование и мониторинг SMS‑рассылок

Настройте webhook для получения статусов доставки. Большинство провайдеров поддерживают HTTPS‑эндпоинт, который будет POST‑ить JSON с полями messageId, status и timestamp.

const express = require('express');
const app = express();
app.use(express.json());
app.post('/sms/webhook', (req, res) => {
  const { messageId, status, timestamp } = req.body;
  console.log(`SMS ${messageId} status: ${status} at ${timestamp}`);
  res.sendStatus(200);
});
app.listen(3000, () => console.log('Webhook listening on 3000'));

Для контроля ошибок интегрируйте справочник кода ошибок и храните отчёты в журнале.

Оптимизация стоимости и соблюдение правил GDPR/CCPA

Сократите расходы, используя агрегированные списки номеров и фильтрацию спам‑массивов. При работе с EU‑пользователями включите согласие на получение SMS в пользовательском интерфейсе и храните чек‑пойнты.

В 2026 году регуляторы требуют, чтобы каждый пользователь мог отозвать согласие в течение 24 часов.

Отдельный документ Европейского регулятора по защите данных

Заключение

Node.js с axios обеспечивает гибкую и масштабируемую отправку SMS. Главное – выбрать надёжного провайдера, правильно настроить авторизацию, обрабатывать ответы и соблюдать юридические требования. С этими знаниями вы сможете быстро интегрировать SMS‑рассылки в свои бизнес‑процессы.

FAQ

  1. Какой формат данных лучше использовать в API‑запросе? JSON – самый распространённый, поддерживается всеми современными провайдерами.
  2. Можно ли отправлять SMS без установки сторонних библиотек? Да, можно использовать fetch в Node 18+.
  3. Что делать, если SMS не доставляется? Проверьте коды ошибок, убедитесь, что номер в международном формате и смените провайдера, если проблема повторяется.
  4. Как ограничить частоту отправки? Используйте библиотеки p-limit или bottleneck для управления лимитами.
  5. Нужна ли аутентификация OAuth‑2.0? Рекомендуется, но многие провайдеры позволяют использовать статический API‑ключ. OAuth обеспечивает более высокий уровень безопасности.
  6. Как хранить шаблоны SMS? В базе данных (PostgreSQL, MongoDB) или в файлах YAML/JSON, используя шаблонизатор Mustache.
  7. Как интегрировать webhook? Настройте HTTPS‑эндпоинт в Express или Fastify и обрабатывайте POST‑запросы.
  8. Где найти документацию по конкретному провайдеру? Посмотрите ссылки в начале статьи: Полное руководство по SMS API.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *