# 회원 API v2.0.1

{% hint style="info" %}
오프사이트 캠페인의 발송 시 사용되는 회원의 정보를 그루비에 전송하는 API 입니다.&#x20;

[회원 API](https://docs.groobee.ai/developer-guide/api-guide/member) 문서를 참고해 주세요.회원 API v1 과 v2는 혼용하여 사용할 수 없습니다.
{% endhint %}

## **회원 정보 조회**

### **설명**

등록한 회원 정보를 조회합니다. 회원 정보는 회원 ID, 회원 전화번호를 쿼리 파라미터로 전달하여 조회할 수 있습니다.

### **기본 정보**

| Method | URL                                   | 인증 방식   |
| ------ | ------------------------------------- | ------- |
| GET    | <https://api.groobee.io/v2/users/sms> | API Key |

**요청 헤더**

| 이름           | 설명                             | 필수 |
| ------------ | ------------------------------ | -- |
| x-api-key    | x-api-key: ${x-api-key}        | O  |
| Content-Type | Content-Type: application/json | O  |

**쿼리 파라미터**

| 이름          | 타입     | 설명          | 필수  | 비고                     |
| ----------- | ------ | ----------- | --- | ---------------------- |
| memberId    | String | 조회 회원의 ID   | O/X | 둘 중 하나는 필수로 입력되어야 합니다. |
| phoneNumber | String | 조회 회원의 전화번호 | X/O |                        |

**응답**

응답은 그루비 API 공통응답 형식의 "processValue" 필드에 조회한 회원의 정보를 JSON 배열로 반환합니다.

| 이름          | 타입     | 설명                                                                                | 비고 |
| ----------- | ------ | --------------------------------------------------------------------------------- | -- |
| memberId    | String | 조회 회원의 ID                                                                         |    |
| phoneNumber | String | 조회 회원의 전화번호                                                                       |    |
| isReceive   | String | <p>조회한 회원의 SMS 수신 동의 여부</p><ul><li>"true": 수신 동의</li><li>"false": 수신 거부</li></ul> |    |
| name        | String | 조회 회원의 이름                                                                         |    |

{% hint style="warning" %}

* isReceive 필드에 대한 값 미전송 시 '수신 거부' 로 응답합니다.
* isReceive가 '수신 거부' 상태일 경우 브랜드 메시지(비친구 대상)와 SMS 발송만 제한되며, 그외 캠페인은 수신 거부 여부와 관계없이 발송 가능합니다.
* 회원 정보 저장/수정 시 name 필드는에 대한 값을 미전송할 경우 데이터가 없는 상태로 응답합니다.
  {% endhint %}

### **예제**

* **요청(회원 ID) 검색**

```
curl -X GET "https://api.groobee.io/v2/users/sms?memberId=${회원아이디}" \ 
        -H "x-api-key: ${x-api-key}" \
        -H "Content-Type": application/json
```

* **응답**

회원 ID로 조회 시 등록한 회원 ID의 목록이 출력됩니다.

※ 회원 API v2 에서는 phoneNumber 를 회원 정보의 유일 값으로 사용합니다.

```
{        "httpStatus": { 
            "code": "200",
            "reasonPhrase": "OK"
        },
        "processCode": "0",
        "processValue": [
            {
                "memberId": "groobee",
                "phoneNumber": "010-0000-0000",
                "isReceive": "false",
                "name": "그루비"
            },
            {
                "memberId": "groobee",
                "phoneNumber": "010-0000-0000",
                "isReceive": "false",
                "name": "그루비"
            },
            {
                "memberId": "groobee",
                "phoneNumber": "010-0000-0000",
                "isReceive": "false",
                "name": "그루비"
            }
        ]
}
```

* **요청(회원 전화번호) 검색**

```
curl -X GET "https://api.groobee.io/v2/users/sms?phoneNumber=${전화번호}" \
          -H "x-api-key: ${x-api-key}" \
          -H "Content-Type": application/json
```

* **응답**

전화번호로 조회 시 등록한 회원의 정보가 출력됩니다.

{% hint style="warning" %}
회원 API v2 에서는 phoneNumber 를 회원 정보의 유일 값으로 사용합니다.
{% endhint %}

```
{ 
        "httpStatus": {
            "code": "200",
            "reasonPhrase": "OK"
        },
        "processCode": "0",

        "processValue": [
            {
                "memberId": "plateer",
                "phoneNumber": "010-0000-0000",
                "isReceive": "false",
                "name": "플래티어"
            }
        ]
}
```

***

## **회원 정보 저장/수정**

### **설명**

회원 정보를 저장/수정 합니다. ‘저장/수정' 시 등록된 회원의 정보가 없으면 등록되고, 회원의 정보가 있으면 '전화번호’를 기준으로 회원의 정보가 변경됩니다.

{% hint style="warning" %}
회원 정보 저장 시 API v2 에서는 전화번호 중복 입력을 확인합니다.\
전송하는 정보에 전화번호가 중복되면 중복된 정보를 제외하고 입력됩니다.
{% endhint %}

### **기본 정보**

| Method | URL                                   | 인증 방식   |
| ------ | ------------------------------------- | ------- |
| POST   | <https://api.groobee.io/v2/users/sms> | API Key |

**요청 헤더**

| 이름           | 설명                             | 필수 |
| ------------ | ------------------------------ | -- |
| x-api-key    | x-api-key: ${x-api-key}        | O  |
| Content-Type | Content-Type: application/json | O  |

**요청 본문**

{% hint style="danger" %}
요청 본문으로 전송할 수 있는 최대 데이터 행은 1,000 개 입니다.\
1,000 개가 넘으면 오류를 반환합니다.
{% endhint %}

| 이름          | 타입     | 설명                     | 필수 | 비고                                                                            |
| ----------- | ------ | ---------------------- | -- | ----------------------------------------------------------------------------- |
| memberId    | String | 저장/수정 회원의 ID           | O  | -                                                                             |
| phoneNumber | String | 저장/수정 회원의 전화번호         | O  | 전화번호 형식: 휴대폰 번호 (구분기호 "-" 만 허용)                                               |
| isReceive   | String | 저장/수정 회원의 SMS 수신 동의 여부 | X  | <ul><li>“true": 수신 동의</li><li>"false": 수신 거부</li><li>기본 값 : "false"</li></ul> |
| name        | String | 저장/수정 회원의 이름           | X  | 제한 길이 20자                                                                     |

**응답**

회원 정보 '저장/수정' 응답은 성공/실패 시 모두 정상 응답하며 입력받은 회원 정보의 오류가 있으면 정상 데이터는 처리하고 오류 데이터 행을 오류코드와 함께 반환합니다.

| 이름             | 타입     | 설명                     | 비고                                                                                                                                                                  |
| -------------- | ------ | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| memberId       | String | 저장/수정 회원의 ID           | -                                                                                                                                                                   |
| phoneNumber    | String | 저장/수정 회원의 전화번호         | 전화번호 형식: 휴대폰 번호 (구분기호 "-" 만 허용)                                                                                                                                     |
| isReceive      | String | 저장/수정 회원의 SMS 수신 동의 여부 | <ul><li>“true": 수신 동의</li><li>"false": 수신 거부</li></ul>                                                                                                              |
| name           | String | 저장/수정 회원의 이름           |                                                                                                                                                                     |
| failureCode    | String | 입력한 행의 실패코드            | <ul><li>"F00" : 회원 ID가 없고 전화번호 형식 불일치</li><li>"F01" : 회원 ID가 없음</li><li>"F02" : 전화번호 형식 불일치</li><li>"F03" : 이름 길이 초과(제한 20자)</li><li>"F11" : 전화번호 중복 행 존재</li></ul> |
| failureMessage | String | 실패 코드에 대한 세부내용         |                                                                                                                                                                     |

{% hint style="warning" %}

* isReceive 필드에 대한 값 미전송 시 '수신 거부' 로 응답합니다.
* isReceive가 '수신 거부' 상태일 경우 브랜드 메시지(비친구 대상)와 SMS 발송만 제한되며, 그외 캠페인은 수신 거부 여부와 관계없이 발송 가능합니다.
* 회원 정보 저장/수정 시 name 필드는에 대한 값을 미전송할 경우 데이터가 없는 상태로 응답합니다.
  {% endhint %}

### **예제**

* **요청(회원 ID) 검색**

```
  curl -X POST "https://api.groobee.io/v2/users/sms" \ 
          -H "x-api-key: ${x-api-key}" \
          -H "Content-Type": application/json \
          -d '[
                {
                    "memberId": "groobee", 
                    "phoneNumber": "010-0000-0000", 
                    "isReceive": "true",
                    "name": "그루비"
              },
              {
                    "memberId": "plateer", 
                    "phoneNumber": "010-0000-0000", 
                    "isReceive": "true",
                    "name": "플래티어"
              }
            ]
```

* **응답(성공)**

```
{ 
      "httpStatus": { 
        "code": "200",
        "reasonPhrase": "OK"
      },
      "processCode": "0", 
      "processValue": [
      ]
}
```

* **응답(실패)**

데이터 오류가 있을 경우 실패 응답에 실패한 데이터 및 오류코드를 함께 응답합니다.

```
{
      "httpStatus":
          { "code": "200",
          "reasonPhrase": "OK"
      },
        "processCode": "0", 
        "processValue": [
            {
                "memberId": "",
                "phoneNumber": "010-0000-0000", 
                "isReceive": "true",
                "name": "그루비",
                "failureCode": "F01",
                "failureMessage": "memberId가 유효하지 않습니다"
            }      ]}
```

***

## **회원 정보 삭제**

### **설명**

회원 정보를 삭제합니다.

* 입력된 회원의 ID를 기준으로 요청한 회원의 정보를 모두 삭제합니다.
* POST 요청으로 수행되며, 쿼리 파라미터 'delete' 를 인자로 추가합니다.
* 삭제 시 입력되었던 회원의 정보는 복구할 수 없습니다.

### **기본 정보**

| Method | URL                                          | 인증 방식   |
| ------ | -------------------------------------------- | ------- |
| POST   | <https://api.groobee.io/v2/users/sms?delete> | API Key |

**요청 헤더**

| 이름           | 설명                             | 필수 |
| ------------ | ------------------------------ | -- |
| x-api-key    | x-api-key: ${x-api-key}        | O  |
| Content-Type | Content-Type: application/json | O  |

**쿼리 파라미터**

| 이름     | 타입 | 설명         | 필수 | 비고                    |
| ------ | -- | ---------- | -- | --------------------- |
| delete | -  | 삭제 명령 파라미터 | O  | 파라미터 값(value)이 없어도 동작 |

**요청 본문**

| 이름          | 타입     | 설명          | 필수 | 비고 |
| ----------- | ------ | ----------- | -- | -- |
| phoneNumber | String | 삭제할 회원의 아이디 | O  |    |

**응답**

회원정보 '삭제' 응답은 성공/실패 시 모두 정상 응답하며 입력받은 회원 정보의 오류가 있으면 정상 데이터는 처리하고 오류데이터 행을 오류코드와 함께 반환합니다.

| 이름          | 타입     | 설명           | 비고                               |
| ----------- | ------ | ------------ | -------------------------------- |
| memberId    | String | 삭제할 회원의 아이디  |                                  |
| failureCode | String | 입력한 행의 실패 코드 | "F02" : 전화번호가 누락 되었거나 형식에 맞지 않음. |

### **예제**

* **요청**

```
  curl -X POST "https://api.groobee.io/v2/users/sms" \ 
        -H "x-api-key: ${x-api-key}" \
        -H "Content-Type": application/json \
        -d '[
            {
              "phoneNumber": "010-0000-0000",
            },
            {
              "phoneNumber": "010-0000-0000",
            }
          ]
```

<br>

* **응답(성공)**

```
{
      "httpStatus": 
          { "code": "200",
          "reasonPhrase": "OK"
      },
      "processCode": "0", 
      "processValue": [
    ]
}
```

* **응답(실패)**

데이터 오류가 있을 경우 실패 응답에 실패한 데이터 및 오류코드를 함께 응답합니다.

```
{
      "httpStatus": 
          { "code": "200",
            "reasonPhrase": "OK"
      },
      "processCode": "0", 
      "processValue": [
          {
            "phoneNumber": "", 
            "failureCode": "F02",
            "failureMessage": "phoneNumber가 유효하지 않습니다"
          }
    ]
}
```

***

## **공통 사항**

### **processCode 코드값**

| 코드 값  | 상태 | 설명                         |
| ----- | -- | -------------------------- |
| 0     | 성공 | -                          |
| -1000 | 실패 | 요청 시 Header에 x-api-key 미존재 |
| -1001 | 실패 | 고객사 미존재                    |
| -1002 | 실패 | 고객사 미승인 상태 (승인 필요)         |
| -1003 | 실패 | 고객사 계약기간 만료                |
| -1004 | 실패 | 데이터 초과                     |
| -9997 | 실패 | 데이터가 올바르지 않습니다.            |
| -9998 | 실패 | http 관련 에러                 |
| -9999 | 실패 | 요청 API 서버 에러               |

| 코드 값  | 상태 | 설명                  |
| ----- | -- | ------------------- |
| -1005 | 실패 | 진행 중인 프로세스 있음       |
| -1006 | 실패 | 회원 ID가 올바르지 않습니다.   |
| -1007 | 실패 | 회원 전화번호가 올바르지 않습니다. |
| -1013 | 실패 | 회원 이름 길이 초과(20자 이하) |

<br>
