# 푸시 알림 캠페인 API 트리거 발송

{% hint style="info" %}
푸시 알림 캠페인 API 트리거 유형을 발송할 경우 사용하는 API 입니다.&#x20;

[API 트리거 발송 만들기](https://docs.groobee.ai/new-admin/kakao-alimtalk/kakao-alimtalk-create/api-trigger) 문서를 함께 참고해 주세요.
{% endhint %}

## **Process 코드 값**

<table><thead><tr><th width="77.74609375">범위</th><th>에러 코드</th><th>에러 메시지</th><th>HTTP 상태 코드</th></tr></thead><tbody><tr><td></td><td>0</td><td>성공</td><td>200</td></tr><tr><td>헤더</td><td>1101</td><td>"x-api-key" 헤더 누락</td><td>400</td></tr><tr><td></td><td>1102</td><td>Content-Type 헤더 누락</td><td>400</td></tr><tr><td>일반</td><td>1201</td><td>요청 본문에 내용이 없음</td><td>400</td></tr><tr><td></td><td>1202</td><td>요청 데이터 행이 너무 많음</td><td>400</td></tr><tr><td></td><td>1203</td><td>요청 포맷이 잘못됨</td><td>400</td></tr><tr><td></td><td>1204</td><td>올바르지 않은 날짜 형식입니다</td><td>400</td></tr><tr><td>인증</td><td>1401</td><td>API 키가 유효하지 않음</td><td>401</td></tr><tr><td></td><td>1402</td><td>API 사용권한 없음</td><td>401</td></tr><tr><td></td><td>1403</td><td>등록되지 않은 회원사</td><td>401</td></tr><tr><td></td><td>1404</td><td>미 승인 회원사</td><td>401</td></tr><tr><td></td><td>1405</td><td>만료된 회원사</td><td>401</td></tr><tr><td>푸시</td><td>1901</td><td>캠페인이 없음</td><td>404</td></tr><tr><td></td><td>1902</td><td>유효하지 않은 캠페인</td><td>400</td></tr><tr><td>기타</td><td>2000</td><td>내부 서버 오류</td><td>500</td></tr></tbody></table>

***

## **발송하기** <a href="#id-422477671" id="id-422477671"></a>

• 푸시 알림 캠페인 API 트리거 유형을 발송합니다.

• 캠페인키, 발송 대상자 정보를 요청 본문에 넣어서 호출합니다.

{% hint style="warning" %}
‘캠페인키'는 관리자 페이지(그루비 어드민)에서 푸시 알림 캠페인(API 트리거 유형) 생성 시 발급됩니다.
{% endhint %}

### **기본 정보**

| 메소드  | URL                                            | 인증 방식   |
| ---- | ---------------------------------------------- | ------- |
| POST | <https://api.groobee.io/messages/push/trigger> | API Key |

### **요청 헤더**

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

<br>

### **요청 본문**

{% hint style="danger" %}
요청 본문으로 전송할 수 있는 최대 발송 대상자 수는 100명입니다.\
100명이 넘으면 오류를 반환합니다. (processCode : 1202)
{% endhint %}

| 이름          | 타입      | 설명        | 필수 | 비고                                          |
| ----------- | ------- | --------- | -- | ------------------------------------------- |
| campaignKey | String  | 캠페인 키     | O  | 그루비 관리자 페이지에서 푸시 알림 캠페인(API 트리거 유형) 생성 시 발급 |
| users       | User\[] | 발송 대상자 정보 | O  | 해당 캠페인 발송 대상자 정보의 리스트 (1회 요청 당 최대 100명)     |

\
**User**

| 이름         | 타입     | 설명                       | 필수 | 비고                                                       |
| ---------- | ------ | ------------------------ | -- | -------------------------------------------------------- |
| memberId   | String | 회원 ID(회원번호)              | O  | 발급                                                       |
| properties | Map    | 사용자 설정 변수의 키-값 쌍을 가지는 객체 | X  | 푸시 알림 캠페인(API 트리거 유형)에서 사용자가 생성한 커스텀 변수의 키와 그에 해당하는 값의 쌍 |

<br>

### **응답**

{% hint style="warning" %}
발송 요청 성공 응답은, 실제로 해당 유저가 푸시 메세지를 받았음을 보장하지 않습니다.\
응답의 dispatchId 값을 통해 발송 결과를 조회할 수 있습니다.
{% endhint %}

| 이름         | 타입     | 설명              |
| ---------- | ------ | --------------- |
| dispatchId | String | API 발송 요청에 대한 키 |

<br>

### **예제**

**요청**

```
{ 
    "campaignKey" : "PU96b0bb8cb8b4533f965d2e7acd0383b6"
    "users" : [
        {
            "memberId" : "groobee1",
            "properties" : {
                "name" : "이그루",
                "goods_name" : "원피스",
                "goods_price" : "120,000",
                ...
            }
        },
        {
            "memberId" : "groobee2",
            "properties" : {
                "name" : "김그루",
                "goods_name" : "청바지",
                "goods_price" : "200,000",
                ...
            }
        },
        ...
    ]
 }  
```

**응답(성공)**

```
{
    "httpStatus": {
        "code": "200",
        "reasonPhrase": "OK"
    },
    "processCode": "0",
    "processValue": {
        "dispatchId" : "9ba020b4ef0a40b4872b3d8de1f2322f"
    }
}  
```

\
**응답(실패)**

{% hint style="danger" %}
API 트리거는 별도 과금되는 서비스입니다.\
과금하지 않았을 시 에러를 리턴합니다.
{% endhint %}

```
  {
    "httpStatus": {
        "code": "401",
        "reasonPhrase": "Unauthorized"
    },
    "processCode": "1402",
    "processValue": "해당 서비스는 과금이 필요합니다."
}
```

***

## **발송 결과 조회하기**

• 푸시 알림 캠페인 API 트리거 유형의 발송 결과를 조회합니다.

• 푸시 알림 캠페인 API 트리거 유형 발송하기 응답 값의 dispatchId를 path에 넣어서 요청합니다.

### **기본 정보**

| 메소드 | URL                                                          | 인증 방식   |
| --- | ------------------------------------------------------------ | ------- |
| GET | <https://api.groobee.io/messages/push/statuses/{dispatchId}> | API Key |

### **요청 헤더**

| 이름        | 설명                      | 필수 |
| --------- | ----------------------- | -- |
| x-api-key | x-api-key: ${x-api-key} | O  |

### **요청 경로 변수**

| 이름         | 설명              | 필수 |
| ---------- | --------------- | -- |
| dispatchId | API 발송 요청에 대한 키 | O  |

### **응답**

하나의 회원 ID에 여러 디바이스가 있는 경우 회원의 모든 디바이스에 발송하기 때문에 회원 ID가 중복일 수 있습니다.

| 이름         | 타입               | 설명              |
| ---------- | ---------------- | --------------- |
| dispatchId | String           | API 발송 요청에 대한 키 |
| results    | PushApiResult\[] | 발송 건 각각의 결과 리스트 |

**PushApiResult**

| 이름         | 타입     | 설명                                                                  |
| ---------- | ------ | ------------------------------------------------------------------- |
| memberId   | String | 회원 ID (회원번호)                                                        |
| deviceType | String | <p>디바이스 타입<br>- ANDROID : 안드로이드<br>- IOS : iOS</p>                  |
| pushToken  | String | 푸시 토큰                                                               |
| status     | String | <p>발송 결과<br>- SENDING : 발송 중<br>- SUCCEED : 성공<br>- FAILED : 실패</p> |

### **예제**

**응답(성공)**

```
{
    "httpStatus": {
        "code": "200",
        "reasonPhrase": "OK"
    },
    "processCode": "0",
    "processValue": {
        "dispatchId" : "9ba020b4ef0a40b4872b3d8de1f2322f",
        "results" : [
            {
                "memberId" : "groobee1",
                "deviceType" : "IOS",
                "pushToken" : "ccmxg2-fQY6nA5vlmkXQ9w:APA91bHM3dtNcwWLiCfXe2NIu8689Z0PRBMUsICwu-hQAS9ut0m6TGjtbyXsFRl6oDLFWq37MH03m46mrQY_sGcm3JOiyo8kR8Hgny_22q1ku2I_k1yNDYo-PXc1gE9OsdP8XEctbbP5",
                "status" : "SUCCEED"
            },
            {
                "memberId" : "groobee1",
                "deviceType" : "ANDROID",
                "pushToken" : "fEVPUBO3ToeEPOpsnN2yi8:APA91bERcry4jdQOVt9yVqTm8k-vL1_C_Bv0j5_cDlJCibOd1y-MdYGgfQC7Me0PgbzABCEDMWOcGs47rrpGiagug4ujxaoltX0fcoLdHCKHhtoKpomepzRfEPh8qB0o9G5loHH3NeId",
                "status" : "FAILED"
            },
            {
                "memberId" : "groobee2",
                "deviceType" : "ANDROID",
                "pushToken" : "dCwXIsfJRHymW6SWL6GscT:APA91bFaaPr8wdvKZ0jtxXGCpaG-k-lZAzuiAd_ntdXOWwqWl_xhrPFv2k_p_f12vivKq43LAVN9eDZBvPr5VRhrgKhxzo9_Dg_zzvxByIxVF0-Ove0v-rWnk8k5y-2q0hH_CEW8i_oG",
                "status" : "SENDING"
            },
            {
                "memberId" : "groobee3",
                "deviceType" : "IOS",
                "pushToken" : "dky9RrH0G0iLgkaOy5bC3L:APA91bGks_dHQpP9kkS7cwSCweX_0g7RQrzWLS9kkTXEnEesKWPTFeStpXO1VSRVgrP5m-0FB5gimj2Ot3tFwUmEa1n-YjIOIqcY50d2Mj4IgiC0nMhy0FAW_nw0kq8eaBi4N1ZKaHiH",
                "status" : "SUCCEED"
            },
            ...
              ]
    }
}    
```

**응답(실패)**

{% hint style="danger" %}
API 트리거는 별도 과금되는 서비스입니다.\
과금하지 않았을 시 에러를 리턴합니다.
{% endhint %}

```
  {
    "httpStatus": {
        "code": "401",
        "reasonPhrase": "Unauthorized"
    },
    "processCode": "1402",
    "processValue": "해당 서비스는 과금이 필요합니다."
}
```

<br>
