Для начала, приостановки и возобновления сделок для вашего покупательского аккаунта и аккаунта любого из ваших клиентов вы можете использовать следующие методы.
Обслуживать сделки вручную
По умолчанию, заключенные сделки автоматически становятся готовыми к исполнению после того, как они будут приняты обеими сторонами.
Обратитесь к своему техническому менеджеру, если вы хотите вручную установить готовность к показу ваших программно гарантированных сделок. После того, как ваш технический менеджер активирует эту функцию, используйте метод buyers.finalizedDeals.setReadyToServe , чтобы вручную сообщить о готовности вашей завершенной программно гарантированной сделки к показу. Этот вызов начнет показ вашей завершенной сделки в течение заданного времени.
Мы рекомендуем использовать ресурс buyers.creatives API для торгов в реальном времени, чтобы запросить проверку каждого креатива, который вы хотите разместить в рамках сделки. После одобрения креативов вы можете добавить их в сделки .
После того, как все рекламные материалы, которые вы хотите разместить, будут одобрены и добавлены к сделке, позвоните по адресу buyers.finalizedDeals.setReadyToServe , чтобы сообщить о своей готовности отвечать на входящие запросы на участие в тендере.
Этот метод не влияет на сделки, которые уже находятся в процессе обработки.
В следующем примере показано, как можно вручную запустить обработку предложений с помощью метода setReadyToServe .
ОТДЫХ
Запрос
POST https://authorizedbuyersmarketplace.googleapis.com/v1/buyers/12345678/finalizedDeals/1840860:setReadyToServe?alt=json Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Ответ
{
"name": "buyers/12345678/finalizedDeals/1840860",
"deal": {
"name": "buyers/12345678/proposals/MP8642048/deals/1840860",
"createTime": "2031-03-26T05:53:33.053Z",
"updateTime": "2031-03-28T05:54:33.442Z",
"displayName": "test-pg-deal-4",
"buyer": "buyers/12345678",
"publisherProfile": "buyers/12345678/publisherProfiles/PP12345",
"flightStartTime": "2032-03-31T16:00:00Z",
"flightEndTime": "2032-03-31T18:59:00Z",
"targeting": {
"inventorySizeTargeting": {
"targetedInventorySizes": [
{
"width": "200",
"height": "200",
"type": "PIXEL"
},
{
"width": "234",
"height": "60",
"type": "PIXEL"
},
{
"width": "240",
"height": "400",
"type": "PIXEL"
},
{
"width": "300",
"height": "250",
"type": "PIXEL"
},
{
"width": "300",
"height": "600",
"type": "PIXEL"
},
{
"width": "300",
"height": "1050",
"type": "PIXEL"
}
]
}
},
"creativeRequirements": {
"creativePreApprovalPolicy": "SELLER_PRE_APPROVAL_NOT_REQUIRED",
"creativeSafeFrameCompatibility": "COMPATIBLE",
"programmaticCreativeSource": "ADVERTISER",
"creativeFormat": "DISPLAY"
},
"deliveryControl": {
"deliveryRateType": "EVENLY"
},
"billedBuyer": "buyers/12345678",
"dealType": "PROGRAMMATIC_GUARANTEED",
"programmaticGuaranteedTerms": {
"guaranteedLooks": "1",
"fixedPrice": {
"type": "CPM",
"amount": {
"currencyCode": "USD",
"nanos": 10000000
}
},
"reservationType": "STANDARD"
},
"sellerTimeZone": {
"id": "Asia/Shanghai"
}
},
"dealServingStatus": "ENDED",
"dealPausingInfo": {
"pausingConsented": true
},
"rtbMetrics": {},
"readyToServe": true
}Java
/* * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.api.services.samples.authorizedbuyers.marketplace.v1.buyers.finalizedDeals; import com.google.api.services.authorizedbuyersmarketplace.v1.AuthorizedBuyersMarketplace; import com.google.api.services.authorizedbuyersmarketplace.v1.model.FinalizedDeal; import com.google.api.services.authorizedbuyersmarketplace.v1.model.SetReadyToServeRequest; import com.google.api.services.samples.authorizedbuyers.marketplace.v1.Utils; import java.io.IOException; import java.security.GeneralSecurityException; import net.sourceforge.argparse4j.ArgumentParsers; import net.sourceforge.argparse4j.inf.ArgumentParser; import net.sourceforge.argparse4j.inf.ArgumentParserException; import net.sourceforge.argparse4j.inf.Namespace; /** * This sample illustrates how to signal that the given finalized deal is ready to serve. * * <p>By default, deals are set ready to serve as soon as they're finalized. For programmatic * guaranteed deals, bidders can opt out of this feature by asking their account manager. This is * recommended for programmatic guaranteed deals in order to ensure that bidders have creatives * prepared to be used in placing bids once the deal is serving. Use finalizedDeals.addCreative to * associate creatives with a programmatic guaranteed deal. */ public class SetReadyToServeFinalizedDeals { public static void execute(AuthorizedBuyersMarketplace marketplaceClient, Namespace parsedArgs) { Long accountId = parsedArgs.getLong("account_id"); Long dealId = parsedArgs.getLong("deal_id"); String name = String.format("buyers/%d/finalizedDeals/%d", accountId, dealId); FinalizedDeal finalizedDeal = null; try { finalizedDeal = marketplaceClient .buyers() .finalizedDeals() .setReadyToServe(name, new SetReadyToServeRequest()) .execute(); } catch (IOException ex) { System.out.printf("Marketplace API returned error response:%n%s", ex); System.exit(1); } System.out.printf("Signaling that finalized deal with name \"%s\" is ready to serve:%n", name); Utils.printFinalizedDeal(finalizedDeal); } public static void main(String[] args) { ArgumentParser parser = ArgumentParsers.newFor("SetReadyToServeFinalizedDeals") .build() .defaultHelp(true) .description(("Signals that the given finalized deal is ready to serve.")); parser .addArgument("-a", "--account_id") .help( "The resource ID of the buyers resource under which the finalized was created. " + "This will be used to construct the parent used as a path parameter for the " + "finalizedDeals.setReadyToServe request.") .required(true) .type(Long.class); parser .addArgument("-d", "--deal_id") .help( "The resource ID of the buyers.finalizedDeals resource that you intend to signal is" + " ready to serve. This will be used to construct the name used as a path" + " parameter for the finalizedDeals.setReadyToServe request.") .required(true) .type(Long.class); Namespace parsedArgs = null; try { parsedArgs = parser.parseArgs(args); } catch (ArgumentParserException ex) { parser.handleError(ex); System.exit(1); } AuthorizedBuyersMarketplace client = null; try { client = Utils.getMarketplaceClient(); } catch (IOException ex) { System.out.printf("Unable to create Marketplace API service:%n%s", ex); System.out.println("Did you specify a valid path to a service account key file?"); System.exit(1); } catch (GeneralSecurityException ex) { System.out.printf("Unable to establish secure HttpTransport:%n%s", ex); System.exit(1); } execute(client, parsedArgs); } }
Приостановить подачу
Вы можете использовать метод buyers.finalizedDeals.pause , чтобы приостановить завершение сделки. Если вы приостановите сделку, вы перестанете получать запросы на участие в торгах по этой сделке.
Покупатели не могут приостановить сделки на частных аукционах.
В следующем примере показано, как можно приостановить завершенную сделку с помощью метода паузы.
ОТДЫХ
Запрос
POST https://authorizedbuyersmarketplace.googleapis.com/v1/buyers/12345678/finalizedDeals/1840860:pause?alt=json Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Ответ
{
"name": "buyers/12345678/finalizedDeals/1840860",
"deal": {
"name": "buyers/12345678/proposals/MP8642048/deals/1840860",
"createTime": "2031-03-26T05:53:33.053Z",
"updateTime": "2032-03-31T16:30:21.351Z",
"displayName": "test-pg-deal-4",
"buyer": "buyers/12345678",
"publisherProfile": "buyers/12345678/publisherProfiles/PP12345",
"flightStartTime": "2032-03-31T16:00:00Z",
"flightEndTime": "2032-03-31T18:59:00Z",
"targeting": {
"inventorySizeTargeting": {
"targetedInventorySizes": [
{
"width": "200",
"height": "200",
"type": "PIXEL"
},
{
"width": "234",
"height": "60",
"type": "PIXEL"
},
{
"width": "240",
"height": "400",
"type": "PIXEL"
},
{
"width": "300",
"height": "250",
"type": "PIXEL"
},
{
"width": "300",
"height": "600",
"type": "PIXEL"
},
{
"width": "300",
"height": "1050",
"type": "PIXEL"
}
]
}
},
"creativeRequirements": {
"creativePreApprovalPolicy": "SELLER_PRE_APPROVAL_NOT_REQUIRED",
"creativeSafeFrameCompatibility": "COMPATIBLE",
"programmaticCreativeSource": "ADVERTISER",
"creativeFormat": "DISPLAY"
},
"deliveryControl": {
"deliveryRateType": "EVENLY"
},
"billedBuyer": "buyers/12345678",
"dealType": "PROGRAMMATIC_GUARANTEED",
"programmaticGuaranteedTerms": {
"guaranteedLooks": "1",
"fixedPrice": {
"type": "CPM",
"amount": {
"currencyCode": "USD",
"nanos": 10000000
}
},
"reservationType": "STANDARD"
},
"sellerTimeZone": {
"id": "Asia/Shanghai"
}
},
"dealServingStatus": "ENDED",
"dealPausingInfo": {
"pausingConsented": true
},
"rtbMetrics": {},
"readyToServe": true
}Java
/* * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.api.services.samples.authorizedbuyers.marketplace.v1.buyers.finalizedDeals; import com.google.api.services.authorizedbuyersmarketplace.v1.AuthorizedBuyersMarketplace; import com.google.api.services.authorizedbuyersmarketplace.v1.model.FinalizedDeal; import com.google.api.services.authorizedbuyersmarketplace.v1.model.PauseFinalizedDealRequest; import com.google.api.services.samples.authorizedbuyers.marketplace.v1.Utils; import java.io.IOException; import java.security.GeneralSecurityException; import net.sourceforge.argparse4j.ArgumentParsers; import net.sourceforge.argparse4j.inf.ArgumentParser; import net.sourceforge.argparse4j.inf.ArgumentParserException; import net.sourceforge.argparse4j.inf.Namespace; /** * This sample illustrates how to pause serving of a finalized deal. * * <p>Note that only programmatic guaranteed deals can be paused by buyers at this time. */ public class PauseFinalizedDeals { public static void execute(AuthorizedBuyersMarketplace marketplaceClient, Namespace parsedArgs) { Long accountId = parsedArgs.getLong("account_id"); Long dealId = parsedArgs.getLong("deal_id"); String name = String.format("buyers/%d/finalizedDeals/%d", accountId, dealId); FinalizedDeal finalizedDeal = null; try { finalizedDeal = marketplaceClient .buyers() .finalizedDeals() .pause(name, new PauseFinalizedDealRequest()) .execute(); } catch (IOException ex) { System.out.printf("Marketplace API returned error response:%n%s", ex); System.exit(1); } System.out.printf( "Paused finalized deal with ID \"%d\" for buyer account ID \"%d\":%n", dealId, accountId); Utils.printFinalizedDeal(finalizedDeal); } public static void main(String[] args) { ArgumentParser parser = ArgumentParsers.newFor("PauseFinalizedDeals") .build() .defaultHelp(true) .description(("Pause a finalized deal for the given buyer account ID and deal ID.")); parser .addArgument("-a", "--account_id") .help( "The resource ID of the buyers resource under which the finalized was created. " + "This will be used to construct the parent used as a path parameter for the " + "finalizedDeals.pause request.") .required(true) .type(Long.class); parser .addArgument("-d", "--deal_id") .help( "The resource ID of the buyers.finalizedDeals resource that is being paused. This " + "will be used to construct the name used as a path parameter for the " + "finalizedDeals.pause request.") .required(true) .type(Long.class); Namespace parsedArgs = null; try { parsedArgs = parser.parseArgs(args); } catch (ArgumentParserException ex) { parser.handleError(ex); System.exit(1); } AuthorizedBuyersMarketplace client = null; try { client = Utils.getMarketplaceClient(); } catch (IOException ex) { System.out.printf("Unable to create Marketplace API service:%n%s", ex); System.out.println("Did you specify a valid path to a service account key file?"); System.exit(1); } catch (GeneralSecurityException ex) { System.out.printf("Unable to establish secure HttpTransport:%n%s", ex); System.exit(1); } execute(client, parsedArgs); } }
Возобновить обслуживание
Вы можете использовать метод 'buyers.finalizedDeals.resume' , чтобы возобновить показ завершенной сделки, которую вы приостановили. После возобновления показа сделки ваши конечные точки начнут получать запросы на ставки по этой сделке. Попытка возобновить показ сделки, которую издатель приостановил, не даст никакого эффекта.
Покупатели не могут возобновить приостановленные сделки на частных аукционах.
Следующий пример демонстрирует, как можно возобновить завершенную сделку с помощью метода возобновления.
ОТДЫХ
Запрос
POST https://authorizedbuyersmarketplace.googleapis.com/v1/buyers/12345678/finalizedDeals/1840860:resume?alt=json Authorization: Bearer ACCESS_TOKEN Content-Type: application/json
Ответ
{
"name": "buyers/12345678/finalizedDeals/1840860",
"deal": {
"name": "buyers/12345678/proposals/MP8642048/deals/1840860",
"createTime": "2031-03-26T05:53:33.053Z",
"updateTime": "2032-03-31T16:35:12.413Z",
"displayName": "test-pg-deal-4",
"buyer": "buyers/12345678",
"publisherProfile": "buyers/12345678/publisherProfiles/PP12345",
"flightStartTime": "2032-03-31T16:00:00Z",
"flightEndTime": "2032-03-31T18:59:00Z",
"targeting": {
"inventorySizeTargeting": {
"targetedInventorySizes": [
{
"width": "200",
"height": "200",
"type": "PIXEL"
},
{
"width": "234",
"height": "60",
"type": "PIXEL"
},
{
"width": "240",
"height": "400",
"type": "PIXEL"
},
{
"width": "300",
"height": "250",
"type": "PIXEL"
},
{
"width": "300",
"height": "600",
"type": "PIXEL"
},
{
"width": "300",
"height": "1050",
"type": "PIXEL"
}
]
}
},
"creativeRequirements": {
"creativePreApprovalPolicy": "SELLER_PRE_APPROVAL_NOT_REQUIRED",
"creativeSafeFrameCompatibility": "COMPATIBLE",
"programmaticCreativeSource": "ADVERTISER",
"creativeFormat": "DISPLAY"
},
"deliveryControl": {
"deliveryRateType": "EVENLY"
},
"billedBuyer": "buyers/12345678",
"dealType": "PROGRAMMATIC_GUARANTEED",
"programmaticGuaranteedTerms": {
"guaranteedLooks": "1",
"fixedPrice": {
"type": "CPM",
"amount": {
"currencyCode": "USD",
"nanos": 10000000
}
},
"reservationType": "STANDARD"
},
"sellerTimeZone": {
"id": "Asia/Shanghai"
}
},
"dealServingStatus": "ENDED",
"dealPausingInfo": {
"pausingConsented": true
},
"rtbMetrics": {},
"readyToServe": true
}Java
/* * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.api.services.samples.authorizedbuyers.marketplace.v1.buyers.finalizedDeals; import com.google.api.services.authorizedbuyersmarketplace.v1.AuthorizedBuyersMarketplace; import com.google.api.services.authorizedbuyersmarketplace.v1.model.FinalizedDeal; import com.google.api.services.authorizedbuyersmarketplace.v1.model.ResumeFinalizedDealRequest; import com.google.api.services.samples.authorizedbuyers.marketplace.v1.Utils; import java.io.IOException; import java.security.GeneralSecurityException; import net.sourceforge.argparse4j.ArgumentParsers; import net.sourceforge.argparse4j.inf.ArgumentParser; import net.sourceforge.argparse4j.inf.ArgumentParserException; import net.sourceforge.argparse4j.inf.Namespace; /** * This sample illustrates how to resume serving of a finalized deal. * * <p>Note that only programmatic guaranteed deals can be resumed by buyers at this time. */ public class ResumeFinalizedDeals { public static void execute(AuthorizedBuyersMarketplace marketplaceClient, Namespace parsedArgs) { Long accountId = parsedArgs.getLong("account_id"); Long dealId = parsedArgs.getLong("deal_id"); String name = String.format("buyers/%d/finalizedDeals/%d", accountId, dealId); FinalizedDeal finalizedDeal = null; try { finalizedDeal = marketplaceClient .buyers() .finalizedDeals() .resume(name, new ResumeFinalizedDealRequest()) .execute(); } catch (IOException ex) { System.out.printf("Marketplace API returned error response:%n%s", ex); System.exit(1); } System.out.printf( "Resumed finalized deal with ID \"%s\" for buyer account ID \"%d\":%n", dealId, accountId); Utils.printFinalizedDeal(finalizedDeal); } public static void main(String[] args) { ArgumentParser parser = ArgumentParsers.newFor("ResumeFinalizedDeals") .build() .defaultHelp(true) .description(("Resume a finalized deal for the given buyer account ID and deal ID.")); parser .addArgument("-a", "--account_id") .help( "The resource ID of the buyers resource under which the finalized was created. " + "This will be used to construct the parent used as a path parameter for the " + "finalizedDeals.resume request.") .required(true) .type(Long.class); parser .addArgument("-d", "--deal_id") .help( "The resource ID of the buyers.finalizedDeals resource that is being resumed. This " + "will be used to construct the name used as a path parameter for the " + "finalizedDeals.resume request.") .required(true) .type(Long.class); Namespace parsedArgs = null; try { parsedArgs = parser.parseArgs(args); } catch (ArgumentParserException ex) { parser.handleError(ex); System.exit(1); } AuthorizedBuyersMarketplace client = null; try { client = Utils.getMarketplaceClient(); } catch (IOException ex) { System.out.printf("Unable to create Marketplace API service:%n%s", ex); System.out.println("Did you specify a valid path to a service account key file?"); System.exit(1); } catch (GeneralSecurityException ex) { System.out.printf("Unable to establish secure HttpTransport:%n%s", ex); System.exit(1); } execute(client, parsedArgs); } }