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
- Инициализируйте npm‑проект:
npm init -y - Установите
axiosи типы (если используете TypeScript):npm i axios - Создайте файл
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
- Какой формат данных лучше использовать в API‑запросе? JSON – самый распространённый, поддерживается всеми современными провайдерами.
- Можно ли отправлять SMS без установки сторонних библиотек? Да, можно использовать
fetchв Node 18+. - Что делать, если SMS не доставляется? Проверьте коды ошибок, убедитесь, что номер в международном формате и смените провайдера, если проблема повторяется.
- Как ограничить частоту отправки? Используйте библиотеки
p-limitилиbottleneckдля управления лимитами. - Нужна ли аутентификация OAuth‑2.0? Рекомендуется, но многие провайдеры позволяют использовать статический API‑ключ. OAuth обеспечивает более высокий уровень безопасности.
- Как хранить шаблоны SMS? В базе данных (PostgreSQL, MongoDB) или в файлах YAML/JSON, используя шаблонизатор Mustache.
- Как интегрировать webhook? Настройте HTTPS‑эндпоинт в Express или Fastify и обрабатывайте POST‑запросы.
- Где найти документацию по конкретному провайдеру? Посмотрите ссылки в начале статьи: Полное руководство по SMS API.