발송내역 API
사이트의 알림톡 캠페인 발송 성공·실패, 오픈, 클릭 수와 버튼별 클릭을 조회합니다.
모든 API는 읽기 전용이며 ENTERPRISE 계정과 send-result:read 스코프가 필요합니다.
collectedThrough에서
조회 가능한 마지막 날짜를 확인할 수 있습니다.
from과 to는 모두 필수입니다. 일반 발송내역은 양 끝 날짜를 포함해
최대 7일, 시간별 발송 성과는 최대 3일입니다.
지표 계산 기준
| 필드 | 계산 기준 |
|---|---|
successRate | sentCount / (sentCount + failCount) × 100 |
openRate | openCount / sentCount × 100 |
clickRate | clickCount / sentCount × 100 |
비율은 소수 둘째 자리까지 반환합니다. 분모가 0이면 비율은 null입니다.
clickCount는 템플릿 일반 버튼 1~5의 클릭 합계이고 채널 추가 버튼은
channelAddClickCount로 분리합니다. 클릭은 고유 사용자 수가 아니라 벤더가 제공하는 클릭 건수이므로
동일 수신자의 반복 클릭이 포함될 수 있습니다.
attributionStatus가 TEMPLATE_SHARED로 표시됩니다.
EXACT인 항목을 우선 사용하세요.
available: false, aggregationStatus: "UNAVAILABLE"로 표시됩니다.
공통 요청 정보
Bearer ak_live_xxxx. 키에 send-result:read 스코프가 필요합니다.
조회할 사이트 ID입니다. API 키 소유자의 사이트인지 확인합니다.
YYYY-MM-DD 형식. 일반 조회는 최대 7일, 시간별 조회는 최대 3일입니다.
발송내역 전체 요약
/send-results/summary선택한 사이트와 기간 전체의 발송·오픈·클릭 지표를 합산합니다.
주요 응답 필드
실제로 조회한 시작일·종료일과 포함 일수입니다.
COLLECTED 또는 NO_DATA, 수집 완료일과 기준 시간대입니다.
EXACT 또는 템플릿 공유가 포함된 TEMPLATE_SHARED입니다.
대상·전달 중·성공·실패·오픈·일반 클릭·채널 추가 클릭 수와 비율입니다.
curl "https://docs.almani-center.com/open/v1/send-results/summary?from=2026-08-25&to=2026-08-31" \
-H "Authorization: Bearer ak_live_xxxx" \
-H "X-Site-Id: 467"{
"code": "0000",
"message": "OK",
"data": {
"period": {
"from": "2026-08-25",
"to": "2026-08-31",
"days": 7
},
"collection": {
"aggregationStatus": "COLLECTED",
"collectedThrough": "2026-08-31",
"timezone": "Asia/Seoul"
},
"attributionStatus": "EXACT",
"metrics": {
"targetCount": 1040,
"sendingCount": 1015,
"sentCount": 1000,
"failCount": 15,
"openCount": 530,
"clickCount": 72,
"channelAddClickCount": 18,
"successRate": 98.52,
"openRate": 53.00,
"clickRate": 7.20
}
},
"meta": { "requestId": "req_9f83ab21" }
}캠페인별 발송내역
/send-results/campaigns기간 내 발송 스케줄이 있는 캠페인을 캠페인별로 합산합니다.
Query 파라미터
최대 7일의 조회 기간입니다.
캠페인 제목 부분 검색 또는 캠페인 ID 정확 검색입니다. 최대 100자입니다.
기본 20, 최대 100개의 커서 페이지네이션입니다.
curl "https://docs.almani-center.com/open/v1/send-results/campaigns?from=2026-08-25&to=2026-08-31&limit=20" \
-H "Authorization: Bearer ak_live_xxxx" \
-H "X-Site-Id: 467"{
"code": "0000",
"data": {
"period": { "from": "2026-08-25", "to": "2026-08-31", "days": 7 },
"collection": {
"aggregationStatus": "COLLECTED",
"collectedThrough": "2026-08-31",
"timezone": "Asia/Seoul"
},
"items": [{
"campaignId": 3541,
"title": "결제 완료",
"channel": "AT",
"active": true,
"lastSendDate": "2026-08-31",
"attributionStatus": "EXACT",
"metrics": {
"targetCount": 520,
"sendingCount": 510,
"sentCount": 500,
"failCount": 10,
"openCount": 280,
"clickCount": 39,
"channelAddClickCount": 8,
"successRate": 98.04,
"openRate": 56.00,
"clickRate": 7.80
}
}],
"nextCursor": null
}
}캠페인 일별 성과
/send-results/campaigns/{campaignId}/daily한 캠페인의 발송·오픈·클릭 성과와 버튼별 클릭을 날짜별로 함께 반환합니다. 템플릿 교체 전후를 비교할 때 사용합니다.
일별 응답
요청한 기간의 날짜입니다. 발송 스케줄이 없는 날짜도 0 지표로 반환합니다.
해당 날짜의 대상·발송 중·성공·실패·오픈·클릭 수와 비율입니다.
일반 버튼 합계, 채널 추가 클릭과 발송 당시 템플릿별 버튼 상세입니다. 하루에 여러 템플릿을 발송했다면 templates가 나뉩니다.
해당 날짜에 같은 발신 계정·템플릿을 다른 캠페인도 사용했는지 나타냅니다. TEMPLATE_SHARED이면 캠페인 단독 성과로 해석하지 마세요.
curl "https://docs.almani-center.com/open/v1/send-results/campaigns/8074/daily?from=2026-09-01&to=2026-09-03" \
-H "Authorization: Bearer ak_live_xxxx" \
-H "X-Site-Id: 467"{
"period": {"from":"2026-09-01","to":"2026-09-03","days":3},
"collection": {
"aggregationStatus":"COLLECTED",
"collectedThrough":"2026-09-03",
"timezone":"Asia/Seoul"
},
"campaignId": 8074,
"campaignTitle": "결제 완료 안내",
"channel": "AT",
"items": [{
"date": "2026-09-01",
"attributionStatus": "EXACT",
"metrics": {
"targetCount":100,"sendingCount":98,"sentCount":96,"failCount":2,
"openCount":52,"clickCount":9,"channelAddClickCount":2,
"successRate":97.96,"openRate":54.17,"clickRate":9.38
},
"buttonClicks": {
"available": true,
"totalClickCount": 9,
"channelAddClickCount": 2,
"templates": [{
"templateCode":"TPL_4593319557",
"templateName":"결제 완료 안내",
"metadataStatus":"MATCHED",
"totalClickCount":9,
"channelAddClickCount":2,
"buttons":[
{"order":1,"name":"주문 확인","type":"WL","clickCount":6},
{"order":2,"name":"문의하기","type":"WL","clickCount":3}
]
}]
}
}]
}캠페인 시간별 발송 성과
/send-results/campaigns/{campaignId}/hourly한 캠페인의 발송 대상·전달 중·성공·실패 건수를 KST 한 시간 단위로 반환합니다. 요청 기간은 양 끝 날짜를 포함해 최대 3일이며, 발송이 없는 시간도 0건으로 포함합니다.
engagementStatus는 UNAVAILABLE_DAILY_SOURCE, 시간별
openCount·clickCount·관련 비율은 null로 반환합니다.
버튼별 클릭은 available: false입니다. 일별 오픈·클릭은
캠페인 일별 성과를 사용하세요.
주요 응답 필드
시간별 발송 지표만 제공됨을 나타냅니다. 기간에 발송 행이 없으면 NO_DATA입니다.
현재는 UNAVAILABLE_DAILY_SOURCE입니다.
KST 기준 시간 버킷 시작 시각입니다.
대상·전달 중·성공·실패와 성공률입니다. 시간별 오픈·클릭 필드는 null입니다.
curl "https://docs.almani-center.com/open/v1/send-results/campaigns/8074/hourly?from=2026-09-01&to=2026-09-03" \
-H "Authorization: Bearer ak_live_xxxx" \
-H "X-Site-Id: 467"// Java 17 + Spring Framework 6 RestClient
String response = client.get()
.uri("/send-results/campaigns/{campaignId}/hourly?from={from}&to={to}",
8074, "2026-09-01", "2026-09-03")
.retrieve()
.body(String.class);{
"period": {"from":"2026-09-01","to":"2026-09-03","days":3},
"collection": {
"aggregationStatus":"DELIVERY_ONLY",
"collectedThrough":"2026-09-06",
"timezone":"Asia/Seoul"
},
"campaignId":8074,
"campaignTitle":"결제 완료 안내",
"channel":"AT",
"engagementStatus":"UNAVAILABLE_DAILY_SOURCE",
"items":[{
"bucketStart":"2026-09-01T14:00:00+09:00",
"metrics":{
"targetCount":35,"sendingCount":0,"sentCount":33,"failCount":2,
"openCount":null,"clickCount":null,"channelAddClickCount":null,
"successRate":94.29,"openRate":null,"clickRate":null
},
"buttonClicks":{
"available":false,"totalClickCount":0,"channelAddClickCount":0,"templates":[]
}
}]
}버튼별 클릭 조회
/send-results/campaigns/{campaignId}/button-clicks캠페인의 발송 당시 템플릿을 기준으로 일반 버튼 1~5와 채널 추가 버튼 클릭 수를 조회합니다. 기간 중 템플릿이 바뀐 경우 템플릿별로 나누어 반환합니다.
상태 필드
| 필드 | 값 | 설명 |
|---|---|---|
available | true/false | 현재 채널에서 버튼 지표를 제공하는지 나타냅니다. |
metadataStatus | MATCHED | 발송 당시 템플릿을 확인했습니다. |
FALLBACK_CURRENT | 발송 행의 템플릿 코드가 없어 현재 캠페인 템플릿을 보조 사용했습니다. | |
AMBIGUOUS | 한 스케줄에서 여러 템플릿이 확인돼 버튼명을 확정할 수 없습니다. | |
MISSING | 템플릿 메타데이터를 찾지 못해 1번 버튼 형태로 표시합니다. |
curl "https://docs.almani-center.com/open/v1/send-results/campaigns/3541/button-clicks?from=2026-08-25&to=2026-08-31" \
-H "Authorization: Bearer ak_live_xxxx" \
-H "X-Site-Id: 467"{
"code": "0000",
"data": {
"period": { "from": "2026-08-25", "to": "2026-08-31", "days": 7 },
"collection": {
"aggregationStatus": "COLLECTED",
"collectedThrough": "2026-08-31",
"timezone": "Asia/Seoul"
},
"campaignId": 3541,
"campaignTitle": "결제 완료",
"channel": "AT",
"available": true,
"attributionStatus": "EXACT",
"totalClickCount": 39,
"channelAddClickCount": 8,
"templates": [{
"templateCode": "ORDER_COMPLETE",
"templateName": "주문 완료 안내",
"metadataStatus": "MATCHED",
"totalClickCount": 39,
"channelAddClickCount": 8,
"buttons": [
{ "order": 1, "name": "주문 상세보기", "type": "WL", "clickCount": 31 },
{ "order": 2, "name": "문의하기", "type": "WL", "clickCount": 8 }
]
}]
}
}오류와 조회 제한
| 코드 | HTTP | 발생 조건 |
|---|---|---|
4000 | 400 | from/to 누락, 잘못된 날짜, 역전된 기간, 허용 기간 초과 또는 수집 미완료 날짜 |
4003 | 400 | X-Site-Id 누락 |
4004 | 403 | API 키 소유자의 사이트가 아님 |
4005 | 403 | send-result:read 스코프가 없거나 ENTERPRISE 계정이 아님 |
4040 | 404 | 사이트에서 캠페인을 찾을 수 없음 |