# 데이터 업로드

본격적으로 유저 데이터를 업로드하기 전, 유저 데이터 속성이 먼저 정의되어야 합니다. 아래 단계에 따라 진행해주세요! 🧭

## [**STEP 1. &#x20;**<mark style="color:red;">**유저 데이터 속성 정의 >**</mark>](#step-1)

## [**STEP 2. &#x20;**<mark style="color:red;">**유저 데이터 업로드 >**</mark>](#step-2)

***

*오디언스 > 유저관리 > 유저 리스트 >*`유저 데이터 관리`버튼을 눌러주세요.

<figure><img src="/files/6XqvkgkfGEnUCpGSXaCR" alt=""><figcaption></figcaption></figure>

***

#### **STEP 1.&#x20;**<mark style="color:red;">**유저 데이터를 연동하기 전, 유저 데이터로 관리할 속성을 먼저 정의합니다.**</mark>&#x20;

## **① 속성값 정의**

UD1 (유저속성1) 부터 UD6 (유저속성6) 까지 6개의 항목은 아래와 같이 사전 정의된 속성으로, 변경할 수 없습니다.

사전 정의 속성 이외의 추가 데이터항목이 필요한 경우, UD7 \~ UD50 속성을 정의하여 이용해주세요.

### 🧩사전정의 유저 속성

<table data-full-width="false"><thead><tr><th width="220">유저속성</th><th>값 (정의)</th></tr></thead><tbody><tr><td>UD1</td><td>회원명</td></tr><tr><td>UD2</td><td>성별</td></tr><tr><td>UD3</td><td>휴대폰번호</td></tr><tr><td>UD4</td><td>이메일</td></tr><tr><td>UD5</td><td>주소</td></tr><tr><td>UD6</td><td>상세주소</td></tr></tbody></table>

<figure><img src="/files/OQ7UtyFhQMiFXj7MmU8X" alt="" width="563"><figcaption></figcaption></figure>

<table data-header-hidden><thead><tr><th width="185"></th><th></th></tr></thead><tbody><tr><td>속성 코드</td><td><p>사용할 속성코드를 선택합니다. </p><p>✅<code>UD1</code> ~ <code>UD6</code> 고정 / <code>UD50</code> 까지 이용 가능</p></td></tr><tr><td>속성 이름</td><td>수집할 유저 데이터 속성 항목을 입력합니다.<br>✅<code>UD1</code> ~ <code>UD6</code> 고정, 수정불가 / <code>UD7</code> ~ <code>UD50</code> 커스텀 이용 가능</td></tr><tr><td>데이터 보관 방법</td><td>개인정보에 해당하는 속성은 <code>암호화 적용 후 저장</code> 옵션을 선택합니다.<br>⚠️해당 옵션은 이후 변경이 불가합니다.<br>⚠️모든 유저 속성을 암호화 처리할 경우 데이터 처리 속도가 매우 느려질 수 있습니다.</td></tr></tbody></table>

{% hint style="warning" %}
한 번 저장한 유저 속성 데이터 항목은 이후 삭제 불가합니다. 반드시 확인 후 저장해주세요.
{% endhint %}

***

#### **STEP 2. 데이터 업로드**

{% hint style="success" %}
유저 데이터를 업로드하는 방법은 아래와 같습니다. 편한 방법을 선택하여 진행해주세요.

<mark style="background-color:green;">개발자 도움 필요하지 않음</mark>

