registro notification notificaciones fcm ejemplo firebase firebase-database email-integration

notificaciones - send notification firebase



Notificaciones por correo electrónico en firebase (1)

Me gustaría saber si alguien sabe cómo enviar un correo electrónico cuando se crea, actualiza o elimina un nodo específico en firebase.

Más específicamente, tengo un servicio web donde los usuarios pueden reservar el uno al otro por un período de tiempo. Utilizo Firebase como servidor para almacenar información de usuario y demás, pero quiero enviar una confirmación a la dirección de correo electrónico de los usuarios siempre que haya ocurrido una reserva. Entiendo que esto anteriormente era posible con Zapier, sin embargo, ya no son compatibles con Firebase.

¿Alguien que tenga una solución alternativa o una idea sobre cómo enviar notificaciones por correo electrónico en Firebase?


Después de buscar un poco más, descubrí que no hay un complemento directo. Me puse en contacto con el equipo de soporte de Firebase y están considerando crear esta funcionalidad ellos mismos; sin embargo, cuándo y cómo aún no está decidido.
Hay diferentes posibilidades, pero todas requieren algún tipo de codificación de back-end, es decir, un servidor que pueda vigilar estos cambios.
Aterricé en node.js, ya que es más similar a lo que normalmente trabajo, es decir, javascript.
Al incluir nodemailer y firebase a través de npm, el envío de correos electrónicos basados ​​en el evento de firebase se logró así :

var firebase = require("firebase"); var mainApp = firebase.initializeApp({ //firebase authentication }); var directTransport = require(''nodemailer-direct-transport''); var nodemailer = require(''nodemailer''); var options = {}; var transporter = nodemailer.createTransport(directTransport(options)) var nodemailer = require(''nodemailer''); var transporter = nodemailer.createTransport({ service: ''gmail'', auth: { user: ''example.gmail.com'' pass: ''password'' } }); var nodeToWatch = mainApp.database().ref(''node_to_watch''); //firebase node to watch nodeToWatch.on(''child_added'', function(childSnapshot) { //fires once for every node in this location if(!childSnapshot.val().email_sent){ //check if email has already been sent nodeToWatch.child(childSnapshot.key).child(''email_sent'').set(firebase.database.ServerValue.TIMESTAMP).then(function(response){ //set email value to sent var data = JSON.stringify(childSnapshot.val(), null, 9); //stringify the response so we can attach it in the email // create template based sender function var sendInfo = transporter.templateSender({ subject: ''Node in firebase updated'', html: ''Hello, data for new node is: {{data}} }, { from: ''example.gmail.com'' }); // use template based sender to send a message sendInfo({ to: ''exampleRecipient.email.com'' }, { data: data //data variable to insert into email }, function(err, info){ if(err){ console.log(err); } else{ console.log(''Email sent''); } }); }); } });

Este ejemplo escucha el evento firebase on_child_added pero cualquier evento de firebase funcionará. ¡Espero que esto ayude a alguien! :)