Skip to content

오라클 크라우드 트위스트

오라클 크라우드트위스트는 브랜드가 개인화된 고객 경험을 제공할 수 있도록 지원하는 선도적인 클라우드 네이티브 고객 로열티 솔루션입니다. 이 솔루션은 100개 이상의 즉시 사용 가능한 고객 참여 경로를 제공하여 마케터가 고객에 대한 보다 완전한 시각을 개발할 수 있도록 빠른 가치 창출 시간을 제공합니다.

오라클 크라우드트위스트의 데이터 푸시 기능을 사용하면 크라우드트위스트 플랫폼에서 업데이트가 발생할 때마다 사용자 또는 이벤트 메타데이터를 전달할 수 있습니다.

이 가이드는 오라클 크라우드 트위스트의 고객 프로필, 사용자 활동 및 사용자 리뎀션 라이브 푸시 피드를 Braze 환경에 통합하는 방법을 간략하게 설명합니다. 이 설명서에서 명시적으로 다루지 않은 두 가지 추가 데이터 푸시 유형을 사용할 수 있지만 설정은 아래에 설명된 것과 동일한 원칙을 따릅니다.

Braze 데이터 변환 템플릿을 사용하면 데이터 푸시의 요소 중 Braze와 관련이 없는 요소를 필터링하고, 사용 가능한 ‘대상’에서 활용할 수 있도록 Braze에서 필요한 값을 할당할 수 있습니다.

예를 들어, 데이터 푸시를 사용하여 사용자가 로열티 등급을 변경하거나 보상을 받을 때와 같이 관련 커스텀 이벤트 및 속성을 Braze에 전달할 수 있습니다. 또한 회원의 포인트 잔액과 같은 데이터가 회원의 고객 프로필에 업데이트되는 즉시 이를 사용하여 Braze에 커스텀 속성을 기록할 수 있습니다.

필수 조건

Integration

Braze와 오라클 크라우드 트위스트는 고객이 사용자 프로필, 사용자 사용 및 사용자 활동 이벤트를 활용하는 자체 데이터 변환을 개발할 수 있도록 데이터 변환 템플릿을 만들었습니다.

1단계: 오라클 크라우드 트위스트 템플릿에서 데이터 변환 만들기

데이터 설정 > 데이터 변환 > 변환 만들기 > 템플릿 사용으로 이동하여 원하는 “Braze <> 크라우드 트위스트” 템플릿을 선택합니다.

사용자 프로필, 사용자 활동, 사용자 사용 이벤트 변환을 위한 템플릿과 조건 로직을 사용하여 다양한 데이터 푸시 이벤트에 적용할 수 있는 마스터 템플릿이 각각 하나씩 제공됩니다.

오라클 크라우드 트위스트의 데이터 푸시 설명서에 나와 있듯이, 데이터 푸시 객체에는 서로 다른 메타데이터가 포함되어 있으므로 적절한 Braze 객체를 생성하려면 각각 고유한 변환 코드가 필요합니다. 마스터 템플릿은 세 가지 유형의 개체를 각각 받아들이도록 단일 데이터 변환을 설정하고 각 개체의 값으로 적절한 출력을 생성하는 방법을 보여줍니다.

2단계: 템플릿 업데이트 및 테스트

아래에서 주석이 달린 템플릿을 확인할 수 있습니다. 이 템플릿의 본문은 /users/track 대상에 적용하도록 설계되었습니다. 주석은 // 줄 시작과 녹색 텍스트로 표시되며, 변환 코드의 작동에 영향을 주지 않고 삭제할 수 있습니다.

이 변환은 자바스크립트를 사용하여 “brazecall”이라는 객체를 구축합니다. 이 객체는 Braze REST API 엔드포인트로 전송되는 요청 본문을 생성하는 곳입니다. 이러한 대상에 대한 요청의 필수 구조에 대한 지침은 ‘대상’ 섹션의 링크를 참조하세요.

데이터 변환 템플릿

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");
}

대상

이 가이드의 템플릿은 ‘사용자 추적’ 대상으로 전송하기 위해 만들어졌지만, 관련 REST API 설명서를 참조하여 Braze의 데이터 전환 가이드에 나열된 모든 엔드포인트로 전송하도록 템플릿을 디자인할 수 있습니다.

테스트

템플릿을 원하는 대로 수정한 후에는 템플릿이 올바르게 작동하는지 확인해야 합니다. “유효성 검사”를 클릭하여 코드 출력의 미리 보기를 반환하고 선택한 대상에 대해 허용되는 요청인지 확인합니다.

Braze 데이터 변환 UI 스크린샷

‘출력’ 필드에 표시되는 개체가 마음에 들면 활성화를 클릭하여 데이터 변환 엔드포인트가 데이터를 받아들일 준비가 되도록 합니다.

왼쪽 패널에서 데이터 트랜스포메이션의 웹훅 URL을 찾을 수 있습니다. 이를 복사하여 오라클 크라우드 트위스트의 통합 허브 내에서 구성에 사용하세요.

데이터 변환은 매우 역동적인 도구이며, JavaScript에 대한 이해와 REST API 설명서의 안내를 통해 이 문서에 설명된 것 이상의 목적으로 데이터 변환을 설계할 수 있습니다. 데이터 변환 템플릿의 복잡한 변경에 대한 지원이나 문제 해결이 필요한 경우 고객 성공 매니저에게 문의하여 사용 가능한 지침에 대해 알아보세요.

New Stuff!