# \[샵바이] 웹훅(webhook) 가이드

## 목차

* [#undefined-1](#undefined-1 "mention")
* [#webhook](#webhook "mention")
* [#undefined-2](#undefined-2 "mention")
* [#undefined-3](#undefined-3 "mention")
  * [#id-1](#id-1 "mention")
  * [#id-2](#id-2 "mention")
  * [#id-3](#id-3 "mention")
  * [#id-4](#id-4 "mention")
  * [#id-5](#id-5 "mention")
  * [#id-6](#id-6 "mention")
  * [#id-7](#id-7 "mention")

***

## 이해하기

* 웹훅(Webhook)이란 서버에서 특정 이벤트 발생했을 때 다른 서비스나 응용프로그램으로 알림을 보내는 기능입니다.
* 이를 사용하면 특정 이벤트가 발생했을 때 지정한 callback URL로 관련 이벤트 정보를 수신할 수 있습니다.
* 주기적으로 데이터를 조회하지 않고 원하는 이벤트에 대한 정보만 수신할 수 있어서 webhook은 리소스나 통신 측면에서 효율적입니다.
* 어떠한 이벤트가 발생했을 때 정보를 수신할 수 있는지는 제공 이벤트 항목 내용을 참고해 주시기 바랍니다.

{% hint style="warning" %}
웹훅 이벤트는 앱이 설치된 쇼핑몰에서 발생하는 이벤트 정보를 수신할 수 있으며,\
장애가 발생하여 발생한 이벤트에 대해 웹훅(Webhook)을 수신하지 못하는 경우 웹훅이 재 전송되지 않습니다.\
단, 수신하지 못한 웹훅은 [실패한 웹훅 조회하기 API](https://server-docs.shopby.co.kr/?url.primaryName=workspace/#/Webhook/get-webhooks-failed)로 조회할 수 있습니다.
{% endhint %}

***

## 웹훅(Webhook) 설정 방법

워크스페이스>셀러어드민에서 앱 등록/수정 시 개발 정보 탭에서 설정할 수 있습니다.\
지원 가능한 method : POST / PUT

1. 워크스페이스에 로그인하여 셀러어드민>상품>앱>\[T]개발 정보 화면에 접속합니다.
2. 사용할 웹훅(Webhook) 이벤트를 사용함으로 설정합니다.
3. method 및 이벤트 발생 시 웹훅(Webhook)을 수신할 URL을 설정합니다.
4. 설정된 내용을 \[저장] 합니다.

웹훅 설정 이후 앱이 쇼핑몰에 설치되어야 이벤트 정보를 수신할 수 있습니다.

{% hint style="success" %}
웹훅(Webhook)을 설정할 때는 관련된 server API의 권한이 있는 이벤트 항목만 사용할 수 있으며,

보유한 server API 권한을 삭제할 때는 관련 이벤트 항목의 웹훅(Webhook) 설정도 '사용 안 함'으로 설정해 주셔야 합니다.
{% endhint %}

{% hint style="warning" %}
판매앱의 정보를 변경하는 경우 심사 요청 후 심사가 승인되어야 변경된 정보가 반영됩니다.
{% endhint %}

***

## 제공 이벤트 항목

<table><thead><tr><th width="216">관련 server API</th><th>이벤트 유형</th><th>이벤트명</th></tr></thead><tbody><tr><td>-</td><td>CHANGE_APP_STATUS</td><td>앱 설치/삭제</td></tr><tr><td>전시 (=display)</td><td>PRODUCT_INQUIRY_ADDED</td><td>상품문의 등록</td></tr><tr><td>전시 (=display)</td><td>PRODUCT_INQUIRY_DELETED</td><td>상품문의 삭제</td></tr><tr><td>전시 (=display)</td><td>PRODUCT_REVIEW_ADDED</td><td>상품후기 등록</td></tr><tr><td>전시 (=display)</td><td>PRODUCT_REVIEW_DELETED</td><td>상품후기 삭제</td></tr><tr><td>운영 (=manage)</td><td>ACCUMULATION_ADDED</td><td>적립금 지급</td></tr><tr><td>운영 (=manage)</td><td>ACCUMULATION_SUBTRACTED</td><td>적립금 차감</td></tr><tr><td>운영 (=manage)</td><td>ACCUMULATION_SUBTRACT_ROLLBACK</td><td>적립금 차감 취소</td></tr><tr><td>운영 (=manage)</td><td>INQUIRY_ADDED</td><td>1:1문의 등록</td></tr><tr><td>운영 (=manage)</td><td>INQUIRY_MODIFIED</td><td>1:1문의 수정</td></tr><tr><td>운영 (=manage)</td><td>INQUIRY_DELETED</td><td>1:1문의 삭제</td></tr><tr><td>회원 (=member)</td><td>MEMBER_CREATED</td><td>회원가입</td></tr><tr><td>회원 (=member)</td><td>MEMBER_INFO_CHANGED</td><td>회원정보변경</td></tr><tr><td>회원 (=member)</td><td>MEMBER_GRADE_CHANGED</td><td>회원등급변경</td></tr><tr><td>회원 (=member)</td><td>MEMBER_GROUP_CHANGED</td><td>회원그룹변경</td></tr><tr><td>회원 (=member)</td><td>MEMBER_DORMANT</td><td>휴면회원 전환</td></tr><tr><td>회원 (=member)</td><td>MEMBER_RELEASED</td><td>휴면회원 해제</td></tr><tr><td>회원 (=member)</td><td>MEMBER_WITHDRAW</td><td>회원 탈퇴</td></tr><tr><td>주문 (=order)</td><td>CREATE_ORDER</td><td>주문 생성</td></tr><tr><td>주문 (=order)</td><td>CHANGE_ORDER_STATUS</td><td>주문 상태 변경</td></tr><tr><td>주문 (=order)</td><td>UPDATE_RECEIVER</td><td>수령자 정보 변경</td></tr><tr><td>주문 (=order)</td><td>ADD_TASK_MESSAGE</td><td>업무메시지 등록</td></tr><tr><td>주문 (=order)</td><td>UPDATE_TASK_MESSAGE</td><td>업무메시지 수정</td></tr><tr><td>주문 (=order)</td><td>DELETE_TASK_MESSAGE</td><td>업무메시지 삭제</td></tr><tr><td>상품 (=product)</td><td>PRODUCT_UPDATED</td><td>상품 등록/수정/삭제</td></tr></tbody></table>

***

## 이벤트별 샘플 데이터와 코드 정의

### 1. 앱 관련

<table><thead><tr><th>이벤트 유형</th><th>이벤트명</th><th data-hidden></th></tr></thead><tbody><tr><td>CHANGE_APP_STATUS</td><td>앱 설치/삭제</td><td></td></tr></tbody></table>

```java
// 샘플 데이터 및 파라미터 정의
{
    "eventType": "CHANGE_APP_STATUS", // 이벤트명
    "currentStatus": "ACTIVE", // 앱상태
    "appNo": 12345, // 앱일련번호
    "mallNo": 12345, // 쇼핑몰번호
    "appInstalledNo": 12345, // 앱설치번호
}
```

***

### 2. 전시 관련

| 이벤트 유형                    | 이벤트명    |
| ------------------------- | ------- |
| PRODUCT\_INQUIRY\_ADDED   | 상품문의 등록 |
| PRODUCT\_INQUIRY\_DELETED | 상품문의 삭제 |

```java
// 샘플 데이터 및 파라미터 정의
{
    "eventType": "PRODUCT_INQUIRY_ADDED", //이벤트명
    "mallNo": 12345, //쇼핑몰번호
    "inquiryNo" : 12345 //상품문의번호
}
```

| 이벤트 유형                   | 이벤트명    |
| ------------------------ | ------- |
| PRODUCT\_REVIEW\_ADDED   | 상품후기 등록 |
| PRODUCT\_REVIEW\_DELETED | 상품후기 삭제 |

<pre class="language-java"><code class="lang-java">// 샘플 데이터 및 파라미터 정의
<strong>{
</strong>"eventType": "PRODUCT_REVIEW_ADDED", //이벤트명
"mallNo": 12345, //쇼핑몰번호
"reviewNo" : 12345 //쇼핑몰에서 등록된 상품후기의 상품리뷰번호
"reviewNos": [12345, 12346] //server API로 등록된 상품후기의 상품리뷰번호
}
</code></pre>

***

### 3. 운영 관련

#### <mark style="color:red;">**\[적립금]**</mark>

| 이벤트 유형                           | 이벤트명      |
| -------------------------------- | --------- |
| ACCUMULATION\_ADDED              | 적립금 지급    |
| ACCUMULATION\_SUBTRACTED         | 적립금 차감    |
| ACCUMULATION\_SUBTRACT\_ROLLBACK | 적립금 차감 취소 |

```java
// 샘플 데이터 및 파라미터 정의
{
    "eventType": "ACCUMULATION_ADDED", //이벤트명
    "mallNo": 12345, //쇼핑몰번호
    "memberNo": 135375046, //회원번호
    "amount": 1000, //적립 또는 차감금액
    "accumulationReserveReason": "ADD_MANUAL", // 적립 또는 차감 사유
    "reasonDetail": "테스트 지급", // 상세
    "orderNo": null, //주문번호
    "orderOptionNo": "0", //주문옵션번호
    "registerAdminNo": 4099, //운영자번호
    "reviewNo": null //상품후기번호
}
```

***

#### <mark style="color:red;">**\[1:1문의]**</mark>

```java
 // 샘플 데이터 및 파라미터 정의
{
        "eventType": "INQUIRY_ADDED", //이벤트명
        "mallNo": 12345, //쇼핑몰번호
        "memberNo": 12345, //회원번호
        "inquiryNo": 12345, //1:1문의 일련번호
        "inquiryTypeNo": 12345, //1:1문의 유형번호
        "orderNo": null, // 주문에 대한 문의인 경우 주문번호
        "productNo": null, //주문된 상품번호
        "answerSmsSendYn": true, //1:1문의 답변 등록 시 SMS수신여부
        "inquiryTitle": "타이틀", //1:1문의 제목
        "memberId": "12345@nhn-commerce.com"//회원이메일
}
```

### 4. 회원 관련

| 이벤트 유형                 | 이벤트명    |
| ---------------------- | ------- |
| MEMBER\_CREATED        | 회원가입    |
| MEMBER\_INFO\_CHANGED  | 회원정보변경  |
| MEMBER\_GRADE\_CHANGED | 회원등급변경  |
| MEMBER\_GROUP\_CHANGED | 회원그룹변경  |
| MEMBER\_DORMANT        | 휴면회원 전환 |
| MEMBER\_RELEASED       | 휴면회원 해제 |
| MEMBER\_WITHDRAW       | 회원탈퇴    |

```java
// 샘플 데이터 및 파라미터 정의
{
    "eventType": "MEMBER_CREATED", //이벤트명
    "mallNo": 12345, //쇼핑몰 번호
    "memberNo": 12345, //회원번호
    "memberId": "chulsu", //회원아이디(외부연동 ID로 가입 시 null)
    "memberName": "홍길동", //회원이름
    "email": "gildong@nhn-commerce.com", //회원이메일
    "providerType": "KAKAO", //외부연동 ID로 가입 시 외부연동 값 노출(KAKAO, PAYCO 등)
    "gradeNo": 12345, //등급번호(회원의 등급이 변경된 경우 변경된 등급의 등급번호)
    "groupNos": [1, 2, 3], // 그룹번호 리스트(회원의 그룹이 추가/삭제된 경우, 반영이 된 모든 그룹번호 목록)
    "nickName": "angel1004", //닉네임
    "representativeMemberNo": 12345, //대표몰 회원번호(브랜드 로그인 사용하지 않는 경우 null)
    "recommenderId": "younghee" // 추천인 아이디(없으면 null)
}
```

***

### 5. 주문 관련

#### <mark style="color:red;">\[주문 생성]</mark>

| 이벤트 유형        | 이벤트명  |
| ------------- | ----- |
| CREATE\_ORDER | 주문 생성 |

{% code overflow="wrap" %}

```java
// 샘플 데이터 및 파라미터 정의
{
    "eventType": "CREATE_ORDER", //이벤트명
    "order": {
        "orderNo": "2021100201234567890", // 주문번호
        "mallNo": 30973, // 몰번호
        "serviceNo": 30388, // 서비스 번호
        "memberNo": 8411244, // 회원번호
        "memberYn": "Y", // 회원여부
        "ordererName": "홍길동", // 주문자명
        "ordererContact1": "010-1234-1234", // 주문자 핸드폰 번호
        "ordererContact2": "010-1234-1234", // 주문자 전화 번호
        "ordererEmail": "honggildong@naver.com", // 주문자 이메일
        "payType": "CREDIT_CARD", // PG타입(페이코/KCP 등)
        "pgType": "KCP", // 결제타입(페이코/신용카드 등)
        "platformType": "MOBILE_WEB", // 플렛폼 타입 (PC/MOBILE_WEB 등)
        "lastPayAmt": 185000.00, // 최종결제금액
        "lastSubPayAmt": 0.00, // 최종 적립금 결제금액
        "lastStandardAmt": 329000.00, // 최종상품금액(할인제외)
        "lastDeliveryAmt": 0.00, // 최종배송금액
        "lastRemoteDeliveryAmt": 0.00, // 최종지역별추가배송금액
        "lastImmediateDiscountAmt": 144000.00, // 최종즉시할인금액
        "lastAdditionalDiscountAmt": 0.00, // 최종추가할인금액
        "lastCartCouponDiscountAmt": 0.00, // 최종주문쿠폰할인금액
        "lastProductCouponDiscountAmt": 0.00, // 최종상품쿠폰할인금액
        "lastTaxFreeAmt": 0.00, // 최종비과세금액
        "lastTaxableAmt": 168181.00, // 최종과세금액
        "lastVatAmt": 16819.00, // 최종부과세액
        "firstSalesTaxAmt": 0.00, // 최초부과세액
        "lastSalesTaxAmt": 0.00, // 최종부과세액
        "firstCustomsDutyAmt": 0.00, // 최초관부가세
        "lastCustomsDutyAmt": 0.00, // 최종관부가세
        "registerYmdt": "2021-10-25 13:53:18", // 등록일
        "trackingKey": "trackingKey", // 쇼핑채널링-추적키
        "cartCouponIssueNo": 12, // 장바구니쿠폰 발급 번호
        "channelType": null // 유입 경로
        "orderProducts": [
            {
                "orderProductNo": 50000000, // 주문상품번호
                "mallProductNo": 100000000, // 상품번호
                "productName": "상품명",
                "productManagementCd": "", // 상품관리 코드
                "hsCode": "",
                "eanCode": null,
                "partnerNo": 50000, // 파트너 번호
                "lastProductCouponDiscountAmt": 0.00, // 상품 쿠폰 할인액
                "productCouponIssueNo": 13, // 사용한 상품 쿠폰 번호
                "orderProductOptions": [
                    {
                        "orderProductOptionNo": 5062925, // 주문상품옵션번호
                        "orderNo": "2021100201234567890", // 주문번호
                        "memberNo": 100000, // 회원번호
                        "userInputs": [ // 구매자 입력형 옵션
                            {
                              "inputLabel": "색깔", // 구매자 작성형 옵션 이름
                              "inputValue":"검정색", //구매자 입력형 옵션 값
                            }
                        ],
                        "serviceNo": 30000, // 서비스 번호
                        "mallNo": 1000, // 몰번호
                        "mallProductNo": 10000000, // 상품번호
                        "productName": "상품명",
                        "mallOptionNo": 6000000, // 상품옵션번호
                        "mallAdditionalProductNo": 0, // 추가 상품 번호
                        "optionUseYn": "Y", // 옵션 사용 여부
                        "optionName": "옵션명",
                        "optionValue": "옵션값",
                        "imageUrl": "//rlyfaazj0.toastcdn.net/...", // 상품 이미지 url
                        "orderCnt": 1, // 주문건수
                        "originalOrderCnt": 1, // 최초 주문 수량
                        "salePrice": 329000.00, // 판매 가격
                        "immediateDiscountAmt": 144000.00, // 즉시 할인 가격
                        "addPrice": 0.00, // 추가 금액
                        "additionalDiscountAmt": 0.00, // 추가 할인 금액
                        "partnerChargeAmt": 0.00, // 파트너 부담액
                        "adjustedAmt": 185000.00, // 조정된 상품 금액
                        "orderStatusType": "PAY_DONE", // 주문옵션상태
                        "claimStatusType": null, // 클레임 상태
                        "orderYmdt": "2021-10-25 13:53:18", // 주문일시
                        "payYmdt": "2021-10-25 13:54:38", // 결제일시
                        "orderAcceptYmdt": null, // 주문접수일시
                        "releaseReadyYmdt": null, // 배송준비일시
                        "releaseYmdt": null, // 배송일시
                        "deliveryCompleteYmdt": null, // 배송완료일시
                        "buyConfirmYmdt": null, // 구매확정일시
                        "registerYmdt": "2021-10-25 13:53:18", // 주문옵션 생성일시
                        "trackingKey": "platform=MO&rid=851184319&aid=641_1_3_1025&mid=TMS", // 주문추적키 (쇼핑몰에서 생성되어 주문번호를 특정하는 구분값)
                        "deliveryNo": 400000, // 배송번호
                        "deliveryInternationalYn": false, // 해외배송여부
                        "optionManagementCd": "", // 옵션 관리 코드
                        "deliveryTemplateNo": 50000, // 배송 템플릿 번호
                        "deliveryCompanyType": "CJ", // 배송 업체
                        "invoiceNo": null, // 송장번호
                        "receiverName": "홍길동", // 받는 사람 이름
                        "receiverContact1": "010-1234-5678", //수령자 휴대폰번호
                        "receiverContact2": "", //수령자 전화번호
                        "zipCd": "12345", //배송지 우편번호
                        "receiverAddress": "", // 주소
                        "receiverDetailAddress": "", // 상세 주소
                        "receiverJibunAddress": "", //지번 주소
                        "usesShippingInfoLaterInput": false, // 나중배송지 입력 여부
                        "shippingInfoLaterInputContact": null, // 나중배송지 입력 전화 번호
                        "encryptedShippingNo": null, // 나중배송지 입력 시 사용하는 암호화된 배송번호
                        "shippingEmptyAutoCancelYmdt" : "2023-10-25 13:54:38", // 배송지 미입력 시 자동 주문취소 일시
                        "customsIdNumber": '', // 개인통관고유부호
                    }
                ]
            }
        ]
    },
    "pay": {
        "pgType": "KCP", // PG 타입
        "payType": "CREDIT_CARD", // 결제 유형
        "payYmdt": "2021-10-25 13:54:38", // 결제일시
        "payStatusType": "DONE", // 결제상태
        "payInfo": {
            "payType": "CREDIT_CARD", // 결제 유형
            "cardInfo": {
                "cardCompany": "SHINHAN", // 카드사
                "cardCode": "CCLG", // PG 카드사 코드(PG별로 다름)
                "cardName": "신한카드", // 카드사명
                "approveYmdt": "2021-10-25 13:54:38", // 결제승인시간
                "cardNo": "*****", // 카드번호
                "cardApprovalNumber": "****", // 결제승인번호
                "noInterest": true, // 무이자여부
                "installmentPeriod": 5, // 할부기간
                "cardAmt": 185000 // 신용카드 결제금액
            },
            "bankInfo": {
                "bank" : "KDB", // 은행
                "bankCode": "", // PG 은행코드 (PG별로 다름)
                "bankName": "", // 은행명
                "account": "", // 계좌번호
                "bankAmt": 1000, // 입금해야할 금액
                "depositAmt": 1000, // 실제 입금금액
                "depositYmdt": "2021-10-25 13:54:38", // 입금일시
                "remitterName": "", // 입금자명
                "depositorName": "", // 예금주명
                "paymentExpirationYmdt": "2021-10-25 13:54:38" // 입금 마감일
            },
            "cashAuthNo": "", // 현금영수증 승인번호
            "cashNo": "", // 현금영수증 거래번호
            "tradeNo": "3000000", // 거래번호
            "escrowYn": "N", // 에스크로 결제 여부
            "payAmt": 185000, // PG결제 금액
            "sellerCouponAmt": 0, // 가맹점 발행쿠폰
            "pgCouponAmt": 0, // PG 쿠폰 금액
            "cardCouponAmt": 0, // 카드사 쿠폰 금액
            "pointAmt": 0, // PG 포인트
            "paymentKey": {
                "pgType": "KCP", // PG 유형
                "key": "key", // PG Key
                "etcInfos": {} // 기타 결제 키 관련 정보
            },
            "taxType": "DUTY", // 과세유형 (과세,면세,영세)
            "mobileInfo": { // 핸드폰 결제 정보
                "mobileNo": "010-1234-5678", // 결제 핸드폰 번호
                "mobileCompany": "" // 통신사
            },
            "naverPayInfo": { // 네이버 페이 결제 정보
                "paymentMeans": "", // 네이버 페이 결제 수단
                "paymentDueDate": "", // 입금 기한
                "paymentNumber":"", // PG승인번호
                "orderDiscountAmount": 1000, // 주문 할인액
                "generalPaymentAmount": 1000, // 일반결제수단최종결제금액
                "naverMileagePaymentAmount": 1000, // 네이버페이 포인트 최종 결제 금액
                "chargeAmountPaymentAmount": 1000, // 충전금최종결제금액
                "checkoutAccumulationPaymentAmount": 1000, // 네이버페이 적립금 최종 결제 금액
                "orderType": "", // 주문 유형 구분(네이버페이/통합장바구니)
                "payLocationType": "", // 결제 위치 구분(PC/MOBILE)
                "paymentCoreType": "", // 결제 구분(네이버결제/PG 결제)
                "payLaterPaymentAmount": 1000 // 후불결제 금액(네이버결제/PG 결제)
            }
        }
    }
}
```

{% endcode %}

***

#### <mark style="color:red;">\[주문상태변경]</mark>

| 이벤트 유형                | 이벤트명   |
| --------------------- | ------ |
| CHANGE\_ORDER\_STATUS | 주문상태변경 |

{% code overflow="wrap" %}

```java
// 샘플 데이터 및 파라미터 정의
[
    {
          "eventType": "CHANGE_ORDER_STATUS", //이벤트명
          "orderProductOptionNo": 12345, // 주문상품 옵션번호
          "orderNo": "202110110111111", // 주문번호
          "memberNo": 12345, // 회원번호
          "userInputs": [ // 구매자 입력형 옵션
              {
                "inputLabel":"색깔", //구매자 작성형 옵션 이름
                "inputValue":"검정색", //구매자 입력형 옵션 값
              }
          ],
          "serviceNo": 12345, // 서비스번호
          "mallNo": 12345, // 몰번호
          "deliveryNo": 12345, // 배송번호
          "deliveryTemplateNo": 50000, // 배송 템플릿 번호
          "deliveryInternationalYn":false, // 해외배송여부
          "mallProductNo": 100000000, // 상품번호
          "productName": "상품명",
          "mallOptionNo": 6000000, // 상품옵션번호
          "mallAdditionalProductNo": 0, // 추가 상품 번호
          "optionUseYn": "Y", // 옵션 사용 여부
          "optionName": "옵션명",
          "optionValue": "옵션값",
          "imageUrl": "//rlyfaazj0.toastcdn.net/...", // 상품 이미지 url
          "orderCnt": 1, // 주문건수
          "originalOrderCnt": 1, // 최초 주문 수량
          "salePrice": 329000.00, // 판매 가격
          "immediateDiscountAmt": 144000.00, // 즉시 할인 가격
          "addPrice": 0.00, // 추가 금액
          "additionalDiscountAmt": 0.00, // 추가 할인 금액
          "partnerChargeAmt": 0.00, // 파트너 부담액
          "adjustedAmt": 185000.00, // 조정된 상품 금액
          "orderStatusType": "PAY_DONE", // 주문옵션상태
          "claimStatusType": null, // 클레임 상태
          "orderYmdt": "2021-10-25 13:53:18", // 주문일시
          "payYmdt": "2021-10-25 13:54:38", // 결제일시
          "orderAcceptYmdt": null, // 주문접수일시
          "releaseReadyYmdt": null, // 배송준비일시
          "releaseYmdt": null, // 배송일시
          "deliveryCompleteYmdt": null, // 배송완료일시
          "buyConfirmYmdt": null, // 구매확정일시
          "registerYmdt": "2021-10-25 13:53:18", // 주문옵션 생성일시
          "trackingKey": "platform=MO&rid=851184319&aid=641_1_3_1025&mid=TMS", // 주문추적키 (쇼핑몰에서 생성되어 주문번호를 특정하는 구분값)
          "deliveryCompanyType": "CJ", // 배송 업체
          "invoiceNo": : "1212", // 송장번호
          "receiverName": "홍길동", // 받는 사람 이름
          "zipCd": "12345", // 배송지 우편 번호
          "address": "경기도 성남시 분당구 대왕판교로645번길 12", // 배송지 주소
          "detailAddress": "16 NHN 플레이뮤지엄", // 배송지 상세 주소
          "jibunAddress": "경기도 성남시 분당구 대왕판교로645번길", // 배송지 지번 주소
          "receiverCity": "", // 배송지 해외(도시)
          "receiverState": "", // 배송지 해외(주)
          "contact1": "010-0000-0000", // 수령자 연락처1
          "contact2": "", // 수령자 연락처2
          "productManagementCd": "", // 상품관리 코드
          "optionManagementCd": "", // 옵션관리 코드
          "usesShippingInfoLaterInput": false, // 나중배송지 입력 여부
          "shippingInfoLaterInputContact": null, // 나중배송지 입력 전화 번호
          "encryptedShippingNo": null, // 나중배송지 입력 시 사용하는 암호화된 배송번호
          "retrieveInvoiceUrl": null // 배송조회 할 수 있는 url
          "isFreeGift": false, // 사은품 여부
          "updateAdminNo": 0, // 해당 주문의 상태를 마지막으로 바꾼 어드민의 번호
          "extraManagementCd": "", // 옵션의 추가관리코드 (상품 등록/수정에서 설정 가능)
          "order": {
          "extraData": "{"language": "KO"}",
          "currencyCode": "KRW",
          "exchangeRate": null
        },
          "claimNo": 123,
          "requestChannelType": "USER" // 상태변경이 요청된 채널 [SYSTEM, SERVICE, PARTNER, BATCH, USER, SERVER]
          "channelType": null // 유입 경로
  }
]
```

{% endcode %}

***

#### <mark style="color:red;">\[수령자 정보 변경]</mark>

| 이벤트 유형           | 이벤트명      |
| ---------------- | --------- |
| UPDATE\_RECEIVER | 수령자 정보 변경 |

{% code overflow="wrap" %}

```java
// 샘플 데이터 및 파라미터 정의
{
    "eventType": "UPDATE_RECEIVER", // 이벤트 명
    "mallNo": 12345, // 쇼핑몰 번호
    "orderNo": "", // 주문 번호
    "shippings": [
      // 배송정보
      {
        shippingNo": 0, // 배송번호
        customsIdNumber": '', // 개인통관고유부호
        receiverAddress": {
          // 수령자 정보
          "zipCd": "12345", // 배송지 우편 번호
          "address": "경기도 성남시 분당구 대왕판교로645번길 12", // 배송지 주소
          "detailAddress": "16 NHN 플레이뮤지엄", // 배송지 상세 주소
          "jibunAddress": "경기도 성남시 분당구 대왕판교로645번길", // 배송지 지번 주소
          "receiverCity": "", // 배송지 해외(도시)
          "receiverState": "", // 배송지 해외(주)
          "contact1": "010-0000-0000", // 수령자 연락처1
          "contact2": "", // 수령자 연락처2
          "name": "홍길동", // 수령자 이름
          "shippingEtcInfo": {
            // 해외배송지 기타정보
            "receiverFirstName": "", // 수령자 FirstName
            "receiverLastName": "", // 수령자 LastName
            "orderAdditionalInfo": "", // 주문 추가 정보
          },
        },
        "countryCd": "", // 국가 코드
        "memo": "", // 배송 메모
      }
    ]
  }
```

{% endcode %}

***

#### <mark style="color:red;">\[업무메시지]</mark>

| 이벤트 유형                | 이벤트명     |
| --------------------- | -------- |
| ADD\_TASK\_MESSAGE    | 업무메시지 등록 |
| UPDATE\_TASK\_MESSAGE | 업무메시지 수정 |
| DELETE\_TASK\_MESSAGE | 업무메시지 삭제 |

{% code overflow="wrap" %}

```java
// 샘플 데이터 및 파라미터 정의
{
    "eventType": "ADD_TASK_MESSAGE", // 이벤트명
    "content": "content", // 이벤트시 작성된 내용
    "isDetail": true, // 상세 메시지 여부
    "taskMessage": {
      // 업무메시지 정보
      "taskMessageNo": 0, // 업무메시지 번호
      "taskMessageChannelType": "PARTNER", // 메시지 작성 채널
      "taskMessageStatusType": "PROCESSING", // 진행 상황
      "taskMessageType": "PAY", // 업무메시지 유형
      "fromTargetType": "PARTNER", // 발송자 타입
      "fromTargetNo": 0, // 발송자 번호
      "toTargetType": "PARTNER", // 담당자 타입
      "toTargetNo": 0, // 담당자 번호
      "content": "content", // 업무메시지 내용
      "orderNo": 0, // 주문 번호
      "orderProductOptionNo": 0, // 주문 옵션 번호
      "productName": "product-name", // 상품 명 (nullable)
      "registerYmdt": "2023-02-21 13:32:47", // 등록일시
      "updateYmdt": "2023-02-21 13:32:47", // 수정일시 (nullable)
      "completeYmdt": "2023-02-21 13:32:47", // 완료일시 (완료되지 않은 경우: null)
      "taskMessageDetails": [
        // 상세 메시지 정보
        {
          "taskMessageDetailNo": 0, // 업무메시지 상세 번호
          "taskMessageChannelType": "PARTNER", // 상세 메시지 작성 채널
          "content": "content", // 업무메시지 상세 내용
          "registerYmdt": "2023-02-21 13:32:47", // 등록일시
          "updateYmdt": "2023-02-21 13:32:47", // 수정일시 (nullable)
        }
      ]
    }
  }
```

{% endcode %}

***

#### <mark style="color:red;">\[장바구니 등록]</mark>

| 이벤트 유형    | 이벤트명    |
| --------- | ------- |
| ADD\_CART | 장바구니 등록 |

```java
// 샘플 데이터 및 파라미터 정의
{
    "eventType": "ADD_CART", 
    "mallNo": 1234, // 쇼핑몰번호
    "memberNo": 12345, // 회원번호
    "memberId": "회원아이디", // 회원아이디
    "products": [
        {
            "productNo": 12345, // 상품번호
            "productName": "상품명", // 상품명
            "optionUsed": true, // 옵션 사용여부
            "options": [
                {
                    "optionNo": 12345, // 옵션번호(옵션없는 상품은 null)
                    "optionName": "옵션명1|옵션명2". // 옵션명(옵션없는 상품은 null)
                    "optionValue": "옵션값1|옵션값2", // 텍스트옵션일 경우, 옵션 값에 사용자가 입력한 텍스트 옵션값 기재(옵션없는 상품은 null)
                    "orderCount": 1, // 장바구니 담긴 수량
                    "isRequired": true // 옵션 필수여부(옵션없는 상품은 null)
                }
            ]
        }
    ]
}
```

***

### 6. 상품 관련

| 이벤트 유형           | 이벤트명        |
| ---------------- | ----------- |
| PRODUCT\_UPDATED | 상품 등록/수정/삭제 |

{% code overflow="wrap" %}

```java
// 샘플 데이터 및 파라미터 정의
{  
    "eventType": "PRODUCT_UPDATED", // 이벤트 유형
    "mallNo": 12345, // 쇼핑몰번호
    "productEventType": "CREATED" || "UPDATED" || "DELETED", // 등록 또는 수정 또는 삭제  
    "mallProductNos": [1000,20000], //상품번호  
}
```

{% endcode %}

***

### 7. 프로모션 관련

| 이벤트 유형           | 이벤트명  |
| ---------------- | ----- |
| COUPON\_ADDED    | 쿠폰 등록 |
| COUPON\_MODIFIED | 쿠폰 수정 |
| COUPON\_DELETED  | 쿠폰 삭제 |

{% code overflow="wrap" %}

```java
// 샘플 데이터 및 파라미터 정의
{
       "eventType": "COUPON_ADDED",
       "mallNo": 12345, // 쇼핑몰번호,
       "coupons": [
           {
               "couponNo": 11111, // 쿠폰번호
               "couponName": "쿠폰명",
               "couponIssueType": "DOWNLOAD", // 발급 유형 : 다운로드 발급 / 코드 발급(직접입력) / 코드 발급(자동생성) / 자동 발급
               "couponStatusType": "ISSUE_ING", // 발급 상태 : 발급대기 / 발급중 / 발급중지 / 발급종료
               "couponType": "CART" // 혜택 구분 : 상품적용 쿠폰 / 주문적용 쿠폰 / 기프트 쿠폰
           }
       ]
   }
```

{% endcode %}


---

# 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://workspace-help.nhn-commerce.com/app-guide/shopby_webhook.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.
