# 문의 접수

문의 접수 기능을 자체적으로 구현하기 위해서는 아래와 같은 형태로 구현해야 합니다.

1. **접수유형 리스트 조회**
   1. Contiple에 등록된 접수유형을 조회합니다.
   2. 조회된 접수유형은 사용자가 직접 선택할 수 있도록 UI를 구현합니다.
   3. 만약 특정 접수유형을 고정하고자 할  경우, \[서비스관리 > 티켓 > 카테고리 관리] 화면으로 이동하여 카테고리 ID를 확인하고 category 변수를고정 값으로 지정합니다.
2. **필드 리스트 조회**&#x20;
   1. 사용자가 선택한 접수유형을 변수로 하여 필드 목록을 조회합니다.
   2. 반환된 필드 목록의 Type에 따라 텍스트필드, 드롭다운, 체크박스 등의 UI를 구현합니다.
3. **첨부파일 업로드**
   1. 파일 첨부 기능을 구현할 경우, 파일 업로드 API를 호출하여 첨부 기능을 구현합니다.
   2. 업로드에 성공하면 시스템에서는 첨부파일 ID 값을 반환하며, 티켓 생성 시 해당 ID를 변수로제공해야 합니다.
4. **티켓 생성**

   1. 문의 제출 시 사용자가 필드에 입력한 값을 변수로 티켓 생성 API를 호출합니다.

## **➊ 접수유형 리스트**

**(1) 인터페이스 설명**

* URL: https\://{domain}.oc.nhncloud.com/{serviceId}/api/v2/ticket/categories.json

| 인터페이스 명  | 프로토콜  | 호출방향 | 인코딩   | 결과 형식 | 인터페이스 설명          | 접근제한 여부 |
| -------- | ----- | ---- | ----- | ----- | ----------------- | ------- |
| 접수유형 리스트 | HTTPS | GET  | UTF-8 | JSON  | 서비스 내 접수유형 리스트 조회 | 필요 없음   |

***

**(2) 요청 파라미터 정의**

| 명칭         | 변수        | 데이터 타입  | 변수 유형 | 필수 | 설명                               |
| ---------- | --------- | ------- | ----- | -- | -------------------------------- |
| 서비스 ID     | serviceId | String  | path  | O  | 서비스 ID，URL PATH 중{serviceId}에 설정 |
| 상위 카테고리 ID | parent    | Integer | query | X  | 상위 카테고리에 소속된 하위 카테고리 리스트         |
| 하위 카테고리 ID | child     | Integer | query | X  | 하위 카테고리에 소속된 상위 카테고리 리스트         |
| 언어 코드      | language  | String  | query | X  | 서비스 헬프센터 기본 언어 코드                |

***

**(3) 결과 데이터**

| 명칭              | 변수         | 데이터 타입  | 설명                                                 |
| --------------- | ---------- | ------- | -------------------------------------------------- |
| result.contents | categoryId | Integer | 접수유형 ID                                            |
|                 | parent     | Integer | 상위 접수유형 ID                                         |
|                 | name       | String  | 접수유형 명                                             |
|                 | level      | Integer | <p>접수유형 레벨</p><ul><li>1, 2, 3, 4, 5</li></ul>      |
|                 | path       | String  | <p>접수유형 경로</p><ul><li>\로 각 뎁스 카테고리 ID 연결</li></ul> |
|                 | orderNo    | Integer | 표시 순서                                              |
|                 | languages  | Object  | 카테고리 다국어 명                                         |

***

**(4) Response Body**

