응답 만들기
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
애플리케이션이 Google의 입찰 요청을 처리한 후 응답을 빌드하여 전송해야 합니다. 이 가이드에서는 응답을 빌드하도록 애플리케이션을 코딩하는 방법을 설명합니다.
BidResponse 메시지 만들기
입찰을 제출하려면 입찰 애플리케이션이 구성된 형식의 Bid이 포함된 BidResponse으로 입찰 요청에 응답해야 합니다. JSON 형식을 사용하는 경우 응답에서 Content-Type 헤더를 application/json; charset=utf-8로 설정하고 본문에 JSON BidResponse를 포함해야 합니다. Protobuf 형식을 사용하는 경우 애플리케이션은 Content-Type 헤더를 application/octet-stream로 설정하고 직렬화된 BidResponse를 본문에 포함해야 합니다.
Protobuf 형식의 BidResponse를 빌드하고 직렬화하려면 표준 OpenRTB BidResponse 필드와 Google 확장 프로그램을 각각 Protobuf로 구현하는 openrtb.proto 및 openrtb-adx.proto를 기반으로 Protobuf 라이브러리를 생성하고 사용해야 합니다. 이러한 내용은 프로토콜 및 참조 데이터에서 확인할 수 있습니다.
노출에 입찰하지 않으려면 빈 HTTP 204 응답을 반환해야 합니다. 애플리케이션은 모든 BidRequest에 응답을 반환해야 합니다. 시간 초과 및 파싱할 수 없는 응답은 오류로 간주되며 오류율이 높은 입찰자는 Google에서 제한합니다.
광고 소재 ID
BidResponse는 BidResponse.seatbid.bid.crid 필드 (128바이트 제한)를 통해 광고 소재를 지정합니다. 유사한 광고 소재라도 크기, 선언된 URL, 광고 소재 속성, 공급업체 유형 등 눈에 띄는 특징이 다른 경우 이 필드의 값이 고유해야 합니다. 즉, 다음 두 광고에는 서로 다른 광고 소재 ID를 부여해야 합니다.
다르게 보이거나 행동합니다.
다른 이미지로 렌더링
다른 수단으로 렌더링합니다 (예: 한 광고는 이미지로 구성되고 다른 광고는 동영상으로 구성됨).
애플리케이션을 설계할 때 제출하려는 크리에이티브 유형에 적합한 식별자를 생성하는 체계적인 방법을 결정해야 합니다.
광고 속성
Google에서는 BidResponse.seatbid.bid.apis 및 BidResponse.seatbid.bid.attr의 조합 또는 BidResponse.seatbid.bid.ext.attribute 확장 프로그램을 사용하여 광고의 특징과 타겟팅을 설명하는 광고 소재 속성을 선언하는 것이 좋습니다. 다음은 속성을 선언하는 방법을 설명합니다.
VPAID
BidResponse.seatbid.bid.apis을 VPAID_1 또는 VPAID_2로 설정합니다. JSON 형식의 경우 각각 1 또는 2로 설정할 수 있습니다.
MRAID
JSON 형식의 경우 BidResponse.seatbid.bid.apis을 MRAID_1 또는 3로 설정합니다.
SIZELESS
BidResponse.seatbid.bid.attr을 RESPONSIVE 또는 JSON 형식의 경우 18로 설정합니다.
PLAYABLE
이는 BidResponse.seatbid.bid.attr을 USER_INTERACTIVE 또는 JSON 형식의 경우 13로 설정하여 표시됩니다.
광고 소재의 감지된 속성에 관한 의견을 받는 방법에 관한 설명은 광고 소재 리소스를 참고하세요.
공개 입찰 필드
공개 입찰에 참여하는 거래소 및 네트워크 입찰자가 전송하는 입찰 응답은 표준 실시간 입찰에 참여하는 Authorized Buyers의 입찰 응답과 유사합니다. 공개 입찰 고객은 소수의 추가 필드를 지정할 수 있으며 일부 기존 필드는 다른 용도로 사용될 수 있습니다. 예를 들면 다음과 같습니다.
공개 입찰자로서 거래소가 중개자인 경우 최종 서드 파티 구매자 정보를 식별하는 데 사용되는 토큰입니다. 이는 서드 파티 구매자로부터 획득되며 입찰 응답에서 변경되지 않은 상태로 Google에 전달되어야 합니다.
권장사항
서버에서 영구 HTTPS 연결('연결 유지' 또는 '연결 재사용'이라고도 함)을 사용 설정합니다. 제한 시간을 최소 10초로 설정합니다. 대부분의 경우 더 높은 값이 유용합니다. Google은 애플리케이션의 초기 지연 시간 테스트 중에 이를 확인합니다. 왜냐하면 공인 구매자는 높은 비율로 요청을 전송하며 각 요청에 대해 별도의 TCP 연결을 설정하는 지연 시간 오버헤드를 피해야 하기 때문입니다.
선택사항인 노출 추적 URL을 포함하여 입찰자가 낙찰된 시점이 아닌 노출이 렌더링된 시점을 추적합니다. 노출과 렌더링 간의 드롭오프로 인해 더 정확한 추적 통계가 생성됩니다.
입찰자 코드에 지원 중단된 필드에 대한 종속 항목이 없어야 합니다. 그렇지 않으면 오류로 인해 입찰이 실패할 수 있습니다.
BidResponse에 BidResponse.seatbid.bid.w 및 BidResponse.seatbid.bid.h를 포함합니다. 여러 광고 크기가 포함된 요청에 대한 BidResponse에는 이러한 필드가 포함되어야 합니다. 그렇지 않으면 입찰에서 제외됩니다.
대답 크기를 8K 미만으로 제한하세요. 매우 큰 응답은 네트워크 지연 시간을 늘리고 시간 초과를 일으킬 수 있습니다.
중요: 샘플에 묘사된 Protobuf 메시지는 사람이 읽을 수 있는 텍스트로 표시됩니다. 하지만 메시지는 유선을 통해 전송되지 않습니다. OpenRTB Protobuf 형식을 사용하는 경우 직렬화된 BidResponse 메시지만 허용됩니다.
다음 C++ 코드를 사용하여 BidResponse 메시지를 만들고 직렬화할 수 있습니다.
BidResponse bid_response;
// fill in bid response with bid information
string post_response;
if (bid_response.SerializeToString(&post_response)) {
// respond to the POST with post_response as the content
} else {
// return an error to the POST
}
광고 소재 지정
입찰 응답은 입찰에 성공할 경우 게재할 광고 소재를 지정합니다. 입찰에는 지원되는 광고 형식 (AMP, 동영상, 네이티브) 중 하나가 포함되어야 합니다. 이 예에서는 html_snippet 필드를 사용하여 광고 소재를 지정합니다.
또는 광고 형식에 따라 다음 필드 중 하나를 사용하여 광고 소재를 지정할 수 있습니다.
SDK 렌더링 광고
BidResponse.seatbid.bid.ext.sdk_rendered_ad
AMP
BidResponse.seatbid.bid.amp_ad_url
동영상
BidResponse.seatbid.bid.adm
네이티브
BidResponse.seatbid.bid.adm_native
BidResponse.seatbid.bid.adm 필드의 HTML 스니펫을 사용하여 자체 서버에서 호스팅되는 광고를 지정합니다. 스니펫은 웹페이지에 삽입된 iframe에 포함되어 페이지가 로드될 때 광고가 검색되고 렌더링됩니다. 광고 (배너 또는 전면 광고)가 iframe 내에서 올바르게 렌더링되고 입찰 중인 광고 슬롯에 적합한 크기로 렌더링되도록 HTML 스니펫을 작성해야 합니다.
또한 다음과 같은 경우 입찰 응답에서 선언된 광고 크기는 입찰 요청의 크기 조합 중 하나와 정확히 일치해야 합니다.
광고가 일반 배너입니다 (동영상, 네이티브, 전면 광고 아님).
입찰자가 입찰 응답에서 크기를 선언했습니다. 요청에 두 개 이상의 크기가 있는 경우 크기 선언이 필요합니다.
전면 광고는 예외입니다. 전면 광고의 경우 너비는 화면 너비의 50% 이상이어야 하고 높이는 화면 높이의 40% 이상이어야 합니다.
올바르게 렌더링되는 유효한 HTML 코드를 사용하여 HTML 스니펫 광고 소재를 지정할 수 있지만 Create BidResponse message 섹션에서 crid 필드를 지정하는 데 적용되는 제한사항을 염두에 두세요.
이 기능은 광고를 렌더링하는 과정에서 서버에서 가져온 URL의 인수에 추가 정보를 입력하는 데 사용할 수 있습니다. 이를 통해 노출에 관한 임의의 데이터를 자체 서버로 다시 전달할 수 있습니다.
매크로는 광고 게재 시 관련 값으로 대체되는 URL이 포함된 일부 입찰 응답 필드에 삽입된 서식이 지정된 텍스트입니다. 예를 들어 낙찰된 입찰에 입찰에 포함된 HTML 스니펫 광고 소재에 AUCTION_PRICE 매크로가 포함된 경우 매크로는 복호화하여 입찰에서 노출에 대해 지불한 금액을 확인할 수 있는 값으로 대체됩니다.
다음 필드에 매크로를 포함할 수 있습니다.
BidResponse.seatbid.bid.adm
매크로는 HTML 스니펫, 네이티브, 동영상 URL, 동영상 VAST XML 형식에 지원됩니다.
이렇게 하면 my.adserver.com에 클릭이 등록되며, google_click_url 매개변수에 전달된 URL로 리디렉션하는 역할을 합니다. 여기서는 my.adserver.com가 google_click_url 매개변수의 이스케이프를 해제한다고 가정합니다.
%%CLICK_URL_ESC%% 뒤에 이중으로 이스케이프된 URL을 추가할 수 있습니다. my.adserver.com에 의해 이스케이프 해제가 완료되면 URL의 단일 이스케이프 버전이 google_click_url에 추가됩니다. google_click_url를 가져오면 한 번 더 이스케이프 해제된 후 리디렉션됩니다.
CLICK_URL_ESC_ESC
광고의 이중 이스케이프 처리된 URL입니다. 다른 서버를 통해 값을 전달한 이후 리디렉션 될 경우 CLICK_URL_UNESC 대신 이를 사용하세요.
입찰 요청에 SSL이 필요하지 않은 경우 http:로 확장되고 입찰 요청에 SSL이 필요한 경우 https:로 확장됩니다.
SITE
콘텐츠 URL의 URL 이스케이프 도메인 또는 익명 인벤토리의 익명 ID입니다.
SITE_URL
지원 중단되었습니다. 동일한 기능을 제공하는 SITE 매크로로 대체되었습니다.
TZ_OFFSET
시간대 오프셋입니다.
VERIFICATION
프로덕션과 인증 파이프라인에서 광고 소재를 스캔할 때의 값이 다릅니다. 형식은 %%?VERIFICATION:true-val:false-val%%이며, 여기서 매크로를 제외한 모든 값을 빈 문자열을 포함하여 true-val 및 false-val에 사용할 수 있습니다. 공개 입찰의 경우 거래소에서 이 매크로를 사용하는 것이 좋습니다. 이렇게 하면 수요측 플랫폼에서 변경할 필요가 없습니다.
예를 들어 광고 소재에 %%?VERIFICATION:-1:5000%%이 포함된 경우 텍스트 대체는 게재 시 5000이고 확인 파이프라인에서는 -1입니다. 이는 두 세트의 핑을 구분하기 위한 것입니다.
WINNING_PRICE
계정 통화의 마이크로(micros)로 인코딩된 노출 비용(CPM 보다는 CPI 우선). 예를 들어, CPM $5 USD 수익은 5,000,000 마이크로 CPM, 또는 5,000 마이크로 CPI에 해당됩니다. 이 경우 WINNING_PRICE의 디코딩된 값은 5,000입니다.
낙찰가는 CPI에 지정되어 있습니다.
이 매크로를 파싱하려면 가격 확인을 복호화하는 애플리케이션을 구현해야 합니다. 자세한 내용은 가격 확인 복호화 페이지를 참고하세요.
WINNING_PRICE_ESC
URL로 이스케이프된 WINNING_PRICE입니다.
Google에서는 서드 파티에서 게재하는 광고의 광고 소재 내에서 CLICK_URL_UNESC 또는 CLICK_URL_ESC 매크로를 사용하도록 요구합니다. Google은 클릭 추적에 CLICK_URL 매크로를 사용합니다.
매크로의 URL 이스케이프는 다음 스키마를 사용합니다.
공백 문자가 더하기 기호 (+)로 대체됩니다.
영숫자 (0~9, a~z, A~Z)와 !()*,-./:_~ 집합의 문자는 변경되지 않습니다.
다른 모든 문자는 %XX로 대체됩니다. 여기서 XX는 문자를 나타내는 16진수입니다.
게시자 제한사항 및 요구사항
입찰 요청에는 게시자가 입찰에서 광고 소재에 적용하는 제한사항 및 요구사항의 종류에 관한 정보가 포함됩니다.
BidRequest.bcat
이 필드에 지정된 차단된 카테고리를 실시간 입찰 API의 detectedCategories 필드를 사용하여 제출된 광고 소재에 대해 감지된 카테고리와 비교할 수 있습니다.
BidRequest.imp.ext.allowed_vendor_type
BidRequest.imp.secure
실제로 Google에서는 모든 광고 소재에 SSL 지원을 요구하므로 이 값은 항상 true로 설정됩니다.
BidRequest.imp.{audio/banner/native/video}
BidRequest.imp.{audio/banner/native/video}.api
BidRequest.imp.{audio/banner/native/video}.battr
BidRequest.imp.{audio/banner/video}.mimes
제한된 기능이 포함된 광고로 입찰하지 마세요. 공급업체 유형과 같은 허용된 기능의 경우 공급업체 유형이 BidRequest의 allowed_vendor_type 목록에 있는 경우에만 광고를 반환합니다. BidRequest.imp.banner와 같은 필드를 채워 입찰 요청에 지정된 광고 형식만 입찰에 포함해야 합니다. 자세한 내용은 BidRequest 프로토콜 버퍼 정의의 이러한 필드에 관한 주석을 참고하세요.
광고가 BidResponse에 반환되는 경우 BidResponse에서 BidResponse.seatbid.bid.attr, BidResponse.seatbid.bid.cat, BidResponse.seatbid.bid.adomain 또는 BidResponse.seatbid.bid.adm_native.link.url 필드를 정확하게 설정해야 합니다. 광고에 이러한 필드에 적용할 수 있는 값이 여러 개 있는 경우 모든 값을 포함해야 합니다. 자세한 내용은 BidResponse 프로토콜 버퍼 정의의 이러한 필드에 관한 주석을 참고하세요.
이러한 필드가 설정되지 않은 응답은 삭제됩니다.
Open Measurement
Open Measurement를 사용하면 모바일 앱 환경에 게재되는 광고에 독립적인 측정 및 검증 서비스를 제공하는 서드 파티 업체를 지정할 수 있습니다.
지원되는 광고 형식에는 동영상, 배너, 전면 광고가 있습니다. 이러한 형식이 포함된 입찰 응답에서 Open Measurement를 사용하는 방법에 관한 자세한 내용은 Open Measurement SDK 고객센터 도움말을 참고하세요.
id:"550102L8So5v6gi4C00T36"seatbid{bid{id:"U796oSA426V3U666ue8"impid:"1"price:1.057860016822815crid:"test_creative_id_395811"dealid:"0"adm_native{ver:"1.2"assets{id:6img{url:"https://native.test.com/logo?id=123456"w:200h:200type:LOGO}}assets{id:5img{url:"https://native.test.com/image?id=123456"w:800h:800type:MAIN}}assets{id:4data{value:"Galactic Luxury Cruises"type:SPONSORED}}assets{id:3data{value:"Book today"type:CTATEXT}}assets{id:1title{text:"Luxury Mars Cruises"}}assets{id:2data{value:"Visit the planet in a luxury spaceship."type:DESC}}link{url:"https://www.google.com"}}[com.google.doubleclick.bid]{impression_tracking_url:"https://test.com/impression?id=123456"impression_tracking_url:"https://test.com/impression?id=123456"ad_choices_destination_url:"https://test.com/preferences"event_notification_token{payload:"token"}billing_id:73917825312dsa{adrender:true}clickurl:"google.com"}}}cur:"JPY"[com.google.doubleclick.bid_response]{processing_time_ms:17}
OpenRTB JSON
예 보기
{"id":"550102L8So5v6gi4C00T36","seatbid":[{"bid":[{"id":"U796oSA426V3U666ue8","impid":"1","price":1.057860016822815,"crid":"test_creative_id_395811","dealid":"0","ext":{"impression_tracking_url":["https://test.com/impression?id=123456","https://test.com/impression?id=123456"],"ad_choices_destination_url":"https://test.com/preferences","event_notification_token":{"payload":"token"},"billing_id":"73917825312","dsa":{"adrender":1},"clickurl":["google.com"]},"adm":"{\"ver\":\"1.2\",\"assets\":[{\"id\":6,\"img\":{\"url\":\"https://native.test.com/logo?id=123456\",\"w\":200,\"h\":200,\"type\":2}},{\"id\":5,\"img\":{\"url\":\"https://native.test.com/image?id=123456\",\"w\":800,\"h\":800,\"type\":3}},{\"id\":4,\"data\":{\"value\":\"Galactic Luxury Cruises\",\"type\":1}},{\"id\":3,\"data\":{\"value\":\"Book today\",\"type\":12}},{\"id\":1,\"title\":{\"text\":\"Luxury Mars Cruises\"}},{\"id\":2,\"data\":{\"value\":\"Visit the planet in a luxury spaceship.\",\"type\":2}}],\"link\":{\"url\":\"https://www.google.com\"}}"}]}],"cur":"JPY","ext":{"processing_time_ms":17}}
[null,null,["최종 업데이트: 2026-02-23(UTC)"],[],["Applications must respond to each `BidRequest` with a parsable `BidResponse`, using Protobuf or an HTTP 204 for no bids. Creatives are identified by a unique `crid`. Ad attributes, such as VPAID and MRAID, are declared in specific fields. Utilize impression tracking URLs and avoid deprecated fields. Open Bidding bid responses are similar to Authorized Buyers. Ad sizes in the response must match the request. Macros are used in URLs. Publisher requirements are specified in the `BidRequest`. The response must accurately reflect these requirements and provide the accurate ad attributes and links.\n"]]