Ранее мы показали, как создать SMS-оповещения о погоде на Node.js, а теперь ребята из Stamplay вернулись, чтобы продемонстрировать, как создать сервис ежедневных SMS-новостей — разумеется, на Node.js.
Stamplay помогает автоматизировать этапы разработки, которые в противном случае пришлось бы кодировать вручную. Давайте погрузимся в руководство, код и всё то, от написания чего вы будете избавлены.
Ознакомьтесь с оригинальной статьёй прямо здесь.
Наш сервис будет работать по следующим этапам:
— Пользователь отправляет SMS на номер, предоставленный Twilio, чтобы подписаться на сервис, или может просто указать свой номер телефона на веб-странице.
— Задача Stamplay перехватит SMS с помощью интеграции с Twilio и сохранит запись о подписке в базе данных. После сохранения подписки пользователю отправляется подтверждающее сообщение.
— Запланированная задача будет запускаться раз в день и активировать блок кода, который обработает подписки. Для каждой активной подписки блок кода вызовет другой блок, отвечающий за получение новостей, которые будут отправлены пользователю.
— Финальная задача выполнится после завершения работы блока кода и, используя его вывод, отправит ежедневное сообщение подписчику.
Попробуйте отправить сообщение на номер **+1 617-863-2088** с текстом «subscribe», чтобы получать ежедневные вдохновляющие цитаты. Также можно отписаться, отправив «stop», или запросить цитату по требованию с помощью слова «quote». Кроме того, доступен веб-интерфейс для подписки через онлайн-форму по адресу https://inspirationbot.stamplayapp.com.
Зарегистрируйтесь в Twilio и перейдите в настройки аккаунта, чтобы получить учётные данные API: AccountSID и AuthToken. Их можно найти здесь.
В настройках вашего приложения Stamplay выберите в левой панели раздел «Tasks», затем «Components». Выберите компонент Twilio из списка.
Далее в настройках компонента Twilio добавьте учётные данные в соответствующие поля.
Нам нужно отслеживать номера телефонов, подписавшихся на наш сервис. Для этого мы будем использовать компонент Object, который позволяет легко хранить данные в облаке.
В настройках Stamplay выберите в левой панели раздел «Objects», затем нажмите «+ New». Введите «subscription» в качестве названия объекта и добавьте следующие свойства:
— number (строка)
— status (логическое значение)
После этого создадим базу данных для хранения цитат, которые будем отправлять подписчикам раз в день. Для этого создадим новый объект под названием «quotes» со следующей структурой:
— quote (строка)
— author (строка)
Теперь создадим первую задачу, которая будет создавать экземпляр подписки, когда на наш номер Twilio придёт SMS с текстом «subscribe». Перейдите в раздел «Task», затем «Manage» и начните настройку автоматизации следующим образом:
Выберите номер из выпадающего списка, на который должна реагировать задача при получении SMS.
При регистрации в Twilio вы получаете номер Twilio. Посмотреть свои номера можно здесь, если у вас его ещё нет — добавьте.
Под выпадающим списком с номером Twilio скопируйте поле ввода с URL обратного вызова и перейдите на страницу номеров телефонов Twilio.
Выберите номер, который использовали для активации задачи в Stamplay.
Затем добавьте URL обратного вызова в поле «Request URL».
Вернёмся в Stamplay и завершим настройку задачи. Перейдите к шагу 3, где выберем «subscription» в качестве типа создаваемого объекта. Поле «status» установим в значение «true», а номер будет динамически взят из триггера с помощью синтаксиса, похожего на Handlebars: {{sms.body.From}}.
Теперь попробуйте отправить SMS на ваш номер Twilio. Если всё настроено правильно, перейдя в раздел «Database» на левой боковой панели и выбрав «subscription», вы должны увидеть одну запись.
Последнее, что нужно сделать, — это настроить создание подписок только в том случае, если в теле SMS содержится слово «subscribe». Для этого вернёмся к нашим задачам, нажмём на значок шестерёнки, затем «Edit». Перейдём к шагу 2 и развернём раздел фильтрации под полем ввода URL обратного вызова.
Здесь добавим фильтр, как показано ниже, чтобы задача выполнялась только в том случае, если в теле сообщения содержится слово «subscribe».
Для обработки подписок нам понадобятся два блока кода. Первый будет отвечать за получение всех активных подписок, их перебор и передачу номера телефона второму блоку кода, который получит цитату и передаст её вместе с номером в Twilio с помощью задачи.
Первый блок будет называться processSubscriptions и выглядеть так:
Приведённый выше блок кода использует Stamplay NodeJS SDK для запроса всех подписок со статусом «true» и затем перебирает список. Для каждой подписки он вызывает блок кода FetchToSend, передавая в качестве параметра номер телефона подписчика.
Второй блок будет называться FetchToSend и выглядеть так:
Функция FetchToSend принимает номер телефона в качестве входных данных, получает объект Quote из базы данных и возвращает в ответ объект, содержащий номер получателя, автора и цитату. Эти данные мы будем использовать позже в задаче, которая отправит SMS через Twilio и будет запускаться каждый раз при выполнении функции FetchToSend.
Выходные данные блока кода будут иметь следующую структуру:
{«to»: «+11112223333», «quote»: «Lorem Ipsum», «author»: «Someone famous»}
Теперь настроим запланированную задачу, которая будет выполняться раз в день. Для этого создадим новую задачу с использованием компонента Scheduler.
Интервал времени можно задать с помощью строки crontab. Строки crontab легко составляются с помощью Crontab guru, где есть множество примеров. После определения периодичности выберите часовой пояс для этой задачи и нажмите «Continue».
Выберите блок кода, который хотите выполнить, и укажите базовый JSON-ввод. Затем назовите задачу и сохраните её.
Чтобы замкнуть цикл нашего SMS-сервиса, нужно настроить последнюю задачу, которая будет принимать вывод функции FetchToSend и передавать его в действие Twilio «Send SMS».
Теперь мы будем использовать вывод блока кода для заполнения полей действия Twilio SMS.