From 0b384934e5b738a57cb57a4988e890bb6426217b Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Tue, 16 Sep 2025 18:26:24 +0900 Subject: [PATCH] =?UTF-8?q?api=20=EA=B0=9C=EB=B0=9C=EA=B0=80=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/etc1.png | Bin 0 -> 74672 bytes .claude/etc2.png | Bin 0 -> 47579 bytes .../uia/web/EgovMypageRESTAPIController.java | 31 +- .../webapp/WEB-INF/jsp/web/api/apiAtSpec.jsp | 42 +- .../webapp/WEB-INF/jsp/web/api/apiFtSpec.jsp | 111 ++ .../webapp/WEB-INF/jsp/web/api/apiSpec.jsp | 71 -- .../WEB-INF/jsp/web/api/at/apiSpec_tab1.jsp | 8 +- .../WEB-INF/jsp/web/api/at/apiSpec_tab2.jsp | 13 +- .../WEB-INF/jsp/web/api/at/apiSpec_tab3.jsp | 1014 +++++++++++------ .../WEB-INF/jsp/web/api/at/apiSpec_tab4.jsp | 38 +- .../WEB-INF/jsp/web/api/at/apiSpec_tab5.jsp | 195 ---- .../WEB-INF/jsp/web/api/at/apiSpec_tab6.jsp | 796 +++++++------ .../WEB-INF/jsp/web/api/at/apiSpec_tab7.jsp | 535 +++++---- .../WEB-INF/jsp/web/api/at/apiSpec_tab8.jsp | 496 ++++---- .../WEB-INF/jsp/web/api/ft/apiSpec_tab1.jsp | 415 +++---- .../WEB-INF/jsp/web/api/ft/apiSpec_tab2.jsp | 552 +++++---- .../WEB-INF/jsp/web/api/ft/apiSpec_tab3.jsp | 758 ++++++------ .../WEB-INF/jsp/web/api/ft/apiSpec_tab4.jsp | 693 ++++++----- .../WEB-INF/jsp/web/api/ft/apiSpec_tab5.jsp | 496 ++++---- .../WEB-INF/jsp/web/api/ft/apiSpec_tab6.jsp | 195 ---- .../WEB-INF/jsp/web/api/ft/apiSpec_tab7.jsp | 195 ---- .../WEB-INF/jsp/web/api/ft/apiSpec_tab8.jsp | 195 ---- .../publish/js/highlight/styles/arta.css | 139 ++- 23 files changed, 3637 insertions(+), 3351 deletions(-) create mode 100644 .claude/etc1.png create mode 100644 .claude/etc2.png create mode 100644 src/main/webapp/WEB-INF/jsp/web/api/apiFtSpec.jsp delete mode 100644 src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab5.jsp delete mode 100644 src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab6.jsp delete mode 100644 src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab7.jsp delete mode 100644 src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab8.jsp diff --git a/.claude/etc1.png b/.claude/etc1.png new file mode 100644 index 0000000000000000000000000000000000000000..37a0c0116075ac3cca5e641f4ecab0e706a9e412 GIT binary patch literal 74672 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

%@^EaxaadB6=W4B{BC&@H^YLA+b3tnnR}U?i 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

