使用 SendGrid 发送遭放弃购物车提醒
Made by Twilio
监视购物车集合,跟踪购物车对象的最后更新时间。在超过特定时间间隔后,根据 SendGrid 动态模板向用户发送电子邮件。
此扩展程序的运作方式
使用此扩展程序自动发送电子邮件提醒,提醒用户他们留在购物车内的商品。
此扩展程序将监视添加至指定 Cloud Firestore 集合的文档。对于每个文档,该扩展程序会记录文档的最后更新时间。然后,当最后更新时间超过一个可配置的阈值时,文档中的信息会被复制到一个新的集合,使用 Twilio SendGrid API 触发电子邮件。文档中的信息作为动态事务性邮件的模板数据发送。
额外设置
在安装此扩展程序之前,请确保:
- 您已经在 Firebase 项目中设置了一个 Cloud Firestore 数据库
- 您已经在 Firebase 项目中设置了 Firebase Authentication
- 您已注册 Twilio SendGrid Marketing Campaigns 帐号
- 您已创建一个有权限发送电子邮件的 SendGrid API 密钥
- 您已经验证了单个发件人电子邮件地址,或者使用 SendGrid 设置了域身份验证
- 您已设置用来发送电子邮件的动态事务模板
Firestore 索引
此扩展程序需要一个复合 Firestore 索引。您可以在 Firebase 控制台中或通过命令行添加该索引。
在 Firebase 控制台中添加索引
- 转到 Firebase 控制台的 Cloud Firestore 部分
- 转到索引标签页,然后点击添加索引
- 输入购物车集合的集合名称
- 将以下字段添加到索引:
metadata.emailSent
- 升序metadata.error
- 升序metadata.lastUpdated
- 升序- 将查询范围设置为集合
- 点击创建
使用 Firebase CLI 添加索引
- 在 Firebase 项目中,打开默认文件名为
firestore.indexes.json
的索引配置文件 -
向
indexes
数组添加如下对象:json { "collectionGroup": "cart", "queryScope": "COLLECTION", "fields": [ { "fieldPath": "metadata.emailSent", "order": "ASCENDING" }, { "fieldPath": "metadata.error", "order": "ASCENDING" }, { "fieldPath": "metadata.lastUpdated", "order": "ASCENDING" } ] }
collectionGroup
名称应该是购物车集合的集合名称。 1. 使用firebase deploy
命令部署索引配置。如果您只想部署索引,可以添加--only firestore:indexes
标志。
工作方式
购物车
购物车应该以每个购物车一个文档的形式实现。如何在文档中存储商品由您自己决定,但通常的做法是使用名为 items
的数组属性,该属性包含购物车内每件商品的相关信息。该文档还应该有一个对 Firebase Authentication 用户的引用,可以让购物车文档 ID 匹配该用户 ID,或在文档中包含 userId
属性。在您创建购物车文档或更新购物车文档中的属性时,该扩展程序将更新 metadata.lastUpdated
时间戳。
检查购物车
系统会定期运行一个函数,以确定是否放弃了任何购物车以及是否需要发送电子邮件提醒。您可以使用 cron.yaml 语法,通过 CART_CHECK_INTERVAL
配置检查间隔时间。
在购物车文档获得处理以进入下一阶段之前,必须满足一些条件:
metadata.lastUpdated
时间戳应该早于可配置的ABANDONED_TIMEOUT
时间(单位为分钟)metadata.emailSent
布尔值属性应为false
metadata.error
属性中没有错误
如果满足所有这些条件,该扩展程序将尝试使用 userId
属性或文档 ID 加载用户数据。如果用户没有电子邮件地址,则会记录一个错误。如果用户有电子邮件地址,那么将在 EMAIL_COLLECTION
中创建一个文档。该文档将包括用户电子邮件和 dynamicTemplateData
属性,该属性包括用户购物车的内容和一个 user
属性,后者包括该用户的 email
和 displayName
(如果存在)。此 dynamicTemplateData
用于填充 SendGrid 动态电子邮件模板中的字段。
发送电子邮件
在文档添加至 EMAIL_COLLECTION
后,内容将进入队列,等待使用 Twilio SendGrid API 发送电子邮件。购物车文档中的所有信息都被添加为电子邮件的动态模板数据。您可以配置一个 DEFAULT_TEMPLATE_ID
,这是 SendGrid 动态模板的 ID。
您可以在 SendGrid 信息中心创建动态事务模板。SendGrid 模板使用 Handlebars 将动态数据呈现到电子邮件中。
您还需要将 DEFAULT_FROM
配置为您已使用 SendGrid 验证的电子邮件地址,可以配置为单个发件人或通过域身份验证进行配置。您还可以设置一个 DEFAULT_REPLY_TO
电子邮件。
通过将文档添加至 EMAIL_COLLECTION
并使用一个 to
电子邮件地址和一个 dynamicTemplateData
属性,您可以随时触发电子邮件发送。
admin.firestore().collection('cart_emails').add({ to: 'example@example.com', dynamicTemplateData: { name: "Example" } });
结算
若要安装扩展程序,您的项目必须采用 Blaze(随用随付)方案
- 您需要为此扩展程序所需的 Firebase 资源支付少量费用(通常约为 $0.01/月),即使没有使用此扩展程序也要支付。
- 此扩展程序用到了其他 Firebase 和 Google Cloud Platform 服务,如果超出这些服务的免费层级,则会产生相关费用:
- Cloud Firestore
- Firebase Authentication
- Cloud Functions(Node.js 10+ 运行时。查看常见问题解答)
- Cloud Secret Manager
使用此扩展程序还需要您拥有 Twilio SendGrid 帐号和凭据,以将 Twilio SendGrid API 用于营销活动。您需要自行承担与使用 Twilio SendGrid 相关的任何费用。
如何安装此扩展程序
使用 Firebase CLI
要安装和管理扩展程序,您还可以使用 Firebase CLI:
步骤 1:运行以下 npm 命令来安装 CLI 或将 CLI 更新到最新版本。
npm install -g firebase-tools不能运行?请参阅 Firebase CLI 参考文档或者更改您的 npm 权限。
第 2 步:设置一个新的 Firebase 项目目录或转到现有目录
第 3 步:将此扩展程序添加到扩展程序清单中
firebase ext:install twilio/abandoned-cart-emails --local --project=projectId_or_alias
第 4 步(可选):使用 Firebase Emulator Suite 在本地测试此扩展程序
firebase emulators:start
第 5 步:将清单中的扩展程序部署到项目中
firebase deploy --only extensions --project=projectId_or_alias