PassKit
PassKit vous permet d’étendre votre portée mobile en intégrant les pass Apple Wallet et Google Pay à l’expérience de vos clients. Créez, gérez, distribuez et analysez facilement les performances des coupons numériques, des cartes de fidélité, des cartes de membre, des billets et bien plus encore, sans que vos clients aient besoin d’une autre application.
Cette intégration est maintenue par Passkit.
À propos de l’intégration
L’intégration entre Braze et PassKit vous permet d’accroître et de mesurer l’engagement de vos campagnes en ligne en délivrant instantanément des pass Apple Wallet et Google Pay personnalisés. Vous pouvez ensuite analyser leur utilisation et procéder à des ajustements en temps réel pour augmenter la fréquentation en magasin. Pour cela, déclenchez des messages basés sur la localisation ainsi que des mises à jour personnalisées et dynamiques dans le portefeuille mobile de vos clients.
Conditions préalables
| Condition | Description |
|---|---|
| Compte PassKit | Vous devez disposer d’un compte PassKit et d’un gestionnaire de compte PassKit. |
userDefinedID |
Pour mettre à jour correctement les custom events et les attributs personnalisés de vos utilisateurs entre PassKit et Braze, vous devez définir l’ID externe de Braze comme userDefinedID. Ce userDefinedID est utilisé lors des appels API vers les endpoints de PassKit. |
| Clé d’API REST de Braze | Une clé d’API REST de Braze disposant des autorisations users.track. Vous pouvez la créer dans le tableau de bord de Braze, depuis Paramètres > Clés API. |
| Endpoint REST de Braze | L’URL de votre endpoint REST. Votre endpoint dépend de l’URL de Braze pour votre instance. |
Intégration
Pour enrichir encore davantage l’expérience de vos clients avec les portefeuilles mobiles, vous pouvez choisir, depuis votre tableau de bord PassKit, de transmettre des données à Braze via l’endpoint /users/track de Braze.
Voici quelques exemples de données que vous pouvez partager depuis PassKit :
- Pass créé : lorsqu’un client clique sur un lien de pass et que le pass s’affiche pour la première fois.
- Installations de pass : lorsque le client ajoute et enregistre le pass dans son application de portefeuille.
- Mises à jour de pass : lorsqu’un pass est mis à jour.
- Suppression de pass : lorsqu’un client supprime le pass de son application de portefeuille.
Une fois les données transmises à Braze, vous pouvez créer des audiences, personnaliser le contenu avec Liquid et déclencher des Campaigns ou des Canvas après ces actions.
Connecter Passkit à Braze
Pour transmettre des données depuis PassKit, assurez-vous d’avoir défini votre ID externe Braze comme externalId de PassKit.
- Dans Paramètres, sous Intégrations dans votre projet ou programme de pass PassKit, cliquez sur Connecter sous l’onglet Braze.

- Renseignez votre clé API Braze et l’URL de votre endpoint, puis donnez un nom à votre connecteur.
- Activez Activer l’intégration ainsi que les événements que vous souhaitez utiliser dans Braze pour déclencher ou personnaliser vos messages.

