> For the complete documentation index, see [llms.txt](https://docs.groobee.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.groobee.ai/developer-guide/api-guide/push-api-trigger.md).

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

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

[API 트리거 발송 만들기](/new-admin/kakao-alimtalk/kakao-alimtalk-create/api-trigger.md) 문서를 함께 참고해 주세요.
{% 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>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.groobee.ai/developer-guide/api-guide/push-api-trigger.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
