En esta guía, se proporciona una descripción general de alto nivel sobre cómo usar las funciones de Programmatic Direct a través de la API. Describe cómo crear una propuesta y cómo realizar una negociación.
Primer
Una propuesta programática es similar a un pedido en Google Ad Manager. Las propuestas programáticas contienen información general sobre una transacción propuesta entre tú y un comprador. Una propuesta, junto con sus líneas de pedido, representa una oferta de inventario para un comprador.
Para obtener más información, consulta el Centro de ayuda.
Crea una propuesta a través de la API
Para crear un objeto Proposal, solo se requieren el nombre y el comprador programático. El ID del comprador programático se puede obtener a través de la IU o la tabla Programmatic_Buyer de PQL.
Java
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(), # ... }
Antes de enviarla al comprador para su negociación, se deberán configurar campos adicionales. La propuesta debe tener un anunciante, un vendedor, un coordinador de publicidad y contactos del vendedor.
Java
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
Dado que las propuestas suelen estar compuestas por objetos ProposalLineItem, el siguiente paso sería agregar líneas de pedido propuestas debajo de la propuesta que acabas de crear.
Estados de una propuesta programática
En la siguiente figura, se muestra una propuesta programática en varios puntos durante el proceso de negociación desde el punto de vista de la API. Cada estado se representa con varias combinaciones de los siguientes campos:
- ProposalMarketplaceInfo.hasLocalVersionEdits
- ProposalMarketplaceInfo.negotiationStatus
- Proposal.status
Para obtener más información, consulta el Centro de ayuda de Ad Manager.
Explicación interactiva sobre la negociación
Aquí, te guiaremos por el uso de la API para completar una negociación de una propuesta programática con un comprador. Haremos referencia a los estados en el diagrama anterior.
Preparación para la revisión o aceptación del comprador
Primero, debes redactar una propuesta programática con las líneas de pedido propuestas que deseas enviar a un comprador. Esto es state C en la figura anterior.
Solicita la revisión o aceptación del comprador
Cuando esté todo listo para que el comprador revise la propuesta programática, puedes RequestBuyerReview o RequestBuyerAcceptance con el método ProposalService.performProposalAction.
Esto te llevará a la fase de negociación.
Negociación
En esta fase, pueden suceder varias cosas.
- El comprador puede aceptar tu propuesta programática sin cambios.
- El comprador puede proponer cambios. En este caso, la propuesta se enviará de nuevo al estado de borrador (
state Ben la Figura 1). Luego, deberás abrir la propuesta para editarla, realizar los cambios propuestos y volver a enviarla para que el comprador la revise. - También puedes decidir realizar cambios incluso antes de que el comprador responda. Para ello, abre la propuesta para editarla desde
state Den la figura 1.
Esta negociación continúa hasta que llegas a un acuerdo con el comprador. Los comentarios entre tú y el comprador se pueden recuperar con getMarketplaceCommentsByStatement.
Puedes enviar un comentario al comprador mientras estás en state A. Para ello, deberás actualizar el campo marketplaceComment de la propuesta con updateProposals.
El comentario se enviará cuando solicites la aceptación del comprador.
Finalizada
Cuando tanto tú como el comprador aceptan la propuesta programática, esta pasa a un estado finalizado (state F en la figura 1).
Luego, Ad Manager crea automáticamente líneas de pedido a partir de esta propuesta programática.
En la mayoría de los casos, ya terminaste con la propuesta programática. Sin embargo, hay dos acciones que puedes realizar desde este estado:
- Puedes volver a abrir la propuesta programática para renegociarla. Para ello, edita los campos relacionados con la publicación en la propuesta. Para ello, abre la propuesta para editarla (
state E to Aen la Figura 1), realiza los cambios y, luego, solicita la aceptación del comprador. - Puedes realizar ediciones no relacionadas con la publicación, como actualizar el nombre de la propuesta y reflejar estos cambios en el pedido y las líneas de pedido de Ad Manager creados a partir de este acuerdo. Para ello, edita el
state Ede la figura 1 y, luego, realiza la acciónUpdateOrderWithSellerData.