Skip to content

중첩 고객 속성

이 페이지에서는 다른 속성의 등록정보로 속성 집합을 정의할 수 있는 중첩 고객 속성에 대해 설명합니다. 즉, 커스텀 속성 오브젝트를 정의할 때 해당 오브젝트에 대한 추가 속성 집합을 정의할 수 있습니다.

중첩된 속성 정보

중첩 고객 속성을 사용하면 단일 커스텀 속성 오브젝트의 데이터로 더욱 풍부한 세그먼트를 구축하고 메시지를 개인화할 수 있습니다.

다음 예제에서 커스텀 속성 favorite_book 에는 중첩된 고객 속성 title, author, publishing_date 이 포함되어 있습니다. 이 개체를 사용하여 저자별로 사용자를 타겟팅하거나, 게시 날짜별로 필터링하거나, 책 제목을 메시지에 직접 삽입할 수 있습니다:

1
2
3
4
5
"favorite_book": {
  "title": "The Hobbit",
  "author": "J.R.R. Tolkien",
  "publishing_date": "1937"
}

Supported data types

다음 데이터 유형이 지원됩니다:

고려 사항

  • 중첩 고객 속성은 Braze SDK 또는 API를 통해 전송되는 커스텀 속성을 위한 것입니다.
  • 오브젝트의 최대 크기는 100 KB입니다. 업데이트로 인해 오브젝트가 100 KB를 초과하면 Braze는 해당 업데이트를 삭제하고 속성은 변경되지 않습니다.
  • 키 이름과 문자열 값의 크기 제한은 255자입니다.
  • 키 이름에는 공백을 포함할 수 없습니다.
  • 고객 프로필에 중첩 고객 속성을 전송하려는 경우 API 페이로드에서 마침표(.)와 달러 기호($)는 지원되지 않는 문자입니다.
  • 모든 Braze 파트너가 중첩 고객 속성을 지원하는 것은 아닙니다. 특정 파트너 통합이 이 기능을 지원하는지 확인하려면 파트너 설명서를 참조하세요.
  • 중첩 고객 속성은 Connected Audience API 호출 시 필터로 사용할 수 없습니다.

API 예시

다음은 “Most Played Song” 오브젝트를 사용한 /users/track 예시입니다. 노래의 등록정보를 캡처하기 위해 most_played_song을 오브젝트로 나열하고 오브젝트 등록정보 집합과 함께 API 요청을 전송합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "attributes": [
    {
      "external_id": "user_id",
      "most_played_song": {
        "song_name": "Solea",
        "artist_name": "Miles Davis",
        "album_name": "Sketches of Spain",
        "genre": "Jazz",
        "play_analytics": {
            "count": 1000,
            "top_10_listeners": true
        }
      }
    }
  ]
}

기존 오브젝트를 업데이트하려면 요청에 _merge_objects 파라미터를 포함하여 users/track에 POST를 전송합니다. 이렇게 하면 업데이트가 기존 오브젝트 데이터와 딥 머지됩니다. 딥 머지는 첫 번째 수준만이 아닌 오브젝트의 모든 수준이 다른 오브젝트에 병합되도록 합니다. 이 예시에서는 Braze에 이미 most_played_song 오브젝트가 있으며, 이제 most_played_song 오브젝트에 새 필드 year_released를 추가합니다.

1
2
3
4
5
6
7
8
9
10
11
{
  "attributes": [
    {
      "external_id": "user_id",
      "_merge_objects": true,
      "most_played_song": {
          "year_released": 1960
      }
    }
  ]
}

이 요청이 수신된 후 커스텀 속성 오브젝트는 다음과 같이 표시됩니다:

1
2
3
4
5
6
7
8
9
10
11
{"most_played_song": {
  "song_name": "Solea",
  "artist_name" : "Miles Davis",
  "album_name": "Sketches of Spain",
  "year_released": 1960,
  "genre": "Jazz",
  "play_analytics": {
     "count": 1000,
     "top_10_listeners": true
  }
}}

커스텀 속성 오브젝트를 삭제하려면 커스텀 속성 오브젝트를 null로 설정하여 users/track에 POST를 전송합니다.