KW1lY{R{iR-Ub*ma=_o2@Ca8fgSfxj} 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

    -
  • -
  • -
  • -
  • -
  • -
  • -
  • +
  • +
  • +
  • +
  • +
  • +
  • +
-
+
-
+
-
+
-
+
-
+
-
+
-
+
- - - -
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/apiFtSpec.jsp b/src/main/webapp/WEB-INF/jsp/web/api/apiFtSpec.jsp new file mode 100644 index 00000000..b7b54720 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/api/apiFtSpec.jsp @@ -0,0 +1,111 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> + + + + + + + +
+ +
+ + + + +
+
+

REST API 개발 가이드

+
+ + + +
+
+ +
    + +
  • +
  • +
  • +
  • +
  • + +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ +
+
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/apiSpec.jsp b/src/main/webapp/WEB-INF/jsp/web/api/apiSpec.jsp index 1de0cb27..578163c3 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/apiSpec.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/apiSpec.jsp @@ -91,77 +91,6 @@ $(document).ready(function(){ -
-
- -
    - -
  • -
  • -
  • -
  • - -
  • -
  • -
  • - -
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
-
- - - -
-
-
    -
  • -
  • -
  • -
  • -
  • -
-
-
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab1.jsp b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab1.jsp index 3c9fde23..6ac17c3d 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab1.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab1.jsp @@ -94,9 +94,9 @@ { - "mberId": "문자온", + "mberId": "홍길동", - "accessKey": "XXXXXXXXXXXXXXXXXXXXbaa01d8d91", + "accessKey": "XXXXXXXXXXXXXX414050694b953", "test_yn": "" } @@ -225,9 +225,9 @@

 {
 
-	"resultCode": "4010",
+	"resultCode": "2099",
 	
-	"data": "인증 정보가 올바르지 않습니다.(mberId/accessKey)"
+	"data": "기타 시스템 오류"
 	
 }
 				
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab2.jsp b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab2.jsp index 5aa101f7..bb219d70 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab2.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab2.jsp @@ -3,10 +3,9 @@
    -
  • - API를 통해서 템플릿 목록을 조회할 수 111있습니다.
  • -
  • - API를 통해서 템플릿 목록을 조회할 수 111있습니다.
  • -
  • - API를 통해서 템플릿 목록을 조회할 수 111있습니다.
  • -
  • - API를 통해서 템플릿 목록을 조회할 수 111있습니다.
  • +
  • - 등록된 알림톡 템플릿 목록을 조회할 수 있습니다.
  • +
  • - SenderKey별로 승인된 템플릿만 조회됩니다.
  • +
  • - 템플릿 상태(등록완료, 승인대기 등)를 확인할 수 있습니다.
@@ -101,11 +100,11 @@ { - "mberId": "dudgusw", + "mberId": "홍길동", - "accessKey": "3429312e6a2c732188d4cc7d15d8a1baa01d8d91", + "accessKey": "XXXXXXXXXXXXXX414050694b953", - "senderKey": "669143473b1af459628b8bdf2f48da090c8895de", + "senderKey": "XXXXXXXXXXXXXX669143473b1af", "test_yn": "" } diff --git a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab3.jsp b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab3.jsp index c9570ab3..e1121460 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab3.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab3.jsp @@ -1,331 +1,687 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 문자온 사이트 및 API를 통해 전송된 문자 발송내역을 조회할 수 있습니다.
  • -
  • - 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.
  • -
  • - 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.
  • -
+<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
전송결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
senderKey발신 프로필 KeyStringO
templateCode템플릿 코드StringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"홍길동"

-

,"accessKey":"414050694b953XXXXXXXXXXXXXX"

-

,"senderKey":"669143473b1af459628b8bdXXXXXXXXXXXXXX"

-

,"templateCode":"bizp_202503141052XXXXXXXXXXXXXX"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    +
  • - 문자온 사이트 및 API를 통해 전송된 문자 발송내역을 조회할 수 있습니다.
  • +
  • - 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.
  • +
  • - 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.
  • +
- -
전송결과 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data템플릿 정보 리스트Array
[data].templateCode템플릿 코드String
[data].templateName템플릿 이름String
[data].templateMessageType템플릿 메시지 유형 (BA:기본형(default), EX:부가정보형, AD:광고추가형, MI:복합형)String
[data].templateEmphasizeType템플릿 강조 유형 (NONE: 선택안함, TEXT: 강조표기형, IMAGE: 이미지형, ITEM_LIST: 아이템리스트형)String
[data].templateContent템플릿 내용String
[data].templateExtra부가정보String
[data].templateAd광고성 메시지String
[data].templateImageName템플릿 이미지 파일명String
[data].templateImageUrl템플릿 이미지 링크String
[data].templateTitle템플릿 내용 중 강조 표기할 핵심 정보String
[data].templateSubtitle강조 표기 보조 문구String
[data].templateHeader헤더String
[data].categoryCode템플릿 카테고리 코드String
[data].securityFlag보안 템플릿 여부 (true:설정)Boolean
[data].inspectionStatus검수 상태 (REG: 등록, REQ: 검수요청, REJ: 반려, APR: 승인)String
[data].createdAt생성일String
[data].modifiedAt수정일String
[data].status템플릿 상태(D:중지, A:정상, R:대기(발송전))String
[data].block템플릿 차단 여부 (true:차단, false: 해제)Boolean
[data].dormant템플릿 휴면 여부 (true:휴면, false: 해제)Boolean
[data].templateItemHighlight아이템 하이라이트Object
[data].templateItemHighlight.title타이틀String
[data].templateItemHighlight.description상세 설명String
[data].templateItemHighlight.imageUrl썸네일 이미지 주소String
[data].templateItem아이템 정보Object
[data].templateItem.list[]아이템 리스트Array
[data].templateItem.list[].title타이틀String
[data].templateItem.list[].description디스크립션String
[data].templateItem.summary아이템 요약 정보Object
[data].templateItem.summary.title타이틀String
[data].templateItem.summary.description디스크립션String
[data].buttons[]버튼 정보Array
[data].buttons[].name버튼명String
[data].buttons[].linkType버튼 링크타입 (DS:배송조회, WL:웹링크, AL:앱링크, BK:봇키워드, MD: 메시지전달, AC: 채널추가, BC: 상담톡전환, BT: 봇전환, P1: 이미지 보안전송 플러그인, P2: 개인정보이용 플러그인, P3: 원클릭 결제 플러그인)String
[data].buttons[].linkAndAndroid 앱 링크 주소String
[data].buttons[].linkIosIOS 앱 링크 주소String
[data].buttons[].linkMo모바일 웹 링크 주소String
[data].buttons[].linkPcPC 웹 링크 주소String
[data].buttons[].pluginId플러그인 IDString
[data].quickReplies[]바로연결 정보Array
[data].quickReplies[].name바로연결명String
[data].quickReplies[].linkType바로연결 링크타입 (WL:웹링크, AL:앱링크, BK:봇키워드, MD: 메시지전달, BC: 상담톡전환, BT: 봇전환)String
[data].quickReplies[].linkAndAndroid 앱 링크 주소String
[data].quickReplies[].linkIosIOS 앱 링크 주소String
[data].quickReplies[].linkMo모바일 웹 링크 주소String
[data].quickReplies[].linkPcPC 웹 링크 주소String
[data].comments[]댓글 목록Array
[data].comments[].content댓글 본문String
[data].comments[].createdAt댓글 생성일String
[data].comments[].status댓글 상태 (REQ:등록, INQ:문의, APR:승인, REJ:반려, REP:답변)String
[data].comments[].userName댓글 작성자String
[data].comments[].attachment첨부파일Array
[data].comments[].attachment[]첨부파일Array
[data].comments[].attachment[].originalFileName업로드한 파일 이름String
[data].comments[].attachment[].filePath파일 다운로드 경로String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data":[

-

-
-

"templateCode": "bizp_20250314105XXXXXXXXXXXXXXX"

-

,"templateName": "템플릿 명"

-

,"templateMessageType": "BA"

-

,"templateEmphasizeType": "TEXT"

-

,"templateContent": "템플릿 내용 예시"

-

,"templateExtra": "부가정보"

-

,"templateAd": "광고성 문구"

-

,"templateImageName": "template.jpg"

-

,"templateImageUrl": "https://cdn.example.com/image.jpg"

-

,"templateTitle": "강조 제목"

-

,"templateSubtitle": "보조 문구"

-

,"templateHeader": "템플릿 헤더"

-

,"categoryCode": "005001"

-

,"securityFlag": true

-

,"inspectionStatus": "REG"

-

,"createdAt": "2025-06-30 10:30:00"

-

,"modifiedAt": "2025-07-01 11:00:00"

-

,"status": "A"

-

,"block": false

-

,"dormant": false

- - -

,"templateItemHighlight": {

-
-

"title": "하이라이트 제목"

-

,"description": "하이라이트 설명"

-

,"imageUrl": "https://cdn.example.com/thumb.jpg"

-
-

}

- - -

,"templateItem": {

-
-

"list": [

-
-

-

"title": "아이템 제목"

-

,"description": "아이템 설명"

-

-
-

],

-

"summary": {

-
-

"title": "요약 제목"

-

,"description": "요약 설명"

-
-

}

-
-

}

- - -

,"buttons": [

-
-

-

"name": "버튼명"

-

,"linkType": "WL"

-

,"linkAnd": "https://aos.example.com"

-

,"linkIos": "https://ios.example.com"

-

,"linkMo": "https://m.example.com"

-

,"linkPc": "https://www.example.com"

-

,"pluginId": "plugin123"

-

-
-

]

- - -

,"quickReplies": [

-
-

-

"name": "빠른응답"

-

,"linkType": "WL"

-

,"linkAnd": "https://aos.quick.com"

-

,"linkIos": "https://ios.quick.com"

-

,"linkMo": "https://m.quick.com"

-

,"linkPc": "https://www.quick.com"

-

-
-

]

- - -

,"comments": [

-
-

-

"content": "댓글 예시입니다."

-

,"createdAt": "2025-07-01 10:00:00"

-

,"status": "REQ"

-

,"userName": "관리자"

-

,"attachment": [

-
-

-

"originalFileName": "example.pdf"

-

,"filePath": "/download/example.pdf"

-

-
-

]

-

-
-

]

-
-

-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"4099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
+
+ +
Request
+
+
+

Request

+ + + + + + + + + + + + + + + + + + + + + + +
API Request Http Method, 프로토콜, HOST, Service Port + 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
전송결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
senderKey발신 프로필 KeyStringO
templateCode템플릿 코드StringO
+
+

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

+
+
+
+
[Example]
+
+

+
+

+ "mberId":"홍길동" +

+

+ ,"accessKey":"XXXXXXXXXXXXXX414050694b953" +

+

+ ,"senderKey":"XXXXXXXXXXXXXX669143473b1af" +

+

+ ,"templateCode":"bizp_202503141052XXXXXXXXXXXXXX" +

+
+

+
+
+ + +
Response
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
전송결과 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data템플릿 정보 리스트Array
[data].templateCode템플릿 코드String
[data].templateName템플릿 이름String
[data].templateMessageType템플릿 메시지 유형
(BA:기본형(default), EX:부가정보형, AD:광고추가형, MI:복합형)
String
[data].templateEmphasizeType템플릿 강조 유형
(NONE: 선택안함, TEXT: 강조표기형, IMAGE: 이미지형, + ITEM_LIST: 아이템리스트형)
String
[data].templateContent템플릿 내용String
[data].templateExtra부가정보String
[data].templateAd광고성 메시지String
[data].templateImageName템플릿 이미지 파일명String
[data].templateImageUrl템플릿 이미지 링크String
[data].templateTitle템플릿 내용 중 강조 표기할 핵심 정보String
[data].templateSubtitle강조 표기 보조 문구String
[data].templateHeader헤더String
[data].categoryCode템플릿 카테고리 코드String
[data].securityFlag보안 템플릿 여부 (true:설정)Boolean
[data].inspectionStatus검수 상태 (REG: 등록, REQ: 검수요청, REJ: 반려, APR: 승인)String
[data].createdAt생성일String
[data].modifiedAt수정일String
[data].status템플릿 상태(D:중지, A:정상, R:대기(발송전))String
[data].block템플릿 차단 여부 (true:차단, false: 해제)Boolean
[data].dormant템플릿 휴면 여부 (true:휴면, false: 해제)Boolean
[data].templateItemHighlight아이템 하이라이트Object
[data].templateItemHighlight.title타이틀String
[data].templateItemHighlight.description상세 설명String
[data].templateItemHighlight.imageUrl썸네일 이미지 주소String
[data].templateItem아이템 정보Object
[data].templateItem.list[]아이템 리스트Array
[data].templateItem.list[].title타이틀String
[data].templateItem.list[].description디스크립션String
[data].templateItem.summary아이템 요약 정보Object
[data].templateItem.summary.title타이틀String
[data].templateItem.summary.description디스크립션String
[data].buttons[]버튼 정보Array
[data].buttons[].name버튼명String
[data].buttons[].linkType버튼 링크타입 (DS:배송조회, WL:웹링크, AL:앱링크, BK:봇키워드, MD: 메시지전달, AC: + 채널추가, BC: 상담톡전환, BT: 봇전환, P1: 이미지 보안전송 플러그인, P2: 개인정보이용 플러그인, P3: + 원클릭 결제 플러그인)String
[data].buttons[].linkAndAndroid 앱 링크 주소String
[data].buttons[].linkIosIOS 앱 링크 주소String
[data].buttons[].linkMo모바일 웹 링크 주소String
[data].buttons[].linkPcPC 웹 링크 주소String
[data].buttons[].pluginId플러그인 IDString
[data].quickReplies[]바로연결 정보Array
[data].quickReplies[].name바로연결명String
[data].quickReplies[].linkType바로연결 링크타입 (WL:웹링크, AL:앱링크, BK:봇키워드, MD: 메시지전달, BC: 상담톡전환, + BT: 봇전환)String
[data].quickReplies[].linkAndAndroid 앱 링크 주소String
[data].quickReplies[].linkIosIOS 앱 링크 주소String
[data].quickReplies[].linkMo모바일 웹 링크 주소String
[data].quickReplies[].linkPcPC 웹 링크 주소String
[data].comments[]댓글 목록Array
[data].comments[].content댓글 본문String
[data].comments[].createdAt댓글 생성일String
[data].comments[].status댓글 상태 (REQ:등록, INQ:문의, APR:승인, REJ:반려, REP:답변)String
[data].comments[].userName댓글 작성자String
[data].comments[].attachment첨부파일Array
[data].comments[].attachment[]첨부파일Array
[data].comments[].attachment[].originalFileName업로드한 파일 이름String
[data].comments[].attachment[].filePath파일 다운로드 경로String
+
+

※ JSON 객체로 응답합니다.

+
+
+
+
+ [Example]O 성공 + 예시 +
+
+

+
+

+ "resultCode":"0" +

+

+ ,"data":[ +

+

+
+

+ "templateCode": "bizp_20250314105XXXXXXXXXXXXXXX" +

+

+ ,"templateName": "템플릿 명" +

+

+ ,"templateMessageType": "BA" +

+

+ ,"templateEmphasizeType": "TEXT" +

+

+ ,"templateContent": "템플릿 내용 예시" +

+

+ ,"templateExtra": "부가정보" +

+

+ ,"templateAd": "광고성 문구" +

+

+ ,"templateImageName": "template.jpg" +

+

+ ,"templateImageUrl": + "https://cdn.example.com/image.jpg" +

+

+ ,"templateTitle": "강조 제목" +

+

+ ,"templateSubtitle": "보조 문구" +

+

+ ,"templateHeader": "템플릿 헤더" +

+

+ ,"categoryCode": "005001" +

+

+ ,"securityFlag": true +

+

+ ,"inspectionStatus": "REG" +

+

+ ,"createdAt": "2025-06-30 10:30:00" +

+

+ ,"modifiedAt": "2025-07-01 11:00:00" +

+

+ ,"status": "A" +

+

+ ,"block": false +

+

+ ,"dormant": false +

+ + +

+ ,"templateItemHighlight": { +

+
+

+ "title": "하이라이트 제목" +

+

+ ,"description": "하이라이트 설명" +

+

+ ,"imageUrl": "https://cdn.example.com/thumb.jpg" +

+
+

}

+ + +

+ ,"templateItem": { +

+
+

+ "list": [ +

+
+

+

+ "title": "아이템 제목" +

+

+ ,"description": "아이템 설명" +

+

+
+

],

+

+ "summary": { +

+
+

+ "title": "요약 제목" +

+

+ ,"description": "요약 설명" +

+
+

}

+
+

}

+ + +

+ ,"buttons": [ +

+
+

+

+ "name": "버튼명" +

+

+ ,"linkType": "WL" +

+

+ ,"linkAnd": "https://aos.example.com" +

+

+ ,"linkIos": "https://ios.example.com" +

+

+ ,"linkMo": "https://m.example.com" +

+

+ ,"linkPc": "https://www.example.com" +

+

+ ,"pluginId": "plugin123" +

+

+
+

]

+ + +

+ ,"quickReplies": [ +

+
+

+

+ "name": "빠른응답" +

+

+ ,"linkType": "WL" +

+

+ ,"linkAnd": "https://aos.quick.com" +

+

+ ,"linkIos": "https://ios.quick.com" +

+

+ ,"linkMo": "https://m.quick.com" +

+

+ ,"linkPc": "https://www.quick.com" +

+

+
+

]

+ + +

+ ,"comments": [ +

+
+

+

+ "content": "댓글 예시입니다." +

+

+ ,"createdAt": "2025-07-01 10:00:00" +

+

+ ,"status": "REQ" +

+

+ ,"userName": "관리자" +

+

+ ,"attachment": [ +

+
+

+

+ "originalFileName": "example.pdf" +

+

+ ,"filePath": "/download/example.pdf" +

+

+
+

]

+

+
+

]

+
+

+

+
+

+
+
+
+
+ [Example]X 실패 예시 +
+
+

+
+

+ "resultCode":"4099" +

+

+ ,"data":"기타 시스템 오류" +

+
+

+
+
+ +
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab4.jsp b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab4.jsp index aa127b65..79c59812 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab4.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab4.jsp @@ -85,12 +85,6 @@ String O - - subMsgSendYn - 대체문자 발송 여부 (Y: 발송, N: 미발송) - String - X - callFrom 발신자 번호 @@ -115,6 +109,12 @@ String O + + subMsgSendYn + 대체문자 발송 여부 (Y: 발송, N: 미발송) + String + X + subMsgTxt_[i] 대체문자 내용 @@ -142,35 +142,35 @@ { - "mberId": "dudgusw", + "mberId": "홍길동", - "accessKey": "3429312e6a2c732188d4cc7d15d8a1baa01d8d91", + "accessKey": "XXXXXXXXXXXXXX414050694b953", - "senderKey": "669143473b1af459628b8bdf2f48da090c8895de", + "senderKey": "XXXXXXXXXXXXXX669143473b1af", - "templateCode": "bizp_2025031410525347794704159", - - "subMsgSendYn": "Y", + "templateCode": "bizp_2025031410525XXXXXXXXXXXXX", "callFrom": "010-9341-4986", - "callTo_1": "01083584250", + "callTo_1": "01000000000", "callTo_2": "01011111111", - "templateTitle_1": "테스트 이호영2222", + "templateTitle_1": "타이틀 테스트2222", - "templateTitle_2": "테스트 이호영2111", + "templateTitle_2": "타이틀 테스트2111", - "templateContent_1": "테스트 이호영\\n타이틀 버튼 치환 테스트입니다.", + "templateContent_1": "테스트 홍길동\\n템플릿 내용", - "templateContent_2": "테스트 이호영2\\n타이틀 버튼 치환 테스트입니다.", + "templateContent_2": "테스트 홍길동2\\n템플릿 내용", + + "subMsgSendYn": "Y", "subMsgTxt_1": "대체문자 발송", "subMsgTxt_2": "대체문자 발송2", - "test_yn": "YS" + "test_yn": "" } @@ -275,7 +275,7 @@ "msgType": "AT", - "test_yn": "YS" + "test_yn": "" }, diff --git a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab5.jsp b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab5.jsp deleted file mode 100644 index e31593b7..00000000 --- a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab5.jsp +++ /dev/null @@ -1,195 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 보11유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS)별로 각각 확인할 수 있습니다.
  • -
  • - 위 문자유형별 발송 가능건수는 개인별로 적용된 단가를 기준으로 산출되며, "첫결제 이벤트"는 적용되지 않습니다.
  • -
- -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"String"

-

,"accessKey":"String"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object
[data].longPrice장문 단가String
[data].longSendPsbltEa장문 발송 가능 건수String
[data].mberMoney현재 보유 금액String
[data].message문자String
[data].picturePrice그림문자 단가String
[data].pictureSendPsbltEa그림문자 발송 가능 건수String
[data].shortPrice단문 단가String
[data].shortSendPsbltEa단문 발송 가능 건수String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data"

-
-

"longPrice":"50"

-

,"longSendPsbltEa":"19651"

-

,"mberMoney":"982586.7"

-

,"message":null

-

,"picturePrice":"90"

-

,"pictureSendPsbltEa":"10917"

-

,"shortPrice":"18"

-

,"shortSendPsbltEa":"54588"

-
-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"5099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab6.jsp b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab6.jsp index 24611372..4b47c98b 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab6.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab6.jsp @@ -1,365 +1,433 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 문자온 사이트 및 API를 통해 전송된 발송내역을 조회할 수 있습니다.
  • -
  • - 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.
  • -
  • - 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.
  • -
+<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
Endpoint/api/inqry/hstry
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
전송결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
page페이지 번호StringX
pageSize페이지당 출력 개수StringX
startDate시작 일자StringX
endDate마감 일자StringX
test_yn테스트 데이터 여부StringX
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"홍길동"

-

,"accessKey":"XXXXXXXXXXXXXX414050694b953"

-

,"page":""

-

,"pageSize":""

-

,"startDate":""

-

,"endDate":""

-

,"test_yn":""

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
전송결과 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object
[data].message문자String
[data].next_yn다음 페이지 여부String
[data].objectList결과값 목록Object List
[data].msgGroupId메시지 그룹 IDString
[data].msgId메시지 IDString
[data].msgTypeName문자 구분명(단문, 장문, 그림)String
[data].msgType메시지 타입(4 : 단문, 6 : 장문)String
[data].callFrom발신자 번호String
[data].callTo수신자 번호String
[data].msgGroupCnt문자 발송 건수String
[data].sCnt성공 건수String
[data].fCnt실패 건수String
[data].wCnt대기 건수String
[data].msgResult발송 결과(성공 : S, 실패 : F)String
[data].smsTxt문자 내용String
[data].subject제목String
[data].reqdate발송 일자String
[data].curState전송 처리 결과값String
[data].userId사용자 IDString
[data].regdate등록 일자String
[data].reserveCYn예약 취소 여부String
[data].ttlCnt전체 요청 수String
[data].remainMsgCnt남은 문자 건수String
[data].totMsgCnt전체 문자 개수String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data":[

-

-
-

"resultCode":"0"

-

,"message": null

-

,"next_yn":"n"

-

,"msgGroupId":"MSGGID_0000000000000"

-

,"objectList":[

-

-
-

"msgTypeName":"단문(SMS)"

-

,"msgType":"4"

-

,"callFrom":"01011112222"

-

,"callTo":"01011112223"

-

,"msgGroupCnt":"2"

-

,"msgGroupId":"MSGGID_0000000013340"

-

,"msgId":"MSGID_0000000000001"

-

,"scnt":"2"

-

,"fcnt":"0"

-

,"wcnt":"0"

-

,"msgResult":"S"

-

,"smsTxt":"문자 내용 단문 예제"

-

,"subject":null

-

,"reqdate":"2023-06-13 17:48:07"

-

,"curState":"3"

-

,"userId":"testuser"

-

,"regdate":"2023-06-13 17:48:07"

-

,"reserveCYn":"N"

-

,"ttlCnt":"1"

-

,"remainMsgCnt":"40"

-

,"totMsgCnt":"70"

-
-

-

,{

-
-

"msgTypeName":"장문(LMS)"

-

,"msgType":"6"

-

,"callFrom":"01011112222"

-

,"callTo":"01011112223"

-

,"msgGroupCnt":"1"

-

,"msgGroupId":"MSGGID_0000000013341"

-

,"msgId":"MSGID_0000000000002"

-

,"scnt":"1"

-

,"fcnt":"0"

-

,"wcnt":"0"

-

,"msgResult":"S"

-

,"smsTxt":"문자 내용 장문 예제"

-

,subject":null

-

,reqdate":"2023-06-02 11:46:50"

-

,"curState":"3"

-

,"userId":"testuser"

-

,"regdate":"2023-06-02 11:46:49"

-

,"reserveCYn":"N"

-

,"ttlCnt":"1"

-

,"remainMsgCnt":"40"

-

,"totMsgCnt":"70"

-

-
-

-
-

-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"3099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
+
    +
  • - 문자온 사이트 및 API를 통해 전송된 발송내역을 조회할 수 있습니다.
  • +
  • - 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.
  • +
  • - 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.
  • +
+ +
+ +
Request
+
+
+

Request

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTPS/1.1
HOSTapi.munjaon.co.kr
Service Port443
Endpoint/api/inqry/hstry
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
전송결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
page페이지 번호(미입력 시 1)StringX
pageSize페이지당 출력 개수(미입력 시 기본값 적용)StringX
startDate시작 일자(yyyyMMdd)StringX
endDate마감 일자(yyyyMMdd)StringX
test_yn테스트 데이터 여부StringX
+
+

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

+

※ Content-Type: application/json

+
+
+ +
+
[Example]
+
+
+				
+{
+
+	"mberId": "홍길동",
+	
+	"accessKey": "XXXXXXXXXXXXXX414050694b953",
+	
+	"page": "",
+	
+	"pageSize": "",
+	
+	"startDate": "",
+	
+	"endDate": "",
+	
+	"test_yn": ""
+}
+				
+			
+
+
+ + + +
Response
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
전송결과 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object | String
[data].message메시지(필요 시)String
[data].next_yn다음 페이지 여부(Y/N)String
[data].objectList결과값 목록Array<Object>
[data].objectList[i].msgGroupId메시지 그룹 IDString
[data].objectList[i].msgId메시지 IDString
[data].objectList[i].msgTypeName문자 구분명(단문, 장문, 그림)String
[data].objectList[i].msgType메시지 타입(4: 단문, 5: 장문, 6: 그림)String | Number
[data].objectList[i].callFrom발신자 번호String
[data].objectList[i].callTo수신자 번호String
[data].objectList[i].msgGroupCnt발송 건수String | Number
[data].objectList[i].scnt성공 건수String | Number
[data].objectList[i].fcnt실패 건수String | Number
[data].objectList[i].wcnt대기 건수String | Number
[data].objectList[i].msgResult발송 결과(성공: S, 실패: F)String
[data].objectList[i].smsTxt문자 내용String
[data].objectList[i].subject제목String | null
[data].objectList[i].reqdate발송 일자(YYYY-MM-DD HH:mm:ss)String
[data].objectList[i].curState전송 처리 결과값String | Number
[data].objectList[i].userId사용자 IDString
[data].objectList[i].regdate등록 일자(YYYY-MM-DD HH:mm:ss)String
[data].objectList[i].reserveCYn예약 취소 여부(Y/N)String
[data].ttlCnt전체 요청 수String | Number
[data].remainMsgCnt남은 문자 건수String | Number
[data].totMsgCnt전체 문자 개수String | Number
+
+

※ JSON 객체로 응답합니다.

+
+
+ +
+
[Example]O 성공 예시
+
+
+				
+{
+	"resultCode": "0",
+	
+	"data": {
+	
+		"resultCode": "0",
+		
+		"message": null,
+		
+		"next_yn": "n",
+		
+		"msgGroupId": "MSGGID_0000000000000",
+		
+		"objectList": [
+		
+			{
+			
+				"msgTypeName": "단문(SMS)",
+				
+				"msgType": "4",
+				
+				"callFrom": "01011112222",
+				
+				"callTo": "01011112223",
+				
+				"msgGroupCnt": "2",
+				
+				"msgGroupId": "MSGGID_0000000013340",
+				
+				"msgId": "MSGID_0000000000001",
+				
+				"scnt": "2",
+				
+				"fcnt": "0",
+				
+				"wcnt": "0",
+				
+				"msgResult": "S",
+				
+				"smsTxt": "문자 내용 단문 예제",
+				
+				"subject": null,
+				
+				"reqdate": "2023-06-13 17:48:07",
+				
+				"curState": "3",
+				
+				"userId": "testuser",
+				
+				"regdate": "2023-06-13 17:48:07",
+				
+				"reserveCYn": "N",
+				
+				"ttlCnt": "1",
+				
+				"remainMsgCnt": "40",
+				
+				"totMsgCnt": "70"
+				
+			},
+			
+			{
+			
+				"msgTypeName": "장문(LMS)",
+				
+				"msgType": "5",
+				
+				"callFrom": "01011112222",
+				
+				"callTo": "01011112223",
+				
+				"msgGroupCnt": "1",
+				
+				"msgGroupId": "MSGGID_0000000013341",
+				
+				"msgId": "MSGID_0000000000002",
+				
+				"scnt": "1",
+				
+				"fcnt": "0",
+				
+				"wcnt": "0",
+				
+				"msgResult": "S",
+				
+				"smsTxt": "문자 내용 장문 예제",
+				
+				"subject": null,
+				
+				"reqdate": "2023-06-02 11:46:50",
+				
+				"curState": "3",
+				
+				"userId": "testuser",
+				
+				"regdate": "2023-06-02 11:46:49",
+				
+				"reserveCYn": "N",
+				
+				"ttlCnt": "1",
+				
+				"remainMsgCnt": "40",
+				
+				"totMsgCnt": "70"
+				
+			}
+			
+		]
+		
+	}
+}
+				
+			
+
+
+ +
+
[Example]X 실패 예시
+
+
+				
+{
+
+	"resultCode": "3099",
+	
+	"data": "기타 시스템 오류"
+}
+				
+			
+
+
+ +
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab7.jsp b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab7.jsp index df406dc3..b868eaab 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab7.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab7.jsp @@ -1,195 +1,342 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS)별로 각각 확인할 수 있습니다.
  • -
  • - 위 문자유형별 발송 가능건수는 개인별로 적용된 단가를 기준으로 산출되며, "첫결제 이벤트"는 적용되지 않습니다.
  • -
+<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"String"

-

,"accessKey":"String"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object
[data].longPrice장문 단가String
[data].longSendPsbltEa장문 발송 가능 건수String
[data].mberMoney현재 보유 금액String
[data].message문자String
[data].picturePrice그림문자 단가String
[data].pictureSendPsbltEa그림문자 발송 가능 건수String
[data].shortPrice단문 단가String
[data].shortSendPsbltEa단문 발송 가능 건수String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data"

-
-

"longPrice":"50"

-

,"longSendPsbltEa":"19651"

-

,"mberMoney":"982586.7"

-

,"message":null

-

,"picturePrice":"90"

-

,"pictureSendPsbltEa":"10917"

-

,"shortPrice":"18"

-

,"shortSendPsbltEa":"54588"

-
-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"5099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
+ +
    +
  • - API를 통해서 메시지 그룹 ID 기준의 상세 이력(개별 건) 목록을 조회할 수 있습니다.
  • +
+
+ +
Request
+
+
+

Request

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블
Http MethodPOST
프로토콜HTTPS/1.1
HOSTapi.munjaon.co.kr
Service Port443
Endpoint/api/inqry/hstryDetail
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
히스토리 상세 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
msgGroupId메시지 그룹 IDStringO
+
+

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

+

※ Content-Type: application/json

+
+
+ +
+
[Example]
+
+
+					
+{
+
+	"mberId": "홍길동",
+	
+	"accessKey": "XXXXXXXXXXXXXX414050694b953",
+	
+	"msgGroupId": "MSGGID_XXXXXXX0000063"
+}
+					
+				
+
+
+ + + +
Response
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
히스토리 상세 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 이외는 실패)String
data조회 결과 객체Object
[data].resultCode내부 처리 결과(0: 성공)Number | String
[data].objectList개별 메시지 상세 목록Array<Object>
[data].objectList[i].msgGroupId메시지 그룹 IDString
[data].objectList[i].msgId개별 메시지 IDString
[data].objectList[i].totMsgCnt총 발송 건수(그룹 기준)String
[data].objectList[i].msgType메시지 타입 코드(예: 8=AT)Number
[data].objectList[i].msgTypeName메시지 타입명String
[data].objectList[i].msgResult결과(F: 실패, S: 성공 등)String
[data].objectList[i].msgGroupCnt발송 건수Number
[data].objectList[i].smsTxt메시지 내용String
[data].objectList[i].callFrom발신 번호String
[data].objectList[i].callTo수신 번호String
[data].objectList[i].curState현재 상태 코드Number
[data].objectList[i].remainMsgCnt잔여 처리 건수Number
[data].objectList[i].reqdate요청 일시(YYYY-MM-DD HH:mm:ss)String
[data].objectList[i].regdate등록 일시(YYYY-MM-DD HH:mm:ss)String
[data].objectList[i].reserveCYn예약 취소 여부(Y/N)String
localDateTime서버 처리 일시(ISO-8601)String
+
+

※ JSON 객체로 응답합니다.

+
+
+ +
+
[Example]O 성공 예시
+
+
+					
+{
+	"resultCode": "0",
+	
+	"data": {
+	
+		"resultCode": 0,
+		
+		"objectList": [
+		
+			{
+			
+				"msgGroupId": "MSGGID_XXXXXXX0000063",
+				
+				"msgId": "MSGCID_XXXXXXX00001180",
+				
+				"totMsgCnt": "9",
+				
+				"msgType": 8,
+				
+				"msgTypeName": "알림톡(AT)",
+				
+				"msgResult": "F",
+				
+				"msgGroupCnt": 1,
+				
+				"smsTxt": "test",
+				
+				"callFrom": "01093414986",
+				
+				"callTo": "01059941669",
+				
+				"curState": 3,
+				
+				"remainMsgCnt": 0,
+				
+				"reqdate": "2025-09-05 11:45:45",
+				
+				"regdate": "2025-09-05 11:45:45",
+				
+				"reserveCYn": "N"
+				
+			},
+			
+			{
+			
+				"msgGroupId": "MSGGID_XXXXXXX0000063",
+				
+				"msgId": "MSGCID_XXXXXXX000001175",
+				
+				"totMsgCnt": "9",
+				
+				"msgType": 9,
+				
+				"msgTypeName": "친구톡(AT)",
+				
+				"msgResult": "F",
+				
+				"msgGroupCnt": 1,
+				
+				"smsTxt": "test",
+				
+				"callFrom": "01093414986",
+				
+				"callTo": "01098969885",
+				
+				"curState": 3,
+				
+				"remainMsgCnt": 0,
+				
+				"reqdate": "2025-09-05 11:45:45",
+				
+				"regdate": "2025-09-05 11:45:45",
+				
+				"reserveCYn": "N"
+				
+			},
+			
+		]
+		
+	},
+	
+	"localDateTime": "2025-09-16T10:47:20.4014362"
+	
+}
+					
+				
+
+
+ +
+
[Example]X 실패 예시
+
+

+{
+
+	"resultCode": "4099",
+	
+	"data": "기타 시스템 오류"
+	
+}
+				
+
+
+ +
+ diff --git a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab8.jsp b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab8.jsp index df406dc3..98d6d57e 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab8.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/at/apiSpec_tab8.jsp @@ -1,195 +1,303 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS)별로 각각 확인할 수 있습니다.
  • -
  • - 위 문자유형별 발송 가능건수는 개인별로 적용된 단가를 기준으로 산출되며, "첫결제 이벤트"는 적용되지 않습니다.
  • -
+<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"String"

-

,"accessKey":"String"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object
[data].longPrice장문 단가String
[data].longSendPsbltEa장문 발송 가능 건수String
[data].mberMoney현재 보유 금액String
[data].message문자String
[data].picturePrice그림문자 단가String
[data].pictureSendPsbltEa그림문자 발송 가능 건수String
[data].shortPrice단문 단가String
[data].shortSendPsbltEa단문 발송 가능 건수String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data"

-
-

"longPrice":"50"

-

,"longSendPsbltEa":"19651"

-

,"mberMoney":"982586.7"

-

,"message":null

-

,"picturePrice":"90"

-

,"pictureSendPsbltEa":"10917"

-

,"shortPrice":"18"

-

,"shortSendPsbltEa":"54588"

-
-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"5099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
+ +
    +
  • - 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS), 알림톡(AT), 친구톡(FT)별로 각각 확인할 수 있습니다.
  • + +
