검수에서 반려됐거나, 등록만 해 두고 아직 검수를 요청하지 않은 템플릿을 고칠 때 써요.
덮어쓰기라 요청에 없는 필드는 지워져요. 바꿀 값만 보내는 부분 수정은 지원하지 않아요. 템플릿 상세로 현재 값을 읽어 고칠 곳만 바꾼 뒤, 전체를 그대로 다시 보내요.
이름만 바꾸려고 name 만 보내면 본문과 메시지 유형이 비어 3017 로 거부돼요. content 와 msg_type 까지 보내도 빠진 버튼·이미지·강조 설정·태그는 지워져요.
이미지를 빼면 카카오에서도 삭제돼요
이미 올라간 템플릿을 고치면 카카오에 그대로 수정 요청이 나가요. 이미지 필드를 빠뜨리면 부트페이 쪽뿐 아니라 카카오에 올려 둔 이미지까지 삭제로 반영돼요.
수정할 수 있는 상태
| 상태 | 수정 가능 |
|---|---|
| 아직 올리기 전 | 가능해요 |
| REG (등록) | 가능해요 |
| REJ (승인 반려) | 가능해요. 고친 뒤 다시 검수를 요청해요 |
| KRR (등록 거절) | 가능해요 |
| REQ (검수 중) | 거부돼요 — 결과를 기다려요 |
| APR (승인) | 거부돼요 — 승인된 문구는 바꿀 수 없어요 |
승인된 템플릿의 문구를 바꿔야 한다면 새 템플릿을 만들어 검수를 다시 받아요.
요청 파라미터
파라미터는 템플릿 생성과 같아요. ksp_id와 register만 받지 않아요.
필수 는 요청이 거부되는지의 기준이에요. 전체를 덮어쓰기 때문에 N 인 필드도 빼면 그 값이 지워지니, 유지하려면 현재 값을 그대로 실어 보내요.
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
id |
String | 필수 | 템플릿 문서 id (경로 파라미터) |
name |
String | 선택 | 템플릿 이름. 빼면 비워져요 |
content |
String | 필수 | 본문 (최대 1000자). 빼면 3017 |
msg_type |
String | 필수 | BA·EX·AD·MI. 생성과 달리 기본값이 없어서 빼면 3017 |
emphasize_type |
String | 선택 | NONE·TEXT·IMAGE·ITEM_LIST |
emphasize_title |
String | 선택 | 강조 타이틀 (최대 50자) |
emphasize_subtitle |
String | 선택 | 강조 보조문구 (최대 40자). 변수를 쓸 수 없어요 (3017) |
template_extra |
String | 선택 | 부가정보 문구 |
template_header |
String | 선택 | 아이템리스트형 헤더 (최대 16자) |
item_highlight |
Object | 선택 | 아이템 하이라이트 |
template_item |
Object | 선택 | 아이템 리스트 |
buttons |
Array | 선택 | 버튼 (최대 5개) |
image_url |
String | 선택 | 카카오 사본 이미지 URL |
storage_image_url |
String | 선택 | 원본 이미지 URL. 빈 값으로 보내면 이미지 삭제로 처리돼요 |
security_flag |
Boolean | 선택 | 보안 템플릿 여부 |
category |
String | 선택 | 분류 |
tags |
Array | 선택 | 태그 |
examples |
Object | 선택 | 변수 예문(표시용) |
template_code |
String | 선택 | 템플릿 코드 변경. 아직 올리기 전일 때만 반영되고, 이미 올라간 템플릿에서는 무시돼요. 중복이면 3019 로 거절돼요 |
코드 예제
curl -X PUT "https://message.bootapi.com/alimtalk/templates/68b0f2a1c3d4e5f6a7b8c9d0" \
-H "Authorization: Basic {base64(client_key:secret_key)}" \
-H "Content-Type: application/json" \
-d '{
"name": "예약 확정 안내",
"content": "#{company_name}\n#{user_name}님, #{booking_date} 예약이 확정되었어요. 방문 10분 전까지 와 주세요.",
"msg_type": "BA",
"emphasize_type": "NONE",
"buttons": [
{
"name": "예약 확인하기",
"linkType": "WL",
"linkMo": "https://#{mobile_link}"
}
]
}'bashrequire 'bootpay'
commerce = BootpayStore::RestClient.new(client_key: 'your-commerce-client-key', secret_key: 'your-commerce-secret-key')
response = commerce.alimtalk_template_update(
template_id: '68b0f2a1c3d4e5f6a7b8c9d0',
name: '예약 확정 안내',
content: "\#{company_name}\n\#{user_name}님, \#{booking_date} 예약이 확정되었어요. 방문 10분 전까지 와 주세요.",
msg_type: 'BA',
emphasize_type: 'NONE',
buttons: [{ name: '예약 확인하기', linkType: 'WL', linkMo: 'https://#{mobile_link}' }]
)
puts response.dataruby응답
수정된 템플릿 전체를 돌려줘요. 구조는 템플릿 상세와 같아요.
에러 코드
| 코드 | error_code | 메시지 | 대처 방법 |
|---|---|---|---|
-48 |
INVALID_PARAMETER |
수정 불가 상태 | 검수 중(REQ)이거나 승인(APR)된 템플릿이에요 |
3015 |
TEMPLATE_NOT_FOUND |
템플릿 없음 | id 또는 코드를 확인해요 |
3017 |
TEMPLATE_VARIABLE_MISSING |
규격 위반 | 글자 수·강조표기 조건·버튼 규격을 확인해요. content·msg_type을 빼도 이 코드가 와요 |
3018 |
SENDER_NOT_VERIFIED |
발신 채널 확인 불가 | 등록된 템플릿을 고칠 때 채널 키를 찾지 못했어요. 채널을 다시 연동해요 |
3019 |
TEMPLATE_CODE_DUPLICATED |
템플릿 코드 중복 | template_code를 다른 값으로 바꿔요 |
3024 |
SENDER_NOT_LINKED |
발신프로필 미연결 | 이 프로젝트의 채널인지 확인해요 |
3027 |
TEMPLATE_NAME_DUPLICATED |
템플릿 이름 중복 | 같은 채널 안에서 이름이 겹쳐요 |
3013 |
KAKAO_TEMPLATE_REQUEST_FAILED |
수정 거부 (HTTP 500) | 이미 올라간 템플릿일 때만 나요. message의 사유를 확인해요 |
다음 단계
반려된 템플릿을 고쳤다면 검수 요청으로 다시 심사를 받아요.
