@awesome-message/sdk
Version:
Awesome Message SDK for admin, messaging, and notification services
2,037 lines (2,022 loc) • 269 kB
TypeScript
import { FormData } from 'undici';
/**
* 클라이언트 생성 요청 데이터
*
* 새로운 클라이언트를 생성할 때 사용되는 요청 데이터입니다.
*
* @group Admin Interfaces
*
* @example
* ```typescript
* const request: CreateClientRequest = {
* externalId: "my-service-v1",
* name: "My Service Client"
* };
* ```
*/
interface CreateClientRequest {
/** 연동 ID (최대 40자) */
externalId: string;
/** 클라이언트 이름 (최대 40자) */
name: string;
}
/**
* 클라이언트 삭제 요청 데이터
*
* 클라이언트를 삭제할 때 사용되는 요청 데이터입니다.
*
* @group Admin Interfaces
*
* @example
* ```typescript
* const request: DeleteClientRequest = {
* externalId: "my-service-v1"
* };
* ```
*/
interface DeleteClientRequest {
/** 삭제할 클라이언트의 연동 ID */
externalId: string;
}
/**
* 카카오 채널 등록 요청 데이터
*
* 새로운 카카오 채널을 등록할 때 사용되는 요청 데이터입니다.
*
* @group Kakao Channel Interfaces
*/
interface CreateKakaoChannelRequest {
/** 플러스친구 ID (최대 30자) */
plusFriendId: string;
/** 연락처 번호 (최대 15자) */
phoneNo: string;
/** 카테고리 코드 (11자) */
categoryCode: string;
}
/**
* 카카오 채널 토큰 인증 요청 데이터
*
* 카카오톡 앱에서 받은 인증 토큰을 사용하여 채널을 인증할 때 사용되는 요청 데이터입니다.
*
* @group Kakao Channel Interfaces
*/
interface AuthenticateKakaoChannelTokenRequest {
/** 플러스친구 ID */
plusFriendId: string;
/** 인증 토큰 (카카오톡 앱에서 받은 인증 토큰) */
token: number;
}
/**
* 카카오 채널 리스트 조회 요청 파라미터
*
* 카카오 채널 목록을 조회할 때 사용되는 필터 조건들입니다.
*
* @group Kakao Channel Interfaces
*/
interface ListKakaoChannelsRequest {
/** 플러스친구 ID (선택적 필터) */
plusFriendId?: string;
/** 발신 키 (선택적 필터) */
senderKey?: string;
/** 플러스친구 상태 코드 (YSC02: 등록 대기 중, YSC03: 정상 등록) */
status?: string;
/** 페이지 번호 (선택적 필터) */
pageNum?: number;
/** 페이지 크기 (선택적 필터) */
pageSize?: number;
}
/**
* 카카오 채널 삭제 요청 데이터
*
* 카카오 채널을 삭제할 때 사용되는 요청 데이터입니다.
*
* @group Kakao Channel Interfaces
*/
interface DeleteKakaoChannelRequest {
/** 삭제할 카카오 채널의 발신 키 */
senderKey: string;
}
/**
* 메시지 요청 상태
*
* @description
* - COMPLETED: 성공
* - FAILED: 실패
*
*/
type FriendtalkMessageStatus = "COMPLETED" | "FAILED";
/**
* 발송 결과
*
* @description
* - MRC01: 성공
* - MRC02: 실패
*
*/
type FriendtalkResultCode = "MRC01" | "MRC02";
/**
* 친구톡 자유형 수신자 정보
*
* 자유형 친구톡 메시지를 발송할 수신자 정보입니다.
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkFreestyleRecipient {
/** 수신 번호 */
recipientNo: string;
}
/**
* 친구톡 템플릿형 메시지 수신자 타겟팅 타입
*
* @description
* - M: 마케팅 수신 동의 유저
* - N: 친구가 아닌 마케팅 수신 동의 유저에만
* - I: 채널 친구인 유저에만
*/
type FriendtalkTemplateTargetingType = "M" | "N" | "I";
type FriendtalkTemplateResendParameter = {
/** 발송 실패 시, 문자 대체 발송 여부
* 콘솔에서 대체 발송 설정 시, 기본으로 대체 발송됩니다.
*/
isResend?: boolean;
/**
* 대체 발송 타입(SMS,LMS)
* 값이 없을 경우, 템플릿 본문 길이에 따라 타입이 구분됩니다.
*/
resendType?: string;
/**
* LMS 대체 발송 제목
* 값이 없을 경우, 플러스친구 ID로 대체 발송됩니다.
*/
resendTitle?: string;
/**
* 대체 발송 내용
* (값이 없을 경우, [메시지 본문]으로 대체 발송됩니다.)
*/
resendContent?: string;
/**
* 대체 발송 발신 번호
* (SMS 서비스에 등록된 발신 번호가 아닐 경우, 대체 발송에 실패할 수 있습니다.)
*/
resendSendNo?: string;
};
/**
* 친구톡 템플릿형 메시지 수신자 정보
*
* 템플릿형 친구톡 메시지를 발송할 수신자 정보입니다.
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkTemplateRecipient {
/** 수신 번호 */
recipientNo: string;
/** 메시지 대상의 타입
* - M: 마케팅 수신 동의 유저
* - N: 친구가 아닌 마케팅 수신 동의 유저에만
* - I: 채널 친구인 유저에만
*/
targeting: FriendtalkTemplateTargetingType;
/** 템플릿 파라미터 (템플릿에 치환할 변수 포함 시, 필수) */
templateParameter?: Record<string, any>;
/** 대체 발송 정보 */
resendParameter?: FriendtalkTemplateResendParameter;
}
/**
* 친구톡 이미지 정보 (발송용과 템플릿용 공용)
* - IMAGE 타입: 일반 이미지로 업로드된 이미지 URL 사용
* - WIDE 타입: 와이드 이미지로 업로드된 이미지 URL 사용
* - COMMERCE 타입: 일반 이미지로 업로드된 이미지 URL 사용
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkImage {
/** 이미지 URL (타입별로 업로드 방식이 다름)
* - 템플릿에서 치환자 사용 불가능
*/
imageUrl: string;
/** 이미지 클릭시 이동할 URL, 1000자 제한 (미설정시 카카오톡 내 이미지 뷰어 사용)
* - 템플릿에서 치환자 사용 불가능
*/
imageLink?: string | null;
}
/**
* 친구톡 쿠폰 정보 (발송용과 템플릿용 공용)
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkCoupon {
/** 쿠폰 제목
* 5가지 형식으로 제한됨:
* - "${숫자}원 할인 쿠폰" 숫자는 1 이상 99,999,999 이하
* - "${숫자}% 할인 쿠폰" 숫자는 1 이상 100 이하
* - "배송비 할인 쿠폰"
* - "${7자 이내} 무료 쿠폰"
* - "${7자 이내} UP 쿠폰"
*/
title: string;
/** 쿠폰 상세 설명
* - WIDE, WIDE_ITEM_LIST, PREMIUM_VIDEO 타입일 경우 최대 18자, 줄바꿈: 불가
* - 이외의 타입일 경우 최대 12자, 줄바꿈: 불가
*/
description: string;
/** 모바일 웹 링크, 1,000자 제한 */
linkMo?: string | null;
/** PC 웹 링크, 1,000자 제한 */
linkPc?: string | null;
/** 안드로이드 앱 링크, 1,000자 제한 */
schemeAndroid?: string | null;
/** IOS 앱 링크, 1,000자 제한 */
schemeIos?: string | null;
}
/**
* 친구톡 와이드 아이템 리스트 아이템
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkWideItem {
/** 아이템 제목
* - 1번째 아이템은 최대 25자 제한 (줄바꿈: 최대 1개, 1번째 아이템의 경우 title이 필수 값이 아님)
* - 2~4번째 아이템 최대 30자 제한 (줄바꿈: 최대 1개)
*/
title?: string | null;
/** 아이템 이미지 URL
* - 1번째 아이템에는 첫번째 와이드 아이템리스트 이미지로 업로드된 이미지 URL 사용
* - 2~4번째 아이템은 일반 와이드 아이템리스트 이미지로 업로드된 이미지 URL 사용
* - 템플릿에서 치환자 사용 불가능
*/
imageUrl: string;
/** 모바일 웹 링크, 1,000자 제한 */
linkMo: string;
/** PC 웹 링크, 1,000자 제한 */
linkPc?: string | null;
/** 안드로이드 앱 링크, 1,000자 제한 */
schemeAndroid?: string | null;
/** IOS 앱 링크, 1,000자 제한 */
schemeIos?: string | null;
}
/**
* 친구톡 와이드 아이템 리스트
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkWideItemList {
/** 와이드 리스트 (최소: 3, 최대 4) */
list: FriendtalkWideItem[];
}
/**
* 친구톡 커머스 정보 (발송용과 템플릿용 공용)
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkCommerce {
/** 상품 제목 (최대 30자, 줄바꿈: 불가) */
title: string;
/** 정상 가격 (0 ~ 99,999,999)
* - 템플릿에서 치환자 사용자 지정 불가능, 값을 비워두면 고정 치환자 #{정상가격}으로 저장됨
*/
regularPrice: number;
/** 할인가격 (0 ~ 99,999,999)
* - 템플릿에서 치환자 사용자 지정 불가능, 값을 비워두면 고정 치환자 #{할인가격}으로 저장됨
*/
discountPrice?: number | null;
/** 할인율 (0 ~ 100), 할인가격 존재시 할인율, 정액할인가격 중 하나는 필수
* - 템플릿에서 치환자 사용자 지정 불가능, 값을 비워두면 고정 치환자 #{할인율}으로 저장됨
*/
discountRate?: number | null;
/** 정액할인가격 (0 ~ 999,999), 할인가격 존재시 할인율, 정액할인가격 중 하나는 필수
* - 템플릿에서 치환자 사용자 지정 불가능, 값을 비워두면 고정 치환자 #{정액할인가격}으로 저장됨
*/
discountFixed?: number | null;
}
/**
* 친구톡 동영상 정보 (발송용과 템플릿용 공용)
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkVideo {
/** 카카오TV 동영상 URL (카카오TV에 업로드된 동영상 주소만 사용 가능), 최대 500자 제한
* - 템플릿에서 치환자 사용 불가능
*/
videoUrl: string;
/** 동영상 썸네일용 이미지 URL, 일반 이미지로 업로드된 url만 사용 가능 (없는 경우 카카오TV 동영상 기본 썸네일 사용), 최대 500자 제한
* - 템플릿에서 치환자 사용 불가능
*/
thumbnailUrl?: string | null;
}
/**
* 친구톡 더보기 버튼 정보 (발송용과 템플릿용 공용)
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkTail {
/** 모바일 웹 링크, 1,000자 제한
* - 템플릿에서 치환자 사용 불가능
*/
linkMo: string;
/** PC 웹 링크, 1,000자 제한
* - 템플릿에서 치환자 사용 불가능
*/
linkPc?: string | null;
/** 안드로이드 앱 링크, 1,000자 제한
* - 템플릿에서 치환자 사용 불가능
*/
schemeAndroid?: string | null;
/** IOS 앱 링크, 1,000자 제한
* - 템플릿에서 치환자 사용 불가능
*/
schemeIos?: string | null;
}
/**
* 친구톡 캐러셀 인트로 (head)
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkCarouselHead {
/** 캐러셀 인트로 헤더 (최대 20자) */
header: string;
/** 캐러셀 인트로 내용 (최대 50자) */
content: string;
/** 캐러셀 인트로 이미지 주소 (캐러셀 커머스형 이미지로 업로드된 이미지 사용, 사용되는 이미지는 캐러셀의 이미지와 비율이 동일해야 함)
* - 템플릿에서 치환자 사용 불가능
*/
imageUrl: string | null;
/** 모바일 웹 링크 (linkMo, linkPc, schemeAndroid, schemeIos 중 하나라도 사용하려는 경우 linkMo은 필수값), 1,000자 제한 */
linkMo?: string | null;
/** PC 웹 링크, 1,000자 제한 */
linkPc?: string | null;
/** 안드로이드 앱 링크, 1,000자 제한 */
schemeAndroid?: string | null;
/** IOS 앱 링크, 1,000자 제한 */
schemeIos?: string | null;
}
/**
* 친구톡 자유형 캐러셀 피드 아이템
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkFreestyleCarouselFeedItem {
/** 캐러셀 아이템 제목 (최대 20자), 캐러셀 피드형에서만 사용 가능 */
header: string;
/** 캐러셀 아이템 메시지 (최대 180자), 캐러셀 피드형에서만 사용 가능 */
message: string;
/** 이미지 URL (캐러셀 피드형 이미지로 업로드된 이미지만 사용 가능) */
imageUrl: string;
/** 이미지 링크, 1000자 제한 */
imageLink: string;
/** 캐러셀 리스트 버튼 목록 최소 1개, 최대 2개 */
buttons: FriendtalkFreestyleButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 자유형 캐러셀 피드 리스트
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkFreestyleCarouselFeedList {
/** 캐러셀 리스트 (최소 2개, 최대 6개) */
list: FriendtalkFreestyleCarouselFeedItem[];
/** 더보기 버튼 정보 */
tail?: FriendtalkTail;
}
/**
* 친구톡 자유형 캐러셀 커머스 아이템
*/
interface FriendtalkFreestyleCarouselCommerceItem {
/** 부가 정보 (최대 34자), 캐러셀 커머스형에서만 사용 가능 */
additionalContent: string;
/** 이미지 URL (캐러셀 커머스형 이미지로 업로드된 이미지 사용) */
imageUrl: string;
/** 이미지 링크, 1000자 제한 */
imageLink: string;
/** 커머스 (CAROUSEL_COMMERCE 타입에서만 사용 가능) */
commerce: FriendtalkCommerce;
/** 캐러셀 리스트 버튼 목록 최소 1개, 최대 2개 */
buttons: FriendtalkFreestyleButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 템플릿용 캐러셀 피드 아이템
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkTemplateCarouselFeedItem {
/** 캐러셀 아이템 제목 (최대 20자), 캐러셀 피드형에서만 사용 가능 */
header: string;
/** 캐러셀 아이템 메시지 (최대 180자), 캐러셀 피드형에서만 사용 가능 */
message: string;
/** 이미지 URL (캐러셀 피드형 이미지로 업로드된 이미지만 사용 가능), 치환자 사용 불가능 */
imageUrl: string;
/** 이미지 링크, 1000자 제한, 치환자 사용 불가능 */
imageLink: string;
/** 캐러셀 리스트 버튼 목록 최소 1개, 최대 2개 */
buttons: FriendtalkTemplateButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 템플릿용 캐러셀 피드
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkTemplateCarouselFeedList {
/** 캐러셀 리스트 (최소 2개, 최대 6개) */
list: FriendtalkTemplateCarouselFeedItem[];
/** 더보기 버튼 정보 */
tail?: FriendtalkTail | null;
}
/**
* 친구톡 자유형 캐러셀 커머스 정보
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkFreestyleCarouselCommerce {
/** 캐러셀 인트로 */
head?: FriendtalkCarouselHead | null;
/** 캐러셀 리스트 (head가 존재할 경우 최소 1개, 최대 5개 / 그 외에는 최소 2개, 최대 6개) */
list: FriendtalkFreestyleCarouselCommerceItem[];
/** 더보기 버튼 정보 */
tail?: FriendtalkTail | null;
}
/**
* 친구톡 템플릿용 캐러셀 커머스 아이템
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkTemplateCarouselCommerceItem {
/** 부가 정보 (최대 34자), 캐러셀 커머스형에서만 사용 가능 */
additionalContent: string;
/** 이미지 URL (캐러셀 커머스형 이미지로 업로드된 이미지 사용), 치환자 사용 불가능 */
imageUrl: string;
/** 이미지 링크, 1000자 제한, 치환자 사용 불가능 */
imageLink: string;
/** 커머스 (CAROUSEL_COMMERCE 타입에서만 사용 가능) */
commerce: FriendtalkCommerce;
/** 캐러셀 리스트 버튼 목록 최소 1개, 최대 2개 */
buttons: FriendtalkTemplateButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 템플릿용 캐러셀 커머스
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkTemplateCarouselCommerce {
/** 캐러셀 인트로 */
head?: FriendtalkCarouselHead;
/** 캐러셀 리스트 (head가 존재할 경우 최소 1개, 최대 5개 / 그 외에는 최소 2개, 최대 6개) */
list: FriendtalkTemplateCarouselCommerceItem[];
/** 더보기 버튼 정보 */
tail?: FriendtalkTail;
}
/**
* 친구톡 템플릿 버튼 타입 (템플릿용)
* @description WL: 웹 링크, AL: 앱 링크, BK: 봇 키워드, MD: 메시지 전달, AC: 채널 추가, BT: 챗봇 전환, BF: 비즈니스 폼
*/
type FriendtalkTemplateButtonType = "WL" | "AL" | "BK" | "MD" | "AC" | "BT";
/**
* 친구톡 템플릿 버튼 정보
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkTemplateButton {
/** 버튼 제목 (TEXT, IMAGE 타입일 경우 최대 14자, 이외의 타입일 경우 최대 8자)
* - 템플릿에서 치환자 사용 불가능
*/
name: string;
/** 버튼 타입 (WL: 웹 링크, AL: 앱 링크, BK: 봇 키워드, MD: 메시지 전달, AC: 채널 추가, BC: 상담톡 전환, BT: 챗봇 전환, BF: 비즈니스 폼 )
* - 템플릿에서는 BC 타입 이용 불가
* - BT 타입
* - 템플릿에서는 BF 타입 이용 불가
* - AC 타입은 TEXT, IMAGE의 경우 첫번째 버튼으로, 그 외 메시지 타입의 경우 마지막 버튼으로 등록해야함
*/
type: FriendtalkTemplateButtonType;
/** 모바일 웹 링크 (WL 타입일 경우 필수 필드), 1,000자 제한 */
linkMo?: string | null;
/** PC 웹 링크 (WL 타입일 경우 선택 필드), 1,000자 제한 */
linkPc?: string | null;
/** 안드로이드 앱 링크 (AL 타입일 경우 필수 필드), 1,000자 제한 */
schemeAndroid?: string | null;
/** IOS 앱 링크 (AL 타입일 경우 필수 필드), 1,000자 제한 */
schemeIos?: string | null;
/** BF 타입 버튼일 경우 비즈폼 키 */
bizFormKey?: string | null;
}
/**
* 친구톡 발송 버튼 타입
* @description WL: 웹 링크, AL: 앱 링크, BK: 봇 키워드, MD: 메시지 전달, BC: 상담톡 전환, BT: 챗봇 전환, BF: 비즈니스 폼
*/
type FriendtalkFreestyleButtonType = "WL" | "AL" | "BK" | "MD" | "BC" | "BT" | "BF";
/**
* 친구톡 발송 버튼 정보
*
* @group Kakao Friendtalk Interfaces
*/
interface FriendtalkFreestyleButton extends Omit<FriendtalkTemplateButton, "type"> {
/** BC / BT 타입 버튼일 경우 전달할 메타 정보 */
chatExtra?: string | null;
/** BT 타입 버튼일 경우 연결할 봇 이벤트명 */
chatEvent?: string | null;
/** 발송 버튼 타입 */
type: FriendtalkFreestyleButtonType;
}
/**
* 친구톡 발송목록조회 쿼리 파라미터
* 1번 조건(requestId) 또는 2번 조건(startRequestDate + endRequestDate) 중 하나 필수
*
* @group Kakao Friendtalk Interfaces
*/
interface ListFriendtalkMessagesRequest {
/** 요청 ID */
requestId?: string;
/** 발송 요청 날짜 시작 값 */
startRequestDate?: Date;
/** 발송 요청 날짜 끝 값 */
endRequestDate?: Date;
/** 발신 키 */
senderKey?: string;
/** 템플릿 코드 */
templateCode?: string;
/** 수신 번호 */
recipientNo?: string;
/** 요청 상태 (COMPLETED: 성공, FAILED: 실패) */
messageStatus?: FriendtalkMessageStatus;
/** 발송 결과 (MRC01: 성공 MRC02: 실패) */
resultCode?: FriendtalkResultCode;
/** 페이지 번호 (Default: 1) */
pageNum?: number;
/** 조회 건수 (Default: 15, Max: 1000) */
pageSize?: number;
}
/**
* 친구톡 자유형 텍스트 메시지 발송 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface SendFriendtalkFreestyleTextMessageRequest {
/** 발신 키(40자), 그룹 발신키 사용 불가 */
senderKey: string;
/** 메시지 푸시 알람 발송 여부 (기본값: true) */
pushAlarm?: boolean;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 메시지 내용 (TEXT 타입일 경우 최대 1,000자, 줄바꿈: 최대 33개, URL 형식 입력 가능) */
content: string;
/** 버튼 목록 (TEXT, IMAGE 타입일 경우 쿠폰 적용시 최대 4개, 그 외 최대 5개) */
buttons?: FriendtalkFreestyleButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
/** 수신자 목록(최대 1,000명) */
recipientList: FriendtalkFreestyleRecipient[];
/** 등록자(콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 통계 ID(발신 검색 조건에는 포함되지 않습니다, 최대 8자) */
statsId?: string;
}
/**
* 친구톡 자유형 이미지 메시지 발송 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface SendFriendtalkFreestyleImageMessageRequest {
/** 발신 키(40자), 그룹 발신키 사용 불가 */
senderKey: string;
/** 메시지 푸시 알람 발송 여부 (기본값: true) */
pushAlarm?: boolean;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 메시지 내용 (IMAGE 타입일 경우 최대 400자, 줄바꿈: 최대 29개, URL 형식 입력 가능) */
content: string;
/** 이미지 요소 (IMAGE, WIDE, COMMERCE 타입일 경우 필수 필드) */
image: FriendtalkImage;
/** 버튼 목록 (TEXT, IMAGE 타입일 경우 쿠폰 적용시 최대 4개, 그 외 최대 5개) */
buttons?: FriendtalkFreestyleButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
/** 수신자 목록(최대 1,000명) */
recipientList: FriendtalkFreestyleRecipient[];
/** 등록자(콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 통계 ID(발신 검색 조건에는 포함되지 않습니다, 최대 8자) */
statsId?: string;
}
/**
* 친구톡 자유형 와이드 이미지 메시지 발송 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface SendFriendtalkFreestyleWideImageMessageRequest {
/** 발신 키(40자), 그룹 발신키 사용 불가 */
senderKey: string;
/** 메시지 푸시 알람 발송 여부 (기본값: true) */
pushAlarm?: boolean;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 메시지 내용 (WIDE 타입일 경우 최대 76자, 줄바꿈: 최대 1개) */
content: string;
/** 이미지 요소 (IMAGE, WIDE, COMMERCE 타입일 경우 필수 필드) */
image: FriendtalkImage;
/** 버튼 목록 (WIDE, WIDE_ITEM_LIST 타입일 경우 최대 2개) */
buttons?: FriendtalkFreestyleButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
/** 수신자 목록(최대 1,000명) */
recipientList: FriendtalkFreestyleRecipient[];
/** 등록자(콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 통계 ID(발신 검색 조건에는 포함되지 않습니다, 최대 8자) */
statsId?: string;
}
/**
* 친구톡 자유형 와이드 아이템 리스트 메시지 발송 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface SendFriendtalkFreestyleWideItemListMessageRequest {
/** 발신 키(40자), 그룹 발신키 사용 불가 */
senderKey: string;
/** 메시지 푸시 알람 발송 여부 (기본값: true) */
pushAlarm?: boolean;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 헤더 (WIDE_ITEM_LIST 타입일 경우 필수 필드이고 최대 20자, 줄바꿈: 불가) */
header: string;
/** 와이드 리스트 요소 (WIDE_ITEM_LIST 타입에서만 사용 가능) */
item: FriendtalkWideItemList;
/** 버튼 목록 (WIDE, WIDE_ITEM_LIST 타입일 경우 최대 2개) */
buttons?: FriendtalkFreestyleButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
/** 수신자 목록(최대 1,000명) */
recipientList: FriendtalkFreestyleRecipient[];
/** 등록자(콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 통계 ID(발신 검색 조건에는 포함되지 않습니다, 최대 8자) */
statsId?: string;
}
/**
* 친구톡 자유형 프리미엄 동영상 메시지 발송 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface SendFriendtalkFreestylePremiumVideoMessageRequest {
/** 발신 키(40자), 그룹 발신키 사용 불가 */
senderKey: string;
/** 메시지 푸시 알람 발송 여부 (기본값: true) */
pushAlarm?: boolean;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 메시지 내용 (PREMIUM_VIDEO 타입일 경우 해당 필드를 옵셔널하게 사용할 수 있음, 최대 76자, 줄바꿈: 최대 1개) */
content?: string;
/** 헤더 (PREMIUM_VIDEO 타입일 경우 선택 필드이고 최대 20자, 줄바꿈: 불가) */
header?: string;
/** 동영상 요소 (PREMIUM_VIDEO 타입만 사용 가능) */
video: FriendtalkVideo;
/** 버튼 목록 (PREMIUM_VIDEO 타입일 경우 최대 1개) */
buttons?: FriendtalkFreestyleButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
/** 수신자 목록(최대 1,000명) */
recipientList: FriendtalkFreestyleRecipient[];
/** 등록자(콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 통계 ID(발신 검색 조건에는 포함되지 않습니다, 최대 8자) */
statsId?: string;
}
/**
* 친구톡 자유형 커머스 메시지 발송 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface SendFriendtalkFreestyleCommerceMessageRequest {
/** 발신 키(40자), 그룹 발신키 사용 불가 */
senderKey: string;
/** 메시지 푸시 알람 발송 여부 (기본값: true) */
pushAlarm?: boolean;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 부가 정보 (최대 34자, 줄바꿈: 최대 1개), 커머스형에서만 사용 가능 */
additionalContent?: string;
/** 이미지 요소 (IMAGE, WIDE, COMMERCE 타입일 경우 필수 필드) */
image: FriendtalkImage;
/** 커머스 (COMMERCE 타입에서만 사용 가능) */
commerce: FriendtalkCommerce;
/** 버튼 목록 (COMMERCE 타입일 경우 최소 1개 최대 2개) */
buttons: FriendtalkFreestyleButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
/** 수신자 목록(최대 1,000명) */
recipientList: FriendtalkFreestyleRecipient[];
/** 등록자(콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 통계 ID(발신 검색 조건에는 포함되지 않습니다, 최대 8자) */
statsId?: string;
}
/**
* 친구톡 자유형 캐러셀 피드 메시지 발송 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface SendFriendtalkFreestyleCarouselFeedMessageRequest {
/** 발신 키(40자), 그룹 발신키 사용 불가 */
senderKey: string;
/** 메시지 푸시 알람 발송 여부 (기본값: true) */
pushAlarm?: boolean;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 캐러셀 */
carousel: FriendtalkFreestyleCarouselFeedList;
/** 수신자 목록(최대 1,000명) */
recipientList: FriendtalkFreestyleRecipient[];
/** 등록자(콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 통계 ID(발신 검색 조건에는 포함되지 않습니다, 최대 8자) */
statsId?: string;
}
/**
* 친구톡 자유형 캐러셀 커머스 메시지 발송 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface SendFriendtalkFreestyleCarouselCommerceMessageRequest {
/** 발신 키(40자), 그룹 발신키 사용 불가 */
senderKey: string;
/** 메시지 푸시 알람 발송 여부 (기본값: true) */
pushAlarm?: boolean;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 캐러셀 */
carousel: FriendtalkFreestyleCarouselCommerce;
/** 수신자 목록(최대 1,000명) */
recipientList: FriendtalkFreestyleRecipient[];
/** 등록자(콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 통계 ID(발신 검색 조건에는 포함되지 않습니다, 최대 8자) */
statsId?: string;
}
/**
* 친구톡 템플릿 메시지 발송 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface SendFriendtalkTemplateMessageRequest {
/** 발신 키(40자), 그룹 발신키 사용 불가 */
senderKey: string;
/** 사용하려는 템플릿 코드 */
templateCode: string;
/** 메시지 푸시 알람 발송 여부 (기본값: true) */
pushAlarm?: boolean;
/** 080 무료수신거부 전화번호 (둘다 미입력시 발신프로필에 등록된 무료수신거부 정보로 발송됨) */
unsubscribeNo?: string;
/** 080 무료수신거부 인증번호 (둘다 미입력시 발신프로필에 등록된 무료수신거부 정보로 발송됨)
* unsubscribe_phone_number 없이 unsubscribe_auth_number만 입력 불가
* ex) 1234
*/
unsubscribeAuthNo?: string;
/** 수신자 목록(최대 1,000명) */
recipientList: FriendtalkTemplateRecipient[];
/** 등록자(콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 통계 ID(발신 검색 조건에는 포함되지 않습니다, 최대 8자) */
statsId?: string;
}
/**
* 친구톡 템플릿 리스트 조회 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface ListFriendtalkTemplatesRequest {
/** 템플릿 코드 */
templateCode?: string;
/** 템플릿 이름 */
templateName?: string;
/** 템플릿 상태 코드 */
status?: string;
/** 페이지 번호(Default: 1) */
pageNum?: number;
/** 조회 건수(Default: 15, Max: 1000) */
pageSize?: number;
}
/**
* 친구톡 텍스트형 템플릿 등록 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface CreateFriendtalkTextTemplateRequest {
/** 템플릿 명 (최대 200자) */
templateName: string;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 메시지 내용 (TEXT 타입일 경우 최대 1,000자, 줄바꿈: 최대 33개, URL 형식 입력 가능) */
content: string;
/** 버튼 목록 (TEXT 타입일 경우 쿠폰 적용시 최대 4개, 그 외 최대 5개) */
buttons?: FriendtalkTemplateButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 텍스트형 템플릿 수정 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface UpdateFriendtalkTextTemplateRequest extends CreateFriendtalkTextTemplateRequest {
}
/**
* 친구톡 이미지형 템플릿 등록 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface CreateFriendtalkImageTemplateRequest {
/** 템플릿 명 (최대 200자) */
templateName: string;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 메시지 내용 (IMAGE 타입일 경우 최대 400자, 줄바꿈: 최대 29개, URL 형식 입력 가능) */
content: string;
/** 이미지 요소 (IMAGE 타입일 경우 필수 필드) */
image: FriendtalkImage;
/** 버튼 목록 (TEXT, IMAGE 타입일 경우 쿠폰 적용시 최대 4개, 그 외 최대 5개) */
buttons?: FriendtalkTemplateButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 이미지형 템플릿 수정 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface UpdateFriendtalkImageTemplateRequest extends CreateFriendtalkImageTemplateRequest {
}
/**
* 친구톡 와이드 이미지형 템플릿 등록 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface CreateFriendtalkWideImageTemplateRequest {
/** 템플릿 명 (최대 200자) */
templateName: string;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 메시지 내용 (WIDE 타입일 경우 최대 76자, 줄바꿈: 최대 1개) */
content: string;
/** 이미지 요소 (WIDE 타입일 경우 필수 필드, 와이드 이미지로 업로드된 이미지 URL 사용) */
image: FriendtalkImage;
/** 버튼 목록 (WIDE 타입일 경우 최대 2개) */
buttons?: FriendtalkTemplateButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 와이드 이미지형 템플릿 수정 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface UpdateFriendtalkWideImageTemplateRequest extends CreateFriendtalkWideImageTemplateRequest {
}
/**
* 친구톡 와이드 아이템 리스트형 템플릿 등록 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface CreateFriendtalkWideItemListTemplateRequest {
/** 템플릿 명 (최대 200자) */
templateName: string;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 헤더 (WIDE_ITEM_LIST 타입일 경우 필수 필드이고 최대 20자, 줄바꿈: 불가) */
header: string;
/** 와이드 리스트 요소 (WIDE_ITEM_LIST 타입에서만 사용 가능) */
item: FriendtalkWideItemList;
/** 버튼 목록 (WIDE_ITEM_LIST 타입일 경우 최대 2개, name 최대 8자) */
buttons?: FriendtalkTemplateButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 와이드 아이템 리스트형 템플릿 수정 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface UpdateFriendtalkWideItemListTemplateRequest extends CreateFriendtalkWideItemListTemplateRequest {
}
/**
* 친구톡 프리미엄 동영상형 템플릿 등록 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface CreateFriendtalkPremiumVideoTemplateRequest {
/** 템플릿 명 (최대 200자) */
templateName: string;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 메시지 내용 (PREMIUM_VIDEO 타입일 경우 해당 필드를 옵셔널하게 사용할 수 있음, 최대 76자, 줄바꿈: 최대 1개) */
content?: string;
/** 헤더 (PREMIUM_VIDEO 타입일 경우 선택 필드이고 최대 20자, 줄바꿈: 불가) */
header?: string;
/** 동영상 요소 (PREMIUM_VIDEO 타입만 사용 가능) */
video: FriendtalkVideo;
/** 버튼 목록 (PREMIUM_VIDEO 타입일 경우 최대 1개, name 최대 8자) */
buttons?: FriendtalkTemplateButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 프리미엄 동영상형 템플릿 수정 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface UpdateFriendtalkPremiumVideoTemplateRequest extends CreateFriendtalkPremiumVideoTemplateRequest {
}
/**
* 친구톡 커머스형 템플릿 등록 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface CreateFriendtalkCommerceTemplateRequest {
/** 템플릿 명 (최대 200자) */
templateName: string;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 부가 정보 (최대 34자, 줄바꿈: 최대 1개), 커머스형에서만 사용 가능 */
additionalContent?: string;
/** 이미지 요소 (COMMERCE 타입일 경우 필수 필드, 일반 이미지로 업로드된 이미지 URL 사용) */
image: FriendtalkImage;
/** 커머스 (COMMERCE 타입에서만 사용 가능) */
commerce: FriendtalkCommerce;
/** 버튼 목록 (COMMERCE 타입일 경우 최소 1개 최대 2개, name 최대 8자) */
buttons: FriendtalkTemplateButton[];
/** 쿠폰 요소 */
coupon?: FriendtalkCoupon;
}
/**
* 친구톡 커머스형 템플릿 수정 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface UpdateFriendtalkCommerceTemplateRequest extends CreateFriendtalkCommerceTemplateRequest {
}
/**
* 친구톡 캐러셀 피드형 템플릿 등록 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface CreateFriendtalkCarouselFeedTemplateRequest {
/** 템플릿 명 (최대 200자) */
templateName: string;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 캐러셀 */
carousel: FriendtalkTemplateCarouselFeedList;
}
/**
* 친구톡 캐러셀 피드형 템플릿 수정 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface UpdateFriendtalkCarouselFeedTemplateRequest extends CreateFriendtalkCarouselFeedTemplateRequest {
}
/**
* 친구톡 캐러셀 커머스형 템플릿 등록 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface CreateFriendtalkCarouselCommerceTemplateRequest {
/** 템플릿 명 (최대 200자) */
templateName: string;
/** 연령 확인 필요 여부 (기본값: false) */
adult?: boolean;
/** 캐러셀 */
carousel: FriendtalkTemplateCarouselCommerce;
}
/**
* 친구톡 캐러셀 커머스형 템플릿 수정 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface UpdateFriendtalkCarouselCommerceTemplateRequest extends CreateFriendtalkCarouselCommerceTemplateRequest {
}
/**
* 친구톡 이미지 타입
* @description IMAGE : 일반 이미지, WIDE_IMAGE : 와이드 이미지, MAIN_WIDE_ITEMLIST_IMAGE : 메인 와이드 아이템 리스트 이미지, NORMAL_WIDE_ITEMLIST_IMAGE : 일반 와이드 아이템 리스트 이미지, CAROUSEL_FEED_IMAGE : 캐러셀 피드 이미지, CAROUSEL_COMMERCE_IMAGE : 캐러셀 커머스 이미지
*/
type FriendtalkImageType = "IMAGE" | "WIDE_IMAGE" | "MAIN_WIDE_ITEMLIST_IMAGE" | "NORMAL_WIDE_ITEMLIST_IMAGE" | "CAROUSEL_FEED_IMAGE" | "CAROUSEL_COMMERCE_IMAGE";
/**
* 친구톡 이미지 업로드 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface UploadFriendtalkImageRequest {
/** 이미지 파일 */
imageFile: Buffer;
/** 친구톡 업로드 이미지 타입 */
friendtalkImageType: FriendtalkImageType;
/** 파일명 */
filename?: string;
}
/**
* 친구톡 이미지 조회 요청
*
* @group Kakao Friendtalk Interfaces
*/
interface ListFriendtalkUploadedImagesRequest {
/** 이미지 타입 목록 */
imageTypes: FriendtalkImageType[];
/** 페이지 번호 (기본값: 1) */
pageNum?: string;
/** 조회 건수 (기본값: 15) */
pageSize?: string;
}
/**
* 알림톡 버튼 타입
* @description
* - WL: 웹 링크
* - AL: 앱 링크
* - DS: 배송 조회
* - BK: 봇 키워드
* - MD: 메시지 전달
* - BC: 상담톡 전환
* - BT: 봇 전환
* - AC: 채널 추가
* - BF: 비즈니스폼
* - P1: 이미지 전송 플러그인
* - P2: 개인정보 이용 플러그인
* - P3: 원클릭 결제 플러그인
* - TN: 전화번호
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkButtonType = "WL" | "AL" | "DS" | "BK" | "MD" | "BC" | "BT" | "AC" | "BF" | "P1" | "P2" | "P3" | "TN";
/**
* 알림톡 바로연결 타입
* @description
* - WL: 웹 링크
* - AL: 앱 링크
* - BK: 봇 키워드
* - BC: 상담톡 전환
* - BT: 봇 전환
* - BF: 비즈니스폼
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkQuickReplyType = "WL" | "AL" | "BK" | "BC" | "BT" | "BF";
/**
* 알림톡 템플릿 메시지 유형
* @description
* - BA: 기본형
* - EX: 부가 정보형
* - AD: 채널 추가형
* - MI: 복합형
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkTemplateMessageType = "BA" | "EX" | "AD" | "MI";
/**
* 알림톡 템플릿 강조 표시 타입
* @description
* - NONE: 기본
* - TEXT: 강조 표시
* - IMAGE: 이미지형
* - ITEM_LIST: 아이템리스트형
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkTemplateEmphasizeType = "NONE" | "TEXT" | "IMAGE" | "ITEM_LIST";
/**
* 알림톡 메시지 상태 코드
* @description
* - COMPLETED: 성공
* - FAILED: 실패
* - CANCEL: 취소
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkMessageStatus = "COMPLETED" | "FAILED" | "CANCEL";
/**
* 알림톡 발송 결과 코드
* @description
* - MRC01: 성공
* - MRC02: 실패
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkResultCode = "MRC01" | "MRC02";
/**
* 알림톡 대체 발송 상태 코드
* @description
* - RSC01: 대체 발송 미대상
* - RSC02: 대체 발송 대상 (발송 결과 실패 시, 대체 발송 진행)
* - RSC03: 대체 발송 중
* - RSC04: 대체 발송 성공
* - RSC05: 대체 발송 실패
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkResendStatus = "RSC01" | "RSC02" | "RSC03" | "RSC04" | "RSC05";
/**
* 알림톡 대량 발송 상태 코드
* @description
* - WAIT: 대기
* - READY: 준비
* - SENDREADY: 발송 준비
* - SENDWAIT: 발송 대기
* - SENDING: 발송 중
* - COMPLETE: 완료
* - CANCEL: 취소
* - FAIL: 실패
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkBulkStatus = "WAIT" | "READY" | "SENDREADY" | "SENDWAIT" | "SENDING" | "COMPLETE" | "CANCEL" | "FAIL";
/**
* 알림톡 메시지 타입 (결과 업데이트 조회용)
* @description
* - NORMAL: 일반 메시지
* - AUTH: 인증 메시지
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkMessageType = "NORMAL" | "AUTH";
/**
* 알림톡 템플릿 상태
* @description
* - TSC01: 요청
* - TSC02: 검수 중
* - TSC03: 승인
* - TSC04: 반려
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkTemplateStatus = "TSC01" | "TSC02" | "TSC03" | "TSC04";
/**
* 알림톡 템플릿 검수 상태
* @description
* - REG: 등록
* - REQ: 검수 요청
* - APR: 승인
* - REJ: 반려
*
* @group Kakao Alimtalk Interfaces
*/
type AlimtalkTemplateInspectionStatus = "REG" | "REQ" | "APR" | "REJ";
/**
* 알림톡 버튼 정보
* NHN API 스펙에 정의된 프로퍼티명을 정확히 사용 (camelCase)
*
* @group Kakao Alimtalk Interfaces
*/
interface AlimtalkButton {
/** 버튼 순서 (버튼이 있는 경우 필수) */
ordering: number;
/** 버튼 타입 */
type: AlimtalkButtonType;
/** 버튼 이름 (버튼이 있는 경우 필수, 최대 14자) */
name: string;
/** 모바일 웹 링크 (WL 타입 필수, 최대 500자) */
linkMo?: string;
/** PC 웹 링크 (WL 타입 선택, 최대 500자) */
linkPc?: string;
/** iOS 앱 링크 (AL 타입 필수, 최대 500자) */
schemeIos?: string;
/** 안드로이드 앱 링크 (AL 타입 필수, 최대 500자) */
schemeAndroid?: string;
/** BC/BT 타입 버튼 시 전달할 메타정보 */
chatExtra?: string;
/** BT 타입 버튼 시 연결할 봇 이벤트명 */
chatEvent?: string;
/** 비즈니스폼 ID (BF 타입 필수) */
bizFormId?: number;
/** 플러그인 ID (최대 24자) */
pluginId?: string;
/** 플러그인 실행 시 X-Kakao-Plugin-Relay-Id 헤더로 전달받을 값 */
relayId?: string;
/** 원클릭 결제 플러그인 결제 정보 */
oneClickId?: string;
/** 원클릭 결제 플러그인 상품 정보 */
productId?: string;
/** 웹 링크 버튼일 경우 "out" 설정 시 아웃 링크 */
target?: "out";
/** TN 타입 버튼 시 전달할 전화번호 */
telNumber?: string;
}
/**
* 알림톡 바로연결 정보
* NHN API 스펙에 정의된 프로퍼티명을 정확히 사용 (camelCase)
*
* @group Kakao Alimtalk Interfaces
*/
interface AlimtalkQuickReply {
/** 바로연결 순서 (바로연결이 있는 경우 필수) */
ordering: number;
/** 바로연결 타입 */
type: AlimtalkQuickReplyType;
/** 바로연결 이름 (바로연결이 있는 경우 필수, 최대 14자) */
name: string;
/** 모바일 웹 링크 (WL 타입 필수, 최대 500자) */
linkMo?: string;
/** PC 웹 링크 (WL 타입 선택, 최대 500자) */
linkPc?: string;
/** iOS 앱 링크 (AL 타입 필수, 최대 500자) */
schemeIos?: string;
/** 안드로이드 앱 링크 (AL 타입 필수, 최대 500자) */
schemeAndroid?: string;
/** BC/BT 타입 시 전달할 메타정보 */
chatExtra?: string;
/** BT 타입 시 연결할 봇 이벤트명 */
chatEvent?: string;
/** 비즈니스폼 ID (BF 타입 필수) */
bizFormId?: number;
/** 웹 링크 타입일 경우 "out" 설정 시 아웃 링크 */
target?: "out";
}
/**
* 알림톡 아이템 리스트
*
* @group Kakao Alimtalk Interfaces
*/
interface AlimtalkTemplateItem {
/** 아이템 리스트 (최소 2개, 최대 10개) */
list: Array<{
/** 타이틀 (최대 6자) */
title: string;
/** 디스크립션 (최대 23자) */
description: string;
}>;
/** 아이템 요약 정보 */
summary?: {
/** 타이틀 (최대 6자) */
title: string;
/** 디스크립션 (변수/화폐단위/숫자/쉼표/마침표만, 최대 14자) */
description: string;
};
}
/**
* 알림톡 아이템 하이라이트
*
* @group Kakao Alimtalk Interfaces
*/
interface AlimtalkTemplateItemHighlight {
/** 타이틀 (최대 30자, 섬네일 이미지 있으면 21자) */
title: string;
/** 디스크립션 (최대 19자, 섬네일 이미지 있으면 13자) */
description: string;
/** 섬네일 이미지 주소 */
imageUrl?: string;
}
/**
* 알림톡 대표 링크
*
* @group Kakao Alimtalk Interfaces
*/
interface AlimtalkTemplateRepresentLink {
/** 모바일 웹 링크 (최대 500자) */
linkMo?: string;
/** PC 웹 링크 (최대 500자) */
linkPc?: string;
/** iOS 앱 링크 (최대 500자) */
schemeIos?: string;
/** 안드로이드 앱 링크 (최대 500자) */
schemeAndroid?: string;
}
/**
* 알림톡 대체 발송 파라미터
*
* @group Kakao Alimtalk Interfaces
*/
interface AlimtalkResendParameter {
/** 발송 실패 시 문자 대체 발송 여부 */
isResend?: boolean;
/** 대체 발송 타입 (SMS/LMS), 미입력 시 템플릿 본문 길이에 따라 자동 구분 */
resendType?: "SMS" | "LMS";
/** LMS 대체 발송 제목, 미입력 시 플러스친구 ID로 발송 */
resendTitle?: string;
/** 대체 발송 내용, 미입력 시 [메시지 본문 + 웹링크 버튼명 - Mobile 링크]로 발송 */
resendContent?: string;
/** 대체 발송 발신 번호 (SMS 서비스에 등록된 발신 번호 필요) */
resendSendNo?: string;
}
/**
* 알림톡 메시지 옵션
*
* @group Kakao Alimtalk Interfaces
*/
interface AlimtalkMessageOption {
/** 메시지 내 포함된 가격/금액/결제 금액 (모먼트 광고) */
price?: number;
/** 통화 단위 (KRW, USD, EUR 등 국제 통화 코드) */
currencyType?: string;
}
/**
* 알림톡 치환 발송 수신자 정보
* (버튼/바로연결 정보 일부만 포함 - 치환용)
*
* @group Kakao Alimtalk Interfaces
*/
interface AlimtalkSubstituteRecipient {
/** 수신번호 (필수, 최대 15자) */
recipientNo: string;
/** 템플릿 파라미터 (템플릿에 치환 변수 포함 시 필수) */
templateParameter?: Record<string, string>;
/** 대체 발송 정보 */
resendParameter?: AlimtalkResendParameter;
/** 버튼 추가 정보 (치환 발송용 - ordering, chatExtra, chatEvent 등만) */
buttons?: Array<{
/** 버튼 순서 */
ordering: number;
/** BC/BT 타입 버튼 시 전달할 메타정보 */
chatExtra?: string;
/** BT 타입 버튼 시 연결할 봇 이벤트명 */
chatEvent?: string;
/** 플러그인 릴레이 ID */
relayId?: string;
/** 원클릭 결제 정보 */
oneClickId?: string;
/** 원클릭 결제 상품 정보 */
productId?: string;
/** 웹 링크 타겟 */
target?: "out";
/** 전화번호 */
telNumber?: string;
}>;
/** 바로연결 정보 (치환 발송용) */
quickReplies?: Array<{
/** 바로연결 순서 */
ordering: number;
/** BC/BT 타입 시 전달할 메타정보 */
chatExtra?: string;
/** BT 타입 시 연결할 봇 이벤트명 */
chatEvent?: string;
/** 웹 링크 타겟 */
target?: "out";
}>;
/** 수신자 그룹핑 키 (최대 100자) */
recipientGroupingKey?: string;
}
/**
* 알림톡 치환 발송 요청
*
* @group Kakao Alimtalk Interfaces
*/
interface SendAlimtalkSubstituteMessageRequest {
/** 발신 키 (필수, 정확히 40자) */
senderKey: string;
/** 등록한 발송 템플릿 코드 (필수, 최대 20자) */
templateCode: string;
/** 요청 일시 (yyyy-MM-dd HH:mm), 미입력 시 즉시 발송, 최대 60일 이후까지 예약 */
requestDate?: string;
/** 발신 그룹핑 키 (최대 100자) */
senderGroupingKey?: string;
/** 등록자 (콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 수신자 리스트 (필수, 1~1000명) */
recipientList: AlimtalkSubstituteRecipient[];
/** 메시지 옵션 */
messageOption?: AlimtalkMessageOption;
/** 통계 ID (최대 8자, 발신 검색 조건에는 포함되지 않음) */
statsId?: string;
}
/**
* 알림톡 전문 발송 수신자 정보
* (모든 정보 직접 입력)
*
* @group Kakao Alimtalk Interfaces
*/
interface AlimtalkRawRecipient {
/** 수신번호 (필수, 최대 15자) */
recipientNo: string;
/** 내용 (필수, 최대 1300자) */
content: string;
/** 제목 (최대 50자) */
templateTitle?: string;
/** 템플릿 헤더 (최대 16자) */
templateHeader?: string;
/** 아이템 */
templateItem?: AlimtalkTemplateItem;
/** 아이템 하이라이트 */
templateItemHighlight?: AlimtalkTemplateItemHighlight;
/** 대표 링크 */
templateRepresentLink?: AlimtalkTemplateRepresentLink;
/** 버튼 리스트 (최대 5개) */
buttons?: AlimtalkButton[];
/** 바로연결 리스트 (최대 5개) */
quickReplies?: AlimtalkQuickReply[];
/** 대체 발송 정보 */
resendParameter?: AlimtalkResendParameter;
/** 수신자 그룹핑 키 (최대 100자) */
recipientGroupingKey?: string;
}
/**
* 알림톡 전문 발송 요청
*
* @group Kakao Alimtalk Interfaces
*/
interface SendAlimtalkRawMessageRequest {
/** 발신 키 (필수, 정확히 40자) */
senderKey: string;
/** 등록한 발송 템플릿 코드 (필수, 최대 20자) */
templateCode: string;
/** 요청 일시 (yyyy-MM-dd HH:mm), 미입력 시 즉시 발송 */
requestDate?: string;
/** 발신 그룹핑 키 (최대 100자) */
senderGroupingKey?: string;
/** 등록자 (콘솔에서 발송 시 사용자 UUID로 저장) */
createUser?: string;
/** 수신자 리스트 (필수, 1~1000명) */
recipientList: AlimtalkRawRecipient[];
/** 메시지 옵션 */
messageOption?: AlimtalkMessageOption;
/** 통계 ID (최대 8자) */
statsId?: string;
}
/**
* 알림톡 메시지 조회 요청 (쿼리 파라미터)
* ⚠️ requestId 또는 날짜 범위 중 하나 필수
*
* @group Kakao Alimtalk Interfaces
*/
interface ListAlimtalkMessagesRequest {
/** 요청 아이디 */
requestId?: string;
/** 발송 요청 날짜 시작값 */
startRequestDate?: Date;
/** 발송 요청 날짜 끝값 */
endRequestDate?: Date;
/** 등록 날짜 시작값 */
startCreateDate?: Date;
/** 등록 날짜 끝값 */
endCreateDate?: Date;
/** 수신번호 */
recipientNo?: string;
/** 발신 키 */
senderKey?: string;
/** 템플릿 코드 */
templateCode?: string;
/** 발신 그룹핑 키 */
senderGroupingKey?: string;
/** 수신자 그룹핑 키 */
recipientGroupingKey?: string;
/** 요청 상태 (COMPLETED/FAILED/CANCEL) */
messageStatus?: AlimtalkMessageStatus;
/** 발송 결과 (MRC01: 성공, MRC02: 실패) */
resultCode?: AlimtalkResultCode;
/** 등록자 */
createUser?: string;
/** 페이지 번호 (기본값: 1) */
pageNum?: number;
/** 조회 건수 (기본값: 15, 최대: 1000) */
pageSize?: number;
}
/**
* 알림톡 메시지 결과 업데이트 조회 요청
*
* @group Kakao Alimtalk Interfaces
*/
interface ListAlimtalkMessageResultsRequest {
/** 발송 결과 업데이트 조회 시작 시간 (필수) */
startUpdateDate: Date;
/** 발송 결과 업데이트 조회 종료 시간 (필수) */
endUpdateDate: Date;
/** 알림톡 메시지 타입 (NORMAL: 일반, AUTH: 인증) */
alimtalkMessageType?: AlimtalkMessageType;
/** 페이지 번호 (기본값: 1) */
pageNum?: number;
/** 조회 건수 (기본값: 15, 최대: 1000) */
pageSize?: number;
}
/**
* 알림톡 대량 발송 목록 조회 요청 (쿼리 파라미터)
* ⚠️ requestId 또는 날짜 범위 중 하나 필수
*
* @group Kakao Alimtalk Interfaces
*/
interface ListAlimtalkMassMessagesRequest {
/** 요청 ID */
requestId?: string;
/** 발송 날짜 시작 */
startRequestDate?: Date;
/** 발송 날짜 종료 */
endRequestDate?: Date;
/** 등록 날짜 시작 */
startCreateDate?: Date;
/** 등록 날짜 종료 */
endCreateDate?: Date;
/** 페이지 번호 (기본값: 1) */
pageNum?: number;
/** 조회 건수 (기본값: 15, 최대: 1000) */
pageSize?: number;
}
/**
* 알림톡 대량 발송 수신자 목록 조회 요청 (쿼리 파라미터)
*
* @group Kakao Alimtalk Interfaces
*/
interface ListAlimtalkMassRecipientsRequest {
/** 발송 날짜 시작 */
startRequestDate?: Date;
/** 발송 날짜 종료 */
endRequestDate?: Date;
/** 등록 날짜 시작 */
startCreateDate?: Date;
/** 등록 날짜 종료 */
endCreateDate?: Date;
/** 페이지 번호 (기본값: 1) */
pageNum?: number;
/** 조회 건수 (기본값: 15, 최대: 1000) */
pageSize?: number;
}
/**
* 알림톡 템플릿 등록 요청
*
* @group Kakao Alimtalk Interfaces
*/
interface CreateAlimtalkTemplateRequest {
/** 템플릿 코드 (필수, 최대 20자) */
templateCode: string;
/** 템플릿명 (필수, 최대 150자) */
templateName: string;
/** 템플릿 본문 (필수, 최대 1300자) */
templateContent: string;
/** 메시지 유형 (BA/EX/AD/MI, 기본값: BA) */
templateMessageType?: AlimtalkTemplateMessageType;
/** 강조 표시 타입 (NONE/TEXT/IMAGE/ITEM_LIST, 기본값: NONE) */
templateEmphasizeType?: AlimtalkTemplateEmphasizeType;
/** 부가 정보 (부가 정보형/복합형일 경우 필수) */
templateExtra?: string;
/** 템플릿 제목 (최대 50자) */
templateTitle?: string;
/** 템플릿 보조 문구 (최대 50자) */
templateSubtitle?: string;
/** 템플릿 헤더 (최대 16자) */
templateHeader?: string;
/** 아이템 */
templateItem?: AlimtalkTemplateItem;
/** 아이템 하이라이트 */
templateItemHighlight?: AlimtalkTemplateItemHighlight;
/** 대표 링크 */
templateRepresentLink?: AlimtalkTemplateRepresentLink;
/** 이미지명 (업로드한 파일명) */
templateImageName?: string;
/** 이미지 URL */
templateImageUrl?: string;
/** 보안 템플릿 여부 (기본값: false) */
securityFlag?: boolean;
/** 템플릿 카테고리 코드 (기본값: 999999) */
categoryCode?: string;
/** 버튼 리스트 (최대 5개) */
buttons?: AlimtalkButton[];
/** 바로연결 리스트 (최대 5개) */
quickReplies?: AlimtalkQuickReply[];
}
/**
* 알림톡 템플릿 수정 요청
* (templateCode 제외)
*
* @group Kakao Alimtalk Interfaces
*/
type UpdateAlimtalkTemplateRequest = Omit<CreateAlimtalkTemplateRequest, "templateCode">;
/**
* 알림톡 템플릿 조회 요청 (쿼리 파라미터)
*
* @group Kakao Alimtalk Interfaces
*/
interface ListAlimtalkTemplatesRequest {
/** 템플릿 코드 */
templateCode?: string;
/** 템플릿명 */
templateName?: string;
/** 템플릿 상태 */
templateStatus?: string;
/** 페이지 번호 (기본값: 1) */
pageNum?: number;
/** 조회 건수 (기본값: 15, 최대: 1000) */
pageSize?: number;
}
/**
* 알림톡 템플릿 문의 요청
*
* @group Kakao Alimtalk Interfaces
*/
interface CreateAlimtalkTemplateCommentRequest {
/** 문의 내용 */
comment: string;
}
/**
* 알림톡 플러그인 등록 요청
*
* @group Kakao Alimtalk Interfaces
*/
interface CreateAlimtalkPluginRequest {
/** 플러그인 타입 */
pluginType: string;
/** 플러그인 정보 */
pluginInfo: Record<string, unknown>;
}
/**
* 알림톡 플러그인 수정 요청
*
* @group Kakao Alimtalk Interfaces
*/
type UpdateAlimtalkPluginRequest = CreateAlimtalkPluginRequest;
/**
* 알림톡 대체발송 SMS AppKey 등록 요청
*
* @group Kakao Alimtalk Interfaces
*/
interface RegisterAlimtalkFailbackAppKeyRequest {
/** 대체 발송으로 설정할 SMS 서비스 앱키 */
resendAppKey: string;
}
/**
* 알림톡 대체발송 설정 등록 요청
*
* @group Kakao Alimtalk Interfaces
*/
interface RegisterAlimtalkFailbackSettingRequest {
/** 발신 키 (40자) */
senderKey: string;
/** 발송 실패 시 문자 대체발송 여부 */
isResend: boolean;
/** 대체 발송 발신번호 (SMS 서비스에 등록된 번호) */
resendSendNo: string;
}
/**
* 푸시 타입
*
* @group Push Interfaces
*/
type PushType = "FCM" | "APNS" | "APNS_SANDBOX" | "APNS_VOIP" | "APNS_SANDBOXVOIP" | "TENCENT" | "ADM";
/**
* 메시지 타입
*
* @group Push Interfaces
*/
type PushMessageType = "NOTIFICATION" | "AD";
/**
* 발송 대상 타입
*
* @group Push Interfaces
*/
type PushTargetType = "ALL" | "UID" | "TAG";
/**
* 메시지 상태
*
* @group Push Interfaces
*/
type PushMessageStatus = "READY" | "PROCESSING" | "COMPLETE" | "CANCEL_NO_TARGET" | "CANCEL_INVALID_CERTIFICATE" | "CANCEL_INVALID_MESSAGE" | "CANCEL_UNSUPPORTED_MESSAGE_TYPE" | "CANCEL_UNAUTHORIZED" | "CANCEL_UNKNOWN";
/**
* 예약 상태
*
* @group Push Interfaces
*/
type ReservationStatus = "RESERVED" | "COMPLETE";
/**
* 스케줄 상태
*
* @group Push Interfaces
*/
type ScheduleStatus = "READY" | "SENDING" | "CANCELED" | "DONE";
/**
* 스케줄 타입
*
* @group Push Interfaces
*/
type ScheduleType = "EVERY_DAY" | "EVERY_WEEK" | "EVERY_MONTH";
/**
* 요일
*
* @group Push Interfaces
*/
type DayOfWeek = "SUNDAY" | "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY";
/**
* 통계 이벤트 카테고리
*
* @group Push Interfaces
*/
type EventCategory = "MESSAGE" | "TOKEN_REGISTRATION" | "TOKEN_LANGUAGE" | "TOKEN_COUNTRY" | "TOKEN_AGREEMENT";
/**
* 리치 메시지 버튼 타입
*
* @group Push Interfaces
*/
type RichButtonType = "REPLY" | "DEEP_LINK" | "OPEN_APP" | "OPEN_URL" | "DISMISS";
/**
* 미디어 소스 타입
*
* @group Push Interfaces
*/
type MediaSourceType = "REMOTE" | "LOCAL";
/**
* 미디어 타입
*
* @note VEDIO는 API 스펙 표기를 그대로 유지합니다. (VIDEO의 오타 가능성)
*
* @group Push Interfaces
*/
type MediaType = "IMAGE" | "GIF" | "VEDIO" | "AUDIO";
/**
* 토큰 타입 (Contact 타입)
*
* @group Push Interfaces
*/
type ContactType = "TOKEN_FCM" | "TOKEN_APNS" | "TOKEN_APNS_SANDBOX" | "TOKEN_TENCENT" | "TOKEN_ADM";
/**
* 통계 타입
*
* @group Push Interfaces
*/
type StatisticsType = "NORMAL" | "MINUTELY" | "HOURLY" | "DAILY" | "BY_DAY";
/**
* 시간 단위
*
* @group Push Interfaces
*/
type TimeUnit = "MINUTES" | "HOURS" | "DAYS";
/**
* 통계 기준
*
* @group Push Interfaces
*/
type StatsCriteria = "EVENT" | "EXTRA_1" | "EXTRA_2" | "EXTRA_3" | "TEMPLATE_ID";
/**
* 푸시 토큰 정보
*
* @group Push Interfaces
*/
interface PushToken {
/** 푸시 타입 */
pushType: PushType;
/** 푸시 메시지 수신 동의 */
isNotificationAgreement: boolean;
/** 광고성 푸시 메시지 수신 동의 */
isAdAgreement: boolean;
/** 야간 광고성 푸시 메시지 수신 동의 */
isNightAdAgreement: boolean;
/** IANA 타임존 (e.g. Asia/Seoul) */
timezoneId: string;
/** 국가 코드 (ISO 3166-1) */
country: string;
/** 언어 코드 (ISO 639) */
language: string;
/** 사용자 ID */
uid: string;
/** 토큰 */
token: string;
/** 디바이스 ID */
deviceId: string;
/** 토큰 업데이트 일시 */
updatedDateTime: string;
/** 광고성 푸시 수신 동의 일시 */
adAgreementDateTime: string;
/** 야간 광고성 푸시 수신 동의 일시 */
nightAdAgreementDateTime: string;
/** 토큰의 최근 등록 요청 일시 */
activatedDateTime: string;
}
/**
* 무효 토큰 정보
*
* @group Push Interfaces
*/
interface InvalidToken {
/** 메시지 ID */
messageId: number;
/** 사용자 ID */
uid: string;
/** 토큰 */
token: string;
/** 푸시 타입 */
pushType: string;
/** 생성 일시 */
createdDateTime: string;
}
/**
* 리치 메시지 버튼
*
* @group Push Interfaces
*/
interface RichMessageButton {
/** 버튼 이름 */
name: string;
/** 버튼 타입 */
buttonType: RichButtonType;
/** URL (DEEP_LINK, OPEN_URL 타입 시) */
link?: string;
/** 힌트 메시지 (REPLY 타입 시) */
hint?: string;
}
/**
* 리치 메시지 미디어
*
* @group Push Interfaces
*/
interface RichMessageMedia {
/** 소스 타입 */
sourceType: MediaSourceType;
/** 미디어 URL 또는 로컬 리소스 경로 */
source: string;
/** 미디어 타입 */
mediaType: MediaType;
/** 파일 확장자 */
extension: string;
/** Android 미디어 클릭 시 펼침 여부 */
expandable?: boolean;
}
/**
* 리치 메시지 큰 아이콘
*
* Android 전용
*
* @group Push Interfaces
*/
interface RichMessageLargeIcon {
/** 소스 타입 */
sourceType: MediaSourceType;
/** 아이콘 URL 또는 로컬 리소스 경로 */
source: string;
}
/**
* 리치 메시지 그룹
*
* Android 전용
*
* @group Push Interfaces
*/
interface RichMessageGroup {
/** 그룹 키 */
key: string;
/** 알림 모음 설명 */
description?: string;
}
/**
* 리치 메시지
*
* 푸시 알림에 버튼, 이미지 등을 추가할 수 있습니다.
*
* @group Push Interfaces
*/
interface RichMessage {
/** 버튼 목록 (최대 3개) */
buttons?: RichMessageButton[];
/** 미디어 (공통) */
media?: RichMessageMedia;
/** Android 전용 미디어 */
androidMedia?: RichMessageMedia;
/** iOS 전용 미디어 */
iosMedia?: RichMessageMedia;
/** Android 전용 큰 아이콘 */
largeIcon?: RichMessageLargeIcon;
/** Android 전용 그룹 */
group?: RichMessageGroup;
}
/**
* 토큰 생성 요청
*
* @note SDK가 직접 호출하는 Public API
*
* @group Push Interfaces
*/
interface CreatePushTokenRequest {
/** 토큰 (최대 1,600자, 한글 불가) */
token: string;
/** 기존 토큰 (토큰 변경 시, 최대 1,600자) */
oldToken?: string;
/** 푸시 타입 */
pushType: PushType;
/** 푸시 메시지 수신 동의 */
isNotificationAgreement: boolean;
/** 광고성 푸시 메시지 수신 동의 */
isAdAgreement: boolean;
/** 야간 광고성 푸시 메시지 수신 동의 */
isNightAdAgreement: boolean;
/** IANA 타임존 (e.g. Asia/Seoul) */
timezoneId: string;
/** 국가 코드 (ISO 3166-1 alpha-2/3, 3글자) */
country: string;
/** 언어 코드 (ISO 639-1/2, 최대 8글자) */
language: string;
/** 사용자 ID (emoji 불가, 최대 64글자) */
uid: string;
/** 디바이스 ID (최대 36글자) */
deviceId: string;
}
/**
* 토큰 목록 조회 요청 (커서 기반)
*
* @group Push Interfaces
*/
interface ListPushTokensByCursorRequest {
/** UID 커서 (페이지 이동 시 필수) */
cursorUid?: string;
/** 토큰 커서 (페이지 이동 시 필수) */
cursorToken?: string;
/** 조회 개수 (기본값/최댓값 1,000) */
limit?: number;
}
/**
* 유효하지 않은 토큰 조회 요청
*
* @group Push Interfaces
*/
interface ListInvalidPushTokensRequest {
/** 페이지 인덱스 (기본값 0) */
pageIndex?: number;
/** 페이지 크기 (기본값 25, 최댓값 100) */
pageSize?: number;
/** 조회 시작 일시 (ISO 8601, 최근 30일까지) */
from?: string;
/** 조회 종료 일시 (ISO 8601, 최근 30일까지) */
to?: string;
/** 유효하지 않은 토큰이 발생한 메시지 ID */
messageId?: number;
}
/**
* UID에 태그 추가 요청
*
* @note Secret Key 불필요한 Public API
*
* @group Push Interfaces
*/
interface AddUidTagsRequest {
/** 추가할 태그 ID 목록 (최소 1개, 최대 16개) */
tagIds: string[];
}
/**
* UID의 태그 수정 요청
*
* @note Secret Key 불필요한 Public API
*
* @group Push Interfaces
*/
interface UpdateUidTagsRequest {
/** 수정할 태그 ID 목록 (최대 16개) */
tagIds: string[];
}
/**
* 메시지 발송 요청
*
* @group Push Interfaces
*/
interface SendPushMessageRequest {
/** 발송 대상 */
target: MessageTarget;
/** 메시지 내용 (최대 8,192자) */
content: MessageContent;
/** 메시지 타입 */
messageType: PushMessageType;
/** 문의처 (광고 메시지 시 필수) */
contact?: string;
/** 수신 거부 안내 (광고 메시지 시 필수) */
removeGuide?: string;
/** 메시지 유효 시간 (분, 1~60, 기본값 10) */
timeToLiveMinute?: number;
/** 전용 리소스 ID */
provisionedResourceId?: string;
/** 광고 문구 위치 ('TITLE' 또는 'BODY', 기본값 'TITLE') */
adWordPosition?: "TITLE" | "BODY";
/** 통계 이벤트 키 */
statsId?: string;
}
/**
* 발송 대상
*
* @group Push Interfaces
*/
interface MessageTarget {
/** 대상 타입 */
type: PushTargetType;
/**
* UID 목록(최대 10,000개) 또는 TAG 조건 문자열
*
* - type === "UID" 인 경우: string[] (UID 배열)
* - type === "TAG" 인 경우: string (TAG 조건)
* - type === "ALL" 인 경우: 생략
*/
to?: string[] | string;
/** 푸시 타입 필터 */
pushTypes?: PushType[];
/** 국가 코드 필터 (ISO 3166-1) */
countries?: string[];
}
/**
* 메시지 내용
*
* 기본 언어('default')와 다국어 지원
*
* @group Push Interfaces
*/
interface MessageContent {
/** 기본 메시지 (필수) */
default: MessageContentDetail;
/** 다국어 메시지 (선택, 언어 코드를 키로 사용) */
[languageCode: string]: MessageContentDetail;
}
/**
* 메시지 상세 내용
*
* @group Push Interfaces
*/
interface MessageContentDetail {
/** 제목 */
title?: string;
/** 본문 */