+ +
+ +
Request
+
+
+

Request

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블
Http MethodPOST
프로토콜HTTPS/1.1
HOSTapi.munjaon.co.kr
Service Port443
Endpoint/api/inqry/price
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
가격/가능건수 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
+
+

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

+

※ Content-Type: application/json

+
+
+ +
+
[Example]
+
+
+					
+{
+
+	"mberId": "홍길동",
+	
+	"accessKey": "XXXXXXXXXXXXXX414050694b953"
+}
+					
+				
+
+
+ + + +
Response
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
가격/가능건수 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 이외는 실패)String
data조회 결과 객체(성공 시 가격/가능건수 정보)Object | String
[data].resultCode내부 처리 결과("0": 성공)String
[data].message메시지(필요 시)String
[data].localDateTime서버 처리 일시(ISO-8601)String
[data].shortPrice단문(SMS) 단가Number
[data].longPrice장문(LMS) 단가Number
[data].picturePrice사진(MMS) 단가Number
[data].kakaoAtPrice카카오 알림톡 단가Number
[data].kakaoFtPrice카카오 친구톡(텍스트) 단가Number
[data].kakaoFtImgPrice카카오 친구톡(이미지) 단가Number
[data].kakaoFtWideImgPrice카카오 친구톡(와이드 이미지) 단가Number
[data].mberMoney회원 보유 금액Number
[data].shortSendPsbltEa단문 발송 가능 건수Number
[data].longSendPsbltEa장문 발송 가능 건수Number
[data].pictureSendPsbltEa사진 발송 가능 건수Number
[data].kakaoAtSendPsbltEa알림톡 발송 가능 건수Number
[data].kakaoFtSendPsbltEa친구톡(텍스트) 발송 가능 건수Number
[data].kakaoFtImgSendPsbltEa친구톡(이미지) 발송 가능 건수Number
[data].kakaoFtWideImgSendPsbltEa친구톡(와이드 이미지) 발송 가능 건수Number
localDateTime서버 처리 일시(ISO-8601)String
+
+