```json
{   
    "header": { 
        "resultCode": 200,  
        "resultMessage": "",    
        "isSuccessful": true    
    },  
    "result": { 
        "contents": [   
            {   
                "categoryId": 2536, 
                "parent": 0,    
                "name": "유형1",  
                "level": 1, 
                "path": "\\",   
                "orderNo": 0,   
                "languages": {  
                    "ko": "유형1",    
                    "th": "พิมพ์1", 
                    "ja": "タイプ1",   
                    "en": "Type1",  
                    "zh": "类型1" 
                }   
            },  
            {   
                "categoryId": 2537, 
                "parent": 0,    
                "name": "유형2",  
                "level": 1, 
                "path": "\\",   
                "orderNo": 0,   
                "languages": {  
                    "ko": "유형2",    
                    "th": "พิมพ์2", 
                    "ja": "タイプ2",   
                    "en": "Type2",  
                    "zh": "类型2" 
                }   
            },  
            {   
                "categoryId": 2538, 
                "parent": 2536, 
                "name": "유형1-1",    
                "level": 2, 
                "path": "\\2536\\", 
                "orderNo": 0,   
                "languages": {  
                    "ko": "유형1-1",  
                    "th": "พิมพ์1-1",   
                    "ja": "タイプ1-1", 
                    "en": "Type1-1",    
                    "zh": "类型1-1"   
                }   
            },  
            {   
                "categoryId": 2539, 
                "parent": 2536, 
                "name": "유형1-2",    
                "level": 2, 
                "path": "\\2536\\", 
                "orderNo": 0,   
                "languages": {  
                    "ko": "유형1-2",  
                    "th": "พิมพ์1-2",   
                    "ja": "タイプ1-2", 
                    "en": "Type1-2",    
                    "zh": "类型1-2"   
                }   
            },  
            {   
                "categoryId": 2540, 
                "parent": 2538, 
                "name": "유형1-1-1",  
                "level": 3, 
                "path": "\\2536\\2538\\",   
                "orderNo": 0,   
                "languages": {  
                    "ko": "유형1-1-1",    
                    "th": "พิมพ์1-1-1", 
                    "ja": "タイプ1-1-1",   
                    "en": "Type1-1-1",  
                    "zh": "类型1-1-1" 
                }   
            },  
            {   
                "categoryId": 2541, 
                "parent": 2540, 
                "name": "유형1-1-1-1",    
                "level": 4, 
                "path": "\\2536\\2538\\2540\\", 
                "orderNo": 0,   
                "languages": {  
                    "ko": "유형1-1-1-1",  
                    "th": "พิมพ์1-1-1-1",   
                    "ja": "タイプ1-1-1-1", 
                    "en": "Type1-1-1-1",    
                    "zh": "类型1-1-1-1"   
                }   
            },  
            {   
                "categoryId": 2542, 
                "parent": 2541, 
                "name": "유형1-1-1-1-1",  
                "level": 5, 
                "path": "\\2536\\2538\\2540\\2541\\",   
                "orderNo": 0,   
                "languages": {  
                    "ko": "유형1-1-1-1-1",    
                    "th": "พิมพ์1-1-1-1-1", 
                    "ja": "タイプ1-1-1-1-1",   
                    "en": "Type1-1-1-1-1",  
                    "zh": "类型1-1-1-1-1" 
                }   
            }   
        ]   
    }   
}
```

***

## **➋ 접수유형 필드 리스트**

**(1) 인터페이스 설명**

* URL: https\://{domain}.oc.nhncloud.com/{serviceId}/api/v2/ticket/field/user/{categoryId}.json

| 인터페이스 명     | 프로토콜  | 호출방향 | 인코딩   | 결과 형식 | 인터페이스 설명                 | 접근제한 여부 |
| ----------- | ----- | ---- | ----- | ----- | ------------------------ | ------- |
| 접수유형 필드 리스트 | HTTPS | GET  | UTF-8 | JSON  | 접수유형을 통하여 대응되는 필드 리스트 확인 | 공통 인증   |

***

**(2) 요청 파라미터 정의**

| 명칭      | 변수         | 데이터 타입  | 변수 유형 | 필수 | 설명                                    |
| ------- | ---------- | ------- | ----- | -- | ------------------------------------- |
| 서비스 ID  | serviceId  | String  | path  | O  | 서비스 ID, URL PATH 내에 설정한 {serviceId}   |
| 접수유형 ID | categoryId | Integer | path  | O  | 접수유형 ID, URL PATH 내에 설정한 {categoryId} |
| 언어 코드   | language   | String  | query | X  | 서비스 헬프센터 기본 언어 코드                     |

***

**(3) 결과 데이터**

