在修改后的文档上触发电子邮件 Firebase 扩展

Posted

技术标签:

【中文标题】在修改后的文档上触发电子邮件 Firebase 扩展【英文标题】:Trigger Email Firebase Extension on modified Document 【发布时间】:2021-10-08 12:50:25 【问题描述】:

当文档数据被修改时如何触发发送邮件?

Trigger Email 仅根据编写文档的内容撰写电子邮件并将其发送到 Cloud Firestore 集合但未修改

我想不出来这个……

【问题讨论】:

【参考方案1】:

通过检查code,我们可以看到扩展程序已经处理了对文档的所有写入:

export const processQueue = functions.handler.firestore.document.onWrite(
  ...

从further 的角度看,似乎扩展对写入的操作取决于文档中delivery.state 字段的值。

async function processWrite(change) 
  ...
  const payload = change.after.data() as QueuePayload;
  ...

  switch (payload.delivery.state) 
    case "SUCCESS":
    case "ERROR":
      return null;
    case "PROCESSING":
      if (payload.delivery.leaseExpireTime.toMillis() < Date.now()) 
        // Wrapping in transaction to allow for automatic retries (#48)
        return admin.firestore().runTransaction((transaction) => 
          transaction.update(change.after.ref, 
            "delivery.state": "ERROR",
            error: "Message processing lease expired.",
          );
          return Promise.resolve();
        );
      
      return null;
    case "PENDING":
    case "RETRY":
      // Wrapping in transaction to allow for automatic retries (#48)
      await admin.firestore().runTransaction((transaction) => 
        transaction.update(change.after.ref, 
          "delivery.state": "PROCESSING",
          "delivery.leaseExpireTime": admin.firestore.Timestamp.fromMillis(
            Date.now() + 60000
          ),
        );
        return Promise.resolve();
      );
      return deliver(payload, change.after.ref);
  

我的猜测是,如果您清除该字段,扩展程序将接收该更改并尝试再次邮寄文档。

【讨论】:

非常感谢您的回答,弗兰克! - 因此,如果我在代码中执行这些更改,是否有办法部署此更新版本的扩展以在我的 Firebase 中使用?如何 ? :) 您不必更改扩展程序的代码,我只是将其包含在内以向您展示扩展程序的作用。据我所知,您需要做的就是更改/删除文档的delivery.state。你试过了吗? 哦,非常感谢!事实上,我只需要将 delivery.state 从“SUCCESS”切换到“RETRY”,它就可以重新发送 - 你太棒了 Puff! :)

以上是关于在修改后的文档上触发电子邮件 Firebase 扩展的主要内容,如果未能解决你的问题,请参考以下文章

使用修改后的日期自动更新谷歌电子表格

如何触发 Firebase 云功能以添加用户、生成密码并使用该密码发送邮件

Firebause身份验证:已发送但未在特殊电子邮件地址(如*@gmx.at)上收到的电子邮件

Cloud Functions for Firebase - 已验证电子邮件操作

在 Swift 和 ios 14 中访问 Firebase Firestore 文档的字段?

如何在特定时间触发来自firebase的通知?