Skip to content

Oracle Crowdtwist

Oracle Crowdtwist est une solution de fidélisation de la clientèle native dans le cloud qui permet aux marques d’offrir des expériences clients personnalisées. Leur solution propose plus de 100 parcours d’engagement prêts à l’emploi, ce qui permet aux marketeurs d’obtenir rapidement une vue plus complète du client.

La fonctionnalité Data Push d’Oracle Crowdtwist permet de transmettre les métadonnées d’un utilisateur ou d’un événement à chaque fois qu’une mise à jour se produit dans la plateforme de Crowdtwist.

Ce guide explique comment intégrer les flux Live Push du profil utilisateur, de l’activité de l’utilisateur et de la rédemption de l’utilisateur d’Oracle Crowdtwist dans votre environnement Braze. Il existe deux autres types de Data Push qui ne sont pas explicitement traités dans cette documentation, mais dont la configuration suit les mêmes principes que ceux décrits ci-dessous.

En utilisant un modèle de transformation de données Braze, vous pouvez filtrer les éléments de la poussée de données qui ne sont pas pertinents pour Braze, et attribuer les valeurs nécessaires dans Braze afin qu’elles puissent être exploitées par les “destinations” disponibles.

Par exemple, utilisez un Data Push pour transmettre à Braze des événements et attributs personnalisés pertinents, comme lorsqu’un utilisateur change de niveau de fidélité ou échange une récompense. Vous pouvez également l’utiliser pour enregistrer des attributs personnalisés dans Braze dès que ces données sont mises à jour dans le profil utilisateur d’un membre, comme le solde de points d’un utilisateur.

Conditions préalables

Intégration

Braze et Oracle Crowdtwist ont créé des modèles de transformation de données pour aider nos clients à développer leurs propres transformations de données qui exploitent les événements Profil utilisateur, Remboursement utilisateur et Activité utilisateur.

Étape 1 : Créer une transformation de données à partir du modèle Oracle Crowdtwist

Naviguez vers Paramètres des données > Transformation des données > Créer des transformations > Utiliser un modèle > et sélectionnez le modèle “BRAZE <> CROWDTWIST” de votre choix.

Vous trouverez quatre modèles, un pour transformer les événements Profil utilisateur, Activité utilisateur et Remboursement utilisateur, et un modèle principal qui utilise une logique conditionnelle pour s’appliquer à divers événements Data Push.

Comme le montre la documentation d’Oracle Crowdtwist sur le Data Push, les objets Data Push contiennent des métadonnées différentes, de sorte que chacun nécessite son propre code de transformation pour créer les objets Braze appropriés. Le modèle principal illustre comment configurer une seule transformation de données pour accepter chacun des trois types d’objets et créer une sortie appropriée avec les valeurs de chaque objet.

Étape 2 : Mise à jour et test du modèle

Vous trouverez ci-dessous les modèles annotés. Le corps de ces modèles est conçu pour s’appliquer à la destination /users/track. Les annotations sont marquées par le début de ligne // et le texte vert, et vous pouvez les supprimer sans affecter le fonctionnement du code de transformation.

La transformation utilise JavaScript, qui crée un objet appelé “brazecall”. C’est dans cet objet que vous créez le corps de la requête qui est envoyé à un endpoint de l’API REST de Braze. Pour obtenir des conseils sur les structures requises pour les demandes vers ces destinations, consultez les liens dans la section “destinations”.

Modèles de transformation des données

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
let brazecall = {
 "attributes": [
   {
     //You must include an appropriate identifier for your attribute or event object from data available in Oracle Crowdtwist. This could be an external ID, Braze ID, user alias, phone, or email address for attribute or event objects.
     "external_id": payload.thirdPartyId,
     "email": payload.emailAddress,
   // **Important** To allow Oracle Crowdtwist events to create users in Braze, set the value of "_update_existing_only" to false. Otherwise, set this value to true in your event and attribute objects.
     "_update_existing_only": false,
     "crowdtwist_loyalty_points": payload.redeemablePoints,
 //In this example, the "tierInfo" object from Crowdtwist is transformed into a Braze Nested Custom Attribute. Use the "_merge_objects" value to avoid duplications in a data point efficient manner.
 //The "tierinfo_current_level" attribute is a flat Braze custom attribute, while "tierInfo" below is a nested object mirroring the Crowdtwist payload; the difference in capitalization is intentional.
     "tierinfo_current_level": payload.tierInfo.currentLevel,
     "_merge_objects" : true,
     "tierInfo" : {
       "resetDate": payload.tierInfo.resetDate,
       "dateReached":payload.tierInfo.dateReached,
        "scoreNeededToReach": payload.tierInfo.scoreNeededToReach,
        "nextLevel":{ 
        "minValue":payload.tierInfo.nextLevel.minValue,
        "maxValue":payload.tierInfo.nextLevel.maxValue,
        "title":payload.tierInfo.nextLevel.title
     }
     }
   }
 ]
,
//Below we show how to create both custom attributes and events from a single Crowdtwist User Profile object.
 "events": [
   {
     "external_id": payload.thirdPartyId,
     "email": payload.emailAddress,
     "name": "assignedByEvent",
//Below we can see how to write a timestamp in your object, which is a required value for some objects, like the Event Object. 
     "time": new Date().toISOString(),
     "properties": {
       "assigned_by_event": payload.tierInfo.assignedByEvent,
       "date_assigned": payload.tierInfo.dateAssigned
     },
           "_update_existing_only": false
   }
 ]
};
// After the /users/track request is assigned to brazecall, return brazecall to create an output.
return brazecall;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let brazecall = {
"events": [
   {
     "external_id": payload.thirdPartyId,
     "_update_existing_only": false,
     "activityId": payload.activityId,
     "name": payload.activityName,
     "time": new Date().toISOString(),
     "properties": {
       "description": payload.description,
       "date_assigned": payload.dateAwarded
     }
   }
 ]
};
return brazecall;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
let brazecall = {
 "attributes": [
   {
   "external_id": payload.thirdPartyId,
   //A user redemption event may not have a third party id, in which case you can instead provide the opportunity to include a user alias.
   "user_alias": { "alias_name" : "crowdtwist_redemption_username", "alias_label" : payload.userName},
   "_update_existing_only": false,
   "redeemed_coupon": payload.couponCode,
   "total_points_redeemed": payload.totalPointsRedeemed
      }
]
}
return brazecall;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//The master template uses JavaScript's conditional operators to determine the output of the Data Transformation. This example shows how to apply JavaScript to your transformation to allow for a dynamic range of sources or inputs. 

 // We open the transformation with a simple "if" function. We're checking if the value "payload.tierInfo" is present. "tierInfo" is a value that is always populated in the User Profile Live Push object, but is not present in the others.

