Skip to content

PassKit

PassKitは、Apple ウォレットとGoogle Payのパスをカスタマーエクスペリエンスに統合することで、モバイルリーチの拡大を支援します。デジタルクーポン、ロイヤルティカード、会員カード、チケットなどの作成、管理、配布、パフォーマンス分析を簡単に行うことができ、顧客は他のアプリを必要としません。

この統合はPassKitによって管理されています。

統合について

BrazeとPassKitの統合により、Apple ウォレットとGoogle Payのカスタムパスを即時に配信して、オンラインキャンペーンのエンゲージメントを高め、測定できます。その後、利用状況を分析し、リアルタイムに調整することで、位置情報に基づくメッセージやパーソナライズされたダイナミックな更新を顧客のモバイルウォレットに送信し、店舗内のトラフィックを増加させることができます。

前提条件

統合

顧客のモバイルウォレットエクスペリエンスをさらに充実させるために、PassKitダッシュボードから、Brazeの/users/trackエンドポイントを通じてBrazeにデータを渡すことができます。

PassKitから共有するデータの例を以下に示します。

  • Pass created: 顧客がパスリンクをクリックして、パスが最初に表示される時点。
  • Pass installs: 顧客がパスを追加し、自分のウォレットアプリに保存する時点。
  • Pass updates: パスが更新される時点。
  • Pass delete: 顧客がウォレットアプリからパスを削除する時点。

データがBrazeに渡されると、オーディエンスを構築し、Liquidでコンテンツをパーソナライズし、これらのアクションが実行された後にCampaignsやCanvasesをトリガーすることができます。

PassKitをBrazeに接続する

PassKitからデータを渡すには、Brazeのexternal IDをPassKitのexternalIdとして設定していることを確認します。

  1. PassKitパスプロジェクトまたはプログラムのSettingsIntegrationsで、BrazeタブのConnectをクリックします。
    PassKitプラットフォームのBraze統合タイル。

  2. Braze APIキーとエンドポイントURLを入力し、コネクターの名前を入力します。

  3. Enable Integrationをトグルし、Brazeでメッセージをトリガーまたはパーソナライズしたいイベントを選択します。
    APIキー、エンドポイントURL、統合名、有効化設定、メンバーシップ設定、およびパス設定を受け入れるために展開されているPassKit Braze統合タイル。

