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 de Braze et PassKit vous permet d’augmenter et de mesurer l’engagement de vos campagnes en ligne en offrant instantanément des passes personnalisées pour Apple Wallet et Google Pay. Vous pouvez ensuite analyser l’utilisation et effectuer des ajustements en temps réel pour augmenter le trafic en magasin en déclenchant des messages basés sur la localisation et des mises à jour dynamiques et personnalisées dans le portefeuille mobile de vos clients.
Prérequis
| Condition requise | Description |
|---|---|
| Compte PassKit | Vous devez disposer d’un compte PassKit et d’un gestionnaire de compte PassKit. |
userDefinedID |
Pour mettre à jour de manière appropriée les événements personnalisés et les attributs personnalisés de vos utilisateurs entre PassKit et Braze, vous devez définir l’ID externe Braze comme userDefinedID. Ce userDefinedID est utilisé lors des appels API aux endpoints PassKit. |
| Clé API REST Braze | Une clé API REST Braze avec les permissions users.track. Elle peut être créée dans le tableau de bord de Braze depuis Paramètres > Clés API. |
| Endpoint REST Braze | L’URL de votre endpoint REST. Votre endpoint dépendra de l’URL Braze de votre instance. |
Intégration
Pour enrichir davantage les expériences de portefeuille mobile de vos clients, vous pouvez, depuis votre tableau de bord PassKit, choisir de transmettre des données à Braze via l’endpoint /users/track de Braze.
Voici des exemples de données à partager depuis PassKit :
- Pass créé : lorsqu’un client clique sur un lien de pass et voit un pass pour la première fois.
- Pass installé : lorsque le client ajoute et enregistre le pass dans son application de portefeuille.
- Pass mis à jour : lorsqu’un pass est mis à jour.
- Pass supprimé : 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 via Liquid et déclencher des Campaigns ou des Canvas une fois ces actions effectuées.
Connecter Passkit à Braze
Pour transmettre des données depuis PassKit, assurez-vous d’avoir défini votre ID externe Braze comme externalId dans PassKit.
- Dans Settings, sous Integrations dans votre projet ou programme de pass PassKit, cliquez sur Connect sous l’onglet Braze.

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

Créer un pass à l’aide d’un lien SmartPass
Dans Braze, vous pouvez configurer un lien SmartPass pour générer une URL unique permettant à vos clients d’installer leur pass sur Android ou iOS. Pour ce faire, vous devez définir un payload de données SmartPass chiffré qui peut être appelé depuis un bloc de contenu Braze. Ce bloc de contenu peut ensuite être réutilisé pour de futurs pass et coupons. Les éléments suivants sont utilisés lors de votre intégration :
- URL PassKit : Votre URL PassKit est une URL unique pour votre programme PassKit.
Chaque programme possède une URL unique, que vous pouvez trouver sous 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 pour ce programme.
Celle-ci se trouve sur la même page que votre URL PassKit. - ID du programme (ou du projet) : L’ID de votre programme PassKit est requis pour créer l’URL SmartPass.
Vous pouvez le trouver sous l’onglet Settings de votre projet ou programme.
Pour plus d’informations sur la création de liens SmartPass chiffrés, consultez cet article PassKit.
Étape 1 : Définir le payload de données de votre pass
Tout d’abord, vous devez définir le payload du coupon ou du membre.
De nombreux composants peuvent être inclus dans votre payload, mais voici deux éléments importants à noter :
| Composant | Obligatoire | Type | Description |
|---|---|---|---|
person.externalId |
Obligatoire | String | Défini comme l’ID externe de Braze, ceci est essentiel pour que les rappels de PassKit vers Braze fonctionnent, permettant aux utilisateurs de l’entreprise d’avoir des coupons pour plusieurs offres dans une même Campaign. Non imposé comme unique. |
members.member.externalId |
Facultatif | String | Défini comme l’ID externe de Braze, vous pouvez utiliser votre ID externe pour mettre à jour le pass d’adhésion. La définition de ce champ impose que l’utilisateur soit unique au sein du programme d’adhésion. |
Pour obtenir la liste complète des champs disponibles, leurs types et des descriptions utiles, consultez la documentation PassKit sur GitHub.
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 bloc de contenu en accédant à Content > Content Block dans le tableau de bord de Braze.
Sélectionnez Create Content Block pour commencer.
Ensuite, vous devez définir votre étiquette Liquid du bloc de contenu. Après avoir enregistré ce bloc de contenu, cette étiquette Liquid peut être référencée lors de la composition de messages. Dans cet exemple, nous avons assigné l’étiquette Liquid comme {{content_blocks.${passKit_SmartPass_url}}}.
Dans ce bloc de contenu, nous n’inclurons pas directement le payload, mais le référencerons dans une variable {{passData}}. Le premier extrait de code que vous devez ajouter à votre bloc de contenu capture un encodage Base64 de la variable {{passData}}.
{% capture base64JsonPayload %}{{passDatapassData|base64_encode}}{% endcapture %}
Étape 3 : Créer votre signature de chiffrement à l’aide d’un hash SHA1 HMAC
Ensuite, vous allez créer votre signature de chiffrement à l’aide d’un hash SHA1 HMAC de l’URL du projet et du payload.
Le deuxième extrait de code que vous devez ajouter à votre bloc de contenu capture l’URL à utiliser pour le hachage.
{% capture url %}{{projectUrl}}?data={{base64JsonPayload}}{% endcapture %}
Ensuite, vous devez générer une signature à l’aide de ce hash et de votre Project Secret. Cela peut être fait en incluant 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 terminer, assurez-vous d’appeler votre URL finale afin qu’elle affiche votre URL SmartPass dans votre message.
{{longURL}}
À ce stade, vous avez créé un bloc de contenu 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 remonter la source de ces installations vers Braze et cette Campaign.

