Отправляйте ежедневные SMS-напоминания с помощью Firebase, Node.js и Twilio

Автор: | 30.07.2026

Не нужно завязывать узелок на память. С помощью Node.js, Firebase и Twilio вы можете создать собственное приложение для ежедневных SMS-напоминаний.

Для создания этого приложения мы будем использовать несколько инструментов. Убедитесь, что они настроены перед продолжением:

— Twilio: Для отправки и получения SMS-сообщений. Нет аккаунта в Twilio? Зарегистрируйтесь бесплатно.

— Firebase: API для работы с базой данных в реальном времени. Мы будем использовать его для хранения информации о пользователях, подписавшихся на нашу услугу.

— Node.js: Платформа, построенная на базе JavaScript-движка Chrome, для простого создания быстрых и масштабируемых сетевых приложений.

Для начала установим несколько пакетов npm. Мы будем использовать пакет twilio для отправки текстовых сообщений и пакет cron для планирования времени отправки сообщений. Установите их, выполнив следующие команды:

Создайте новый файл app.js и подключите пакеты twilio и cron:

Давайте напишем код, который будет отправлять текстовое сообщение каждый день в 18:00:

Возможно, вы задаетесь вопросом, что означает строка, передаваемая в качестве первого аргумента в cronJob. Это формат cron, который позволяет задать время и частоту выполнения задачи. В данном случае — в 0 минут 18 часов каждый день. В этой статье хорошо объясняется формат cron.

В колбэке cronJob мы используем библиотеку клиента Twilio для отправки сообщения. Мы передаем номера получателя и отправителя, а также текст сообщения.

Запустите этот код и ждите SMS-сообщения. Если сейчас 10 утра, вам вряд ли захочется ждать 8 часов, чтобы проверить, работает ли код. Просто измените формат cron, чтобы отправка происходила раньше. Вот подсказка: чтобы отправить сообщение в 10:13, используйте формат: «13 10 * * *».

Теперь у вас есть базовая версия приложения, но, скорее всего, вы не захотите отправлять сообщения только себе каждый день. Если это так — поздравляем! Вы закончили. Для остальных мы внесем небольшие изменения в код, чтобы отправлять сообщения на несколько номеров.

Сначала добавим новую переменную numbers, содержащую номера телефонов, на которые мы хотим отправлять сообщения:

Затем обновим код в textJob, чтобы он перебирал эти номера и отправлял на них сообщения:

Теперь, когда мы отправляем SMS на разные номера в нужное время, давайте обновим код, чтобы приложение знало, когда пользователь отправляет сообщение. Twilio использует вебхуки для уведомления вашего сервера о входящих сообщениях или звонках. Нам нужно настроить конечную точку, которую Twilio будет использовать для вебхука сообщений.

Мы будем использовать фреймворк Express для настройки веб-сервера на Node.js, чтобы принимать POST-запросы от Twilio, поэтому установим пакет express. Также нам понадобится модуль body-parser, его тоже установим:

В начале файла app.js подключим express и инициализируем его в переменной app. Также используем middleware bodyParser, чтобы упростить работу с данными, получаемыми в POST-запросе.

Добавим маршрут для /message, который будет отвечать с помощью TwiML. TwiML — это набор инструкций, с помощью которых можно указать Twilio, что делать при получении входящего звонка или SMS. Наш код будет выглядеть так:

Мы используем библиотеку Twilio для Node.js, чтобы создать новый объект TwimlResponse. Затем с помощью глагола Message задаем текст ответа. В данном случае мы ответим: «Спасибо за подписку!». Затем установим тип содержимого ответа как text/xml и отправим строковое представление созданного TwimlResponse.

Наконец, настроим сервер на прослушивание порта 3000.

Теперь запустим наше приложение:

Если вы запускаете его локально, убедитесь, что у вас запущен ngrok, прежде чем переходить к следующему шагу. Если вы не использовали ngrok раньше, мой хороший друг Кевин подготовил отличное руководство, чтобы помочь вам начать.

Теперь, когда наш сервер запущен, нужно указать Twilio использовать этот URL в качестве Message Request URL:

Отправьте SMS на ваш номер Twilio, и вы должны получить ответ. Если этого не произошло, посмотрите в Twilio App Monitor, чтобы понять, что пошло не так.

Мы настроили скрипт, который отправляет SMS в одно и то же время каждый день, и дали пользователям возможность отправлять сообщения в наше приложение. Осталось сделать последнее: сохранить информацию о пользователях, когда они отправляют SMS. Мы будем использовать Firebase в качестве хранилища данных, поэтому установим модуль firebase для Node.js:

Теперь, когда модуль Firebase установлен, подключим и инициализируем его в начале файла app.js:

При регистрации в Firebase вам предоставляется URL для вашего хранилища данных. Убедитесь, что вы заменили {FIREBASEURL} на этот URL.

Поскольку мы будем получать номера телефонов из Firebase, обновим переменную numbers, сделав её пустым массивом, а затем заполним её данными из базы. Firebase — это база данных реального времени, работающая на принципе подписки на события, а не на запросах по требованию. Мы подпишемся на событие обновления, когда будет добавлен новый пользователь:

Теперь нужно добавлять пользователей в нашу базу данных, когда они отправляют сообщение с текстом «subscribe». Вернемся к нашему маршруту message и внесем изменения:

Когда вебхук Twilio для сообщений инициирует новый POST-запрос на ваш сервер, он включает параметры запроса с информацией о сообщении. Мы будем использовать параметр Body для анализа текста сообщения и параметр From для определения номера отправителя. Если пользователь отправил слово «subscribe» и его номер ещё не в базе, мы используем функцию push нашей ссылки Firebase, чтобы добавить его.

Наше приложение готово к работе. Запустим его и попробуем:

Готово! Теперь, когда вы создали простое приложение для ежедневных SMS-напоминаний, вы можете настроить сообщение на своё усмотрение. Возможно, это будет случайная цитата Джека Хэнди, заголовок из The New York Times или ссылка на забавный гиф. Когда закончите, напишите мне в Twitter или по электронной почте и расскажите, что у вас получилось. Я бы с удовольствием подписался.