이 가이드는 API를 통해 프로그래매틱 다이렉트 기능을 사용하는 방법을 개략적으로 설명합니다. 제안서를 만드는 방법과 협상을 실행하는 방법을 설명합니다.
Primer
프로그래매틱 제안서는 Google Ad Manager의 주문과 유사합니다. 프로그래매틱 제안서에는 게시자와 구매자 간에 제안된 거래에 관한 광범위한 정보가 포함됩니다. 제안서는 광고 항목과 함께 구매자에게 인벤토리를 제안하는 것을 나타냅니다.
자세한 내용은 고객센터를 참고하세요.
API를 통해 제안서 만들기
Proposal 객체를 만들려면 이름과 프로그래매틱 구매자만 필요합니다. 프로그래매틱 구매자 ID는 UI 또는 Programmatic_Buyer PQL 테이블을 통해 확인할 수 있습니다.
자바
Proposal proposal = new Proposal(); // Setting required Marketplace information. ProposalMarketplaceInfo proposalMarketplaceInfo = new ProposalMarketplaceInfo(); proposalMarketplaceInfo.setBuyerAccountId(programmaticBuyerId); // Set common required fields for a proposal. proposal.setName("Proposal #" + new Random().nextInt(Integer.MAX_VALUE)); proposal.setPrimaryTraffickerId(primaryTraffickerId); proposal.setMarketplaceInfo(proposalMarketplaceInfo);
Python
proposal = { # Setting required Marketplace information. 'isProgrammatic': 'true', 'marketplaceInfo': { 'buyerAccountId': programmatic_buyer_id, }, # Set common required fields for proposals. 'name': 'Proposal #%s' % uuid.uuid4(), # ... }
PHP
$proposal = new Proposal(); $proposal->setName('Proposal #' . uniqid()); // Set the required Marketplace information. $proposalMarketplaceInfo = new ProposalMarketplaceInfo(); $proposalMarketplaceInfo->setBuyerAccountId($buyerId); $proposal->setMarketplaceInfo($proposalMarketplaceInfo);
C#
// Create a proposal with the minimum required fields. Proposal proposal = new Proposal() { name = "Programmatic proposal #" + new Random().Next(int.MaxValue), // Set required Marketplace information marketplaceInfo = new ProposalMarketplaceInfo() { buyerAccountId = programmaticBuyerId } };
Ruby
# Create proposal configuration object. proposal = { :marketplace_info => { :buyer_account_id => buyer_id }, :name => 'Proposal %s' % SecureRandom.uuid(), # ... }
협상을 위해 구매자에게 보내기 전에 추가 필드를 설정해야 합니다. 제안서에 광고주, 영업 담당자, 애드 마스터, 판매자 연락처가 있어야 합니다.
자바
SalespersonSplit primarySalesperson = new SalespersonSplit(); primarySalesperson.setUserId(primarySalespersonId); proposal.setPrimarySalesperson(primarySalesperson);
Python
'primarySalesperson': { 'userId': primary_salesperson_id, }, 'primaryTraffickerId': primary_trafficker_id, 'probabilityOfClose': '100000',
PHP
// Create salesperson splits for the primary salesperson. $primarySalesperson = new SalespersonSplit(); $primarySalesperson->setUserId($primarySalespersonId); $proposal->setPrimarySalesperson($primarySalesperson); // Set the primary trafficker on the proposal for when it becomes an // order. $proposal->setPrimaryTraffickerId($primaryTraffickerId); $advertiser = new ProposalCompanyAssociation(); $advertiser->setType( ProposalCompanyAssociationType::ADVERTISER ); $advertiser->setCompanyId($advertiserId); $proposal->setAdvertiser($advertiser);
C#
// Set fields that are required before sending the proposal to the buyer. proposal.primaryTraffickerId = primaryTraffickerId; proposal.sellerContactIds = new long[] { primarySalespersonId }; proposal.primarySalesperson = new SalespersonSplit() { userId = primarySalespersonId, }; proposal.advertiser = new ProposalCompanyAssociation() { type = ProposalCompanyAssociationType.ADVERTISER, companyId = advertiserId };
Ruby
:primary_salesperson => { :user_id => primary_salesperson_id }, :primary_trafficker_id => primary_trafficker_id
제안서는 일반적으로 ProposalLineItem 객체로 구성되므로 다음 단계는 새로 만든 제안서 아래에 제안서 광고 항목을 추가하는 것입니다.
프로그래매틱 제안서의 상태
다음 그림은 API 관점에서 협상 과정의 다양한 지점에서 프로그래매틱 제안을 보여줍니다. 각 상태는 다음 필드의 다양한 조합으로 표현됩니다.
- ProposalMarketplaceInfo.hasLocalVersionEdits
- ProposalMarketplaceInfo.negotiationStatus
- Proposal.status
자세한 내용은 Ad Manager 고객센터를 참고하세요.
협상 둘러보기
여기에서는 API를 사용하여 구매자와의 프로그래매틱 제안서 협상을 완료하는 방법을 안내합니다. 위 다이어그램의 상태를 참조합니다.
구매자 검토 또는 승인 준비
먼저 구매자에게 보낼 제안서 광고 항목이 포함된 프로그래매틱 제안서를 작성해야 합니다. 위 그림에서 state C에 해당합니다.
구매자 검토 또는 승인 요청
구매자가 프로그래매틱 제안서를 검토할 준비가 되면 ProposalService.performProposalAction 메서드를 사용하여 RequestBuyerReview 또는 RequestBuyerAcceptance할 수 있습니다.
그러면 협상 단계로 이동합니다.
협상
이 단계에서는 여러 가지 일이 발생할 수 있습니다.
- 구매자가 변경 없이 프로그래매틱 제안을 수락할 수 있습니다.
- 구매자가 변경사항을 제안할 수 있습니다. 이 경우 제안서가 초안 상태 (그림 1의
state B)로 다시 전송됩니다. 그런 다음 수정할 제안서를 열고 제안된 변경사항을 적용한 후 구매자가 검토할 수 있도록 다시 전송해야 합니다. - 구매자가 답장하기 전에 변경할 수도 있습니다. 그림 1의
state D에서 수정할 제안서를 열면 됩니다.
이 협상은 구매자와 합의에 도달할 때까지 계속됩니다. 판매자와 구매자 간의 댓글은 getMarketplaceCommentsByStatement를 사용하여 가져올 수 있습니다.
state A 상태에서 구매자에게 댓글을 보낼 수 있습니다. 이렇게 하려면 updateProposals를 사용하여 제안서의 marketplaceComment 필드를 업데이트해야 합니다.
그런 다음 구매자 승인을 요청하면 댓글이 전송됩니다.
확정됨
판매자와 구매자가 모두 프로그래매틱 제안서를 수락하면 제안서가 확정 상태 (그림 1의 state F)가 됩니다.
그러면 Ad Manager에서 이 프로그래매틱 제안서로부터 광고 항목을 자동으로 생성합니다.
이제 대부분의 경우 프로그래매틱 제안서가 완료되었지만 이 상태에서 실행할 수 있는 두 가지 작업이 있습니다.
- 제안서에서 게재 관련 필드를 수정하여 재협상을 위해 프로그래매틱 제안서를 다시 열 수 있습니다. 수정을 위해 제안을 열고 (그림 1의
state E to A) 변경한 다음 구매자 수락을 요청하면 됩니다. - 제안서의 이름을 업데이트하는 등 게재와 관련이 없는 수정사항을 적용하고 이 거래에서 생성된 Ad Manager 주문 및 광고 항목에 이러한 변경사항을 반영할 수 있습니다. 그림 1에서
state E을 수정하고UpdateOrderWithSellerData작업을 실행하여 이를 수행합니다.