Créer un pass avec un lien SmartPass
Dans Braze, vous pouvez configurer un lien SmartPass pour générer une URL unique qui permet à vos clients d’installer leur pass sur Android ou iOS. Pour cela, vous devez définir un payload de données SmartPass chiffré, appelé depuis un Content Block de Braze. Ce Content Block peut ensuite être réutilisé pour de futurs passes et coupons. Voici les éléments utilisés lors de votre intégration :
- URL PassKit : votre URL PassKit est une URL unique propre à votre programme PassKit.
Chaque programme possède une URL unique, que vous trouverez dans l’onglet Distribution de votre programme ou projet PassKit (par exemple, https://pub1.pskt.io/c/ww0jir). - Secret PassKit : en plus de l’URL, vous devez disposer de la clé PassKit de ce programme.
Elle se trouve sur la même page que votre URL PassKit. - ID du programme (ou du projet) : l’ID de votre programme PassKit est nécessaire pour créer l’URL SmartPass.
Vous le trouverez dans l’onglet Settings de votre projet ou programme.
Pour en savoir plus sur la création de liens SmartPass chiffrés, consultez Liens SmartPass PassKit sur le site de PassKit.
Étape 1 : Définir le payload de données de votre pass
Commencez par définir le payload du coupon ou du membre.
Vous pouvez inclure de nombreux composants dans votre payload, mais en voici deux particulièrement importants :
| Composant | Obligatoire | Type | Description |
|---|---|---|---|
person.externalId |
Obligatoire | String | Défini comme l’ID externe Braze, ce champ est essentiel au bon fonctionnement des rappels de PassKit vers Braze : il permet aux utilisateurs d’avoir des coupons pour plusieurs offres dans une même Campaign. Son unicité n’est pas imposée. |
members.member.externalId |
Facultatif | String | Défini comme l’ID externe Braze, vous pouvez utiliser votre ID externe pour mettre à jour le pass de membre. Renseigner ce champ impose l’unicité de l’utilisateur au sein du programme de fidélité. |
Pour obtenir la liste complète des champs disponibles, de leurs types et de leurs descriptions, consultez la documentation GitHub de PassKit.
Exemple de payload
{
"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" }}"
}
Étape 2 : Créer et encoder une variable de payload non définie
Créez et nommez un nouveau Content Block en allant dans Content > Content Block dans le tableau de bord de Braze.
Sélectionnez Create Content Block pour commencer.
Vous devez ensuite définir votre Content Block Liquid Tag. Une fois ce Content Block enregistré, cette étiquette Liquid pourra être référencée lors de la rédaction de vos messages. Dans cet exemple, nous avons attribué l’étiquette Liquid {{content_blocks.${passKit_SmartPass_url}}}.
Dans ce Content Block, nous n’incluons pas directement le payload : nous le référençons dans une variable {{passData}}. Le premier extrait de code à ajouter à votre Content Block capture un encodage Base64 de la variable {{passData}}.
{% capture base64JsonPayload %}{{passDatapassData|base64_encode}}{% endcapture %}
Étape 3 : Créer votre signature de chiffrement avec un hachage SHA1 HMAC
Vous allez ensuite créer votre signature de chiffrement à l’aide d’un hachage SHA1 HMAC de l’URL du projet et du payload.
Le deuxième extrait de code à ajouter à votre Content Block capture l’URL à utiliser pour le hachage.
{% capture url %}{{projectUrl}}?data={{base64JsonPayload}}{% endcapture %}
Vous devez ensuite générer une signature à partir de ce hachage et de votre Project Secret. Pour cela, ajoutez un troisième extrait de code :
{% capture sig %}{{url | hmac_sha1: "Project_Secret"}}{% endcapture %}
Enfin, ajoutez la signature à l’URL complète à l’aide du cinquième extrait de code :
{% capture longURL %}{{projectUrl}}?data={{base64JsonPayload}}&sig={{sig}}{% endcapture %}
Étape 4 : Afficher votre URL
Pour finir, veillez à appeler votre URL finale afin que votre URL SmartPass s’affiche dans votre message.
{{longURL}}
À ce stade, vous avez créé un Content Block qui ressemble à ceci :
{% 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}}
Dans cet exemple, des paramètres UTM ont été ajoutés pour attribuer la source de ces installations à Braze et à cette Campaign.

N’oubliez pas d’enregistrer votre Content Block avant de quitter la page.
Étape 5 : Assembler le tout
Une fois créé, ce Content Block peut être réutilisé à l’avenir.
Vous remarquerez peut-être que deux variables restent non définies dans l’exemple de Content Block.
{{passData}} : le payload JSON des données de votre pass, défini à l’étape 1
{{projectUrl}} : l’URL de votre projet ou programme, disponible dans l’onglet Distribution de votre projet PassKit.
Ce choix est délibéré et favorise la réutilisation du Content Block. Comme ces variables sont uniquement référencées, et non créées dans le Content Block, elles peuvent changer sans qu’il soit nécessaire de recréer le Content Block.
Par exemple, vous souhaitez peut-être modifier l’offre de bienvenue pour attribuer davantage de points initiaux dans votre programme de fidélité, ou créer une carte de membre ou un coupon secondaire. Ces scénarios nécessitent des projectURLs PassKit différentes ou des payloads de pass différents, que vous définiriez pour chaque Campaign dans Braze.
Rédiger le corps du message
Vous devez capturer ces deux variables dans le corps de votre message, puis appeler votre Content Block. Capturez votre payload JSON minifié de l’étape 1 :
Attribuer l’URL du projet
{% assign projectUrl = "https://pub1.pskt.io/c/ww0jir" %}
Capturer le JSON
{% 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 %}
Référencer le Content Block que vous venez de créer
{{content_block.${passkit_SmartPass_url}}}
Le corps de votre message devrait ressembler à ceci :

Voici l’URL générée pour cet exemple :

