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

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

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

我想不出来这个……

【问题讨论】:

    标签: firebase google-cloud-firestore google-cloud-functions firebase-extensions


    【解决方案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! :)
    猜你喜欢
    • 2022-11-20
    • 2022-11-20
    • 2021-05-23
    • 2021-06-21
    • 2020-11-06
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多