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! :)