N’oubliez pas d’enregistrer votre bloc de contenu avant de quitter la page.
Étape 5 : Assembler le tout
Une fois ce bloc de contenu créé, il peut être réutilisé à l’avenir.
Vous remarquerez peut-être que deux variables restent non définies dans l’exemple de bloc de contenu.
{{passData}} – Le payload JSON de données de votre pass défini à l’étape 1
{{projectUrl}} – L’URL de votre projet ou programme que vous trouvez dans l’onglet de distribution de votre projet Passkit.
Ce choix est intentionnel et favorise la réutilisabilité du bloc de contenu. Étant donné que ces variables sont uniquement référencées et non créées dans le bloc de contenu, elles peuvent être modifiées sans recréer le bloc de contenu.
Par exemple, vous pourriez vouloir modifier l’offre d’introduction pour inclure davantage de points initiaux dans votre programme de fidélité, ou peut-être souhaitez-vous créer une carte de membre secondaire ou un coupon. Ces scénarios nécessiteraient des projectURLs Passkit différentes ou des payloads de pass différents, que vous définiriez par Campaign dans Braze.
Composer le corps du message
Vous devrez capturer ces deux variables dans le corps de votre message, puis appeler votre bloc de contenu. Capturez votre payload JSON minifié depuis l’étape 1 :
Assigner 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 bloc de contenu que vous venez de créer
{{content_block.${passkit_SmartPass_url}}}
Le corps de votre message devrait ressembler à ceci :

L’URL de sortie pour l’exemple est :

L’URL de sortie sera longue. La raison en est qu’elle contient toutes les données du pass et intègre une sécurité de premier ordre pour garantir l’intégrité des données et empêcher toute altération via la modification de l’URL. Si vous utilisez les SMS pour distribuer cette URL, vous pouvez la faire passer par un processus de raccourcissement de lien tel que bit.ly. Cela peut être fait via un appel de contenu connecté vers un endpoint bit.ly.
Mettre à jour un pass avec le webhook PassKit
Dans Braze, vous pouvez configurer une campagne 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 obtenir des informations sur les endpoints utiles de PassKit.
Paramètres du payload
Avant de commencer, voici les paramètres JSON courants du payload que vous pouvez inclure dans vos webhooks de création et de mise à jour vers PassKit.
| Données | Type | Description |
|---|---|---|
externalId |
String | Permet d’ajouter un identifiant unique à l’enregistrement du pass pour assurer la compatibilité avec un système existant utilisant des identifiants clients uniques (par exemple, les numéros d’adhésion). Vous pouvez récupérer les données du pass en utilisant 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 pas être modifiée.Pour l’intégration Braze, nous recommandons d’utiliser l’ID externe Braze : {{${user_id}}} |
campaignId (coupon) programId (adhésion) |
String | L’ID de la campagne ou du modèle de programme que vous avez créé dans PassKit. Pour le trouver, rendez-vous dans l’onglet Settings de votre projet de pass PassKit. |
expiryDate |
IO8601 datetime | La date d’expiration du pass. Après la date d’expiration, le pass est automatiquement annulé (voir isVoided). Cette valeur remplacera la valeur de date de fin du modèle et de la campagne. |
status |
String | Le statut actuel d’un coupon, tel que 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 Canvas, accédez à la section Modèles et médias dans le tableau de bord de Braze. Si vous souhaitez créer une campagne webhook PassKit ponctuelle ou utiliser un modèle existant, sélectionnez Webhook dans Braze lors de la création d’une nouvelle campagne.
Une fois le modèle de webhook PassKit sélectionné, 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 nécessite un HTTP Header pour l’autorisation qui inclut votre clé API PassKit encodée en base 64. Les éléments suivants seront déjà inclus dans le modèle en tant que paire clé-valeur, mais dans l’onglet Settings, vous devez remplacer <PASSKIT_LONG_LIVED_TOKEN> par votre jeton PassKit. Pour récupérer votre jeton, accédez à votre projet/programme PassKit, puis naviguez vers 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 du 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 mettra automatiquement en surbrillance les balises Braze applicables.
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 campagne webhook.
Récupérer les détails d’un pass via le contenu connecté
En plus de créer et de mettre à jour des passes, vous pouvez également récupérer les métadonnées de pass de vos utilisateurs via le contenu connecté de Braze afin d’incorporer 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