Отправка SMS на JavaScript (Node.js): API библиотеки и примеры кода

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

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

Начать курс

Отправка SMS на JavaScript (Node.js): API библиотеки и практические примеры

В современном мире SMS-уведомления остаются одним из самых надежных способов связи с пользователями. Будь то подтверждение регистрации, код двухфакторной аутентификации или маркетинговые рассылки — возможность программно отправлять SMS-сообщения является критически важной для многих веб-приложений. В этой статье мы рассмотрим, как реализовать отправку SMS на JavaScript (Node.js) с использованием различных API и библиотек.

Выбор SMS-провайдера и получение API-ключа

Первый шаг — выбор сервиса для отправки SMS. Существует множество провайдеров, таких как Twilio, Nexmo (Vonage), Amazon SNS, ClickSend и другие. Для начала работы вам потребуется:

  • Зарегистрироваться в выбранном сервисе.
  • Пополнить баланс или подключить тестовый аккаунт.
  • Получить API-ключ, SID и токен доступа (у каждого провайдера своя терминология).
  • Настроить отправителя (Sender ID) — номер телефона или буквенное имя.

Установка необходимых библиотек

Для работы с API SMS-провайдеров в Node.js чаще всего используются официальные SDK. Рассмотрим установку на примере популярного сервиса Twilio и универсальной библиотеки axios для HTTP-запросов.

# Установка библиотеки Twilio
npm install twilio

# Установка axios для REST API запросов
npm install axios

Пример 1: Отправка SMS через Twilio SDK

Twilio предоставляет удобный SDK для Node.js. После установки создайте файл send-sms.js и добавьте следующий код:

const twilio = require('twilio');

// Ваши учетные данные из консоли Twilio
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;

const client = new twilio(accountSid, authToken);

async function sendSMS() {
  try {
    const message = await client.messages.create({
      body: 'Привет! Это тестовое SMS из Node.js приложения.',
      from: '+1234567890', // Номер, полученный от Twilio
      to: '+79001234567'   // Номер получателя
    });
    console.log('SMS отправлено. SID:', message.sid);
  } catch (error) {
    console.error('Ошибка отправки SMS:', error);
  }
}

sendSMS();

Важно: Никогда не храните ключи в коде напрямую. Используйте переменные окружения (файл .env или системные настройки).

Пример 2: Отправка SMS через универсальное REST API

Если ваш провайдер не имеет официального SDK, вы можете использовать axios для отправки POST-запроса. Рассмотрим пример с абстрактным SMS-шлюзом:

const axios = require('axios');

const API_URL = 'https://api.sms-provider.com/v1/send';
const API_KEY = process.env.SMS_API_KEY;

async function sendSMSViaREST(phone, message) {
  try {
    const response = await axios.post(API_URL, {
      apiKey: API_KEY,
      phone: phone,
      text: message,
      sender: 'MyApp' // Имя отправителя
    }, {
      headers: {
        'Content-Type': 'application/json'
      }
    });
    console.log('Ответ сервера:', response.data);
  } catch (error) {
    console.error('Ошибка:', error.response ? error.response.data : error.message);
  }
}

// Использование
sendSMSViaREST('+79001234567', 'Ваш код подтверждения: 1234');

Обработка ошибок и статусов доставки

При работе с SMS важно учитывать возможные ошибки:

  • Неверный номер — проверяйте формат телефона (международный формат с +).
  • Недостаточно средств — контролируйте баланс аккаунта.
  • Ограничения провайдера — некоторые операторы блокируют массовые рассылки.
  • Таймауты — используйте обработку ошибок и повторные попытки (retry).

Для проверки статуса доставки многие провайдеры предоставляют вебхуки (callback URL). Пример обработки входящего уведомления:

const express = require('express');
const app = express();

app.use(express.json());

app.post('/webhook/sms-status', (req, res) => {
  const { MessageSid, MessageStatus, To } = req.body;
  console.log(`Статус SMS ${MessageSid} для номера ${To}: ${MessageStatus}`);
  res.status(200).send('OK');
});

app.listen(3000, () => console.log('Сервер вебхуков запущен на порту                    

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