if (payload.tierInfo) {
let brazecall = {
 "attributes": [
   {
     "external_id": payload.thirdPartyId,
     "email": payload.emailAddress,
     "_update_existing_only": false,
     "crowdtwist_loyalty_points": payload.redeemablePoints,
     "tierinfo_current_level": payload.tierInfo.currentLevel,
     "_merge_objects" : true,
     "tierInfo" : {
       "resetDate": payload.tierInfo.resetDate,
       "dateReached":payload.tierInfo.dateReached,
        "scoreNeededToReach": payload.tierInfo.scoreNeededToReach,
        "nextLevel":{ 
        "minValue":payload.tierInfo.nextLevel.minValue,
        "maxValue":payload.tierInfo.nextLevel.maxValue,
        "title":payload.tierInfo.nextLevel.title
     }
     }
   }
 ]
,
 "events": [
   {
     "external_id": payload.thirdPartyId,
     "email": payload.emailAddress,
     "name": "assignedByEvent",
     "time": new Date().toISOString(),
     "properties": {
       "assigned_by_event": payload.tierInfo.assignedByEvent,
       "date_assigned": payload.tierInfo.dateAssigned
     },
           "_update_existing_only": false
   }
 ]
};
return brazecall;
//Now we use an "else if" operator to change the "brazecall" body if the object is a User Activity event by checking if the unique key "activityId" has been populated.
} else if (payload.activityId) {
 let brazecall = {
"events": [
   {
     "external_id": payload.thirdPartyId,
     "_update_existing_only": false,
     "activityId": payload.activityId,
     "name": payload.activityName,
     "time": new Date().toISOString(),
     "properties": {
       "description": payload.description,
       "date_assigned": payload.dateAwarded
     }
   }
 ]
};
return brazecall;
//Finally, this conditional statement triggers if the Data Push object is a User Redemption event, based on whether a value populates in the key "rewardId".
} else if (payload.rewardId) {
 let brazecall = {
 "attributes": [
   {
   "external_id": payload.thirdPartyId,
   "_update_existing_only": false,
   "redeemed_coupon": payload.couponCode,
   "total_points_redeemed": payload.totalPointsRedeemed
      }
]
}
return brazecall;
} else {
 //Include this error message to help with troubleshooting in the log if a call fails. Replace the text in the parentheses with anything that might be clearer to your team based on your Data Transformation.
 throw new Error("No appropriate Identifiers found");
}

Destinations

Les modèles de ce guide sont créés pour livrer à la destination “ Suivi des utilisateurs “, mais vous pouvez concevoir votre modèle pour l’envoyer à n’importe quel endpoint répertorié dans le guide Transformation des données de Braze, avec l’aide de la documentation de l’API REST associée.

Test

Après avoir modifié le modèle à votre convenance, vous devez vous assurer qu’il fonctionne correctement. Cliquez sur “Valider” pour obtenir un aperçu de la sortie de votre code et vérifier s’il s’agit d’une demande acceptable pour la destination choisie.

Capture d'écran de l'interface de transformation des données de Braze

Lorsque vous êtes satisfait de l’objet que vous voyez dans le champ “output”, cliquez sur Activer pour que le endpoint de transformation des données soit prêt à accepter des données.

Vous trouverez l’URL du webhook de votre transformation de données dans le panneau latéral gauche. Copiez-le et utilisez-le pour la configuration dans le hub d’intégration d’Oracle Crowdtwist.

Les transformations de données sont un outil très dynamique et vous pouvez les concevoir à des fins qui vont au-delà de ce qui est décrit dans ce document, avec une compréhension de JavaScript et avec les conseils de notre documentation sur l’API REST. Pour obtenir de l’aide ou une résolution des problèmes concernant des modifications complexes apportées à vos modèles de transformation des données, adressez-vous à votre gestionnaire de la réussite des clients pour connaître les conseils dont vous disposez.

New Stuff!