פרסום פרוגרמטי

במדריך הזה מוסבר בקצרה איך להשתמש בתכונות של Programmatic Direct באמצעות ה-API. במאמר הזה מוסבר איך ליצור הצעה ואיך לנהל משא ומתן.

Primer

הצעה לרכישה בתכנות דומה להזמנה ב-Google Ad Manager. הצעות לתכנון קמפיינים אוטומטיות מכילות מידע כללי על עסקה מוצעת ביניכם לבין קונה. הצעה, יחד עם פריטי ההצעה שלה, מייצגת הצעה של מלאי שטחי פרסום לקונה.

מידע נוסף זמין במרכז העזרה.

יצירת הצעה באמצעות ה-API

כדי ליצור אובייקט Proposal, צריך לציין רק את השם ואת הקונה הפרוגרמטי. אפשר לקבל את מזהה הקונה הפרוגרמטי דרך ממשק המשתמש או דרך טבלת PQL‏ Programmatic_Buyer.

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(),
  # ...
}
    

לפני ששולחים לקונה את ההצעה למשא ומתן, צריך להגדיר שדות נוספים. בהצעה צריך להיות מצוין איש קשר מטעם המפרסם, איש מכירות, מנהל תנועה ומוכר.

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
    

בדרך כלל הצעות מורכבות מאובייקטים מסוג ProposalLineItem, ולכן השלב הבא הוא להוסיף פריטים להצעה מתחת להצעה החדשה שיצרתם.

מצבים של הצעה פרוגרמטית

באיור הבא מוצגת הצעה פרוגרמטית בנקודות שונות במהלך תהליך המשא ומתן מנקודת מבט של API. כל מצב מיוצג על ידי שילובים שונים של השדות הבאים:

מידע נוסף זמין במרכז העזרה של Ad Manager.

הסטטוסים שבהם יכולה להיות הצעה פרוגרמטית במהלך האינטראקציה שלה עם Marketplace.
איור 1: מצבים של הצעה פרוגרמטית

הדרכה מפורטת בנושא משא ומתן

במאמר הזה נסביר איך להשתמש ב-API כדי להשלים משא ומתן על הצעה פרוגרמטית עם קונה. נשתמש במצבים שמופיעים בתרשים שלמעלה.

הכנה לאישור או לבדיקה של הקונה

קודם צריך ליצור טיוטה של הצעה פרוגרמטית עם פריטי הצעה שרוצים לשלוח לקונה. זהו state C בתמונה שלמעלה.

בקשה מרוכש לכתוב ביקורת או לאשר את הרכישה

אחרי שמוכנים לשלוח את הצעת המחיר הפרוגרמטית לבדיקה של הקונה, אפשר RequestBuyerReview או RequestBuyerAcceptance באמצעות השיטה ProposalService.performProposalAction. תועברו לשלב המשא ומתן.

משא ומתן

בשלב הזה יכולים לקרות כמה דברים.

  • יכול להיות שהקונה יאשר את ההצעה הפרוגרמטית שלכם בלי לבצע בה שינויים.
  • יכול להיות שהקונה יציע שינויים. במקרה כזה, ההצעה תוחזר למצב טיוטה (state B באיור 1). לאחר מכן תצטרכו לפתוח את ההצעה לעריכה, לבצע את השינויים המוצעים ולשלוח אותה חזרה לבדיקה של הקונה.
  • אפשר גם להחליט לבצע שינויים עוד לפני שהקונה משיב. כדי לעשות את זה, פותחים את ההצעה לעריכה מתוך state D באיור 1.

המשא ומתן הזה נמשך עד שמגיעים להסכם עם הקונה. אפשר לאחזר תגובות ביניכם לבין הקונה באמצעות getMarketplaceCommentsByStatement. אתם יכולים לשלוח תגובה לקונה בזמן שאתם נמצאים בstate A. כדי לעשות זאת, צריך לעדכן את השדה marketplaceComment בהצעה באמצעות updateProposals. התגובה תישלח כשתבקשו את אישור הקונה.

סופי

אחרי שגם אתם וגם הקונה מאשרים את ההצעה הפרוגרמטית, היא עוברת למצב סופי (state F באיור 1). לאחר מכן, מערכת Ad Manager יוצרת באופן אוטומטי פריטים מההצעה הפרוגרמטית הזו.

ברוב המקרים, סיימתם את התהליך של יצירת הצעת מחיר פרוגרמטית. עם זאת, יש שתי פעולות שאפשר לבצע מהמצב הזה:

  • כדי לפתוח מחדש את ההצעה הפרוגרמטית למשא ומתן מחודש, צריך לערוך את השדות שקשורים להצגת המודעות בהצעה. כדי לעשות זאת, פותחים את הצעת העריכה (state E to A באיור 1), מבצעים שינויים ומבקשים את אישור הקונה.
  • אפשר לבצע עריכות שלא קשורות להצגת מודעות, כמו עדכון השם של ההצעה, ולשקף את השינויים האלה בהזמנה ובפריטים של קמפיין שנוצרו ב-Ad Manager מהעסקה הזו. כדי לעשות זאת, עורכים את הערך from state E באיור 1 ואז מבצעים את הפעולה UpdateOrderWithSellerData.