| 명칭              | 변수          | 데이터 타입  | 설명                                                               |
| --------------- | ----------- | ------- | ---------------------------------------------------------------- |
| result.contents | fieldId     | Integer | 고객 필드 ID                                                         |
|                 | code        | String  | 항목 코드                                                            |
|                 | type        | String  | 항목 유형                                                            |
|                 | title       | String  | 항목 명                                                             |
|                 | description | String  | 안내 문구                                                            |
|                 | placeholder | String  | 제시어                                                              |
|                 | length      | Integer | <p>최대 길이</p><ul><li>0: 길이 제한 없음</li></ul>                        |
|                 | required    | Boolean | <p>필수 항목 여부</p><ul><li>true: yes </li><li>false: no</li></ul>    |
|                 | encrypt     | Boolean | <p>저장 시 암호화 여부</p><ul><li>true: yes </li><li>false: no</li></ul> |
|                 | holdingText | Boolean | <p>클릭 시 삭제 여부</p><ul><li>true: yes </li><li>false: no</li></ul>  |
|                 | options     | Array   | <p>텍스트 박스, 체크박스, 드롭박스 </p><ul><li>예: \[구분1,구분2,...]</li></ul>    |
|                 | value       | String  | 사용자 입력 값                                                         |

***

**(4) Response Body**

```json
{       
    "header": {     
        "resultCode": 200,      
        "resultMessage": "",        
        "isSuccessful": true        
    },      
    "result": {     
        "contents": [       
            {       
                "fieldId": 1,       
                "code": "category",     
                "type": "dropdown",     
                "title": "유형",      
                "description": "",      
                "placeholder": "",      
                "length": 0,        
                "required": true,       
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 3,       
                "code": "mail",     
                "type": "text",     
                "title": "이메일",     
                "description": "",      
                "placeholder": "",      
                "length": 100,      
                "required": true,       
                "encrypt": true,        
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 5,       
                "code": "subject",      
                "type": "text",     
                "title": "제목",      
                "description": "",      
                "placeholder": "",      
                "length": 200,      
                "required": true,       
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 6,       
                "code": "content",      
                "type": "textarea",     
                "title": "문의내용",        
                "description": "",      
                "placeholder": "",      
                "length": 5000,     
                "required": true,       
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 2,       
                "code": "name",     
                "type": "text",     
                "title": "이름",      
                "description": "",      
                "placeholder": "",      
                "length": 100,      
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 4,       
                "code": "phone",        
                "type": "text",     
                "title": "전화번호",        
                "description": "",      
                "placeholder": "",      
                "length": 30,       
                "required": false,      
                "encrypt": true,        
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 9,       
                "code": "attachment",       
                "type": "file",     
                "title": "첨부파일",        
                "description": "10MB 이내 모든 이미지 및 허용된 문서 (MS office, hwp, pdf, txt)와 zip 파일을 5개까지 첨부가능합니다.",     
                "placeholder": "",      
                "length": 0,        
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 18,      
                "code": "typeOne",      
                "type": "text",     
                "title": "구분1",     
                "description": "",      
                "placeholder": "",      
                "length": 200,      
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 19,      
                "code": "typeTwo",      
                "type": "text",     
                "title": "구분2",     
                "description": "",      
                "placeholder": "",      
                "length": 200,      
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 720,     
                "code": "caption",      
                "type": "caption",      
                "title": "단순 텍스트 이름",       
                "description": "<div style=\"color:red\">단순 텍스트 설명</div>",      
                "placeholder": "<div style=\"font-size:20px;color:red\">단순 텍스트 내용</div>",       
                "length": 50,       
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 721,     
                "code": "textbox",      
                "type": "text",     
                "title": "텍스트 박스 이름",       
                "description": "<div style=\"color:red\">텍스트 박스 설명</div>",      
                "placeholder": "텍스트 박스 자리 표시자",     
                "length": 50,       
                "required": true,       
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 722,     
                "code": "checkbox",     
                "type": "checkbox",     
                "title": "체크박스 이름",     
                "description": "체크박스 설명",       
                "placeholder": "",      
                "length": 50,       
                "required": false,      
                "encrypt": true,        
                "holdingText": true,        
                "options": [        
                    "옵션1",      
                    "옵션2",      
                    "옵션3"       
                ],      
                "value": null       
            },      
            {       
                "fieldId": 723,     
                "code": "dropdown",     
                "type": "dropdown",     
                "title": "드롭박스 이름",     
                "description": "드롭박스 설명",       
                "placeholder": "",      
                "length": 50,       
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": [        
                    "옵션1",      
                    "옵션2",      
                    "옵션3"       
                ],      
                "value": null       
            },      
            {       
                "fieldId": 724,     
                "code": "radiobutton",      
                "type": "radio",        
                "title": "라디오 버튼 이름",       
                "description": "라디오 버튼 설명",     
                "placeholder": "",      
                "length": 50,       
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": [        
                    "옵션1",      
                    "옵션2",      
                    "옵션3"       
                ],      
                "value": null       
            },      
            {       
                "fieldId": 725,     
                "code": "date",     
                "type": "date",     
                "title": "일자 이름",       
                "description": "일자 설명",     
                "placeholder": "2022-07-11",        
                "length": 50,       
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 726,     
                "code": "datetime",     
                "type": "datetime",     
                "title": "일시",      
                "description": "일시",        
                "placeholder": "2022-07-11 00:00",      
                "length": 50,       
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 727,     
                "code": "dateperiod",       
                "type": "date_period",      
                "title": "기간 일자 이름",        
                "description": "기간 일자 설명",      
                "placeholder": "2022-07-01 ~ 2022-07-31",       
                "length": 50,       
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 728,     
                "code": "datetimeperiod",       
                "type": "datetime_period",      
                "title": "기간 일시 이름",        
                "description": "기간 일시 설명",      
                "placeholder": "2022-07-01 00:00 ~ 2022-07-31 23:59",       
                "length": 50,       
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 729,     
                "code": "agreetotheterms",      
                "type": "agree",        
                "title": "동의하기 이름",     
                "description": "안내 문구",     
                "placeholder": "동의 문구",     
                "length": 50,       
                "required": false,      
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            },      
            {       
                "fieldId": 11,      
                "code": "personalAgree",        
                "type": "agree",        
                "title": "개인정보수집",      
                "description": "수집하는 개인 정보[(필수) 이메일, 휴대폰 번호, 문의내용, (선택) 첨부 파일]는 문의 내용 처리 및 고객 불만을 해결하기 위해 사용되며, <b><span style=\"font-size: 11pt;\">관련 법령에 따라 3년간 보관 후 삭제</span></b>됩니다. 문의 접수, 처리 및 회신을 위해 꼭 필요한 정보이므로 동의해 주셔야 서비스를 이용하실 수 있습니다.",     
                "placeholder": "위, 개인정보 수집 및 활용에 동의합니다.",       
                "length": 0,        
                "required": true,       
                "encrypt": false,       
                "holdingText": true,        
                "options": null,        
                "value": null       
            }       
        ]       
    }       
}
```

