기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
입찰 구성 및 템플릿 지정
이 페이지에서는 MediaTailor가 템플릿에서 OpenRTB 입찰 요청을 작성하는 방법, 변수 보간 작동 방식, MediaTailor가 자동으로 설정하는 값에 대해 설명합니다.
구성 필드
재생 구성에서 수율 최적화를 활성화하면 네 개의 필드를 제공합니다.
| 필드 | 설명 | 필수 |
|---|---|---|
PublisherId |
APS 게시자 ID(APS 등록에서 획득). 모든 입찰 요청에 대해 app.publisher.id에 주입됩니다. |
예 |
Region |
APS 리전: AMERICAS, EUROPE또는 ASIA_PACIFIC. APS 엔드포인트를 결정합니다. |
예 |
MinimumUnfilledDuration |
MediaTailor가 입찰 요청을 트리거하기 전에 필요한 최소 채워지지 않은 초입니다. 로도 사용됩니다imp.video.minduration. |
예 |
OpenRtbTemplate |
ORTB JSON 템플릿(최대 100KB). 입찰 요청 본문을 정의합니다. | 예 |
입찰 요청 구성 방법
광고 시간이 채워지지 않은 기간이 남아 있는 경우 MediaTailor는 다음 단계에서 입찰 요청을 구성합니다.
-
템플릿 보간. MediaTailor는 표준 Mustache 템플릿 지정 구문을 사용하여 템플릿의
, , {{session.*}}{{player_params.*}}{{avail.*}}{{request.*}},{{asset.*}}, 및{{scte.*}}자리 표시자를 확인합니다. Mustache는 ADS URL 변수 대체에[ ]사용되는 대괄호와{{ }}다른 이중 중괄호를 사용합니다. -
JSON 구문 분석. 보간된 템플릿은 JSON으로 구문 분석됩니다.
-
필드 추출 및 검증. MediaTailor는 필수 필드를 추출하고 누락되거나 비어 있는
BidRequestConfigurationError경우를 발생시킵니다. -
하드코딩된 필드 주입. MediaTailor는 콘솔 구성 및 현재 가용 컨텍스트의 값(예: 구성된 게시자 ID
app.publisher.id, 계산된 채워지지 않은 기간imp.video.maxduration)을 사용하여 자동으로 관리하는 필드를 재정의하거나 주입합니다. -
직렬화 및 제출. 최종 BidRequest는 JSON으로 직렬화되고 HTTP POST로 APS 엔드포인트로 전송됩니다.
중요
보간 후 필수 필드가 누락되거나 비어 있으면 입찰 요청이 실패BidRequestConfigurationError하고 요청이 APS로 전송되지 않습니다. 오류가 로깅되지만 재생은 정상적으로 계속됩니다(실패-열림).
콘솔 기본 템플릿
MediaTailor 콘솔에서 수율 최적화를 활성화하면 다음과 같은 사전 채워진 템플릿이 시작점으로 제공됩니다. 애플리케이션의 값을 사용자 지정해야 합니다.
{ "imp": [ { "bidfloor": 5 } ], "app": { "id": "{{player_params.app_id}}", "name": "{{player_params.app_name}}", "bundle": "{{player_params.bundle}}", "storeurl": "{{player_params.storeurl}}", "domain": "{{player_params.domain}}", "content": { "genre": "{{asset.genre}}", "contentrating": "{{asset.content_rating}}" } }, "device": { "dnt": "{{player_params.dnt}}", "ua": "{{session.user_agent}}", "ip": "{{session.client_ip}}", "ifa": "{{player_params.device_ifa}}", "w": "{{player_params.device_width}}", "h": "{{player_params.device_height}}", "language": "{{player_params.language}}", "model": "{{player_params.model}}", "os": "{{player_params.os}}", "osv": "{{player_params.osv}}", "devicetype": "{{player_params.devicetype}}", "make": "{{player_params.make}}" }, "user": { "consent": "{{player_params.consent}}" }, "regs": { "gdpr": "{{player_params.gdpr}}", "us_privacy": "{{player_params.us_privacy}}", "gpp": "{{player_params.gpp_consent}}", "gpp_sid": "{{player_params.gpp_sid}}" } }
Field-by-field 설명:
| Field | 카테고리 | 수행할 작업 |
|---|---|---|
imp[0].bidfloor |
선택 사항(기본값: 1.0) | 최소 CPM을 설정합니다. 콘솔 기본값은 5 USD입니다. 테스트 중에 더 나은 채우기 속도를 위해를 낮춥니다. |
app.id |
APS 권장 | 앱 식별자입니다. 플레이어는를 전송해야 합니다playerParams.app_id. |
app.name |
APS 권장 | 앱 이름입니다. 플레이어는를 전송해야 합니다playerParams.app_name. |
app.bundle |
필수 | 앱 번들 ID입니다. 플레이어는를 전송playerParams.bundle하거나를 정적 값으로 바꿔야 합니다(권장). |
app.storeurl |
필수 | 앱 스토어 URL입니다. 플레이어는를 전송playerParams.storeurl하거나를 정적 값으로 바꿔야 합니다(권장). |
app.domain |
APS 권장 | 앱 도메인. 플레이어는를 전송해야 합니다playerParams.domain. |
app.content.genre |
APS 권장 | 콘텐츠 소스 자산 메타데이터에서 채워집니다. |
app.content.contentrating |
APS 권장 | 콘텐츠 소스 자산 메타데이터에서 채워집니다. |
device.dnt |
APS 권장 | 추적 안 함 플래그. 플레이어는를 전송해야 합니다playerParams.dnt. |
device.ua |
필수 | 를 통해 최종 사용자의 사용자-에이전트 헤더에서 자동으로 채워집니다{{session.user_agent}}. 플레이어 파라미터가 필요하지 않습니다. |
device.ip |
필수 | 를 통해 최종 사용자의 IP에서 자동으로 채워집니다{{session.client_ip}}. 플레이어 파라미터가 필요하지 않습니다. |
device.ifa |
APS 권장 | 광고 ID. 플레이어는를 전송해야 합니다playerParams.device_ifa. |
device.w / device.h |
APS 권장 | 화면 차원입니다. 플레이어는 playerParams.device_width /를 전송해야 합니다device_height. |
device.language |
APS 권장 | 디바이스 언어입니다. 플레이어는를 전송해야 합니다playerParams.language. |
device.model |
APS 권장 | 디바이스 모델. 플레이어는를 전송해야 합니다playerParams.model. |
device.os / device.osv |
APS 권장 | OS 및 버전. 플레이어는 playerParams.os /를 전송해야 합니다osv. |
device.devicetype |
재정의 가능(기본값: 3) | IAB 디바이스 유형. 플레이어는를 전송해야 합니다playerParams.devicetype. 비어 있는 경우 기본값은 3(CTV)입니다. |
device.make |
APS 권장 | 디바이스 제조업체. 플레이어는를 전송해야 합니다playerParams.make. |
user.consent |
APS 권장(EU) | GDPR 동의 문자열(TCF). 플레이어는를 전송해야 합니다playerParams.consent. |
regs.gdpr |
APS 권장(EU) | GDPR 플래그(0 또는 1). 플레이어는를 전송해야 합니다playerParams.gdpr. |
regs.us_privacy |
APS 권장(미국) | CCPA 문자열(예: 1YNY). 플레이어는를 전송해야 합니다playerParams.us_privacy. |
regs.gpp |
APS 권장 | 글로벌 프라이버시 플랫폼 동의 문자열입니다. 플레이어는를 전송해야 합니다playerParams.gpp_consent. 더 나은 채우기 속도를 us_privacy 위해 대신 선호됩니다. |
regs.gpp_sid |
APS 권장 | GPP 섹션 IDs(예: 미국 국적[7]의 경우). 플레이어는를 전송해야 합니다playerParams.gpp_sid. |
중요
콘솔 기본값은 app.bundle 및와 같은 필수 필드에 {{player_params.*}}를 사용합니다app.storeurl. 플레이어가 이러한 파라미터를 보내지 않으면 입찰 요청이와 함께 실패합니다BidRequestConfigurationError. 모든 세션에 대해 동일한 필드(일반적으로 app.bundle, app.storeurlapp.name, 및 기타 앱 수준 식별자)의 경우 자리 표시자를 정적 값으로 바꾸는 것이 좋습니다(예: "bundle": "com.yourcompany.app"). , , device.ua, device.ip device.ifaGDPR 및 GPP 동의 문자열 또는 모든 reg 또는 사용자 객체 필드와 같이 최종 사용자별로 다른 필드를 하드코딩하지 마십시오. 또는 {{session.*}}에서 가져와야 합니다{{player_params.*}}.
참고
콘솔 기본값은 템플릿video.protocols에 video.mimes 또는를 포함하지 않습니다. MediaTailor는 하드코딩된 폴백 값(["video/mp4"]mimes의 경우 , 프로토콜[1,2,3,4,5,6,7,8]의 경우 )이 제공되지 않은 경우 이를 사용합니다. 지원되는 형식을 제한하려는 경우 템플릿에 추가할 수 있습니다.
템플릿 보간(Mustache 템플릿 지정)
ORTB 템플릿은 동적 값 대체에 Mustache 템플릿 구문을{{ }}.
사용 가능한 템플릿 변수
ORTB 템플릿은 ADS URL 템플릿에서 사용할 수 있는 것과 동일한 동적 변수를 사용할 수 있습니다. 여기에는 세션 변수(예: , {{session.user_agent}}{{session.client_ip}}), 플레이어 파라미터({{player_params.*}}), 자산 메타데이터({{asset.*}}), 가용 컨텍스트({{avail.*}}) 및 SCTE 신호 데이터()가 포함됩니다{{scte.*}}.
사용 가능한 변수의 전체 목록과 설명은 섹션을 참조하세요ADS 요청에 대한 MediaTailor 동적 광고 변수. MediaTailor URL이 플레이어 파라미터 값을 템플릿으로 대체하기 전에 이를 디코딩하는 방법은이 페이지의 인코딩 및 디코딩 동작뒷부분을 참조하세요.
ORTB 템플릿에서 가장 일반적으로 사용되는 변수는 다음과 같습니다.
-
{{session.user_agent}}: 최종 사용자의 사용자-에이전트 헤더(에 사용device.ua). -
{{session.client_ip}}: 최종 사용자의 IP 주소(에 사용device.ip). -
{{player_params.*}}: 세션 초기화 중에 플레이어가 전달하는 사용자 지정 값입니다. -
{{asset.*}}: 오리진의 콘텐츠 메타데이터(예: ,asset.genreasset.content_rating).
주의
dnt 또는와 같은 숫자 필드의 경우에도 항상 자리 표시자를 따옴표로 묶습니다devicetype. 자리 표시자가 빈 문자열로 확인되고 따옴표로 묶이지 않은 경우(예: "dnt": {{player_params.dnt}}) 결과는 유효하지 않은 JSON이며 전체 입찰 요청이와 함께 실패합니다BidRequestConfigurationError. 대신 "dnt":
"{{player_params.dnt}}"을 사용하세요. APS는 문자열로 전달된 숫자 필드를 허용합니다. 이 동작은 자동 인용 빈 문자열 대체가 보간기의 다른 곳에서 사용되는 원시 JSON 모드와 충돌하기 때문에 설계에 따른 것입니다. 제약 조건은 적용되지 않고 문서화됩니다. MediaTailor인코딩 및 디코딩 동작가 보간 전에 플레이어 파라미터 값을 처리하는 방법은 단원을 참조하십시오.
플레이어 파라미터를 전달하는 방법
세션 초기화 중에 플레이어 파라미터를 전달하는 방법에는 두 가지가 있습니다.
방법 1: JSON 본문을 사용한 POST 요청(권장)
POST https://<mediatailor-endpoint>/v1/session/<config-hash>/<origin-id>/master.m3u8 Content-Type: application/json { "playerParams": { "app_id": "558775_example", "slot_id": "608109df-2378-4bc5-8da5-24bc355f01a4", "os": "Tizen", "make": "Samsung", "model": "Tizen TV", "language": "en", "us_privacy": "1YNY" } }
이 메서드는 사용자 에이전트 문자열과 같은 복잡한 값의 URL 인코딩 문제를 방지하기 때문에 선호됩니다.
방법 2: URL 쿼리 파라미터
GET https://<mediatailor-endpoint>/v1/session/<config-hash>/<origin-id>/master.m3u8 ?playerParams.app_id=558775_example
이 방법을 사용하면 값이 URL로 인코딩되어야 합니다. MediaTailor URL은 보간 전에 이를 디코딩합니다.
인코딩 및 디코딩 동작
MediaTailor는 플레이어 파라미터 값을 템플릿으로 보간하기 전에 플레이어 파라미터 값에 대해 한 수준의 URL 디코딩을 수행합니다. 이는 파라미터 전달 방법(POST 본문 또는 URL 쿼리 파라미터)에 관계없이 적용됩니다.
디코딩된 값의 예:
| 전송된 값 | 디코딩 후 값(템플릿에 사용됨) |
|---|---|
Test%20Os |
Test Os |
https%3A%2F%2Flocalhost |
https://localhost |
foo%20bar |
foo bar |
Mozilla%2F5.0%20(SMART-TV) |
Mozilla/5.0 (SMART-TV) |
요점:
-
MediaTailor는 한 레벨로만 디코딩합니다. 이중 인코딩된 값(예:
%2520)은 공백이%20아닌 로 디코딩됩니다. -
POST 본문 값도 디코딩됩니다. POST 본문에 URL로 인코딩된 값이 포함된 경우 보간 전에 디코딩됩니다.
-
일반 텍스트 값(인코딩 없음)은 변경되지 않습니다.
-
디코딩 및 보간 후 전체 템플릿은 JSON으로 구문 분석됩니다. 보간된 값의 특수 문자(예: 이스케이프 처리되지 않은 따옴표 또는 백슬래시)는 JSON 구문 분석이 중단될 수 있습니다.
작은 정보
플레이어가 이미 일반 텍스트(URL 인코딩되지 않음)인 값을 보내면 그대로 작동합니다. 플레이어가 값을 보내기 전에 URL 인코딩하는 경우에만 디코딩에 유의해야 합니다.
변수가 누락되면 어떻게 되나요?
플레이어가 템플릿에 참조된 파라미터(예: 플레이어 파라미터app_name에는 {{player_params.app_name}} 없음)를 보내지 않으면 자리 표시자는 빈 문자열 로 확인됩니다"".
영향: 빈 문자열이 필수 필드(예: app.bundle)에 있는 경우 입찰 요청은에서 실패합니다BidRequestConfigurationError. 선택적 필드에 있는 경우 APS는 입찰 없음(HTTP 204) 응답을 일으킬 수 있는 빈 값을 수신합니다.
MediaTailor가 자동으로 설정하는 항목
다음 필드는 항상 콘솔 구성 및 현재 가용 컨텍스트의 값을 사용하여 MediaTailor에서 설정합니다. 템플릿에 이를 포함하면 값이 재정의됩니다.
| Field | 소스 |
|---|---|
id |
자동 생성: {sessionId}_{availId} 형식(예: abc123-def456_78901). 입찰 요청을 세션 로그와 상호 연관시키는 데 유용합니다. |
app.publisher.id |
콘솔 구성PublisherId의 . |
imp[0].video.minduration |
콘솔 구성MinimumUnfilledDuration의 . |
imp[0].video.maxduration |
계산됨:이 가용 구간의 실제 채워지지 않은 초입니다. |
imp[0].video.maxseq |
계산된 값: floor(unfilled_duration / 6). |
imp[0].video.poddur |
계산됨:이 가용 구간의 실제 채워지지 않은 초입니다. |
ext.integrationType |
항상를 로 설정합니다"EMT". |
다음 단계
-
field-by-field 참조는 섹션을 참조하세요ORTB 필드 참조.
-
copy-paste 템플릿은 섹션을 참조하세요템플릿 예제.