* [x] [직접 등록](#id-2)
* [x] [CSV 파일 업로드](#id-3-csv)

<mark style="background-color:orange;">개발자 도움 필요</mark>

* [x] [API 연동 작업](#id-4-api)
* [x] 이벤트 호출 작업 (해당 방법에 대한 안내가 필요하다면, <tech@wisetracker.co.kr> 로 요청 부탁드립니다.)
  {% endhint %}

## **② 직접 등록**

*오디언스 > 유저 관리 >* `유저 데이터 관리` - `직접등록` 버튼을 클릭합니다.

유저 데이터를 입력한 후, `등록` 버튼을 눌러주세요.

<figure><img src="/files/FwxBjJRq82VVixHjyyKC" alt=""><figcaption></figcaption></figure>

## **③ CSV** 업로드 <a href="#csv-upload" id="csv-upload"></a>

1️⃣ *오디언스 > 유저 관리 >* `유저 데이터 관리` - `CSV 업로드` 버튼을 클릭하여 `CSV 템플릿 파일`을 다운로드합니다.

<div align="left"><figure><img src="/files/rqYALOU9zF0YwSpYbWJR" alt="" width="235"><figcaption></figcaption></figure></div>

{% file src="/files/vjuriN5Y9HYoA9IrOyfw" %}

<figure><img src="/files/K3hwzm0SYqhKq9jJ0hZC" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
파일 열기 시 위 이미지처럼 '**UTF-8' 확인 후 로드**해주시길 바랍니다.
{% endhint %}

{% hint style="warning" %}
**템플릿 이용 유의사항**

* 템플릿 파일의 첫 열에는 반드시 회원 아이디(MBID)를 입력해야 합니다.
* 불필요한 열은 삭제 후 업로드할 수 있습니다.
* 유저 데이터 중 Macro1\~ Macro6까지는 데이터의 의미가 고정되어 있습니다. Macro7 부터 Macro50 까지는 사용자가 정의해서 사용 가능합니다. [표](#undefined)를 참고하여 각 Macro별 정확한 데이터가 업로드 되도록 합니다.

⚠️ 정확한 데이터가 입력되지 않을 시 오류가 발생할 수 있으니 주의해주세요.

⚠️ 메시지 발송시 속성을 변수로 사용할 수 있습니다. 해당 속성에 입력되지 않은 **유저의 데이터가 있다면 공란으로 발송될 수 있습니다.**

⚠️ <mark style="color:red;">**Macro3 ‘전화번호’ 열의 셀 서식은 반드시**</mark><mark style="color:red;">**&#x20;**</mark><mark style="color:red;">**`텍스트`**</mark><mark style="color:red;">**로 설정해주세요.**</mark>
{% endhint %}

2️⃣ **회원아이디 MBID를 포함한 템플릿의 열 개수**를 선택하고 CSV 파일을 업로드합니다.&#x20;

{% hint style="warning" %}

* 업로드할 템플릿의 열 개수와 일치하는지 반드시 확인해주세요.
* 파일명은 **영어**로 저장해주시기 바랍니다.
* 파일 저장 시 파일 형식은 아래와 같이 반드시 **CSV (쉼표로 분리)** 로 선택하여 주시기 바랍니다.

  ⚠️`CSV UTF-8(쉼표로 분리)` 로 설정 시 파일이 정상적으로 업로드되지 않을 수 있습니다.

<img src="/files/4irAAbUyKEg3HKdAfNyO" alt="" data-size="original">
{% endhint %}

<mark style="color:blue;">**예시)**</mark>

아래의 파일을 업로드하는 경우, 열의 개수는 **`6개`** 로 선택합니다.

<figure><img src="/files/8R07rXvWK1fYynuXFZ75" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/9yjqCurpdQg9wqIP0szC" alt=""><figcaption></figcaption></figure>

3️⃣ 업로드한 파일의 데이터가 맞게 잘 들어갔는지 확인합니다.

<figure><img src="/files/D2lwt2jbsRUBDLkrDki8" alt=""><figcaption></figcaption></figure>

➊ 회원아이디(MBID) 를 비롯하여 고정값인 Macro1 \~ Macro6 의 속성명은 변경할 수 없습니다. Macro7\~ Macro50 속성의 경우 변경이 가능합니다.

➋ 아래의 두 옵션 중 원하는 데이터 업로드 방식을 택하여 `Start sync` 버튼을 눌러주세요.

* [ ] 중복된 열은 업데이트 하고, 새로운 열은 추가 합니다.
* [ ] 기존의 모든 데이터를 삭제하고 업로드하는 데이터 기준으로 다시 생성합니다.

{% hint style="warning" %}
덮어쓰여져 훼손된 데이터는 복구해드리지 않으니 반드시 신중하게 진행해주세요 ! 👀
{% endhint %}

## ④ API 연동 <a href="#api" id="api"></a>

| METHOD            | POST                                                                                |
| ----------------- | ----------------------------------------------------------------------------------- |
| HOST              | <https://analytics.wisetracker.co.kr/console/v1/api/userdata/apiForUserDataSync.do> |
| Requset Parameter | \***profileNo**                                                                     |
| Request Header    | \***authToken**                                                                     |
| Requset Body      | \***JSON Object**                                                                   |

{% tabs %}
{% tab title=" profileNo " %}

<figure><img src="/files/fdb9sj7kEReVFsUPqKzn" alt=""><figcaption></figcaption></figure>

\[서비스 설정] → \[어플리케이션 설정]에서 서비스 번호 확인
{% endtab %}

{% tab title="authToken " %}

<figure><img src="/files/S8nQMNlRJjj4HJzzmJzj" alt=""><figcaption></figcaption></figure>

\[서비스 설정] → \[메시지 설정]에서 accessToken 확인
{% endtab %}

{% tab title="JSON Object" %}

* mbid: 유저를 구분하는 고유(Unique)한 값입니다.

* userdata: 유저와 관련된 데이터입니다.
  {% endtab %}
  {% endtabs %}

* REQUEST 예시

```
POST <https://analytics.wisetracker.co.kr/console/v1/api/userdata/apiForUserDataSync.do?profileNo=00000>
authToken: Q5MXn+tcAH2xxxxxxxxxxxxabcdabacdabadcdeeee=

// 첫번째 예시, Macro#1(=UD1) 칼럼을 대상으로 데이터 추가
{
  "mbid": "hongkildong",
  "userdata": {
    "UD1": "홍길동",
  }
}

// 두번째 예시, Macro#1(=UD1), Macro#3(=UD3), Macro#7(=UD7)칼럼을 대상으로 데이터 추가
{
  "mbid": "testUserId9",
  "userdata": {
    "UD1": "hongkildong",
    "UD3": "01012345678",
    "UD7": "GOLD"
  }
}
```

* RESPONSE 예시

```
// 와이즈트래커 서버와 통신이 성공했다면, 실제 유저(User) 데이터 업로드 자체를 성공했는지와는 별개로 status와 success는 항상 200과 true가 반환됩니다. 
// 실제 성공 여부 또는 실패했다면 실패 이유는, message 키의 값을 확인해주시면 됩니다.

{
  "status": 200,
  "success": true,
  "details": "uri=/console/v1/api/userdata/apiForUserDataSync.do",
  "timestamp": "2023-07-28 13:23:53",
  "message": "유저 데이터가 업데이트 되었습니다.",
  "result": {},
  "resultCount": 0,
  "totalCount": 0,
  "lastPage": 0
}
```

## ⑤ 이벤트 호출 <a href="#userdatasync-event" id="userdatasync-event"></a>

유저를 추가하거나 값이 업데이트될 경우 다음의 이벤트를 이용합니다.&#x20;

다음의 이벤트를 이용해 유저를 삭제할 순 없습니다.

```jsx
// .dart 에서 호출 할 때 
Map userSync = {};
userSync["event"] = "w_user_data_sync";
userSync["userSyncData"] = {};
userSync["userSyncData"]["MBID"] = "aaa"; // setUser의 setMemberId와 같은 값
userSync["userSyncData"]["UD1"] = "aaa";
userSync["userSyncData"]["UD2"] = "aaa";
userSync["userSyncData"]["UD3"] = "aaa";
DOT.logEvent(userSync);

// webview 에서 호출 할 때
DotFlutterDataBridge.postMessage(JSON.stringify({
      method : "logEvent",
      data: {
              event : "w_user_data_sync",
              userSyncData: {
	              MBID : "aaa", // setUser의 setMemberId와 같은 값
	              UD1 : "aaa",
	              UD2 : "aaa",
	              UD3 : "aaa"
              }
      }
}));
```

***

##

## 유저 데이터 변경내역

최근 90일간 직접등록 또는 CSV 업로드 등 수동으로 유저 데이터를 업데이트한 내역에 대해 확인할 수 있습니다.

<figure><img src="/files/gDmkj6eWtc9WMFoG0LYS" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/SayNMrV6BVfC55ukN1Om" alt=""><figcaption></figcaption></figure>

***

## 유저데이터 초기화

시스템에 저장된 유저 데이터를 모두 삭제합니다.&#x20;

<figure><img src="/files/OVjVyQPzUCXh41nda0zt" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %} <mark style="color:red;">데이터 초기화 작업은 진행 중 취소할 수 없으며, 되돌릴 수 없으니 주의하여 사용해주시길 바랍니다.</mark>
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://document.wisetracker.co.kr/audience/user-management/user-list/data-upload.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