***

## **➌ 티켓 첨부파일 업로드**

**(1) 인터페이스 설명**

* URL: https\://{domain}.oc.nhncloud.com/{serviceId}/openapi/v1-1/ticket/attachments/upload.json

| 인터페이스 명     | 프로토콜  | 호출방향 | 인코딩   | 결과 형식 | 인터페이스 설명   | 접근제한 여부 |
| ----------- | ----- | ---- | ----- | ----- | ---------- | ------- |
| 티켓 첨부파일 업로드 | HTTPS | POST | UTF-8 | JSON  | 서버에 파일 업로드 | 공통 인증   |

***

**(2) 요청 파라미터 정의**

<table><thead><tr><th width="156">명칭</th><th width="117">변수</th><th width="117">데이터 타입</th><th width="113">변수 유형</th><th width="65">필수</th><th>설명</th></tr></thead><tbody><tr><td>서비스 ID</td><td>serviceId</td><td>String</td><td>path</td><td>O</td><td>URL PATH 내에 설정한 {serviceId}</td></tr><tr><td>업로드 파일</td><td>file</td><td>File</td><td>formData</td><td>O</td><td><p>파일을 form 형식으로 제출 </p><ul><li>첨부 가능 확장자:  jpg, png, gif, bmp, jpeg, tif, tiff, pdf, txt, hwp, xls, xlsx, doc, docx, ppt, pptx, mp3, wav, zip</li><li>파일 크기 &#x3C; 10MB </li><li>파일 명 &#x3C; 100자</li></ul></td></tr></tbody></table>

