# 카카오 알림톡 템플릿 관리하기 카카오 알림톡은 사전에 검수된 알림톡 템플릿을 기반으로 발송됩니다. 센드온 SDK는 카카오 알림톡 템플릿을 쉽게 생성, 조회, 관리할 수 있는 기능을 제공합니다. 이 문서에서는 알림톡 템플릿 관리와 관련된 주요 기능들을 설명합니다.
## 알림톡 템플릿 생성 ### 설명 새로운 알림톡 템플릿을 생성합니다. 생성된 알림톡 템플릿은 검수를 거쳐야 발송에 사용할 수 있습니다. ### 요청 예제 ```typescript async function createTemplate() { const sendProfileId = SEND_PROFILE_ID; // 채널 ID (예: 'alipeople') const result = await sendon.kakao.createTemplate(sendProfileId, { templateName: '카드 승인 알림', templateContent: '안녕하세요 #{이름}님, 카드 승인이 완료되었습니다.\n사용처: #{사용처}\n일시: #{일시}', templateMessageType: 'BA', // BA, EX, AD, MI templateEmphasizeType: 'TEXT', // NONE, TEXT, IMAGE, ITEM_LIST templateTitle: '123,456원', templateSubtitle: '승인금액', buttons: [ { name: '자세히 보기', type: 'WL', // 웹 링크 urlMobile: 'https://example.com/welcome', urlPc: 'https://example.com/welcome', }, ], }); console.log('템플릿 생성 결과:', JSON.stringify(result, null, 2)); return result; } ``` ### 파라미터 | 파라미터 | 타입 | 설명 | 필수 여부 | | --------------------- | ------ | ---------------------------------------------------------------- | ----- | | sendProfileId | string | 채널 ID | 필수 | | templateName | string | 템플릿 이름 (선택이지만 실무에서는 필수 입력 권장) | 선택 | | templateContent | string | 템플릿 본문 내용 | 필수 | | templateMessageType | string | 템플릿 메시지 타입 (`BA`, `EX`, `AD`, `MI`) | 선택 | | templateEmphasizeType | string | 강조 표기 타입 (`NONE`, `TEXT`, `IMAGE`, `ITEM_LIST`) | 선택 | | templateTitle | string | 강조 표기형 제목 (`TEXT` 타입 사용 시 필수) | 선택 | | templateSubtitle | string | 강조 표기형 부제목 (`TEXT` 타입 사용 시 필수) | 선택 | | templateExtra | string | 부가 정보 (`EX`, `MI` 타입에서 사용) | 선택 | | templateImageUrl | string | 이미지 강조형(`IMAGE`)에서 사용할 이미지 URL | 선택 | | templateImageName | string | 이미지 파일명 (이미지 강조형) | 선택 | | securityFlag | boolean | 보안 템플릿 여부 (`true` 설정 시 보안 강조) | 선택 | | buttons | array | 버튼 정보 배열 (최대 5개) | 선택 | | fallback | object | 카카오 메시지 실패 시 대체 문자 설정 (`type`, `senderNumber` 등) | 선택 | #### 버튼 파라미터 | 파라미터 | 타입 | 설명 | 필수 여부 | | ------------- | ------ | ----------------------------------------------------------------- | ------ | | name | string | 버튼 텍스트 | 필수 | | type | string | 버튼 타입 (`WL`, `AL`, `BK`, `MD`, `DS`, `AC`) | 필수 | | ordering | number | 버튼 노출 순서 (0부터 시작, 미입력 시 생성 순서) | 선택 | | urlMobile | string | 모바일 링크 URL (`WL`, `AL` 사용 시) | 조건부 필수 | | urlPc | string | PC 링크 URL (`WL`, `AL` 사용 시) | 조건부 필수 | | schemeAndroid | string | Android 앱 딥링크 (`AL` 사용 시) | 조건부 필수 | | schemeIos | string | iOS 앱 딥링크 (`AL` 사용 시) | 조건부 필수 | ### 응답 예시 ```json { "code": 200, "message": "성공", "data": { "id": "생성된_템플릿ID", "profileId": "채널(발신프로필)ID", "templateName": "회원가입 완료 안내", "status": "NEED_REVIEW", "templateMessageType": "BA", "templateEmphasizeType": "TEXT", "templateContent": "안녕하세요 #{이름}님, 회원가입이 완료되었습니다.\n가입일시: #{가입일시}", "createdAt": "2025-01-01T00:00:00.000Z" } } ``` ## 알림톡 템플릿 수정 ### 설명 검수 전 상태의 템플릿을 수정합니다. 검수가 완료된 템플릿은 수정할 수 없습니다. ### 요청 예제 ```typescript async function updateTemplate() { const sendProfileId = SEND_PROFILE_ID; // 채널 ID (예: 'alipeople') const templateId = TEMPLATE_ID; // 템플릿 ID const result = await sendon.kakao.updateTemplate(sendProfileId, templateId, { templateName: '회원가입 완료 안내 (수정)', templateContent: '안녕하세요 #{이름}님, 회원가입이 완료되었습니다.\n가입일시: #{가입일시}\n감사합니다.', templateEmphasizeType: 'TEXT', buttons: [ { name: '홈으로 가기', type: 'WL', urlMobile: 'https://example.com/home', urlPc: 'https://example.com/home', }, ], }); console.log('템플릿 수정 결과:', JSON.stringify(result, null, 2)); return result; } ``` ### 파라미터 | 파라미터 | 타입 | 설명 | 필수 여부 | | --------------------- | ------ | ----------------------------------------- | ----- | | sendProfileId | string | 채널 ID | 필수 | | templateId | string | 템플릿 ID | 필수 | | templateName | string | 템플릿 이름 | 선택 | | templateContent | string | 템플릿 내용 | 선택 | | templateEmphasizeType | string | 강조 표기 타입 (NONE, TEXT, IMAGE) | 선택 | | templateTitle | string | 강조 표기형 title (TEXT 타입에서만 사용) | 선택 | | templateSubtitle | string | 강조 표기형 subtitle (TEXT 타입에서만 사용) | 선택 | | templateExtra | string | 부가 정보 | 선택 | | buttons | array | 버튼 정보 배열 (최대 5개) | 선택 | ### 응답 예시 ```json { "code": 200, "message": "성공" } ``` ## 알림톡 템플릿 목록 조회 ### 설명 등록된 카카오 알림톡 템플릿 목록을 조회합니다. ### 요청 예제 ```typescript async function getTemplates() { const sendProfileId = SEND_PROFILE_ID; // 채널 ID (예: 'alipeople') const result = await sendon.kakao.getTemplates(sendProfileId, { limit: 10, // 조회할 최대 템플릿 수 // 선택적 파라미터 // status: 'APPROVED', // 특정 상태의 템플릿만 조회 // sort: 'CREATED_AT', // 정렬 기준 // keyword: '회원가입', // 검색 키워드 // nextCursor: 'cursor_value' // 페이징을 위한 커서 값 }); console.log('템플릿 목록:', JSON.stringify(result, null, 2)); return result; } ``` ### 파라미터 | 파라미터 | 타입 | 설명 | 필수 여부 | | ------------------ | ------ | ------------------------------------------------------------------------------- | ----- | | sendProfileId | string | 채널 ID | 필수 | | options.limit | number | 조회할 최대 템플릿 수 | 선택 | | options.status | string | 특정 상태의 템플릿만 조회 (NEED\_REVIEW, IN\_REVIEW, APPROVED, REJECTED, DORMANT, DELETED) | 선택 | | options.sort | string | 정렬 기준 (CREATED\_AT, RECENT\_USED) | 선택 | | options.keyword | string | 검색 키워드 | 선택 | | options.nextCursor | string | 페이징을 위한 커서 값 | 선택 | ### 응답 예시 ```json { "code": 200, "message": "성공", "data": { "templates": [ { "id": "템플릿ID_1", "profileId": "채널(발신프로필)ID", "templateCode": "템플릿코드_1", "templateName": "회원가입 안내", "status": "APPROVED", "templateMessageType": "BA", "templateContent": "안녕하세요 #{이름}님, 회원가입이 완료되었습니다.", "createdAt": "2023-01-01T00:00:00.000Z" }, { "id": "템플릿ID_2", "profileId": "채널(발신프로필)ID", "templateCode": "템플릿코드_2", "templateName": "주문 완료 안내", "status": "APPROVED", "templateMessageType": "BA", "templateContent": "#{이름}님, 주문이 완료되었습니다.", "createdAt": "2023-01-02T00:00:00.000Z" } ], "nextCursor": "next_cursor_value" } } ``` ## 알림톡 템플릿 상세 조회 ### 설명 특정 템플릿의 상세 정보를 조회합니다. ### 요청 예제 ```typescript async function getTemplateDetails() { const sendProfileId = SEND_PROFILE_ID; // 채널 ID (예: 'alipeople') const templateId = TEMPLATE_ID; // 템플릿 ID const result = await sendon.kakao.getTemplate(sendProfileId, templateId); console.log('템플릿 상세 정보:', result); return result; } ``` ### 파라미터 | 파라미터 | 타입 | 설명 | 필수 여부 | | ------------- | ------ | --------- | ----- | | sendProfileId | string | 채널 ID | 필수 | | templateId | string | 템플릿 ID | 필수 | ### 응답 예시 ```json { "code": 200, "message": "성공", "data": { "id": "템플릿ID", "profileId": "채널(발신프로필)ID", "templateCode": "템플릿코드", "templateName": "회원가입 안내", "status": "APPROVED", "templateMessageType": "BA", "templateEmphasizeType": "TEXT", "templateContent": "안녕하세요 #{이름}님, 회원가입이 완료되었습니다.\n가입일시: #{가입일시}", "buttons": [ { "name": "자세히 보기", "type": "WL", "urlMobile": "https://example.com", "urlPc": "https://example.com" } ], "templateTitle": "회원가입 안내", // 강조 표기형(TEXT)에서만 사용 "templateSubtitle": "환영합니다", // 강조 표기형(TEXT)에서만 사용 "kepStatus": "O", "createdAt": "2023-01-01T00:00:00.000Z", "updatedAt": "2023-01-01T00:00:00.000Z", "lastUsedAt": "2023-01-05T00:00:00.000Z" } } ``` ## 알림톡 템플릿 삭제 ### 설명 더 이상 사용하지 않는 템플릿을 삭제합니다. ### 요청 예제 ```typescript async function deleteTemplate() { const sendProfileId = SEND_PROFILE_ID; // 채널 ID (예: 'alipeople') const templateId = TEMPLATE_ID; // 템플릿 ID const result = await sendon.kakao.deleteTemplate(sendProfileId, templateId); console.log('템플릿 삭제 결과:', result); return result; } ``` ### 파라미터 | 파라미터 | 타입 | 설명 | 필수 여부 | | ------------- | ------ | --------- | ----- | | sendProfileId | string | 채널 ID | 필수 | | templateId | string | 템플릿 ID | 필수 | ### 응답 예시 ```json { "code": 200, "message": "성공" } ``` ## 알림톡 템플릿 검수 요청 ### 설명 생성한 템플릿을 카카오에 검수 요청합니다. ### 요청 예제 ```typescript async function requestTemplateReview() { const sendProfileId = SEND_PROFILE_ID; // 채널 ID (예: 'alipeople') const templateId = TEMPLATE_ID; // 템플릿 ID const result = await sendon.kakao.requestReview(sendProfileId, templateId); console.log('템플릿 검수 요청 결과:', result); return result; } ``` ### 파라미터 | 파라미터 | 타입 | 설명 | 필수 여부 | | ------------- | ------ | --------- | ----- | | sendProfileId | string | 채널 ID | 필수 | | templateId | string | 템플릿 ID | 필수 | ### 응답 예시 ```json { "code": 200, "message": "성공" } ``` ## 알림톡 템플릿 검수 취소 ### 설명 검수 중인 템플릿의 검수 요청을 취소합니다. ### 요청 예제 ```typescript async function cancelTemplateReview() { const sendProfileId = SEND_PROFILE_ID; // 채널 ID (예: 'alipeople') const templateId = TEMPLATE_ID; // 템플릿 ID const result = await sendon.kakao.cancelReview(sendProfileId, templateId); console.log('템플릿 검수 취소 결과:', result); return result; } ``` ### 파라미터 | 파라미터 | 타입 | 설명 | 필수 여부 | | ------------- | ------ | --------- | ----- | | sendProfileId | string | 채널 ID | 필수 | | templateId | string | 템플릿 ID | 필수 | ### 응답 예시 ```json { "code": 200, "message": "성공" } ``` ## 알림톡 템플릿 메시지 타입 알림톡 템플릿은 다음과 같은 메시지 타입을 지원합니다: | 타입 코드 | 타입명 | 설명 | | ----- | ---------- | -------------------------------------------- | | BA | 기본형 | 일반적인 텍스트 메시지 (최대 1,000자) | | EX | 부가 정보형 | 메시지 하단에 부가 정보를 포함하는 타입 | | AD | 채널 추가형 | 카카오톡 채널 추가 버튼을 포함하는 타입 | | MI | 복합형 | 부가 정보와 채널 추가를 모두 포함하는 타입 | ## 강조 표기 타입 templateEmphasizeType을 통해 메시지의 강조 표시 방식을 설정할 수 있습니다: | 타입 | 설명 | | --------- | ----------------------------------------------------- | | NONE | 강조 표기 없음 | | TEXT | 강조 표기형 - title과 subtitle을 포함한 텍스트 강조 (templateTitle, templateSubtitle 사용) | | IMAGE | 이미지형 - 메시지에 이미지를 포함 | ## 알림톡 템플릿 상태 카카오 알림톡 템플릿은 다음과 같은 상태를 가질 수 있습니다: | 상태 | 설명 | | ------------ | ---------------------------------- | | NEED\_REVIEW | 검수 필요 - 템플릿 생성 후 검수 요청이 필요한 상태 | | IN\_REVIEW | 검수 진행중 - 카카오에서 검수 중인 상태 | | APPROVED | 검수 통과 - 검수가 완료되어 알림톡 발송에 사용 가능한 상태 | | REJECTED | 검수 반려 - 검수가 반려된 상태, 수정 후 재검수 필요 | | DORMANT | 휴면 - 장기간 사용하지 않아 휴면 상태로 전환됨 | | DELETED | 삭제 - 삭제된 템플릿 | ### 알림톡 템플릿 휴면 정책 템플릿 등록 후 1년간 동일한 상태로 유지되거나 추가 발송이 없는 경우 휴면 상태로 전환됩니다. 휴면 상태로 1년 경과 시 템플릿이 삭제되며, 삭제된 템플릿은 복구할 수 없습니다. 휴면 상태 해제 후 30일간 알림톡 발송 이력이 없을 경우, 재휴면 처리됩니다. ## 주의사항 1. **템플릿 검수** * 모든 알림톡 템플릿은 카카오의 검수를 거쳐야만 발송에 사용할 수 있습니다. * 검수에는 일반적으로 영업일 기준 1-2일이 소요됩니다. * 검수 반려 시 사유를 확인하고 수정하여 재검수를 요청해야 합니다. 2. **템플릿 변수** * 템플릿에 변수를 사용할 경우 `#{변수명}` 형식으로 작성합니다. * 변수는 알림톡 발송 시 실제 값으로 치환됩니다. * 변수명은 한글, 영문, 숫자, 특수문자 '\_' 를 사용할 수 있습니다. 3. **템플릿 수정 제한** * 검수가 완료된 템플릿은 수정할 수 없습니다. * 검수 완료된 템플릿을 변경하려면 새로운 템플릿을 생성해야 합니다. 4. **템플릿 휴면 및 삭제** * 1년간 사용되지 않은 템플릿은 휴면 상태로 전환됩니다. * 휴면 상태가 1년 이상 지속되면 템플릿이 자동 삭제됩니다. * 휴면 상태 해제 후 30일간 사용하지 않으면 다시 휴면 상태로 전환됩니다. 5. **템플릿 개수 제한** * 하나의 채널당 생성 가능한 템플릿 수는 제한되어 있습니다. * 사용하지 않는 템플릿은 삭제하여 관리하는 것이 좋습니다. ## 관련 링크 * [카카오 알림톡 발송하기](https://sdk.sendon.io/docs/카카오-알림톡-발송하기) * [카카오 채널 연동하기](https://sdk.sendon.io/docs/카카오-채널-연동하기) * [카카오 채널 관리하기](https://sdk.sendon.io/docs/카카오-채널-관리하기) * [카카오 비즈니스 메시지 가이드](https://business.kakao.com/info/bizmessage/)