Send Abandoned Cart Reminders with 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 セクションに移動します
- Indexes タブに移動して Add Index をクリックします
- カート コレクションのコレクション名を入力します
- インデックスに次のフィールドを追加します:
metadata.emailSent
- Ascendingmetadata.error
- Ascendingmetadata.lastUpdated
- Ascending- Query scopes を Collection に設定します
- Create をクリックします
Indexes with the 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
にドキュメントが作成されます。このドキュメントには、ユーザーのカートの中身とユーザーの email
や displayName
(存在する場合)などの user
プロパティで構成される dynamicTemplateData
のプロパティとユーザーのメールアドレスとが含められます。この dynamicTemplateData
を使用して、SendGrid の動的メール テンプレートのフィールドに値が入力されます。
メールの送信
EMAIL_COLLECTION
にドキュメントが追加されると、Twilio SendGrid API を使用してメールが送信されるようコンテンツがキューに格納されます。カート ドキュメントから取得したすべての情報は、メールの動的テンプレート データとして追加されます。SendGrid の動的テンプレートの ID である DEFAULT_TEMPLATE_ID
を設定できます。
SendGrid ダッシュボードで動的トランザクション テンプレートを作成できます。SendGrid テンプレートは Handlebars を使用して動的データをメールにレンダリングします。
また、DEFAULT_FROM
には、SendGrid を使用して単一送信者として、またはドメイン認証を介して検証したメールアドレスを設定する必要があります。DEFAULT_REPLY_TO
にメールアドレスを設定することもできます。
to
のメールアドレスと dynamicTemplateData
プロパティを含むドキュメントを EMAIL_COLLECTION
に追加すると、いつでもメールの送信をトリガーできます。
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 を超えるランタイム。FAQ を参照)
- Cloud Secret Manager
この拡張機能を使用するには、マーケティング キャンペーン用の Twilio SendGrid API を使用するために Twilio SendGrid アカウントと認証情報も必要です。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