***

**(3) 결과 데이터&#x20;**<mark style="color:green;">**(성공)**</mark>

| 명칭             | 변수           | 데이터 타입  | 설명                                                |
| -------------- | ------------ | ------- | ------------------------------------------------- |
| result.content | attachmentId | String  | 첨부파일 ID                                           |
|                | fileName     | String  | 첨부파일 명                                            |
|                | contentType  | String  | 첨부파일 유형                                           |
|                | disposition  | String  | <p>파일 처리 방식</p><ul><li>attachment: 첨부파일</li></ul> |
|                | size         | Long    | 첨부파일 사이즈(byte)                                    |
|                | createdDt    | Long    | 파일 첨부 시간                                          |
|                | repealFlag   | Boolean | 파일 파기 여부                                          |

***

**(4) Response Body&#x20;**<mark style="color:green;">**(성공)**</mark>

```json
  "header": {   
    "resultCode": 200,  
    "resultMessage": "",    
    "isSuccessful": true    
  },    
  "result": {   
    "content": {    
      "attachmentId": "8f0dc5854d2446b6aa2e6e41a0a2f55c",   
      "fileName": "image.png",  
      "contentType": "image/png",   
      "disposition": "attachment",  
      "size": 90576,    
      "createdDt": null,
      "repealFlag": null
    }   
  } 
}
```

***

**(5) 결과 데이터&#x20;**<mark style="color:orange;">**(실패)**</mark>

<table><thead><tr><th width="179">명칭</th><th width="125">변수</th><th width="121">데이터 타입</th><th>설명</th></tr></thead><tbody><tr><td>result.content</td><td>exception</td><td>String</td><td>고정 값: OcException</td></tr><tr><td></td><td>message</td><td>String</td><td><p>오류 메시지</p><ul><li>하기 실패 케이스 참조</li></ul></td></tr></tbody></table>

<mark style="background-color:orange;">**실패 케이스**</mark>

> **파일 크기 10MB 초과**
>
> ```json
> {
>     "header": {
>         "resultCode": 4001,
>         "resultMessage": "10MB 이내 크기의 파일만 첨부 가능합니다.",
>         "isSuccessful": false
>     },
>     "result": {
>         "content": {
>             "exception": "OcException",
>             "message": "10MB 이내 크기의 파일만 첨부 가능합니다."
>         }
>     }
> }
> ```
>
> \
> **파일명 100자 초과**
>
> ```json
> {
>     "header": {
>         "resultCode": 4002,
>         "resultMessage": "파일명이 100자 이내의 파일만 첨부 가능합니다.",
>         "isSuccessful": false
>     },
>     "result": {
>         "content": {
>             "exception": "OcException",
>             "message": "파일명이 100자 이내의 파일만 첨부 가능합니다."
>         }
>     }
> }
> ```
>
> \
> **허용되지 않은 확장자**
>
> ```json
> {
>     "header": {
>         "resultCode": 4003,
>         "resultMessage": "허용되지 않는 첨부파일 형식입니다.",
>         "isSuccessful": false
>     },
>     "result": {
>         "content": {
>             "exception": "OcException",
>             "message": "허용되지 않는 첨부파일 형식입니다."
>         }
>     }
> }
> ```
>
> \
> **허용되지 않은 MIME 타입**
>
> * 허용하는 타입: `"image", "application/pdf", "application/vnd", "text/plain", "application/zip", "application/x-tika-ooxml", "application/x-hwp", "application/x-tika-msoffice", "image/tiff", "audio/mpeg", "audio/wav", "audio/vnd.wave", "audio/x-wav"`
>
> ```json
> {
>     "header": {
>         "resultCode": 9017,
>         "resultMessage": "파일의 콘텐츠가 허용된 MIME 타입과 일치하지 않습니다.",
>         "isSuccessful": false
>     },
>     "result": {
>         "content": {
>             "exception": "OcException",
>             "message": "파일의 콘텐츠가 허용된 MIME 타입과 일치하지 않습니다."
>         }
>     }
> }
> ```

