Я пытаюсь запросить свою базу данных firestore с помощью облачных функций. Я хочу инициировать уведомление по электронной почте каждый раз, когда новое значение в моей базе данных меньше 10.

Вот соответствующая структура базы данных для справки: структура базы данных. Поле «чтения» - это массив, а каждое «чтение» - это карта, которая содержит поля «дата» и «значение».

В настоящее время я нахожусь в точке, где я могу отправлять уведомление по электронной почте каждый раз, когда создается новый пользователь, однако я хочу, чтобы это работало для базы данных. Я не уверен, как запрашивать массив «показаний», а затем для каждого отдельного чтения.

Вот мой код, который отправляет электронное письмо при создании нового пользователя.

exports.sendNotification = functions.auth.user().onCreate((user) => {


const mailOptions = {
    from: '"Spammy Corp." <noreply@firebase.com>',
    to:"fakeEmail@btopenworld.com",
    text: "TEST"
};

return mailTransport.sendMail(mailOptions)
    .then(() => console.log("It worked"))
    .catch((error) => 
console.error('There was an error while sending the email:', error)); 
});
1
Kabira Suleman 5 Дек 2018 в 20:50

1 ответ

Лучший ответ

См .: https://firebase.google.com/docs/firestore/extend- with-functions

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

exports.sendEmail = functions.firestore
    .document('sensor/UGt.../readings')
    .onCreate((snap, context) => {
        const newValue = snap.data();
        const value = newValue.value;
        if (value < 10) {
            // send email
        }
    });

В дальнейших комментариях вы упомянули, что нужно следить за новыми показаниями всех сенсорных элементов, а не только вашего первого. К сожалению, это невозможно эффективным / простым способом (исходный код). Вместо этого вам придется прослушивать все события onUpdate на /sensor/, проверять, добавляет ли обновление чтение, затем проверять значение и отправлять электронное письмо.

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

2
Jake Lee 5 Дек 2018 в 18:29