Отправить транзакционную электронную почту с SendGrid в облачных функциях Firebase - PullRequest
0 голосов
/ 07 мая 2018

Я следовал этому руководству: https://angularfirebase.com/lessons/sendgrid-v3-nodejs-transactional-email-cloud-function/, чтобы отправлять транснациональные электронные письма. Следующая функция работала нормально, но с новым обновлением облачных функций Google https://firebase.google.com/docs/functions/beta-v1-diff#cloud-firestore перестала работать. Что я должен изменить?

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);
const SENDGRID_API_KEY = functions.config().sendgrid.key

const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(SENDGRID_API_KEY);

exports.firestoreEmail = functions.firestore
.document('mensajes/{mensajeId}')
.onCreate(event => {

    const mensajeId = event.params.mensajeId;

    const db = admin.firestore()

    return db.collection('mensajes').doc(mensajeId)
        .get()
        .then(doc => {

            const mensaje = doc.data()

            const msg = {
                to: 'xx@xx.com',
                from: 'zz@zz.com',
                subject: 'Subject',
                templateId: 'myTemplateID',
                substitutionWrappers: ['{{', '}}'],
                substitutions: {

                    nombre: mensaje.nombre,
                    telefono: mensaje.telefono,
                    email: mensaje.email,
                    mensaje: mensaje.mensaje

                }
            };

            return sgMail.send(msg)
        })
        .then(() => console.log('email sent!'))
        .catch(err => console.log(err))


});

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

После выхода Cloud Functions 1.0.x для Firestore изменилось следующее: вы можете вывести форму doc :

До (<= v0.9.1) </strong>

exports.dbCreate = functions.firestore.document('notes/{noteId}').onCreate((event) => {
    const newData = event.data.data();
    const param = event.params.noteId;
});

Сейчас (v1.0.0)

exports.dbCreate = functions.firestore.document('notes/{noteId}').onCreate((snap, context) => {
  const newData = snap.data(); 
  const param = context.params.noteId;
});

Итак, в вашем случае это означает, что ваша облачная функция должна быть изменена на:

exports.firestoreEmail = functions.firestore
.document('mensajes/{mensajeId}')
.onCreate(event => {

    const mensajeId = context.params.mensajeId;  // <- Here is the change

    const db = admin.firestore()

    return db.collection('mensajes').doc(mensajeId)
        .get()
        .then(doc => {...
        .....
0 голосов
/ 07 мая 2018

Документация по облачным функциям

Учебник по SendGrid

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

Цели

  • Создать учетную запись SendGrid.
  • Написание и развертывание двух облачных функций HTTP.
  • Написание и развертывание одной фоновой облачной функции.
  • Отправка электронной почты из развернутой функции через SendGrid.
  • Получать аналитические данные из SendGrid через webhooks.
  • Загрузка аналитических данных SendGrid в BigQuery для анализа.

enter image description here

...