1
2
3
4
5
6
7
8
{
  "attributes": [
    {
      "external_id": "user_id",
      "most_played_song": null
    }
  ]
}

SDK 예시

생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
val json = JSONObject()
    .put("song_name", "Solea")
    .put("artist_name", "Miles Davis")
    .put("album_name", "Sketches of Spain")
    .put("genre", "Jazz")
    .put(
        "play_analytics",
        JSONObject()
            .put("count", 1000)
            .put("top_10_listeners", true)
    )

braze.getCurrentUser { user ->
    user.setCustomUserAttribute("most_played_song", json)
}

업데이트

1
2
3
4
5
6
val json = JSONObject()
    .put("year_released", 1960)

braze.getCurrentUser { user ->
    user.setCustomUserAttribute("most_played_song", json, true)
}

삭제

1
2
3
braze.getCurrentUser { user ->
    user.unsetCustomUserAttribute("most_played_song")
}

생성

1
2
3
4
5
6
7
8
9
10
11
12
let json: [String: Any?] = [
  "song_name": "Solea",
  "artist_name": "Miles Davis",
  "album_name": "Sketches of Spain",
  "genre": "Jazz",
  "play_analytics": [
    "count": 1000,
    "top_10_listeners": true,
  ],
]

braze.user.setCustomAttribute(key: "most_played_song", dictionary: json)

업데이트

1
2
3
4
5
let json: [String: Any?] = [
  "year_released": 1960
]

braze.user.setCustomAttribute(key: "most_played_song", dictionary: json, merge: true)

삭제

1
braze.user.unsetCustomAttribute(key: "most_played_song")

생성

1
2
3
4
5
6
7
8
9
10
11
12
import * as braze from "@braze/web-sdk";
const json = {
  "song_name": "Solea",
  "artist_name": "Miles Davis",
  "album_name": "Sketches of Spain",
  "genre": "Jazz",
  "play_analytics": {
    "count": 1000,
    "top_10_listeners": true
  }
};
braze.getUser().setCustomUserAttribute("most_played_song", json);

업데이트

1
2
3
4
5
6
import * as braze from "@braze/web-sdk";
const json = {
  "year_released": 1960
};
braze.getUser().setCustomUserAttribute("most_played_song", json, true);

삭제

1
2
import * as braze from "@braze/web-sdk";
braze.getUser().setCustomUserAttribute("most_played_song", null);

날짜를 오브젝트 등록정보로 캡처하기

날짜를 오브젝트 등록정보로 캡처하려면 $time 키를 사용해야 합니다. 다음 예시에서는 “Important Dates” 오브젝트를 사용하여 birthdaywedding_anniversary라는 오브젝트 등록정보 집합을 캡처합니다. 이러한 날짜의 값은 $time 키가 포함된 오브젝트이며, null 값이 될 수 없습니다.

1
2
3
4
5
6
7
8
9
10
11
{
  "attributes": [ 
    {
      "external_id": "time_with_nca_test",
      "important_dates": {
        "birthday": {"$time" : "1980-01-01"},
        "wedding_anniversary": {"$time" : "2020-05-28"}
      }
    }
  ]
}

Liquid 템플릿

다음 Liquid 템플릿 예시는 앞선 API 요청에서 저장된 커스텀 속성 오브젝트 등록정보를 참조하여 메시징에 사용하는 방법을 보여줍니다.

custom_attribute 개인화 태그와 점 표기법을 사용하여 오브젝트의 등록정보에 접근합니다. 오브젝트 이름(오브젝트 배열을 참조하는 경우 배열 내 위치)을 지정한 다음 점(마침표)과 등록정보 이름을 입력합니다.

{{custom_attribute.${most_played_song}[0].artist_name}} — “Miles Davis”
{{custom_attribute.${most_played_song}[0].song_name}} — “Solea”
{{custom_attribute.${most_played_song}[0].play_analytics.count}} — “1000”

Liquid를 사용하여 노래 이름과 리스너가 해당 노래를 재생한 횟수를 메시지에 템플릿으로 삽입하는 모습

개인화

개인화 추가 모달을 사용하여 중첩 고객 속성을 메시징에 삽입할 수도 있습니다. 개인화 유형으로 중첩 고객 속성을 선택합니다. 그런 다음 최상위 속성과 속성 키를 선택합니다.