***

## **➍ 티켓 생성**

**(1) 인터페이스 설명**

* URL : https\://{domain}.oc.nhncloud.com/{serviceId}/openapi/v1/ticket.json

| 인터페이스 명 | 프로토콜  | 호출방향 | 인코딩   | 결과 형식 | 인터페이스 설명 | 접근제한 여부 |
| ------- | ----- | ---- | ----- | ----- | -------- | ------- |
| 티켓 생성   | HTTPS | POST | UTF-8 | JSON  | 신규 티켓 생성 | 공통 인증   |

***

**(2) 요청 파라미터 정의**

<table><thead><tr><th width="144">명칭</th><th>변수</th><th width="103">데이터 타입</th><th width="101">변수 유형</th><th width="65">필수</th><th>설명</th></tr></thead><tbody><tr><td>서비스 ID</td><td>serviceId</td><td>String</td><td>path</td><td>O</td><td>서비스 ID，URL PATH 내에 설정한 {serviceId}</td></tr><tr><td>티켓 정보</td><td>request body</td><td>Object</td><td>body</td><td>O</td><td>티켓 정보(JSON)</td></tr><tr><td>카테고리</td><td>categoryId</td><td>Integer</td><td></td><td>O</td><td>카테고리(접수유형) ID</td></tr><tr><td>제목</td><td>subject</td><td>String</td><td></td><td>O</td><td>제목(max=255)</td></tr><tr><td>설명</td><td>content</td><td>String</td><td></td><td>O</td><td>원칙 상 단순 텍스트만 허용. Base64 내용으로 제출할 경우 티켓 확인시 내용이 많아 문제될 수 있음. 이미지는 첨부파일 형식으로 업로드하거나, 파일 업로드 후 html의 img src=""/{serviceId}/api/v2/ticket/attachments/{attachmentId}""/ 로 불러와서 사용</td></tr><tr><td>고객 정보</td><td>endUser</td><td>Object</td><td></td><td>O</td><td>고객 정보</td></tr><tr><td>아이디</td><td>endUser.usercode</td><td>String</td><td></td><td>X</td><td>ID(회원 고유 ID). 회원 연동 기능을 사용할 경우, 플랫폼 측의 사용자 고유 ID를 usercode로 사용할 수 있으며, 해당 usercode를 통해 회원의 문의 내역을 조회할수 있음. 비회원 문의일 경우 값을 전송할 필요 없음</td></tr><tr><td>메일</td><td>endUser.email</td><td>String</td><td></td><td>O</td><td>메일(서비스 관리 → 티켓 → 이메일 설정 메뉴에서 메일 정보를 설정하였을 경우, 티켓 처리 시 해당 메일 주소로 고객에게 메일 발송)</td></tr><tr><td>이름</td><td>endUser.username</td><td>String</td><td></td><td>O</td><td>이름(메일 파라미터 입력 시, 필수 입력 필요. 입력하지 않을 경우 메일 발송 불가)</td></tr><tr><td>전화</td><td>endUser.phone</td><td>String</td><td></td><td>X</td><td>전화</td></tr><tr><td>첨부파일</td><td>attachments</td><td>Array</td><td></td><td>X</td><td>첨부파일(max 5건)</td></tr><tr><td>첨부파일 ID</td><td>attachments.attachmentId</td><td>String</td><td></td><td>O</td><td>첨부파일 ID</td></tr><tr><td>구분1</td><td>typeOne</td><td>String</td><td></td><td>X</td><td>구분1(확장 시스템 필드1)</td></tr><tr><td>구분2</td><td>typeTwo</td><td>String</td><td></td><td>X</td><td>구분2(확장 시스템 필드2)</td></tr><tr><td>언어</td><td>language</td><td>String</td><td></td><td>X</td><td>언어</td></tr><tr><td>채널</td><td>source</td><td>String</td><td></td><td>X</td><td><p>티켓 채널</p><ul><li>web: 웹 </li><li>spweb: 모바일 웹 </li><li>api: API </li><li>기본 값: web</li></ul></td></tr><tr><td>사용자 필드</td><td>userFields</td><td>Array</td><td></td><td>O</td><td>사용자 필드 사용 시 필드별로 코드(code)와 값(value)으로 구성된 object를 array 형태로 제공<br>단, 사용자 필드를 사용하지 않을 경우에도 빈 array로 제공해야 함 → "userFields":[]</td></tr><tr><td>사용자필드 코드</td><td>userFields.code</td><td>String</td><td></td><td>O</td><td>사용자 필드, 항목 코드</td></tr><tr><td>사용자필드 입력 값</td><td>userFields.value</td><td>String</td><td></td><td>O</td><td>사용자 필드의 사용자 입력 값</td></tr></tbody></table>

