UNPKG

@awesome-message/sdk

Version:

Awesome Message SDK for admin, messaging, and notification services

2,037 lines (2,022 loc) 269 kB
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; /** 본문 */