View a markdown version of this page

입찰 구성 및 템플릿 지정 - AWS Elemental MediaTailor

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

입찰 구성 및 템플릿 지정

이 페이지에서는 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는 다음 단계에서 입찰 요청을 구성합니다.

  1. 템플릿 보간. MediaTailor는 표준 Mustache 템플릿 지정 구문을 사용하여 템플릿의 , , {{session.*}}{{player_params.*}}{{avail.*}}{{request.*}}, {{asset.*}}, 및 {{scte.*}} 자리 표시자를 확인합니다. Mustache는 ADS URL 변수 대체에 [ ] 사용되는 대괄호와 {{ }}다른 이중 중괄호를 사용합니다.

  2. JSON 구문 분석. 보간된 템플릿은 JSON으로 구문 분석됩니다.

  3. 필드 추출 및 검증. MediaTailor는 필수 필드를 추출하고 누락되거나 비어 있는 BidRequestConfigurationError 경우를 발생시킵니다.

  4. 하드코딩된 필드 주입. MediaTailor는 콘솔 구성 및 현재 가용 컨텍스트의 값(예: 구성된 게시자 IDapp.publisher.id, 계산된 채워지지 않은 기간imp.video.maxduration)을 사용하여 자동으로 관리하는 필드를 재정의하거나 주입합니다.

  5. 직렬화 및 제출. 최종 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".

다음 단계