***

**(3) Request Body**

```json
{   
    "categoryId": "2542",   
    "subject": "유형",    
    "content": "문의내용",  
    "endUser": {    
        "usercode": "st18888",  
        "email": "enduser_simple@nhn-st.com",   
        "username": "이름",   
        "phone": "13333333333"  
    },  
    "attachments": [    
        {   
            "attachmentId": "8f0dc5854d2446b6aa2e6e41a0a2f55c"  
        }   
    ],  
    "typeOne": "구분1",   
    "typeTwo": "구분2",   
    "language": "ko",   
    "source": "web",    
    "userFields": [ 
        {   
            "code": "textbox",  
            "value": "텍스트 박스 이름"    
        },  
        {   
            "code": "checkbox",     
            "value": [  
                "옵션1",  
                "옵션2"   
            ]   
        },  
        {   
            "code": "dropdown",     
            "value": "옵션1"  
        },  
        {   
            "code": "radiobutton",  
            "value": "옵션1"  
        },  
        {   
            "code": "date",     
            "value": "2022-07-11"   
        },  
        {   
            "code": "datetime",     
            "value": "2022-07-11 00:00" 
        },  
        {   
            "code": "dateperiod",   
            "value": "2022-07-01 ~ 2022-07-31"  
        },  
        {   
            "code": "datetimeperiod",   
            "value": "2022-07-01 00:00 ~ 2022-07-31 23:59"  
        },  
        {   
            "code": "agreetotheterms",  
            "value": "true" 
        }   
    ]   
}
```

***

**(4) 결과 데이터&#x20;**<mark style="color:green;">**(성공)**</mark>

<table><thead><tr><th width="183">명칭</th><th>변수</th><th width="116">데이터 타입</th><th>설명</th></tr></thead><tbody><tr><td>result.content</td><td>ticketId</td><td>String</td><td>티켓 ID</td></tr><tr><td></td><td>categoryId</td><td>int</td><td>접수유형 ID</td></tr><tr><td></td><td>subject</td><td>String</td><td>티켓 제목</td></tr><tr><td></td><td>content</td><td>String</td><td>티켓 내용</td></tr><tr><td></td><td>status</td><td>String</td><td><p>티켓 상태</p><ul><li>고정값: new(미할당)</li><li>open(처리중) </li><li>closed(완료)</li></ul></td></tr><tr><td></td><td>createdDt</td><td>Long</td><td>티켓 생성 시간</td></tr><tr><td></td><td>updatedDt</td><td>Long</td><td>티켓 업데이트 시간</td></tr><tr><td></td><td>attachments</td><td>Array</td><td>첨부파일</td></tr><tr><td></td><td>attachments.attachmentId</td><td>String</td><td>첨부파일 ID</td></tr><tr><td></td><td>attachments.fileName</td><td>String</td><td>첨부파일 명</td></tr><tr><td></td><td>attachments.contentType</td><td>String</td><td>첨부파일 유형</td></tr><tr><td></td><td>attachments.disposition</td><td>String</td><td><p>파일 처리방식</p><ul><li>attachment: 첨부파일</li></ul></td></tr><tr><td></td><td>attachments.size</td><td>String</td><td>첨부파일 사이즈(byte)</td></tr><tr><td></td><td>attachments.createdDt</td><td>String</td><td>티켓 업데이트 시간</td></tr></tbody></table>

***

**(5) Response Body&#x20;**<mark style="color:green;">**(성공)**</mark>