※ JSON 객체로 응답합니다.

+
+
+ +
+
[Example]O 성공 예시
+
+
+					
+{
+	"resultCode": "0",
+	
+	"data": {
+	
+		"resultCode": "0",
+		
+		"message": "",
+		
+		"localDateTime": "2025-09-16T11:06:40.2556646",
+		
+		"shortPrice": 18.0,
+		
+		"longPrice": 50.0,
+		
+		"picturePrice": 90.0,
+		
+		"kakaoAtPrice": 6.9,
+		
+		"kakaoFtPrice": 13.8,
+		
+		"kakaoFtImgPrice": 19.9,
+		
+		"kakaoFtWideImgPrice": 22.9,
+		
+		"mberMoney": 6549661.26,
+		
+		"shortSendPsbltEa": 363870,
+		
+		"longSendPsbltEa": 130993,
+		
+		"pictureSendPsbltEa": 72774,
+		
+		"kakaoAtSendPsbltEa": 949226,
+		
+		"kakaoFtSendPsbltEa": 474613,
+		
+		"kakaoFtImgSendPsbltEa": 329128,
+		
+		"kakaoFtWideImgSendPsbltEa": 286011
+		
+	},
+	
+	"localDateTime": "2025-09-16T11:06:40.2556646"
+	
+}
+					
+				
+
+
+ +
+
[Example]X 실패 예시
+
+

