Отправка SMS на JavaScript (Node.js): библиотека twilio
В современной веб-разработке часто требуется отправлять SMS-уведомления пользователям: подтверждение регистрации, коды двухфакторной аутентификации, оповещения о статусе заказа и многое другое. В экосистеме Node.js одной из самых популярных и надёжных библиотек для этой задачи является twilio. Это официальный SDK от компании Twilio, который предоставляет простой и мощный API для программной отправки SMS, голосовых вызовов и работы с другими телекоммуникационными сервисами.
В этой статье мы подробно разберём, как установить, настроить и использовать библиотеку twilio для отправки SMS из вашего Node.js приложения. Вы узнаете основные методы, научитесь обрабатывать ошибки и увидите несколько практических примеров.
Установка и настройка
Для начала работы вам понадобится аккаунт на Twilio. После регистрации вы получите:
- Account SID — уникальный идентификатор вашего аккаунта.
- Auth Token — секретный ключ для аутентификации запросов.
- Twilio phone number — номер телефона, с которого будут отправляться SMS (предоставляется бесплатно для тестирования).
Установите библиотеку через npm:
npm install twilio
После установки создайте файл send-sms.js и подключите библиотеку, передав свои учётные данные:
const twilio = require('twilio');
const accountSid = 'YOUR_ACCOUNT_SID';
const authToken = 'YOUR_AUTH_TOKEN';
const client = twilio(accountSid, authToken);
Базовая отправка SMS
Для отправки сообщения используйте метод client.messages.create(). Он принимает объект с тремя обязательными полями:
body— текст сообщения (до 1600 символов для одного SMS).from— ваш Twilio-номер (в формате+1234567890).to— номер получателя (также в международном формате).
Пример отправки простого SMS:
client.messages
.create({
body: 'Привет! Это тестовое сообщение с Twilio.',
from: '+1234567890',
to: '+79876543210'
})
.then(message => console.log('Сообщение отправлено. SID:', message.sid))
.catch(error => console.error('Ошибка:', error));
После успешной отправки вы получите объект message, содержащий уникальный sid (идентификатор сообщения), статус доставки и другую информацию.
Асинхронная отправка с async/await
Для более современного подхода используйте синтаксис async/await. Оберните вызов в try...catch для обработки ошибок:
const sendSMS = async (to, body) => {
try {
const message = await client.messages.create({
body: body,
from: '+1234567890',
to: to
});
console.log(`SMS отправлено на ${to}. SID: ${message.sid}`);
return message;
} catch (error) {
console.error('Не удалось отправить SMS:', error.message);
throw error;
}
};
// Использование
sendSMS('+79876543210', 'Ваш код подтверждения: 1234');
Дополнительные параметры
Библиотека поддерживает множество опциональных параметров. Вот некоторые из них:
mediaUrl— URL изображения или другого медиафайла (для MMS).statusCallback— URL для получения уведомлений о статусе доставки (webhook).applicationSid— SID приложения Twilio для дополнительной конфигурации.
Пример отправки MMS с изображением:
client.messages
.create({
from: '+1234567890',
to: '+79876543210',
body: 'Посмотрите на это фото!',
mediaUrl: ['https://example.com/image.jpg']
})
.then(message => console.log('MMS отправлено:', message.sid));
Обработка ошибок
При работе с API важно правильно обрабатывать возможные ошибки. Twilio возвращает подробные коды ошибок. Наиболее частые:
21211— неверный номер получателя.21608— недостаточно средств на аккаунте.21610— сообщение слишком длинное.
Пример расширенной обработки:
client.messages