```json
{   
  "header": {   
    "resultCode": 200,  
    "resultMessage": "",    
    "isSuccessful": true    
  },    
  "result": {   
    "content": {    
      "ticketId": "T1658199661153IXTfw",    
      "subject": "유형",  
      "categoryId": 2542,   
      "categoryName": null, 
      "categoryFullName": null, 
      "status": "new",  
      "statusName": null,   
      "content": "문의내용",    
      "createdDt": 1658199661151,   
      "updatedDt": 1658199661151,   
      "contents": null, 
      "attachments": [  
        {   
          "attachmentId": "8f0dc5854d2446b6aa2e6e41a0a2f55c",   
          "fileName": "image.png",  
          "contentType": "image/png",   
          "disposition": "attachment",  
          "size": 90576,    
          "createdDt": 1658192910000    
        }   
      ],    
      "displayDt": null 
    }   
  } 
}
```

***

**(6) 결과 데이터&#x20;**<mark style="color:orange;">**(실패)**</mark>

<table><thead><tr><th width="191">명칭</th><th width="156">변수</th><th width="132">데이터 타입</th><th>설명</th></tr></thead><tbody><tr><td>result.contents</td><td>objectName</td><td>String</td><td>사용자 필드: 항목 코드</td></tr><tr><td></td><td>field</td><td>String</td><td>사용자 필드: 항목 ID</td></tr><tr><td></td><td>validate</td><td>String</td><td>invalid: 무효한 값, length: 최대 길이 초과, required: 항목을 입력하세요</td></tr><tr><td></td><td>key</td><td>String</td><td>"validate.ticket." + objectName + "." + validate</td></tr><tr><td></td><td>message</td><td>String</td><td>"validate.ticket." + objectName + "." + validate</td></tr></tbody></table>

***

**(7-1) Response Body&#x20;**<mark style="color:orange;">**(실패)**</mark>

```json
{       
  "header": {       
    "resultCode": 400,      
    "resultMessage": null,      
    "isSuccessful": false       
  },        
  "result": {       
    "contents": [       
      {     
        "objectName": "mail",       
        "field": "3",       
        "validate": "invalid",      
        "key": "validate.ticket.mail.invalid",      
        "message": "validate.ticket.mail.invalid",      
        "rejectValue": ""       
      },        
      {     
        "objectName": "phone",      
        "field": "4",       
        "validate": "length",       
        "key": "validate.ticket.phone.length",      
        "message": "validate.ticket.phone.length",      
        "rejectValue": ""       
      },        
      {     
        "objectName": "textbox",        
        "field": "721",     
        "validate": "length",       
        "key": "validate.ticket.textbox.length",        
        "message": "validate.ticket.textbox.length",        
        "rejectValue": ""       
      },        
      {     
        "objectName": "checkbox",       
        "field": "722",     
        "validate": "invalid",      
        "key": "validate.ticket.checkbox.invalid",      
        "message": "validate.ticket.checkbox.invalid",      
        "rejectValue": ""       
      },        
      {     
        "objectName": "dropdown",       
        "field": "723",     
        "validate": "invalid",      
        "key": "validate.ticket.dropdown.invalid",      
        "message": "validate.ticket.dropdown.invalid",      
        "rejectValue": ""       
      }     
    ]       
  }     
}
```

**(7-2) Response Body&#x20;**<mark style="color:orange;">**(실패)**</mark>

* **스팸 정책 적용으로 인한 실패**
  * resultCode : 1001
    * 동일 IP로 1분 내에 3번 이상 문의 생성 시도 시, 24시간 동안 티켓 생성 차단
  * resultCode : 1002
    * 동일 IP로 24시간 내에 10번 이상 문의 생성 시도 시, 24시간 동안 티켓 생성 차단

```json
{
    "header": {
        "resultCode": 1001,
        "resultMessage": "문의 횟수가 상한을 초과했습니다. 잠시 후 문의하십시오.",
        "isSuccessful": false
    },
    "result": {…...}
}
```

```json
{
    "header": {
        "resultCode": 1002,
        "resultMessage": "문의 횟수가 상한을 초과했습니다. 잠시 후 문의하십시오.",
        "isSuccessful": false
    },
    "result": {…...}
}
```


---

# 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://docs.contiple.com/api/open-api/inquiry.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.