+{
+
+	"resultCode": "3099",
+	
+	"data": "기타 시스템 오류"
+	
+}
+				
+
+
+ +
+ diff --git a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab1.jsp b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab1.jsp index 6a4e1f99..6ac17c3d 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab1.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab1.jsp @@ -7,210 +7,233 @@ -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port - 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
문자발송 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-

※ 문자 텍스트 용량(byte) : 한글 1자당 2byte, 영문/숫자 1자당 1byte

-
-
-
-
[Example]
-
-

-
-

- "mberId":"홍길동" -

-

- ,"accessKey":"XXXXXXXXXXXXXX414050694b953" -

+ +
Request
+
+
+

Request

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블
Http MethodPOST
프로토콜HTTPS/1.1
HOSTapi.munjaon.co.kr
Service Port443
Endpoint/api/kakao/inqry/chnlId
-

-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
문자발송 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부 ("0" 이면 성공, 그 외는 실패)String
data응답 결과 객체 (성공 시 배열, 실패 시 메시지)Array<Object>
data[].userId사용자 IDString
data[].senderKey발신자 키String
data[].phoneNumber수신자 전화번호String
data[].yellowId카카오톡 채널 IDString
data[].firstRegistPnttm최초 등록 시각 (yyyy‑MM‑dd HH:mm:ss)String
data[].firstRegisterId최초 등록자 IDString
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
- [Example]O 성공 - 예시 -
-
-

-
-

- "resultCode":"0" -

-

- ,"data"{ -

-
-

- ,"senderKey":"6691434xxxxxxxxxxxxxxxxxxxxxxxxx" -

-

- ,"phoneNumber":"010xxxxxxxx" -

-

- ,"yellowId":"@ID" -

-

- ,"firstRegistPnttm":"2025-10-05 18:08:58" -

-

- ,"firstRegisterId":"userId" -

-
-

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
채널ID 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
test_yn테스트 데이터 여부 (YS: 성공 테스트, YF: 실패 테스트)StringX
+
+

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

+

※ Content-Type: application/json

-

-
-
-
- [Example]X 실패 예시 -
-
-

-
-

- "resultCode":"401" -

-

- ,"message":"Unauthorized" -

+ +
+
[Example]
+
+
+					
+{
+
+	"mberId": "홍길동",
+	
+	"accessKey": "XXXXXXXXXXXXXX414050694b953",
+	
+	"test_yn": ""
+}
+					
+				
-

+ + + +
Response
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
채널ID 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 이외는 실패)String
data조회 결과 목록(성공 시 배열, 실패 시 오류 메시지)Array | String
[data][i].senderKey발신 프로필 SenderKeyString
[data][i].phoneNumber대표 전화번호String
[data][i].yellowId카카오 채널(옐로아이디)String
[data][i].frstRegistPnttm최초 등록 일시(YYYY-MM-DD HH:mm:ss)String
[data][i].frstRegisterId최초 등록자 IDString
localDateTime서버 처리 일시(ISO-8601)String
+
+

※ JSON 객체로 응답합니다.

+
+
+ +
+
[Example]O 성공 예시
+
+
+					
+{
+	"resultCode": "0",
+	
+	"data": [
+	
+		{
+		
+			"senderKey": "test_sender_key_001",
+			
+			"phoneNumber": "02-1234-0000",
+			
+			"yellowId": "@test_channel_001",
+			
+			"frstRegistPnttm": "2025-09-09 12:44:21",
+			
+			"frstRegisterId": "test_id_one"
+			
+		},
+		
+		{
+		
+			"senderKey": "test_sender_key_002",
+			
+			"phoneNumber": "02-1234-0001",
+			
+			"yellowId": "@test_channel_002",
+			
+			"frstRegistPnttm": "2025-09-09 12:44:21",
+			
+			"frstRegisterId": "test_id_tow"
+			
+		}
+		
+	],
+	
+	"localDateTime": "2025-09-09T12:44:21.624464"
+	
+}
+					
+				
+
+
+ +
+
[Example]X 실패 예시
+
+

+{
+
+	"resultCode": "2099",
+	
+	"data": "기타 시스템 오류"
+	
+}
+				
+
+
+
-
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab2.jsp b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab2.jsp index 67d57e4a..e9f59634 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab2.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab2.jsp @@ -1,232 +1,326 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + + +
    +
  • - API를 통해서 카카오 친구톡(FT)을 발송할 수 있습니다.
  • +
  • - 버튼 타입은 WL(웹링크), AL(앱링크)만 지원합니다.
  • +
  • - 대체문자(subMsgTxt) 발송 여부는 subMsgSendYn으로 제어합니다.
  • +
+
+ +
Request
+
+
+

Request

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블
Http MethodPOST
프로토콜HTTPS/1.1
HOSTapi.munjaon.co.kr
Service Port443
Endpoint/api/kakao/ft/sendMsg
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
친구톡 발송 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
senderKey발신 프로필 SenderKeyStringO
adFlag광고 여부 (Y/N)StringO
subMsgSendYn대체문자 발송 여부 (Y/N)StringX
callFrom발신자 번호StringO
callTo_[i]수신자 번호StringO
templateContent_[i]친구톡 본문StringO
templateImage친구톡 이미지(PNG,JPG)FileX
subMsgTxt_[i]대체문자 내용StringX
button버튼 JSON 문자열(AL:앱링크, WL:웹링크 지원)String(JSON)X
test_yn테스트 데이터 여부 (YS: 성공 테스트, YF: 실패 테스트)StringX
+
+

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

+

※ Content-Type: application/json

+
+
+ +
+
[Example]
+
+
+					
+{
+
+	"mberId": "dudgusw",
+	
+	"accessKey": "3429312e6a2c732188d4cc7d15d8a1baa01d8d91",
+	
+	"senderKey": "e42e34ee013147720711b4add6d181adbe4ce45f",
+	
+	"adFlag": "N",
+	
+	"subMsgSendYn": "Y",
+	
+	"callFrom": "010-9341-4986",
+	
+	"callTo_1": "01083584250",
+	
+	"callTo_2": "01083584251",
+	
+	"templateContent_1": "친구톡 본문 1",
+	
+	"templateContent_2": "친구톡 본문 2",
+	
+	"subMsgTxt_1": "대체문자 발송1",
+	
+	"subMsgTxt_2": "대체문자 발송2",
+	
+	"{ button": [
+		
+		{
+		
+			"name": "주문조회",
 			
-                        
    -
  • - API를 통해서 다른 내용의 문자를 대량으로 전송할 수 있습니다.
  • -
  • - 발신번호는 문자온 사이트를 통해 사전등록 후 이용하실 수 있습니다.(마이페이지-발신번호 관리 메뉴 이용)
  • -
  • - 문자 내용이 "90byte"를 초과하는 경우 장문(LMS)으로 자동 전환됩니다.
  • -
+ "linkType": "WL", + + "linkPc": "PC 링크", + + "linkMo": "모바일 링크" + + }, + + { + + "name": "앱 열기", + + "linkType": "AL", + + "linkIos": "ios링크", + + "linkAnd": "Android 링크" + + } + ]}" +} +
+
+
+
+ -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
문자발송 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
senderKey발신 프로필 KeyStringO
-
-

※ 문자 텍스트 용량(byte) : 한글 1자당 2byte, 영문/숫자 1자당 1byte

-
-
-
-
[Example]
-
-

-
-

"mberId":"홍길동"

-

,"accessKey":"414050694b953XXXXXXXXXXXXXX"

-

,"senderKey":"669143473b1af459628b8bdXXXXXXXXXXXXXX"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
문자발송(대량) API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data템플릿 정보 리스트Array
[data].senderKey발신 프로필 키String
[data].templateCode템플릿 코드String
[data].templateName템플릿 이름String
[data].createdAt생성일시String
[data].modifiedAt수정일시String
[data].serviceStatus템플릿 상태
(REG: 등록, REQ: 검수요청, REJ: 반려, -STP: 차단, RDY: 발송전, ACT: 정상, DMT: 휴면, BLK: -차단)
String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
+ +
Response
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
친구톡 발송 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 이외는 실패)String
data발송 결과 객체Object
[data].resultCode내부 처리 결과("0": 성공)String
[data].msgType메시지 타입(FT: 친구톡)String
[data].msgGroupIdList발송된 메시지 그룹 ID 목록Array<String>
[data].successCnt성공 건수String | Number
[data].failCnt실패 건수String | Number
localDateTime서버 처리 일시(ISO-8601)String
+
+

※ JSON 객체로 응답합니다.

+
+
-
-

-
-

- "resultCode":"0" -

-