Brazeでは、SmartPassリンクを設定して、顧客がAndroidまたはiOSにパスをインストールするための一意のURLを生成できます。そのためには、BrazeのContent Blockから呼び出せる暗号化されたSmartPassデータペイロードを定義する必要があります。このContent Blockは、今後のパスやクーポンに再利用できます。以下は統合の際に使用されます。

  • PassKit URL: PassKit URLは、PassKitプログラムの一意のURLです。
    各プログラムには固有のURLがあり、PassKitプログラムまたはプロジェクトのDistributionタブで確認できます。(例: https://pub1.pskt.io/c/ww0jir)

  • PassKitシークレット: URLとともに、このプログラムのPassKit Keyを手元に用意しておく必要があります。
    これはPassKit URLと同じページで確認できます。

  • プログラム(またはプロジェクト)ID: SmartPass URLを作成するには、PassKitプログラムIDが必要です。
    プロジェクトやプログラムのSettingsタブで確認できます。

暗号化されたSmartPassリンクの作成に関する詳細は、こちらのPassKitの記事を参照してください。

ステップ1: パスデータペイロードを定義する

まず、クーポンまたはメンバーのペイロードを定義する必要があります。

ペイロードにはさまざまなコンポーネントを含めることができますが、ここでは2つの重要なコンポーネントを示します。

使用可能なすべてのフィールドとそのタイプ、役立つ説明については、PassKit GitHubのドキュメントを参照してください。

ペイロードの例

1
2
3
4
5
6
7
8
{
  "members.member.externalId": "{{${user_id}}}",
  "members.member.points": "100",
  "members.tier.name": "current_customer",
  "person.displayName": "{{${first_name}}} {{${last_name}}}",
  "person.externalId": "{{${user_id}}}",
  "universal.expiryDate": "{{ "now" | date: "%s" | plus: 31622400 | date: "%FT%TZ" }}"
}

ステップ2: 未定義のペイロード変数を作成し、エンコードする

Brazeダッシュボード内のテンプレート > Content Blocksに移動して、新しいContent Blockを作成し、名前を付けます。

Create Content Blockを選択して開始します。

次に、Content BlockのLiquidタグを定義します。このContent Blockを保存したら、メッセージを作成するときにこのLiquidタグを参照できます。この例では、Liquidタグを{{content_blocks.${passKit_SmartPass_url}}}として割り当てています。

このContent Block内部では、ペイロードを直接含めず、{{passData}}変数で参照します。Content Blockに追加する最初のコードスニペットは、{{passData}}変数のBase64エンコードをキャプチャします。

1
{% capture base64JsonPayload %}{{passDatapassData|base64_encode}}{% endcapture %}

ステップ3: SHA1 HMACハッシュを使用して暗号化署名を作成する

次に、プロジェクトのURLとペイロードのSHA1 HMACハッシュを使って暗号化署名を作成します。

Content Blockに追加する2つ目のコードスニペットは、ハッシュに使用するURLをキャプチャします。

1
{% capture url %}{{projectUrl}}?data={{base64JsonPayload}}{% endcapture %}

次に、このハッシュとProject Secretを使用して署名を生成する必要があります。これは、3つ目のコードスニペットを含めることで可能になります。

1
{% capture sig %}{{url | hmac_sha1: "Project_Secret"}}{% endcapture %}

最後に、5番目のコードスニペットを使って、完全なURLに署名を追加します。

1
{% capture longURL %}{{projectUrl}}?data={{base64JsonPayload}}&sig={{sig}}{% endcapture %}

ステップ4: URLを出力する

最後に、最終的なURLを呼び出して、メッセージ内にSmartPass URLが出力されるようにします。

1
{{longURL}}

この時点で、次のようなContent Blockが作成されています。

1
2
3
4
5
6
7
8
9
{% capture base64JsonPayload %}{{passData|base64_encode}}{% endcapture %}

{% capture url %}{{projectUrl}}?data={{base64JsonPayload}}{% endcapture %}

{% capture sig %}{{url | hmac_sha1: "Project_Secret"}}{% endcapture %}

{% capture longURL %}{{projectUrl}}?data={{base64JsonPayload}}&sig={{sig}}&utm_source=braze&utm_campaign={{campaign.${name}}}{% endcapture %}{% capture longURL %}{{longURL | url_encode}}{% endcapture %}

{{longURL}}

この例では、これらのインストールのソースをBrazeとこのCampaignまで追跡するために、UTMパラメーターが追加されています。

ステップ5: すべてをまとめる

このContent Blockが作成されたら、今後再利用できます。

Content Blockの例では、2つの変数が未定義のままになっていることにお気づきでしょう。
{{passData}} - ステップ1で定義したJSONパスデータのペイロード
{{projectUrl}} - PassKitプロジェクトのDistributionタブにあるプロジェクトまたはプログラムのURL。

これは意図的な決定であり、Content Blockの再利用性をサポートします。これらの変数は参照されるだけで、Content Block内で作成されるわけではないので、Content Blockを作り直すことなく変更できます。

たとえば、紹介オファーを変更して、ロイヤルティプログラムに初回ポイントを追加したり、セカンダリメンバーカードやクーポンを作成したりすることがあります。これらのシナリオでは必要なPassKitのprojectURLsまたはパスペイロードが異なる可能性があります。これらはBrazeでCampaignごとに定義します。

メッセージ本文を作成する

この2つの変数をメッセージ本文にキャプチャしてから、Content Blockを呼び出します。 ステップ1のミニファイ化されたJSONペイロードをキャプチャします。

プロジェクトURLを割り当てる

1
{% assign projectUrl = "https://pub1.pskt.io/c/ww0jir" %}

JSONをキャプチャする

1
{% capture passData %}{"members.member.externalId": "{{${user_id}}}","members.member.points": "100","members.tier.name": "current_customer","person.displayName": "{{${first_name}}} {{${last_name}}}","person.externalId": "{{${user_id}}}","universal.expiryDate": "{{ "now" | date: "%s" | plus: 31622400 | date: "%FT%TZ" }}"}{% endcapture %}

先ほど作成したContent Blockを参照する

1
{{content_block.${passkit_SmartPass_url}}}

メッセージ本文は次のようになります。 キャプチャされたJSONおよびContent Block参照を含むContent Blockメッセージ作成画面の画像。

サンプルの出力URLは以下の通りです。 ランダムに生成された文字と数字からなる長い文字列を含む出力URL。

出力URLは長くなります。その理由は、パスデータがすべて含まれており、データの完全性とURL変更による改ざんを防ぐために、クラス最高のセキュリティが組み込まれているからです。SMSを使用してこのURLを配布する場合は、bit.lyのようなリンク短縮プロセスで実行することをお勧めします。これは、bit.lyエンドポイントへのコネクテッドコンテンツ呼び出しを使用して行うことができます。

PassKit Webhookを使用してパスを更新する

Brazeでは、WebhookのCampaignやCanvas内のWebhookを設定して、ユーザーの行動に基づいて既存のパスを更新することができます。有用なPassKitエンドポイントについては、次のリンクを参照してください。

ペイロードパラメーター

始める前に、PassKitへのWebhookの作成と更新に含めることができる一般的なJSONペイロードパラメーターを以下に示します。

ステップ1: BrazeのWebhookテンプレートを作成する

今後のCampaignsやCanvasesで使用するPassKit Webhookテンプレートを作成するには、Brazeダッシュボードのテンプレートとメディアセクションに移動します。単発のPassKit WebhookのCampaignを作成する場合、または既存のテンプレートを使用する場合は、新しいCampaignを作成する際にBrazeでWebhookを選択します。

PassKit Webhookテンプレートを選択すると、以下のように表示されます。

  • Webhook URL: https://api-pub1.passkit.io/coupon/singleUse/coupon
  • リクエスト本文: Raw Text

リクエストヘッダーとメソッド

PassKitの認証には、Base64でエンコードされたPassKit APIキーを含むHTTP Headerが必要です。以下はすでにキーと値のペアとしてテンプレートに含まれていますが、Settingsタブでは、<PASSKIT_LONG_LIVED_TOKEN>をPassKitトークンに置き換える必要があります。トークンを取得するには、PassKitプロジェクト/プログラムに移動し、Settings > Integrations > Long Lived Tokenに移動します。

  • HTTPメソッド: PUT
  • リクエストヘッダー:
    • Authorization: Bearer <PASSKIT_LONG_LIVED_TOKEN>
    • Content-Type: application/json

リクエスト本文

Webhookをセットアップするには、リクエスト本文に新しいイベントの詳細を記入し、ユースケースに必要なペイロードパラメーターを含めます。

1
2
3
4
5
{
  "externalId": "{{${user_id}}}",
  "campaignId": " 2xa1lRy8dBz4eEElBfmIz8",
  "expiryDate": "2020-05-10T00:00:00Z"
}

ステップ2: リクエストをプレビューする

入力したテキストがBrazeタグに該当する場合、自動的にハイライト表示されます。

Previewパネルでリクエストをプレビューするか、Testタブに移動して、ランダムなユーザー、既存のユーザーを選択するか、Webhookをテストするために自分でカスタマイズします。

コネクテッドコンテンツからパスの詳細を取得する

パスの作成と更新に加え、ユーザーのパスメタデータをBrazeのコネクテッドコンテンツから取得し、パーソナライズされたパスの詳細をメッセージングCampaignsに組み込むこともできます。

PassKitコネクテッドコンテンツ呼び出し

1
2
3
{% connected_content  https://api-pub1.passkit.io/coupon/singleUse/coupon/externalId/{{${user_id}}} :headers {"Authorization": "Bearer <PASSKIT_LONG_LIVED_TOKEN>","Content-Type": "application/json"} :save passes %}

{{passes.status}}

Liquidの応答の例

1
2
3
4
5
6
7
8
9
10
11
{
    "redemptionDate": null,
    "redemptionCode": "",
    "lat": 0,
    "lon": 0,
    "alt": 0,
    "redemptionSource": "",
    "redemptionReference": "",
    "transactionReference": "",
    "transactionAmount": 0
}
1
UNREDEEMED
New Stuff!