Skip to content

PassKit

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

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

前提条件

統合

顧客のモバイルウォレット体験をさらに充実させるために、PassKit ダッシュボード内から Brazeの /users/track エンドポイントを介してデータを Braze に渡すことを選択できます。

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

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

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

Passkit を Braze に接続する

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

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

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

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

SmartPass リンクを使用してパスを作成する

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

  • PassKit URL:PassKit URL は、PassKit プログラムの一意のURL です。
    各プログラムには固有のURLがあり、PassKitプログラムまたはプロジェクトの「Distribution」タブで見つけることができる。(例えば、https://pub1.pskt.io/c/ww0jir )

  • PassKit シークレット:URL に加えて、このプログラムの PassKit キーが必要です。
    これは PassKit URL と同じページで確認できます。

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

暗号化されたスマートパス・リンクの作成に関する詳細は、こちらの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 ダッシュボード内の [テンプレート] > [コンテンツブロック] に移動して、新しいコンテンツブロックを作成し、名前を付けます。

[コンテンツブロックを作成] を選択して開始します。

次に、コンテンツブロックの Liquid タグを定義します。このコンテンツブロックを保存したら、メッセージを作成するときにこの Liquid タグを参照できます。この例では、リキッドタグを{{content_blocks.${passKit_SmartPass_url}}} として割り当てている。

このコンテンツブロック内では、ペイロードを直接含めませんが、{{passData}} 変数でペイロードを参照します。コンテンツ・ブロックに追加しなければならない最初のコード・スニペットは、{{passData}} 変数の Base64 エンコードをキャプチャする。

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

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

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

コンテンツ・ブロックに追加しなければならない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}}

この時点で、以下のようなコンテンツブロックが作成されます。

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 とこのキャンペーンまで追跡するために、UTM パラメーターが追加されています。

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

このコンテンツブロックが作成されたら、今後再利用できます。

コンテンツ・ブロックの例では、2つの変数が未定義のままになっていることにお気づきだろうか。
{{passData}} - ステップ1で定義した JSON パスデータのペイロード
{{projectUrl}} - Passkit プロジェクトの配布タブにあるプロジェクトまたはプログラムの URL。

これは意図的な決定であり、コンテンツブロックの再利用性がサポートされます。これらの変数は参照されるだけで、コンテンツ・ブロック内で作成されるわけではないので、コンテンツ・ブロックを作り直すことなく、これらの変数を変更することができる。

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

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

この2つの変数をメッセージ本文に取り込んでから、コンテンツブロックを呼び出すことができます。 ステップ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 %}

先ほど作成したコンテンツブロックを参照する

1
{{content_block.${passkit_SmartPass_url}}}

メッセージ本文は次のようなものだ: キャプチャされた JSON およびコンテンツブロック参照を含むコンテンツブロックメッセージ作成画面。

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

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

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

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

ペイロードパラメーター

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

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

今後のキャンペーンやCanvasで使用するPassKitウェブフックテンプレートを作成するには、Brazeダッシュボードの「テンプレート&メディア」セクションに移動する。単発のPassKitウェブフックキャンペーンを作成する場合、または既存のテンプレートを使用する場合は、新しいキャンペーンを作成する際にBrazeでウェブフックを選択する。

PassKitウェブフック・テンプレートを選択すると、以下のように表示される:

  • 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:ベアラー <PASSKIT_LONG_LIVED_TOKEN>
    • Content-Type: application/json

Request body

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

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

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

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

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

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

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

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!