- ,"data"{ -

-
-

- ,"senderKey":"669143473b1af459628xxxxxxxxxxxxxxxxxxxxx" -

-

- ,"templateCode":"bizp_20250527112232xxxxxxxxxxxxx" -

-

- ,"templateName":"템플릿 명" -

-

- ,"createdAt":"2025-05-27 11:22:33" -

-

- ,"modifiedAt":"2025-05-27 11:22:33" -

-

- ,"serviceStatus":"REG(등록완료)" -

-
-

-

,{

-
-

- ,"senderKey":"669143473b1af459628xxxxxxxxxxxxxxxxxxxxx" -

-

- ,"templateCode":"bizp_20250527112232xxxxxxxxxxxxx" -

-

- ,"templateName":"템플릿 명2" -

-

- ,"createdAt":"2025-05-27 11:22:33" -

-

- ,"modifiedAt":"2025-05-27 11:22:33" -

-

- ,"serviceStatus":"RDY(대기)" -

-
-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"4099"

-

,"msg":"기타 시스템 오류"

-
-

-
-
- -
+
+
[Example]O 성공 예시
+
+
+					
+{
+	"resultCode": "0",
+	
+	"data": {
+	
+		"resultCode": "0",
+		
+		"msgType": "FT",
+		
+		"msgGroupIdList": [
+		
+			"MSGGID_1758008282543",
+			
+			"MSGGID_1758008282543"
+			
+		],
+		
+		"successCnt": "2",
+		
+		"failCnt": "0"
+		
+	},
+	
+	"localDateTime": "2025-09-16T16:38:02.5436925"
+	
+}
+					
+				
+
+
+ +
+
[Example]X 실패 예시
+
+

+{
+
+	"resultCode": "4420",
+	
+	"data": "버튼 타입은 WL/AL만 지원합니다.(button.linkType)"
+	
+}
+				
+
+
+ +
+ +
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab3.jsp b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab3.jsp index c9570ab3..4b47c98b 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab3.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab3.jsp @@ -1,331 +1,433 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> + +
    +
  • - 문자온 사이트 및 API를 통해 전송된 발송내역을 조회할 수 있습니다.
  • +
  • - 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.
  • +
  • - 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.
  • +
+ +
+ +
Request
+
+
+

Request

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTPS/1.1
HOSTapi.munjaon.co.kr
Service Port443
Endpoint/api/inqry/hstry
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
전송결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
page페이지 번호(미입력 시 1)StringX
pageSize페이지당 출력 개수(미입력 시 기본값 적용)StringX
startDate시작 일자(yyyyMMdd)StringX
endDate마감 일자(yyyyMMdd)StringX
test_yn테스트 데이터 여부StringX
+
+

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

+

※ Content-Type: application/json

+
+
+ +
+
[Example]
+
+
+				
+{
+
+	"mberId": "홍길동",
+	
+	"accessKey": "XXXXXXXXXXXXXX414050694b953",
+	
+	"page": "",
+	
+	"pageSize": "",
+	
+	"startDate": "",
+	
+	"endDate": "",
+	
+	"test_yn": ""
+}
+				
+			
+
+
+ + + +
Response
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
전송결과 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object | String
[data].message메시지(필요 시)String
[data].next_yn다음 페이지 여부(Y/N)String
[data].objectList결과값 목록Array<Object>
[data].objectList[i].msgGroupId메시지 그룹 IDString
[data].objectList[i].msgId메시지 IDString
[data].objectList[i].msgTypeName문자 구분명(단문, 장문, 그림)String
[data].objectList[i].msgType메시지 타입(4: 단문, 5: 장문, 6: 그림)String | Number
[data].objectList[i].callFrom발신자 번호String
[data].objectList[i].callTo수신자 번호String
[data].objectList[i].msgGroupCnt발송 건수String | Number
[data].objectList[i].scnt성공 건수String | Number
[data].objectList[i].fcnt실패 건수String | Number
[data].objectList[i].wcnt대기 건수String | Number
[data].objectList[i].msgResult발송 결과(성공: S, 실패: F)String
[data].objectList[i].smsTxt문자 내용String
[data].objectList[i].subject제목String | null
[data].objectList[i].reqdate발송 일자(YYYY-MM-DD HH:mm:ss)String
[data].objectList[i].curState전송 처리 결과값String | Number
[data].objectList[i].userId사용자 IDString
[data].objectList[i].regdate등록 일자(YYYY-MM-DD HH:mm:ss)String
[data].objectList[i].reserveCYn예약 취소 여부(Y/N)String
[data].ttlCnt전체 요청 수String | Number
[data].remainMsgCnt남은 문자 건수String | Number
[data].totMsgCnt전체 문자 개수String | Number
+
+

※ JSON 객체로 응답합니다.

+
+
+ +
+
[Example]O 성공 예시
+
+
+				
+{
+	"resultCode": "0",
+	
+	"data": {
+	
+		"resultCode": "0",
+		
+		"message": null,
+		
+		"next_yn": "n",
+		
+		"msgGroupId": "MSGGID_0000000000000",
+		
+		"objectList": [
+		
+			{
 			
-			 
    -
  • - 문자온 사이트 및 API를 통해 전송된 문자 발송내역을 조회할 수 있습니다.
  • -
  • - 문자 발송내역은 날짜별로 조회되며, 최근 3개월까지만 조회 가능합니다.
  • -
  • - 발신번호별 문자 발송내역 조회 기능은 제공되지 않습니다.
  • -
+ "msgTypeName": "단문(SMS)", + + "msgType": "4", + + "callFrom": "01011112222", + + "callTo": "01011112223", + + "msgGroupCnt": "2", + + "msgGroupId": "MSGGID_0000000013340", + + "msgId": "MSGID_0000000000001", + + "scnt": "2", + + "fcnt": "0", + + "wcnt": "0", + + "msgResult": "S", + + "smsTxt": "문자 내용 단문 예제", + + "subject": null, + + "reqdate": "2023-06-13 17:48:07", + + "curState": "3", + + "userId": "testuser", + + "regdate": "2023-06-13 17:48:07", + + "reserveCYn": "N", + + "ttlCnt": "1", + + "remainMsgCnt": "40", + + "totMsgCnt": "70" + + }, + + { + + "msgTypeName": "장문(LMS)", + + "msgType": "5", + + "callFrom": "01011112222", + + "callTo": "01011112223", + + "msgGroupCnt": "1", + + "msgGroupId": "MSGGID_0000000013341", + + "msgId": "MSGID_0000000000002", + + "scnt": "1", + + "fcnt": "0", + + "wcnt": "0", + + "msgResult": "S", + + "smsTxt": "문자 내용 장문 예제", + + "subject": null, + + "reqdate": "2023-06-02 11:46:50", + + "curState": "3", + + "userId": "testuser", + + "regdate": "2023-06-02 11:46:49", + + "reserveCYn": "N", + + "ttlCnt": "1", + + "remainMsgCnt": "40", + + "totMsgCnt": "70" + + } + + ] + + } +} +
+
+
+
-
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
전송결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
senderKey발신 프로필 KeyStringO
templateCode템플릿 코드StringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"홍길동"

-

,"accessKey":"414050694b953XXXXXXXXXXXXXX"

-

,"senderKey":"669143473b1af459628b8bdXXXXXXXXXXXXXX"

-

,"templateCode":"bizp_202503141052XXXXXXXXXXXXXX"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+
[Example]X 실패 예시
+
+
+				
+{
 
-                                    
-
전송결과 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data템플릿 정보 리스트Array
[data].templateCode템플릿 코드String
[data].templateName템플릿 이름String
[data].templateMessageType템플릿 메시지 유형 (BA:기본형(default), EX:부가정보형, AD:광고추가형, MI:복합형)String
[data].templateEmphasizeType템플릿 강조 유형 (NONE: 선택안함, TEXT: 강조표기형, IMAGE: 이미지형, ITEM_LIST: 아이템리스트형)String
[data].templateContent템플릿 내용String
[data].templateExtra부가정보String
[data].templateAd광고성 메시지String
[data].templateImageName템플릿 이미지 파일명String
[data].templateImageUrl템플릿 이미지 링크String
[data].templateTitle템플릿 내용 중 강조 표기할 핵심 정보String
[data].templateSubtitle강조 표기 보조 문구String
[data].templateHeader헤더String
[data].categoryCode템플릿 카테고리 코드String
[data].securityFlag보안 템플릿 여부 (true:설정)Boolean
[data].inspectionStatus검수 상태 (REG: 등록, REQ: 검수요청, REJ: 반려, APR: 승인)String
[data].createdAt생성일String
[data].modifiedAt수정일String
[data].status템플릿 상태(D:중지, A:정상, R:대기(발송전))String
[data].block템플릿 차단 여부 (true:차단, false: 해제)Boolean
[data].dormant템플릿 휴면 여부 (true:휴면, false: 해제)Boolean
[data].templateItemHighlight아이템 하이라이트Object
[data].templateItemHighlight.title타이틀String
[data].templateItemHighlight.description상세 설명String
[data].templateItemHighlight.imageUrl썸네일 이미지 주소String
[data].templateItem아이템 정보Object
[data].templateItem.list[]아이템 리스트Array
[data].templateItem.list[].title타이틀String
[data].templateItem.list[].description디스크립션String
[data].templateItem.summary아이템 요약 정보Object
[data].templateItem.summary.title타이틀String
[data].templateItem.summary.description디스크립션String
[data].buttons[]버튼 정보Array
[data].buttons[].name버튼명String
[data].buttons[].linkType버튼 링크타입 (DS:배송조회, WL:웹링크, AL:앱링크, BK:봇키워드, MD: 메시지전달, AC: 채널추가, BC: 상담톡전환, BT: 봇전환, P1: 이미지 보안전송 플러그인, P2: 개인정보이용 플러그인, P3: 원클릭 결제 플러그인)String
[data].buttons[].linkAndAndroid 앱 링크 주소String
[data].buttons[].linkIosIOS 앱 링크 주소String
[data].buttons[].linkMo모바일 웹 링크 주소String
[data].buttons[].linkPcPC 웹 링크 주소String
[data].buttons[].pluginId플러그인 IDString
[data].quickReplies[]바로연결 정보Array
[data].quickReplies[].name바로연결명String
[data].quickReplies[].linkType바로연결 링크타입 (WL:웹링크, AL:앱링크, BK:봇키워드, MD: 메시지전달, BC: 상담톡전환, BT: 봇전환)String
[data].quickReplies[].linkAndAndroid 앱 링크 주소String
[data].quickReplies[].linkIosIOS 앱 링크 주소String
[data].quickReplies[].linkMo모바일 웹 링크 주소String
[data].quickReplies[].linkPcPC 웹 링크 주소String
[data].comments[]댓글 목록Array
[data].comments[].content댓글 본문String
[data].comments[].createdAt댓글 생성일String
[data].comments[].status댓글 상태 (REQ:등록, INQ:문의, APR:승인, REJ:반려, REP:답변)String
[data].comments[].userName댓글 작성자String
[data].comments[].attachment첨부파일Array
[data].comments[].attachment[]첨부파일Array
[data].comments[].attachment[].originalFileName업로드한 파일 이름String
[data].comments[].attachment[].filePath파일 다운로드 경로String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data":[

-

-
-

"templateCode": "bizp_20250314105XXXXXXXXXXXXXXX"

-

,"templateName": "템플릿 명"

-

,"templateMessageType": "BA"

-

,"templateEmphasizeType": "TEXT"

-

,"templateContent": "템플릿 내용 예시"

-

,"templateExtra": "부가정보"

-

,"templateAd": "광고성 문구"

-

,"templateImageName": "template.jpg"

-

,"templateImageUrl": "https://cdn.example.com/image.jpg"

-

,"templateTitle": "강조 제목"

-

,"templateSubtitle": "보조 문구"

-

,"templateHeader": "템플릿 헤더"

-

,"categoryCode": "005001"

-

,"securityFlag": true

-

,"inspectionStatus": "REG"

-

,"createdAt": "2025-06-30 10:30:00"

-

,"modifiedAt": "2025-07-01 11:00:00"

-

,"status": "A"

-

,"block": false

-

,"dormant": false

- - -

,"templateItemHighlight": {

-
-

"title": "하이라이트 제목"

-

,"description": "하이라이트 설명"

-

,"imageUrl": "https://cdn.example.com/thumb.jpg"

-
-

}

- - -

,"templateItem": {

-
-

"list": [

-
-

-

"title": "아이템 제목"

-

,"description": "아이템 설명"

-

-
-

],

-

"summary": {

-
-

"title": "요약 제목"

-

,"description": "요약 설명"

-
-

}

-
-

}

- - -

,"buttons": [

-
-

-

"name": "버튼명"

-

,"linkType": "WL"

-

,"linkAnd": "https://aos.example.com"

-

,"linkIos": "https://ios.example.com"

-

,"linkMo": "https://m.example.com"

-

,"linkPc": "https://www.example.com"

-

,"pluginId": "plugin123"

-

-
-

]

- - -

,"quickReplies": [

-
-

-

"name": "빠른응답"

-

,"linkType": "WL"

-

,"linkAnd": "https://aos.quick.com"

-

,"linkIos": "https://ios.quick.com"

-

,"linkMo": "https://m.quick.com"

-

,"linkPc": "https://www.quick.com"

-

-
-

]

- - -

,"comments": [

-
-

-

"content": "댓글 예시입니다."

-

,"createdAt": "2025-07-01 10:00:00"

-

,"status": "REQ"

-

,"userName": "관리자"

-

,"attachment": [

-
-

-

"originalFileName": "example.pdf"

-

,"filePath": "/download/example.pdf"

-

-
-

]

-

-
-

]

-
-

-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"4099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
+ "resultCode": "3099", + + "data": "기타 시스템 오류" +} + + +
+
+ +
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab4.jsp b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab4.jsp index 44d4a720..b868eaab 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab4.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab4.jsp @@ -1,353 +1,342 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 전송결과 조회의 "msgGroupId"를 사용하여 전송된 문자의 상세결과를 수신번호별로 조회할 수 있습니다.
  • -
  • - 전송결과가 "대기"인 경우에는 최종 결과 확인까지 최대 72시간까지 소요됩니다.
  • -
+<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
상세결과 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
msgGroupId메시지 그룹 IDStringO
page페이지 번호StringX
pageSize페이지당 출력 개수StringX
test_yn테스트 데이터 여부StringX
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"홍길동"

-

,"accessKey":"XXXXXXXXXXXXXX414050694b953"

-

,"msgGroupId":"MSGGID_0000000011452"

-

,"page":""

-

,"pageSize":""

-

,"test_yn":""

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
상세결과 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object
[data].message문자String
[data].next_yn다음 페이지 여부String
[data].objectList결과값 목록Object List
[data].msgGroupId메시지 그룹 IDString
[data].msgId메시지 IDString
[data].msgTypeName문자 구분명(단문, 장문, 그림)String
[data].msgType메시지 타입(4 : 단문, 6 : 장문)String
[data].callFrom발신자 번호String
[data].callTo수신자 번호String
[data].msgGroupCnt문자 발송 건수String
[data].sCnt성공 건수String
[data].fCnt실패 건수String
[data].wCnt대기 건수String
[data].msgResult발송 결과(성공 : S, 실패 : F)String
[data].smsTxt문자 내용String
[data].subject제목String
[data].reqdate발송 일자String
[data].curState전송 처리 결과값String
[data].userId사용자 IDString
[data].regdate등록 일자String
[data].reserveCYn예약 취소 여부String
[data].ttlCnt전체 요청 수String
[data].remainMsgCnt남은 문자 건수String
[data].totMsgCnt전체 문자 개수String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data":[

-

-
-

"resultCode":"0"

-

,"message": null

-

,"next_yn":"n"

-

,"msgGroupId":"MSGGID_0000000000000"

-

,"objectList":[

-

-
-

"msgTypeName":"단문(SMS)"

-

,"msgType":"4"

-

,"callFrom":"01011112222"

-

,"callTo":"01011112223"

-

,"msgGroupCnt":"2"

-

,"msgGroupId":"MSGGID_0000000013340"

-

,"msgId":"MSGID_0000000000001"

-

,"scnt":null

-

,"fcnt":null

-

,"wcnt":null

-

,"msgResult":"S"

-

,"smsTxt":"문자 내용 단문 예제"

-

,"subject":null

-

,"reqdate":"2023-06-13 17:48:08"

-

,"curState":"3"

-

,"userId":"testuser"

-

,"regdate":"2023-06-13 17:48:07"

-

,"reserveCYn":"N"

-

,"ttlCnt":"10"

-

,"remainMsgCnt":"0"

-

,"totMsgCnt":"10"

-
-

-

,{

-
-

"msgTypeName":"단문(SMS)"

-

,"msgType":"4"

-

,"callFrom":"01011112222"

-

,"callTo":"01011112223"

-

,"msgGroupCnt":"2"

-

,"msgGroupId":"MSGGID_0000000013340"

-

,"msgId":"MSGID_0000000000002"

-

,"scnt":null

-

,"fcnt":null

-

,"wcnt":null

-

,"msgResult":"S"

-

,"smsTxt":"문자 내용 단문 예제"

-

,subject":null

-

,reqdate":"2023-06-13 17:48:09"

-

,"curState":"3"

-

,"userId":"testuser"

-

,"regdate":"2023-06-13 17:48:07"

-

,"reserveCYn":"N"

-

,"ttlCnt":"10"

-

,"remainMsgCnt":"0"

-

,"totMsgCnt":"10"

-

-
-

-
-

-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"4099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
+ +
    +
  • - API를 통해서 메시지 그룹 ID 기준의 상세 이력(개별 건) 목록을 조회할 수 있습니다.
  • +
+
+ +
Request
+
+
+

Request

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블
Http MethodPOST
프로토콜HTTPS/1.1
HOSTapi.munjaon.co.kr
Service Port443
Endpoint/api/inqry/hstryDetail
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
히스토리 상세 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
msgGroupId메시지 그룹 IDStringO
+
+

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

+

※ Content-Type: application/json

+
+
+ +
+
[Example]
+
+
+					
+{
+
+	"mberId": "홍길동",
+	
+	"accessKey": "XXXXXXXXXXXXXX414050694b953",
+	
+	"msgGroupId": "MSGGID_XXXXXXX0000063"
+}
+					
+				
+
+
+ + + +
Response
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
히스토리 상세 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 이외는 실패)String
data조회 결과 객체Object
[data].resultCode내부 처리 결과(0: 성공)Number | String
[data].objectList개별 메시지 상세 목록Array<Object>
[data].objectList[i].msgGroupId메시지 그룹 IDString
[data].objectList[i].msgId개별 메시지 IDString
[data].objectList[i].totMsgCnt총 발송 건수(그룹 기준)String
[data].objectList[i].msgType메시지 타입 코드(예: 8=AT)Number
[data].objectList[i].msgTypeName메시지 타입명String
[data].objectList[i].msgResult결과(F: 실패, S: 성공 등)String
[data].objectList[i].msgGroupCnt발송 건수Number
[data].objectList[i].smsTxt메시지 내용String
[data].objectList[i].callFrom발신 번호String
[data].objectList[i].callTo수신 번호String
[data].objectList[i].curState현재 상태 코드Number
[data].objectList[i].remainMsgCnt잔여 처리 건수Number
[data].objectList[i].reqdate요청 일시(YYYY-MM-DD HH:mm:ss)String
[data].objectList[i].regdate등록 일시(YYYY-MM-DD HH:mm:ss)String
[data].objectList[i].reserveCYn예약 취소 여부(Y/N)String
localDateTime서버 처리 일시(ISO-8601)String
+
+

※ JSON 객체로 응답합니다.

+
+
+ +
+
[Example]O 성공 예시
+
+
+					
+{
+	"resultCode": "0",
+	
+	"data": {
+	
+		"resultCode": 0,
+		
+		"objectList": [
+		
+			{
+			
+				"msgGroupId": "MSGGID_XXXXXXX0000063",
+				
+				"msgId": "MSGCID_XXXXXXX00001180",
+				
+				"totMsgCnt": "9",
+				
+				"msgType": 8,
+				
+				"msgTypeName": "알림톡(AT)",
+				
+				"msgResult": "F",
+				
+				"msgGroupCnt": 1,
+				
+				"smsTxt": "test",
+				
+				"callFrom": "01093414986",
+				
+				"callTo": "01059941669",
+				
+				"curState": 3,
+				
+				"remainMsgCnt": 0,
+				
+				"reqdate": "2025-09-05 11:45:45",
+				
+				"regdate": "2025-09-05 11:45:45",
+				
+				"reserveCYn": "N"
+				
+			},
+			
+			{
+			
+				"msgGroupId": "MSGGID_XXXXXXX0000063",
+				
+				"msgId": "MSGCID_XXXXXXX000001175",
+				
+				"totMsgCnt": "9",
+				
+				"msgType": 9,
+				
+				"msgTypeName": "친구톡(AT)",
+				
+				"msgResult": "F",
+				
+				"msgGroupCnt": 1,
+				
+				"smsTxt": "test",
+				
+				"callFrom": "01093414986",
+				
+				"callTo": "01098969885",
+				
+				"curState": 3,
+				
+				"remainMsgCnt": 0,
+				
+				"reqdate": "2025-09-05 11:45:45",
+				
+				"regdate": "2025-09-05 11:45:45",
+				
+				"reserveCYn": "N"
+				
+			},
+			
+		]
+		
+	},
+	
+	"localDateTime": "2025-09-16T10:47:20.4014362"
+	
+}
+					
+				
+
+
+ +
+
[Example]X 실패 예시
+
+

+{
+
+	"resultCode": "4099",
+	
+	"data": "기타 시스템 오류"
+	
+}
+				
+
+
+ +
+ diff --git a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab5.jsp b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab5.jsp index df406dc3..98d6d57e 100644 --- a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab5.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab5.jsp @@ -1,195 +1,303 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS)별로 각각 확인할 수 있습니다.
  • -
  • - 위 문자유형별 발송 가능건수는 개인별로 적용된 단가를 기준으로 산출되며, "첫결제 이벤트"는 적용되지 않습니다.
  • -
+<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"String"

-

,"accessKey":"String"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object
[data].longPrice장문 단가String
[data].longSendPsbltEa장문 발송 가능 건수String
[data].mberMoney현재 보유 금액String
[data].message문자String
[data].picturePrice그림문자 단가String
[data].pictureSendPsbltEa그림문자 발송 가능 건수String
[data].shortPrice단문 단가String
[data].shortSendPsbltEa단문 발송 가능 건수String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data"

-
-

"longPrice":"50"

-

,"longSendPsbltEa":"19651"

-

,"mberMoney":"982586.7"

-

,"message":null

-

,"picturePrice":"90"

-

,"pictureSendPsbltEa":"10917"

-

,"shortPrice":"18"

-

,"shortSendPsbltEa":"54588"

-
-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"5099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
+ +
    +
  • - 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS), 알림톡(AT), 친구톡(FT)별로 각각 확인할 수 있습니다.
  • + +
+ +
+ +
Request
+
+
+

Request

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
API Request Http Method, 프로토콜, HOST, Service Port, Endpoint 정보 테이블
Http MethodPOST
프로토콜HTTPS/1.1
HOSTapi.munjaon.co.kr
Service Port443
Endpoint/api/inqry/price
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
가격/가능건수 조회 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
+
+

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

+

※ Content-Type: application/json

+
+
+ +
+
[Example]
+
+
+					
+{
+
+	"mberId": "홍길동",
+	
+	"accessKey": "XXXXXXXXXXXXXX414050694b953"
+}
+					
+				
+
+
+ + + +
Response
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
가격/가능건수 조회 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 이외는 실패)String
data조회 결과 객체(성공 시 가격/가능건수 정보)Object | String
[data].resultCode내부 처리 결과("0": 성공)String
[data].message메시지(필요 시)String
[data].localDateTime서버 처리 일시(ISO-8601)String
[data].shortPrice단문(SMS) 단가Number
[data].longPrice장문(LMS) 단가Number
[data].picturePrice사진(MMS) 단가Number
[data].kakaoAtPrice카카오 알림톡 단가Number
[data].kakaoFtPrice카카오 친구톡(텍스트) 단가Number
[data].kakaoFtImgPrice카카오 친구톡(이미지) 단가Number
[data].kakaoFtWideImgPrice카카오 친구톡(와이드 이미지) 단가Number
[data].mberMoney회원 보유 금액Number
[data].shortSendPsbltEa단문 발송 가능 건수Number
[data].longSendPsbltEa장문 발송 가능 건수Number
[data].pictureSendPsbltEa사진 발송 가능 건수Number
[data].kakaoAtSendPsbltEa알림톡 발송 가능 건수Number
[data].kakaoFtSendPsbltEa친구톡(텍스트) 발송 가능 건수Number
[data].kakaoFtImgSendPsbltEa친구톡(이미지) 발송 가능 건수Number
[data].kakaoFtWideImgSendPsbltEa친구톡(와이드 이미지) 발송 가능 건수Number
localDateTime서버 처리 일시(ISO-8601)String
+
+