예를 들어, 아래 개인화 모달에서는 사용자의 선호도에 따라 지역 사무소의 중첩 고객 속성을 삽입합니다.

스키마 재생성

스키마가 생성된 후에는 24시간마다 한 번 재생성할 수 있습니다. 이 섹션에서는 스키마를 재생성하는 방법을 설명합니다. 스키마에 대한 자세한 내용은 중첩 오브젝트 탐색기를 사용하여 스키마 생성을 참조하세요.

중첩 고객 속성의 스키마를 재생성하려면:

  1. 데이터 설정 > 커스텀 속성으로 이동합니다.
  2. 중첩 고객 속성을 검색합니다.
  3. 속성의 속성 이름 열에서 를 선택하여 스키마를 관리합니다.
  4. 모달이 나타납니다. 스키마 재생성을 선택합니다.

마지막으로 스키마를 재생성한 후 24시간이 지나지 않은 경우 스키마 재생성 옵션이 비활성화됩니다. 스키마 재생성은 새 오브젝트만 감지하며 현재 스키마에 존재하는 오브젝트를 삭제하지 않습니다.

스키마를 재생성한 후 데이터가 예상대로 표시되지 않으면 해당 속성이 충분히 자주 수집되지 않을 수 있습니다. 사용자 데이터는 해당 중첩 속성에 대해 Braze에 이전에 전송된 데이터를 기반으로 샘플링됩니다. 속성이 충분히 수집되지 않으면 스키마에 반영되지 않습니다.

중첩 고객 속성 변경 트리거

중첩 고객 속성 오브젝트가 변경될 때 트리거할 수 있습니다. 이 옵션은 오브젝트 배열의 변경에는 사용할 수 없습니다. 경로 탐색기를 볼 수 있는 옵션이 표시되지 않으면 스키마가 생성되었는지 확인하세요.

예를 들어, 액션 기반 캠페인에서 커스텀 속성 값 변경에 대한 새 트리거 동작을 추가하여 지역 사무소 선호도를 변경한 사용자를 타겟팅할 수 있습니다.

중첩 선호도에 대한 커스텀 속성 값 변경 트리거가 있는 액션 기반 캠페인 전달 설정

오브젝트 배열에서의 세분화 동작

오브젝트 배열에 대해 여러 Nested Custom Attribute 필터를 AND 로직으로 사용하여 세분화할 때, 각 필터는 배열의 모든 항목에 대해 독립적으로 평가됩니다. 배열의 어떤 항목이든 각 개별 필터를 충족하면 사용자가 세그먼트에 해당됩니다. 필터가 동일한 항목과 일치할 필요는 없습니다.

예를 들어, 사용자에게 다음과 같은 배열이 있다고 가정합니다:

1
2
3
4
5
6
{
  "orders": [
    {"product": "Shoes", "price": 80},
    {"product": "Hat", "price": 25}
  ]
}

다음 AND 필터가 있는 세그먼트:

  • orders[].price가 50보다 큼
  • orders[].price가 30보다 작음

이 사용자는 첫 번째 필터가 “Shoes” 항목(80 > 50)과 일치하고 두 번째 필터가 “Hat” 항목(25 < 30)과 일치하므로 해당됩니다. 단일 항목이 두 조건을 모두 충족하지 않더라도 사용자는 여전히 세그먼트에 포함됩니다.

배열 내 동일한 항목에서 모든 조건이 일치해야 하는 경우, 동일한 경로에서 다중 기준 세분화를 사용하거나 교차 항목 매칭을 방지하도록 데이터를 재구성하세요.

데이터 포인트

전송되는 모든 키는 데이터 포인트를 소비합니다. 예를 들어, 고객 프로필에서 초기화된 이 오브젝트는 7개의 데이터 포인트를 소비합니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
  "attributes": [
    {
      "external_id": "user_id",
      "most_played_song": {
        "song_name": "Solea",
        "artist_name": "Miles Davis",
        "album_name": "Sketches of Spain",
        "year_released": 1960,
        "genre": "Jazz",
        "play_analytics": {
          "count": 1000,
          "top_10_listeners": true
        }
      }
    }
  ]
}
New Stuff!