Как запустить службу NodeJS на основе события календаря пользователя

#node.js #calendar #google-calendar-api #webhooks #pipedream

#node.js #Календарь #google-calendar-api #webhooks #pipedream

Вопрос:

Я пытаюсь разрешить пользователю входить в веб-приложение с помощью своей службы календаря (например. Календарь Google, Outlook), а затем всякий раз, когда начинается или заканчивается одно из событий их календаря, я хочу, чтобы запускалась служба NodeJS.

Я думал попытаться использовать pipedream.com (хотя это только идея, очень рад использовать другой подход) следующим образом:

 1. User logs in to their calendar service via my web app, or perhaps provides a webhook or equivalent
2. I store their calendar credentials and then pass them to a service such as Pipedream
3. On calendar event start or end, Pipedream then triggers my NodeJS service
  

Я застрял в разработке, как я могу передать учетные данные календаря пользователя / webhook в Pipedream, поскольку для этого требуется вход в систему в момент настройки:
Скриншот Pipedream

Любая помощь будет высоко оценена!

Комментарии:

1. Является ли pipedream обязательным требованием для этого проекта? В Firebase есть несколько хороших триггеров облачных функций, которые будут хорошо работать для того, что вы пытаетесь сделать здесь.

2. Нет, это совсем не так, просто идея использовать Pipedream. Большое спасибо @ Harry рассмотрит их!

Ответ №1:

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

 exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 11 * * *')
  .timeZone('America/New_York') // Users can choose timezone - default is America/Los_Angeles
  .onRun((context) => {
  console.log('This will be run every day at 11:05 AM Eastern!');
  return null;
});
  

Большим преимуществом является то, что вы платите только за время выполнения вашей функции, поэтому вам не нужно беспокоиться о том, что сервер простаивает до времени собрания (которое запускает функцию).

Комментарии:

1. Большое спасибо за ответ @Harry! Это выглядит великолепно, но как вы представляете, что это будет вызвано событиями календаря? Вы думаете, что я буду пытаться постоянно захватывать события календаря пользователя, а затем настраивать cronjobs на основе времени начала и окончания события?

2. Да, точно — вы можете это автоматизировать. Просто перенесите время события в базу данных (например, Cloud Firestore, если вы остаетесь в экосистеме Firebase) и используйте другую функцию, которая запускается при добавлении нового события, чтобы получить время события и запланировать cronjob.

3. Если это кажется вам решением, пожалуйста, не стесняйтесь пометить вопрос как решенный и / или проголосовать за ответ.

4. Конечно, проголосовали. Я изучаю, существует ли более простое решение (например. developers.google.com/calendar/v3/push ) а если нет, продолжу с вашим и поставлю галочку