※ JSON 객체로 응답합니다.

+
+
+ +
+
[Example]O 성공 예시
+
+
+					
+{
+	"resultCode": "0",
+	
+	"data": {
+	
+		"resultCode": "0",
+		
+		"message": "",
+		
+		"localDateTime": "2025-09-16T11:06:40.2556646",
+		
+		"shortPrice": 18.0,
+		
+		"longPrice": 50.0,
+		
+		"picturePrice": 90.0,
+		
+		"kakaoAtPrice": 6.9,
+		
+		"kakaoFtPrice": 13.8,
+		
+		"kakaoFtImgPrice": 19.9,
+		
+		"kakaoFtWideImgPrice": 22.9,
+		
+		"mberMoney": 6549661.26,
+		
+		"shortSendPsbltEa": 363870,
+		
+		"longSendPsbltEa": 130993,
+		
+		"pictureSendPsbltEa": 72774,
+		
+		"kakaoAtSendPsbltEa": 949226,
+		
+		"kakaoFtSendPsbltEa": 474613,
+		
+		"kakaoFtImgSendPsbltEa": 329128,
+		
+		"kakaoFtWideImgSendPsbltEa": 286011
+		
+	},
+	
+	"localDateTime": "2025-09-16T11:06:40.2556646"
+	
+}
+					
+				
+
+
+ +
+
[Example]X 실패 예시
+
+

