연동한 채널이 가진 자체 템플릿을 조회해요. 검수 상태로 걸러 보거나 이름·본문으로 검색할 수 있어요.
발송할 수 있는지는 inspection_status 가 approved(APR) 인지로 갈려요. 반려된 템플릿이라면 사유가 comments 에, 그 개수가 comment_count 에 담겨 와요.
1템플릿 목록
목록에는 페이지네이션이 없어요. 필터에 걸린 템플릿을 한 번에 모두 돌려줘요.
요청 파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
ins |
String | 선택 | 검수상태 필터. approved 처럼 키로 보내요 (검수 상태 참고). 벤더 문자열(APR)·숫자(3)도 그대로 받아요 |
sort |
String | 선택 | latest(기본)·oldest·code |
keyword |
String | 선택 | 코드·이름·본문·분류 부분일치. q 로도 받아요 |
해석할 수 없는 ins 값은 오류가 아니라 필터 없음으로 처리돼요.
코드 예제
curl -X GET "https://message.bootapi.com/alimtalk/templates?ins=3&sort=latest" \
-H "Authorization: Basic {base64(client_key:secret_key)}"bashrequire 'bootpay'
commerce = BootpayStore::RestClient.new(client_key: 'your-commerce-client-key', secret_key: 'your-commerce-secret-key')
response = commerce.alimtalk_template_list(ins: 3, sort: 'latest')
puts response.dataruby응답
{
"list": [
{
"id": "68b0f2a1c3d4e5f6a7b8c9d0",
"code": "BT_A58A7B_1A2B3C4D",
"ksp_id": "6a718d6cdd5558fb1fff72af",
"name": "예약 확정 안내",
"content": "#{company_name}\n#{user_name}님, #{booking_date} 예약이 확정되었어요.",
"msg_type": "BA",
"emphasize_type": "NONE",
"required_variables": ["company_name", "user_name", "booking_date"],
"inspection_status": "approved",
"vendor_status": 2,
"vendor_blocked": false,
"vendor_dormant": false,
"comments": [],
"comment_count": 0,
"version": 1,
"synced_at": "2026-08-27T10:05:00+09:00",
"created_at": "2026-08-27T10:00:00+09:00"
}
],
"count": 1,
"sort": "latest"
}json2템플릿 상세
요청 파라미터
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
id |
String | 필수 | 템플릿 문서 id (경로 파라미터). ObjectId 형식이 아니면 템플릿 코드로 해석해요 |
sync |
Boolean | 선택 | 카카오에 상태를 다시 확인할지. 생략하면 필요한 상태에서만 확인해요(아래 참고). true 강제 · false 생략 |
`sync` 를 생략하면 필요한 때만 물어봐요
검수 진행중(registered·requested)과 승인(approved)은 서버가 주기적으로 맞춰 둡니다.
그래서 상세를 열 때 다시 물어보지 않아요 — 그만큼 응답이 빨라요.
반려(rejected·kakao_rejected)와 카카오에 올렸지만 검수 상태가 비어 있는 템플릿은 주기 동기화 대상이 아니라, 상세를 열 때 한 번 확인해요.
아직 올리기 전(register: false)인 템플릿은 어느 경우에도 확인하지 않아요.
응답이 항상 최신이어야 하면 sync=true, 속도가 더 중요하면 sync=false 를 명시해요.
이 확인은 응답을 0.5초 안팎 느리게 만들어요.
코드 예제
curl -X GET "https://message.bootapi.com/alimtalk/templates/68b0f2a1c3d4e5f6a7b8c9d0" \
-H "Authorization: Basic {base64(client_key:secret_key)}"bash# sync 를 생략하면 필요한 상태에서만 카카오에 다시 확인해요.
# 항상 최신이 필요하면 sync: true, 속도가 우선이면 sync: false
response = commerce.alimtalk_template_detail(
template_id: '68b0f2a1c3d4e5f6a7b8c9d0'
)
puts response.dataruby주요 응답 필드
| 필드 | 타입 | 설명 |
|---|---|---|
| inspection_status | String | 카카오 검수 상태 — 아래 표 참고 |
| vendor_status | Integer | 0 등록전 · 1 대기 · 2 정상 · 3 중단 |
| vendor_blocked | Boolean | 카카오 제재로 차단됨. 승인 상태여도 발송이 막혀요 |
| vendor_dormant | Boolean | 카카오 휴면 처리됨 |
| comments | Array | 검수 반려 사유 |
| required_variables | Array | 발송할 때 채워야 하는 변수 |
| variable_examples | Object | 표시용 예문 (발송값이 아니에요) |
| synced_at | String | 마지막으로 상태를 맞춘 시각. 형식은 응답의 시각 형식을 봐요 |
검수 상태 (inspection_status)
| 값 | 키 | 벤더 코드 | 설명 |
|---|---|---|---|
1 |
registered |
REG | 카카오에 올라감, 검수 전 |
2 |
requested |
REQ | 검수 요청함 |
3 |
approved |
APR | 승인 — 이 상태여야 발송돼요 |
4 |
kakao_rejected |
KRR | 등록 거절 |
5 |
rejected |
REJ | 승인 반려 |
응답에는 키가 내려오고, ins 필터에는 키·벤더 코드·숫자를 모두 보낼 수 있어요.
에러 코드
| 코드 | error_code | 메시지 | 대처 방법 |
|---|---|---|---|
3015 |
TEMPLATE_NOT_FOUND |
템플릿 없음 | id 또는 코드가 맞는지 확인해요 |
3024 |
SENDER_NOT_LINKED |
발신프로필 미연결 | 이 프로젝트에 연동되지 않은 채널의 템플릿이에요 |
