사이드 메뉴
시작하기
로그인
커뮤니케이션
광고
쉬운 메시지광고: 개인화 메시지광고 운영
이 문서는 카카오모먼트 쉬운 메시지광고의 개인화 메시지광고 운영 및 발송 요청 API에 대한 사용 방법을 안내합니다.
개인화 메시지광고는 메시지 유형에 따라 구성 요소가 상이해 사용 가능한 파라미터와 변수가 서로 다릅니다. 자세한 내용은 자세한 내용은 개인화 메시지 유형별 구성 요소, 개인화 메시지 유형별 사용 가능 변수를 참고합니다.
쉬운 메시지광고는 아래 유형의 메시지를 발송할 수 있습니다. 각 메시지 유형별 세부 사항은 카카오비즈니스 채널 메시지 가이드를 참고합니다.
| 이름 | 메시지 유형 |
|---|---|
| 기본 텍스트 | BASIC_TEXT_MESSAGE |
| 와이드 이미지 | WIDE_MESSAGE |
| 와이드 리스트 | WIDE_LIST_MESSAGE |
| 캐러셀 커머스 | CAROUSEL_COMMERCE_MESSAGE |
| 캐러셀 피드 | CAROUSEL_FEED_MESSAGE |
개인화 메시지 유형별 구성 요소의 필드 경로, 규격, 필수 여부 정보에 대해 안내합니다.
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
홍보 영역message.items.imageUrlmessage.items.videoUrl |
| X |
홍보 문구message.title |
| O |
버튼1message.buttons |
| X |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
홍보 영역message.items.imageUrlmessage.items.videoUrl |
| O |
홍보 문구message.title |
| O |
아이템 모바일 랜딩 URLmessage.items.mobileLandingUrl |
| O |
버튼1message.buttons |
| X |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
홍보 영역message.items.imageUrlmessage.items.videoUrl |
| O* |
타이틀message.title |
| O |
아이템 홍보 문구message.items.title |
| O* |
아이템 모바일 랜딩 URLmessage.items.mobileLandingUrl |
| O |
버튼1message.buttons |
| X |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
- 인트로와 캐러셀(1~6)으로 구분
- 인트로 포함 시 캐러셀1 필수, 미포함 시 캐러셀1~2 필수
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.introCarousel.title |
| O |
홍보 이미지message.introCarousel.imageUrl |
| O |
홍보 문구message.introCarousel.description |
| O |
인트로 모바일 랜딩 URLmessage.introCarousel.mobileLandingUrl |
| X |
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.carousels.title |
| O |
홍보 이미지message.carousels.imageUrl |
| O |
홍보 문구message.carousels.description |
| O |
캐러셀 모바일 랜딩 URLmessage.carousels.mobileLandingUrl |
| O |
가격 정보message.carousels.priceAmount |
| O |
통화 정보message.carousels.priceCurrencyCode |
| O |
할인 가격 정보message.carousels.discountedPriceAmount |
| X |
버튼1message.carousels |
| O |
버튼2message.buttons |
| X |
- 캐러셀1~2 필수, 캐러셀3~6은 선택
| 구성 요소 및 필드 경로 | 규격 | 필수 |
|---|---|---|
타이틀message.carousels.title |
| O |
홍보 이미지message.carousels.imageUrl |
| O |
홍보 문구message.carousels.description |
| O |
버튼1message.buttons |
| O |
버튼2message.buttons |
| X |
쿠폰message.couponBook |
| X |
- 이미지
- 포멧:
JPG,JPEG,PNG - 크기: 가로
80px초과(권장:800x400,800x800,800x600) - 용량:
10MB이하 - 비율: 가로:세로 비율
1:2.5미만(권장:2:1,1:1,4:3)
- 포멧:
- 동영상
- 카카오TV 채널에 업로드 된 공개 영상만 등록 가능
개인화 메시지광고로 발송하는 개인화 메시지의 변수 사용 정책에 대해 안내합니다.
각 메시지 유형 항목에서 구성 요소별 사용 가능한 변수 유형을 확인할 수 있습니다. 변수 유형별 세부 규격 및 제약 사항은 변수 유형 목록을 참고합니다.
메시지 유형별 구성 요소의 글자 수는 변수를 포함하면 변수 유형 목록의 최대 길이까지 작성할 수 있지만, 변수를 제외한 실제 노출 글자 수는 개인화 메시지 유형별 구성 요소의 규격을 따라야 합니다.
| 구성 요소 및 필드 경로 | 사용 가능 변수 |
|---|---|
홍보 영역message.items.imageUrlmessage.items.videoUrl | 이미지 URL: 미디어 중 [이미지 URL] 만 사용 가능 동영상 URL: 미디어 중 [동영상 URL] 만 사용 가능 랜딩: 이미지 적용 시 랜딩 사용 가능, 동영상 적용 시 카카오TV 동영상 URL로 자동 적용 |
홍보 문구message.title | 텍스트 |
버튼1message.buttons | 버튼명: 텍스트 랜딩: 랜딩 |
버튼2message.buttons | 버튼명: 텍스트 랜딩: 랜딩 |
쿠폰message.couponBook | 쿠폰명: 텍스트 랜딩: 랜딩 |
| 구성 요소 및 필드 경로 | 사용 가능 변수 |
|---|---|
홍보 영역message.items.imageUrlmessage.items.videoUrl | 이미지 URL: 미디어 중 [이미지 URL] 만 사용 가능 동영상 URL: 미디어 중 [동영상 URL] 만 사용 가능 랜딩: 이미지 적용 시 랜딩 사용 가능, 동영상 적용 시 카카오TV 동영상 URL로 자동 적용 |
홍보 문구message.title | 텍스트 |
버튼1message.buttons | 버튼명: 텍스트 랜딩: 랜딩 |
버튼2message.buttons | 버튼명: 텍스트 랜딩: 랜딩 |
쿠폰message.couponBook | 쿠폰명: 텍스트 랜딩: 랜딩 |
| 구성 요소 및 필드 경로 | 사용 가능 변수 |
|---|---|
아이템 홍보 영역message.items.imageUrlmessage.items.videoUrl | 이미지 URL: 미디어 중 이미지 URL 동영상 URL: 미디어 중 동영상 URL 랜딩: 이미지 적용 시 랜딩 사용 가능, 동영상 적용 시 카카오TV 동영상 URL로 자동 적용 |
아이템 홍보 문구message.items.title | 텍스트 |
버튼1message.buttons | 버튼명: 텍스트 랜딩: 랜딩 |
버튼2message.buttons | 버튼명: 텍스트 랜딩: 랜딩 |
쿠폰message.couponBook | 쿠폰명: 텍스트 랜딩: 랜딩 |
| 구성 요소 및 필드 경로 | 사용 가능 변수 |
|---|---|
홍보 이미지message.introCarousel.imageUrl | 이미지 URL: 미디어 중 이미지 URL 랜딩: 랜딩 |
홍보 문구message.introCarousel.description | 텍스트 |
| 구성 요소 및 필드 경로 | 사용 가능 변수 |
|---|---|
타이틀message.carousels.title | 텍스트 |
홍보 이미지message.carousels.imageUrl | 이미지 URL: 미디어 중 [이미지 URL] 만 사용 가능 랜딩: 랜딩 |
홍보 문구message.carousels.description | 텍스트 |
가격 정보message.carousels.priceAmount | 가격 중 [상품 정상 가격] 만 사용 가능 |
할인 가격 정보message.carousels.discountedPriceAmount | 가격 중 [상품 할인 가격] 만 사용 가능 |
버튼1message.carousels | 버튼명: 구매하기로 고정랜딩: 랜딩 |
버튼2message.buttons | 버튼명: 텍스트 랜딩: 랜딩 |
| 구성 요소 및 필드 경로 | 사용 가능 변수 |
|---|---|
타이틀message.carousels.title | 텍스트 |
홍보 이미지message.carousels.imageUrl | 이미지 URL: 미디어 중 [이미지 URL] 만 사용 가능 랜딩: 랜딩 |
홍보 문구message.carousels.description | 텍스트 |
버튼1message.buttons | 버튼명: 텍스트 랜딩: 랜딩 |
버튼2message.buttons | 버튼명: 텍스트 랜딩: 랜딩 |
쿠폰message.couponBook | 버튼명: 텍스트 랜딩: 랜딩 |
| 변수명 | 필드명 | 타입 | 변수 패턴 | 최대 개수 | 최대 길이 |
|---|---|---|---|---|---|
| 날짜 | date | String | ${date1} ~${date4} | 4 | 20 |
| 사이트명 | site_name | String | ${site_name1} | 1 | 30 |
| 브랜드명 | brand_name | String | ${brand_name1} | 1 | 30 |
| 고객 이름 | user_name | String | ${user_name1} | 1 | 20 |
| 고객 ID | user_id | String | ${user_id1} | 1 | 20 |
| 고객 등급 | user_rating | String | ${user_rating1} | 1 | 20 |
| 적립금 | available_point | Integer | ${available_point1} | 1 | 10 |
| 쿠폰 개수 | available_coupon | Integer | ${available_coupon1} | 1 | 10 |
| 상품 ID | product_id | String | ${product_id1} ~${product_id7} | 7 | 50 |
| 상품명 | product_name | String | ${product_name1} ~${product_name7} | 7 | 25 |
| 할인율 | discount_percent | Integer | ${discount_percent1} ~${discount_percent7} | 7 | 2 |
| 변수명 | 필드명 | 타입 | 변수 패턴 | 최대 개수 | 최대 길이 |
|---|---|---|---|---|---|
| 상품 정상 가격 | price | Integer | ${price1} ~${price7} | 7 | 8 |
| 상품 할인 가격 | sale_price | Integer | ${sale_price1} ~${sale_price7} | 7 | 8 |
| 할인 금액 | discount_amount | Integer | ${discount_amount1} ~${discount_amount7} | 7 | 8 |
| 변수명 | 필드명 | 타입 | 변수 패턴 | 최대 개수 | 최대 길이 |
|---|---|---|---|---|---|
| 이미지 URL | image_url | String | ${image_url1} ~${image_url7} | 7 | 1000 |
| 동영상 URL | video_url | String | ${video_url1} ~${video_url4} | 4 | 1000 |
| 변수명 | 필드명 | 타입 | 변수 패턴 | 최대 개수 | 최대 길이 |
|---|---|---|---|---|---|
| 모바일 URL | mobile_url | String | ${mobile_url1} ~${mobile_url13} | 13 | 1000 |
| PC URL | pc_url | String | ${pc_url1} ~${pc_url13} | 13 | 1000 |
URL에 UTF-8 코드로 인코딩(Encoding)되지 않은 특수문자나 한글이 포함될 경우, iOS 기기의 카카오톡 인앱브라우저에서 광고가 정상 랜딩되지 않을 수 있습니다. 아래는 랜딩 오류가 발생할 수 있는 특수문자의 예시입니다.
%|“
또한 파라미터 및 매크로 치환이 필요한 딥링크(Deeplink) 형식의 URL은 공식 지원하지 않습니다.
| 메서드 | URL | 인증 방식 |
|---|---|---|
POST | https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal | 비즈니스 토큰 |
카카오톡 채널에서 발송될 개인화 메시지광고 내용을 저장합니다.
메시지 유형(type)에 따라 파라미터의 사용 가능 여부와 필수 여부가 다릅니다. 관련된 자세한 내용은 메시지 유형별 구성 요소를 참고합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답은 생성된 메시지의 상세 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
이 API는 사용자 계정과 광고계정마다 1초에 1회만 요청 가능하도록 제한되어 있습니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| name | String | 메시지 이름 최대 50자 | X |
| ageVerification | Boolean | 연령인증 필요 메시지 여부
| X |
| message | Message | 생성할 메시지 정보 | O |
ResponseMessage객체로 응답
요청
curl -X POST "https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"name": "개인화_메시지광고_테스트_베이직_텍스트","ageVerification": false,"message": {"type": "BASIC_TEXT_MESSAGE","title": "홍보문구","adFlag": false,"items": [{"imageUrl": "${image_url1}"}],"buttons": [{"title": "버튼 1 버튼명","pcLandingUrl": "${pc_url1}","mobileLandingUrl": "${mobile_url1}"},{"title": "버튼 2 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"}],"couponBook": {"couponBookTitleType": "UPGRADE","couponBookTitle": "쿠폰 타이틀","title": "쿠폰 상세 설명","pcLandingUrl": "https://daum.net","mobileLandingUrl": "https://daum.net"}}}'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": "msg-ad-1195203776475586560","name": "개인화_메시지광고_테스트_베이직_텍스트","type": "BASIC_TEXT_MESSAGE","title": "홍보문구","items": [{"imageUrl": "${image_url1}"}],"buttons": [{"title": "버튼 1 버튼명","pcLandingUrl": "${pc_url1}","mobileLandingUrl": "${mobile_url1}"},{"title": "버튼 2 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"}],"couponBook": {"title": "쿠폰 상세 설명","pcLandingUrl": "https://daum.net","mobileLandingUrl": "https://daum.net","couponBookTitle": "쿠폰 타이틀","couponBookTitleType": "UPGRADE"},"ageVerification": false,"adFlag": false}
| 메서드 | URL | 인증 방식 |
|---|---|---|
PATCH | https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/message | 비즈니스 토큰 |
카카오톡 채널에서 발송될 개인화 메시지광고 내용을 수정합니다.
메시지 수정 정책은 아래와 같습니다.
- 기존의 메시지와 동일한 포맷이어야 합니다. 이름을 제외한 다른 파라미터는 무시됩니다.
- 메시지 집행 가이드와 맞지 않는 이미지와 문구는 사용할 수 없습니다.
메시지 유형(type)에 따라 파라미터의 사용 가능 여부와 필수 여부가 다릅니다. 관련된 자세한 내용은 메시지 유형별 구성 요소를 참고합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 PATCH로 요청합니다. 요청 성공 시 응답은 수정된 메시지의 상세 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| name | String | 메시지 이름 최대 50자 | X |
| ageVerification | Boolean | 연령인증 필요 메시지 여부
false로 자동 설정 | X |
| message | Message | 생성할 메시지 정보 | O |
ResponseMessage객체로 응답
요청
curl -X PATCH "https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/message" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"name": "개인화_메시지광고_테스트_베이직_텍스트","ageVerification": false,"message": {"type": "BASIC_TEXT_MESSAGE","title": "홍보문구 변경","adFlag": false,"items": [{"imageUrl": "${image_url1}"}],"buttons": [{"title": "버튼 1 버튼명","pcLandingUrl": "${pc_url1}","mobileLandingUrl": "${mobile_url1}"},{"title": "버튼 2 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"}]}}'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"messageAdId": "msg-ad-1195203776475586560","name": "개인화_메시지광고_테스트_베이직_텍스트","type": "BASIC_TEXT_MESSAGE","title": "홍보문구 변경","items": [{"imageUrl": "${image_url1}"}],"buttons": [{"title": "버튼 1 버튼명","pcLandingUrl": "${pc_url1}","mobileLandingUrl": "${mobile_url1}"},{"title": "버튼 2 버튼명","pcLandingUrl": "https://daum.net/1","mobileLandingUrl": "https://daum.net/1"}],"ageVerification": false,"adFlag": false}
| 메서드 | URL | 인증 방식 |
|---|---|---|
POST | https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/send-test | 비즈니스 토큰 |
개인화 메시지광고의 테스트 발송을 요청합니다.
발송 시 홍보문구 영역에 [테스트 발송]이 추가되어 발송됩니다. 친구 관계인 전화번호 대상으로만 발송되며 사용자 계정, 광고계정마다 1분에 1회씩 테스트 발송이 가능합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답 본문은 없습니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| phoneNumber | String | 발송 대상 전화번호, 010-1234-5678 형식 | O |
| variables | JSON | 메시지 템플릿 사용 변수의 키-값 쌍을 가지는 객체 | O |
요청
curl -X POST "https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/send-test" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"phoneNumber": "010-1234-5678","variables": {"image_url1": "https://partner.com/img/message/001.jpg","user_name1": "테스트유저"}}'
응답
HTTP/1.1 200 OKContent-Length: 0Content-Type: application/json;charset=UTF-8
| 메서드 | URL | 인증 방식 |
|---|---|---|
POST | https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/send-single | 비즈니스 토큰 |
개인화 메시지광고 한 건의 발송을 요청합니다.
한 번에 한 사용자에게만 발송 요청할 수 있으며, 동기 방식으로 처리되어 해당 요청이 완료될 때까지 다른 발송 요청을 할 수 없습니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답은 발송 결과 정보를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| requestId | String | 메시지광고 발송 요청 ID, 개인화 메시지광고 발송 요청을 구분하기 위한 고유값으로 아래 규칙에 맞춰 생성 후 전달 필요yyyyMMdd-${messageAdId}-${uniqueId_for_request} 형식, uniqueId_for_request는 9자리 이하의 영문 또는 숫자 | O |
| receiver | PersonalMessageSendRequest | 발송 요청 메시지광고 정보 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| receiverType | String | 발송 유형, 아래 중 하나
| O |
| receiverKey | String | 발송 대상 식별자 유저식별자 혹은 전화번호 | O |
| variables | JSON | 메시지 템플릿 사용 변수의 키-값 쌍을 가지는 객체 | O |
| 이름 | 타입 | 설명 |
|---|---|---|
| requestId | String | 메시지광고 발송 요청 ID, 메시지광고 발송 상태 조회 시 사용 |
| receiverType | String | 발송 유형, 아래 중 하나
|
| receiverKey | String | 발송 대상 식별자 유저식별자 혹은 전화번호 |
| status | String | 발송 상태, 발송 성공 시 SUCCEEDED 전달, 실패 시 에러 코드와 에러 메시지 전달 |
| sendAt | String | 발송 일시, yyyy-MM-dd HH:mm:ss 형식 |
요청
curl -X POST "https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/send-single" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"requestId": "20240115-msg-ad-1196300604236693504-unique1","receiver": {"receiverType": "PHONE_NUMBER","receiverKey": "010-1234-5678","variables": {"image_url1": "https://partner.com/img/message/001.jpg"}}}'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"requestId": "20240115-msg-ad-1196300604236693504-unique1","receiverType": "PHONE_NUMBER","receiverKey": "821012347936","status": "SUCCEEDED","sendAt": "2024-01-15 13:00:36"}
| 메서드 | URL | 인증 방식 |
|---|---|---|
POST | https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/send-multi | 비즈니스 토큰 |
개인화 메시지광고 여러 건의 발송을 요청합니다.
한 번에 최대 100명의 사용자에게 발송 요청할 수 있으며, 비동기 방식으로 처리되어 요청 결과는 개인화 메시지광고 발송 상태 조회로 확인해야 합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 POST로 요청합니다. 요청 성공 시 응답은 메시지광고 발송 요청 ID를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| requestId | String | 메시지광고 발송 요청 ID, 개인화 메시지광고 발송 요청을 구분하기 위한 고유값으로 아래 규칙에 맞춰 생성 후 전달 필요yyyyMMdd-${messageAdId}-${uniqueId_for_request} 형식, uniqueId_for_request는 9자리 이하의 영문 또는 숫자 | O |
| receiver | PersonalMessageSendRequest[] | 발송 요청 메시지광고 정보(최소: 2개, 최대: 100개) | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| receiverType | String | 발송 유형, 아래 중 하나
| O |
| receiverKey | String | 발송 대상 식별자 유저식별자 혹은 전화번호 | O |
| variables | JSON | 메시지 템플릿 사용 변수의 키-값 쌍을 가지는 객체 | O |
| 이름 | 타입 | 설명 |
|---|---|---|
| requestId | String | 메시지광고 발송 요청 ID, 메시지광고 발송 상태 조회 시 사용 |
요청
curl -X POST "https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/send-multi" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}" \-H "Content-Type: application/json" \-d '{"requestId": "20240115-msg-ad-1196300604236693504-unique2","receivers": [{"receiverType": "PHONE_NUMBER","receiverKey": "010-1234-5678","variables": {"image_url1": "https://partner.com/img/message/001.jpg","user_name1": "테스트유저1"}},{"receiverType": "PHONE_NUMBER","receiverKey": "010-4321-4321","variables": {"image_url1": "https://partner.com/img/message/002.jpg","user_name1": "테스트유저2"}}]}'
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"requestId": "20240115-msg-ad-1196300604236693504-unique2"}
| 메서드 | URL | 인증 방식 |
|---|---|---|
GET | https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/status/${REQUEST_ID} | 비즈니스 토큰 |
개인화 메시지광고 발송 요청에 대한 결과를 조회합니다.
발송 요청으로부터 90일 이내에만 결과만 조회 가능합니다.
비즈니스 토큰과 카카오톡 채널 프로필 ID를 헤더에 담아 GET으로 요청합니다. 요청 성공 시 응답은 메시지광고 발송 요청 ID를 포함합니다. 실패 시 에러 코드 및 상세 에러 코드로 원인을 확인합니다.
| 이름 | 설명 | 필수 |
|---|---|---|
| Authorization | Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}인증 방식, 비즈니스 토큰으로 인증 요청 | O |
| channel-profile-id | channel-profile-id: ${CHANNEL_PROFILE_ID}카카오톡 채널 프로필 ID | O |
| Content-Type | Content-Type: application/json요청 데이터 타입 | O |
| 이름 | 타입 | 설명 | 필수 |
|---|---|---|---|
| MESSAGE_AD_ID | String | 메시지광고 번호(messageAdId) | O |
| REQUEST_ID | String | 메시지광고 발송 요청 ID(requestId) | O |
| 이름 | 타입 | 설명 |
|---|---|---|
| completed | Boolean | 발송 완료 여부
|
| results | PersonalMessageResult | 발송 시도 결과, completed값이 false인 경우 빈 배열([])로 응답 |
| 이름 | 타입 | 설명 |
|---|---|---|
| receiverType | String | 발송 유형, 아래 중 하나
|
| receiverKey | String | 발송 대상 식별자 유저식별자 혹은 전화번호 |
| status | String | 발송 결과, 아래 중 하나
|
| statusReason | String | 발송 결과에 대한 상세 원인 |
| sendAt | String | 발송 일시, yyyy-MM-dd HH:mm:ss 형식 |
요청
curl -X GET "https://apis.moment.kakao.com/openapi/message/v1/message-ads/personal/${MESSAGE_AD_ID}/status/${REQUEST_ID}" \-H "Authorization: Bearer ${BUSINESS_ACCESS_TOKEN}" \-H "channel-profile-id: ${CHANNEL_PROFILE_ID}
응답
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8{"completed": true,"results": [{"receiverType": "PHONE_NUMBER","receiverKey": "821012345678","status": "SUCCEEDED","statusReason": "발송 결과 상세 원인","sendAt": "2023-07-31 16:00:01"}]}
- 메시지 유형(
type)별 필수 파라미터 정보는 메시지 유형별 구성 요소 참고 - 파라미터별 변수 사용 관련 정보는 개인화 메시지 유형별 사용 가능 변수 참고
| 이름 | 타입 | 설명 |
|---|---|---|
| type | String | 메시지 유형, 아래 중 하나 지정 필수
|
| title | String | 메시지 홍보 문구 |
| items | Item[] | 아이템 정보 |
| buttons | Button[] | 버튼 정보 |
| couponBook | CouponBook[] | 쿠폰 정보 |
| introCarousel | IntroCarousel | 인트로 정보 |
| carousels | Carousel[] | 캐러셀 정보 |
| adFlag | Boolean | 광고성 메시지
|
| 이름 | 타입 | 설명 |
|---|---|---|
| imageUrl | String | 아이템 이미지 URL, 메시지 내 포함할 홍보 이미지 URL |
| videoUrl | String | 아이템 동영상 URL, 메시지 내 포함할 홍보 카카오TV 동영상 URL |
| title | String | 아이템 홍보 문구 |
| pcLandingUrl | String | 아이템 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 입력 |
| mobileLandingUrl | String | 아이템 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 입력 |
| 이름 | 타입 | 설명 |
|---|---|---|
| title | String | 버튼명 |
| pcLandingUrl | String | 버튼 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| mobileLandingUrl | String | 버튼 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| 이름 | 타입 | 설명 |
|---|---|---|
| couponBookTitleType | String | 쿠폰 유형, 아래 중 하나
|
| couponBookTitle | String | 쿠폰 타이틀, 쿠폰 유형(couponBookTitleType)값에 따라 아래 값 입력 가능
FREE_GIFT, UPGRADE: 최대 7자 |
| title | String | 쿠폰 상세 설명(최대: 12자) |
| pcLandingUrl | String | 쿠폰 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| mobileLandingUrl | String | 쿠폰 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| 이름 | 타입 | 설명 |
|---|---|---|
| title | String | 인트로 타이틀(최대 25자) |
| description | String | 인트로 홍보 문구(최대 50자) |
| imageUrl | String | 인트로 홍보 영역 이미지 URL |
| pcLandingUrl | String | 인트로 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| mobileLandingUrl | String | 인트로 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| 이름 | 타입 | 설명 |
|---|---|---|
| title | String | 캐러셀 타이틀 |
| description | String | 캐러셀 홍보 문구 |
| imageUrl | String | 캐러셀 홍보 영역 이미지 URL |
| pcLandingUrl | String | 캐러셀 PC 랜딩 URL, 사용 시 PC 카카오톡에서 별도의 URL로 랜딩http:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| mobileLandingUrl | String | 캐러셀 모바일 랜딩 URLhttp:// 또는 https:// 형식의 접속 가능한 URL 필요 |
| buttons | Button[] | 캐러셀 버튼 정보 |
| priceAmount | Integer | 캐러셀 가격 정보 |
| priceCurrencyCode | String | 캐러셀 통화 정보, 아래 중 하나
|
| discountedPriceAmount | Integer | 캐러셀 할인 가격 정보, priceAmount 보다 1% 이상 작은 값 필요 |
| 이름 | 타입 | 설명 |
|---|---|---|
| messageAdId | String | 메시지광고 번호, 최초 생성 시 부여된 메시지 식별용 번호 |
| name | String | 메시지 이름(최대: 50자), 최초 생성 시 미입력한 경우 자동 생성 규칙이 적용된 값 |
| type | String | 메시지 유형, 아래 중 하나
|
| title | String | 메시지 홍보 문구 |
| items | Item[] | 아이템 정보 |
| buttons | Button[] | 버튼 정보 |
| couponBook | CouponBook[] | 쿠폰 정보 |
| introCarousel | IntroCarousel | 인트로 정보 |
| carousels | Carousel[] | 캐러셀 정보 |
| ageVerification | Boolean | 연령인증 메시지 여부
|
| adFlag | Boolean | 광고성 메시지
|