+{
+
+	"resultCode": "3099",
+	
+	"data": "기타 시스템 오류"
+	
+}
+				
+
+
+ +
+ diff --git a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab6.jsp b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab6.jsp deleted file mode 100644 index df406dc3..00000000 --- a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab6.jsp +++ /dev/null @@ -1,195 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS)별로 각각 확인할 수 있습니다.
  • -
  • - 위 문자유형별 발송 가능건수는 개인별로 적용된 단가를 기준으로 산출되며, "첫결제 이벤트"는 적용되지 않습니다.
  • -
- -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"String"

-

,"accessKey":"String"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object
[data].longPrice장문 단가String
[data].longSendPsbltEa장문 발송 가능 건수String
[data].mberMoney현재 보유 금액String
[data].message문자String
[data].picturePrice그림문자 단가String
[data].pictureSendPsbltEa그림문자 발송 가능 건수String
[data].shortPrice단문 단가String
[data].shortSendPsbltEa단문 발송 가능 건수String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data"

-
-

"longPrice":"50"

-

,"longSendPsbltEa":"19651"

-

,"mberMoney":"982586.7"

-

,"message":null

-

,"picturePrice":"90"

-

,"pictureSendPsbltEa":"10917"

-

,"shortPrice":"18"

-

,"shortSendPsbltEa":"54588"

-
-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"5099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab7.jsp b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab7.jsp deleted file mode 100644 index df406dc3..00000000 --- a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab7.jsp +++ /dev/null @@ -1,195 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS)별로 각각 확인할 수 있습니다.
  • -
  • - 위 문자유형별 발송 가능건수는 개인별로 적용된 단가를 기준으로 산출되며, "첫결제 이벤트"는 적용되지 않습니다.
  • -
- -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"String"

-

,"accessKey":"String"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object
[data].longPrice장문 단가String
[data].longSendPsbltEa장문 발송 가능 건수String
[data].mberMoney현재 보유 금액String
[data].message문자String
[data].picturePrice그림문자 단가String
[data].pictureSendPsbltEa그림문자 발송 가능 건수String
[data].shortPrice단문 단가String
[data].shortSendPsbltEa단문 발송 가능 건수String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data"

-
-

"longPrice":"50"

-

,"longSendPsbltEa":"19651"

-

,"mberMoney":"982586.7"

-

,"message":null

-

,"picturePrice":"90"

-

,"pictureSendPsbltEa":"10917"

-

,"shortPrice":"18"

-

,"shortSendPsbltEa":"54588"

-
-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"5099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
diff --git a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab8.jsp b/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab8.jsp deleted file mode 100644 index df406dc3..00000000 --- a/src/main/webapp/WEB-INF/jsp/web/api/ft/apiSpec_tab8.jsp +++ /dev/null @@ -1,195 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - -
    -
  • - 보유캐시로 발송 가능한 문자의 건수를 단문(SMS), 장문(LMS), 그림(MMS)별로 각각 확인할 수 있습니다.
  • -
  • - 위 문자유형별 발송 가능건수는 개인별로 적용된 단가를 기준으로 산출되며, "첫결제 이벤트"는 적용되지 않습니다.
  • -
- -
- -
Request
-
-
-

Request

- - - - - - - - - - - - - - - - - - - - - - -
API Request Http Method, 프로토콜, HOST, Service Port 정보 테이블
Http MethodPOST
프로토콜HTTP/1.1
HOSTapi.munjaon.co.kr
Service Port443
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Request 키 종류 및 설명, 타입, 필수 여부 테이블
설명타입필수
mberId사용자 IDStringO
accessKey인증용 API KeyStringO
-
-

※ HTTPS 프로토콜을 사용하여 POST로 요청합니다.

-
-
-
-
[Example]
-
-

-
-

"mberId":"String"

-

,"accessKey":"String"

-
-

-
-
- - -
Response
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발송가능 건수 API Response 키 종류 및 설명, 타입 테이블
설명타입
resultCode성공 여부("0" 아니면 실패)String
data결과값 객체(성공 : 데이터, 실패 : 메시지)Object
[data].longPrice장문 단가String
[data].longSendPsbltEa장문 발송 가능 건수String
[data].mberMoney현재 보유 금액String
[data].message문자String
[data].picturePrice그림문자 단가String
[data].pictureSendPsbltEa그림문자 발송 가능 건수String
[data].shortPrice단문 단가String
[data].shortSendPsbltEa단문 발송 가능 건수String
-
-

※ JSON 객체로 응답합니다.

-
-
-
-
[Example]O 성공 예시
-
-

-
-

"resultCode":"0"

-

,"data"

-
-

"longPrice":"50"

-

,"longSendPsbltEa":"19651"

-

,"mberMoney":"982586.7"

-

,"message":null

-

,"picturePrice":"90"

-

,"pictureSendPsbltEa":"10917"

-

,"shortPrice":"18"

-

,"shortSendPsbltEa":"54588"

-
-

-
-

-
-
-
-
[Example]X 실패 예시
-
-

-
-

"resultCode":"5099"

-

,"data":"기타 시스템 오류"

-
-

-
-
- -
diff --git a/src/main/webapp/publish/js/highlight/styles/arta.css b/src/main/webapp/publish/js/highlight/styles/arta.css index 98a5b2b6..776f9eb5 100644 --- a/src/main/webapp/publish/js/highlight/styles/arta.css +++ b/src/main/webapp/publish/js/highlight/styles/arta.css @@ -1,66 +1,119 @@ pre code.hljs { - display: block; - overflow-x: auto; - padding: 1em + display: block; + overflow-x: auto; + padding: 1em } + code.hljs { - padding: 3px 5px + padding: 3px 5px } /* Date: 17.V.2011 Author: pumbur */ .hljs { - background: #222; - color: #aaa + background: #222; + color: #aaa } + .hljs-subst { - color: #aaa + color: #aaa } + .hljs-section { - color: #fff + color: #fff } -.hljs-comment, -.hljs-quote, -.hljs-meta { - color: #444 + +.hljs-comment, .hljs-quote, .hljs-meta { + color: #444 } -.hljs-string, -.hljs-symbol, -.hljs-bullet, -.hljs-regexp { - color: #ffcc33 + +.hljs-string, .hljs-symbol, .hljs-bullet, .hljs-regexp { + color: #ffcc33 } -.hljs-number, -.hljs-addition { - color: #00cc66 + +.hljs-number, .hljs-addition { + color: #00cc66 } -.hljs-built_in, -.hljs-literal, -.hljs-type, -.hljs-template-variable, -.hljs-attribute, -.hljs-link { - color: #32aaee + +.hljs-built_in, .hljs-literal, .hljs-type, .hljs-template-variable, + .hljs-attribute, .hljs-link { + color: #32aaee } -.hljs-keyword, -.hljs-selector-tag, -.hljs-name, -.hljs-selector-id, -.hljs-selector-class { - color: #6644aa + +.hljs-keyword, .hljs-selector-tag, .hljs-name, .hljs-selector-id, + .hljs-selector-class { + color: #6644aa } -.hljs-title, -.hljs-variable, -.hljs-deletion, -.hljs-template-tag { - color: #bb1166 + +.hljs-title, .hljs-variable, .hljs-deletion, .hljs-template-tag { + color: #bb1166 } -.hljs-section, -.hljs-doctag, -.hljs-strong { - font-weight: bold + +.hljs-section, .hljs-doctag, .hljs-strong { + font-weight: bold } + .hljs-emphasis { - font-style: italic + font-style: italic +} + +pre code.hljs { + display: block; + overflow-x: auto; + padding: 1em +} + +code.hljs { + padding: 3px 5px +} +/* +Date: 17.V.2011 +Author: pumbur +*/ +.hljs { + background: #222; + color: #aaa +} + +.hljs-subst { + color: #fff +} + +.hljs-section { + color: #fff +} + +.hljs-comment, .hljs-quote, .hljs-meta { + color: #444 +} + +.hljs-string, .hljs-symbol, .hljs-bullet, .hljs-regexp { + color: #ffcc33 +} + +.hljs-number, .hljs-addition { + color: #fff +} + +.hljs-built_in, .hljs-literal, .hljs-type, .hljs-template-variable, + .hljs-attribute, .hljs-link { + color: #32aaee +} + +.hljs-keyword, .hljs-selector-tag, .hljs-name, .hljs-selector-id, + .hljs-selector-class { + color: #6644aa +} + +.hljs-title, .hljs-variable, .hljs-deletion, .hljs-template-tag { + color: #bb1166 +} + +.hljs-section, .hljs-doctag, .hljs-strong { + font-weight: bold +} + +.hljs-emphasis { + font-style: italic } \ No newline at end of file