L’URL générée est longue, car elle contient toutes les données du pass et intègre un niveau de sécurité optimal pour garantir l’intégrité des données et empêcher toute altération par modification de l’URL. Si vous distribuez cette URL par SMS, vous pouvez la raccourcir à l’aide d’un service comme bit.ly. Pour cela, effectuez un appel de contenu connecté vers un endpoint bit.ly.
Mettre à jour un pass avec le webhook PassKit
Dans Braze, vous pouvez configurer une Campaign webhook ou un webhook dans un Canvas pour mettre à jour un pass existant en fonction du comportement de vos utilisateurs. Consultez les liens suivants pour en savoir plus sur les endpoints PassKit utiles.
Paramètres du payload
Avant de commencer, voici les paramètres de payload JSON courants que vous pouvez inclure dans vos webhooks de création et de mise à jour vers PassKit.
| Données | Type | Description |
|---|---|---|
externalId |
Chaîne de caractères | Permet d’ajouter un ID unique à l’enregistrement du pass pour assurer la compatibilité avec un système existant qui utilise des identifiants clients uniques (par exemple, des numéros d’adhérent). Vous pouvez récupérer les données du pass avec cet endpoint via userDefinedId et campaignName au lieu de l’ID du pass. Cette valeur doit être unique au sein d’une campagne et, une fois définie, elle ne peut plus être modifiée.Pour l’intégration Braze, nous vous recommandons d’utiliser l’ID externe Braze : {{${user_id}}} |
campaignId (coupon) programId (adhésion) |
Chaîne de caractères | L’ID du modèle de campagne ou de programme que vous avez créé dans PassKit. Pour le trouver, accédez à l’onglet Settings de votre projet de pass PassKit. |
expiryDate |
Date et heure IO8601 | La date d’expiration du pass. Après cette date, le pass est automatiquement annulé (voir isVoided). Cette valeur remplace la date de fin définie dans le modèle et la campagne. |
status |
Chaîne de caractères | Le statut actuel d’un coupon, par exemple REDEEMED ou UNREDEEMED. |
Étape 1 : Créer votre modèle de webhook Braze
Pour créer un modèle de webhook PassKit à utiliser dans de futures Campaigns ou de futurs Canvas, accédez à la section Modèles et médias du tableau de bord de Braze. Si vous souhaitez créer une Campaign webhook PassKit ponctuelle ou utiliser un modèle existant, sélectionnez Webhook dans Braze lors de la création d’une nouvelle Campaign.
Après avoir sélectionné le modèle de webhook PassKit, vous devriez voir les éléments suivants :
- URL du webhook :
https://api-pub1.passkit.io/coupon/singleUse/coupon - Corps de la requête : Texte brut
En-têtes et méthode de la requête
PassKit exige un HTTP Header d’autorisation contenant votre clé API PassKit encodée en base 64. Ces informations figurent déjà dans le modèle sous forme de paire clé-valeur, mais dans l’onglet Paramètres, vous devez remplacer <PASSKIT_LONG_LIVED_TOKEN> par votre jeton PassKit. Pour récupérer votre jeton, accédez à votre projet ou programme PassKit, puis à Settings > Integrations > Long Lived Token.
- Méthode HTTP : PUT
- En-tête de la requête :
- Authorization : Bearer
<PASSKIT_LONG_LIVED_TOKEN> - Content-Type : application/json
- Authorization : Bearer
Corps de la requête
Pour configurer le webhook, renseignez les détails du nouvel événement dans le corps de la requête, y compris les paramètres de payload nécessaires à votre cas d’usage :
{
"externalId": "{{${user_id}}}",
"campaignId": " 2xa1lRy8dBz4eEElBfmIz8",
"expiryDate": "2020-05-10T00:00:00Z"
}
Étape 2 : Prévisualiser votre requête
Votre texte brut est automatiquement mis en surbrillance s’il s’agit d’une étiquette Braze applicable.
Prévisualisez votre requête dans le panneau Aperçu ou accédez à l’onglet Test, où vous pouvez sélectionner un utilisateur aléatoire, un utilisateur existant ou personnaliser le vôtre pour tester votre webhook.

N’oubliez pas d’enregistrer votre modèle avant de quitter la page !
Les modèles de webhook mis à jour se trouvent dans la liste Modèles de webhook enregistrés lors de la création d’une nouvelle Campaign webhook.
Récupérer les détails d’un pass via le contenu connecté
En plus de créer et de mettre à jour des pass, vous pouvez également récupérer les métadonnées des pass de vos utilisateurs via le contenu connecté de Braze pour intégrer des détails de pass personnalisés dans vos campagnes de communication.
Appel de contenu connecté PassKit
{% 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}}
Exemples de réponses Liquid
{
"redemptionDate": null,
"redemptionCode": "",
"lat": 0,
"lon": 0,
"alt": 0,
"redemptionSource": "",
"redemptionReference": "",
"transactionReference": "",
"transactionAmount": 0
}
UNREDEEMED