Как программно создавать рабочие места в Firebase - PullRequest
0 голосов
/ 10 мая 2019

У меня тут уникальная проблема.Мне действительно нужно запланировать задачу, чтобы отправлять электронные письма соответствующим пользователям в определенное время.Я проверил и обнаружил, что планирование заданий cron может решить проблему.Однако в моем случае мне нужно планировать эти задачи программно на основе того, когда конкретные пользователи удовлетворяют определенным условиям.

Вот мой сценарий

  1. Я запускаю реферальную кампаниюв моем приложении, где пользователи, которые ссылаются на 5 человек, получают подписку со скидкой

  2. После того, как пользователь направил 5 человек, стоимость подписки снижается, если он платит в течение 24 часов.В противном случае стоимость возвращается к исходному значению

  3. Я использую облачные функции Firebase, чтобы отправлять соответствующим пользователям напоминания по электронной почте с напоминаниями в определенное время для оплаты до истечения 24 часов

Теперь проблема

  1. Я хочу отправлять напоминания по электронной почте в определенное время, например, как только он отсылает 5 человек, когда его оставшееся время, скажем, 3 часа и т. Д.

  2. Если я просто запланирую функцию независимо от пользователя, мне, возможно, придется устанавливать задания cron через регулярные промежутки времени, скажем, 1 минуту, чтобы всегда проверять, имеют ли пользователи в моей базе данных право, и затем отправлятьписьма им.Это создает серьезную проблему, состоящую в том, что облачные функции запускаются независимо от того, есть ли подходящие пользователи.

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

Мое предлагаемое решение

  1. Мне просто нужен способ динамического планирования задач cron, чтобы я мог планировать работу для конкретных пользователей.Это решит многие проблемы, такие как отправка электронных писем в определенное время, предотвратит запуск облачных функций, когда в этом нет необходимости, возможность устанавливать различное время отправки электронной почты для разных пользователей и т. Д.

  2. Я планирую использовать триггеры httpс параметром запроса идентификатора пользователя для планирования задач, так что firebase может использовать этот идентификатор для назначения задач только определенным пользователям, то есть у каждого подходящего пользователя будет свой собственный триггер http

Пожалуйста,Есть ли способ добиться этого или любого другого хорошего решения для моего случая?

1 Ответ

0 голосов
/ 10 мая 2019

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

Поэтому вместо того, чтобы сказать «Мне нужно запланировать функцию, которая будет выполняться через 3 часа, и отправить сообщение этим 5 людям», представьте себе задачу, которую вы можете записать в базу данных: «при отправке x: yz электронная почта для этих 5 человек ", а затем есть периодическая облачная функция, которая проверяет, какие задачи ей необходимо выполнить.

Также см. Задержка облачной функции Google , Как использовать планировщик для облачных функций Firebase с триггерами базы данных / аналитики в реальном времени?

В качестве альтернативы вы можете использовать Cloud Scheduler , чтобы создать задачу для конкретного действия, которое вы хотите выполнить, и затем отправить его в Cloud Functions через PubSub.

...