بناء الرد

بعد أن يعالج تطبيقك طلب عروض الأسعار من Google، يجب أن ينشئ ردًا ويرسله. يوضّح هذا الدليل كيفية ترميز تطبيقك لإنشاء الرد.

إنشاء رسالة BidResponse

لإرسال عرض سعر، يجب أن يستجيب تطبيق عروض الأسعار لطلب عرض سعر باستخدام BidResponse يتضمّن Bid بالتنسيق الذي تم ضبطه. إذا كنت تستخدم تنسيق JSON، يجب أن تضبط استجابتك العنوان Content-Type على application/json; charset=utf-8 وأن تتضمّن JSON BidResponse في النص الأساسي. إذا كنت تستخدم تنسيق Protobuf، يجب أن يضبط تطبيقك العنوان Content-Type على application/octet-stream وأن يتضمّن BidResponse المتسلسل في النص الأساسي.

لإنشاء BidResponse وتسلسله بتنسيق Protobuf، عليك إنشاء مكتبات Protobuf واستخدامها استنادًا إلى openrtb.proto وopenrtb-adx.proto، اللذين ينفّذان حقول BidResponse العادية في OpenRTB وإضافات Google في Protobuf على التوالي. ويمكن العثور عليها في Protos & Reference Data.

إذا كنت لا تريد تقديم عروض أسعار لمرات الظهور، عليك عرض استجابة HTTP 204 فارغة. يجب أن يعرض تطبيقك ردًا على كل BidRequest. يتم اعتبار عمليات المهلة والردود التي لا يمكن تحليلها أخطاء، وتفرض Google قيودًا على مقدّمي العروض الذين لديهم معدّلات خطأ مرتفعة.

الرقم التعريفي لتصميم الإعلان

تحدّد BidResponse تصميم إعلان من خلال الحقل BidResponse.seatbid.bid.crid (الحد الأقصى هو 128 بايت). حتى إذا كانت التصاميم الإعلانية متشابهة، يجب أن تتضمّن قيمًا فريدة لهذا الحقل إذا كانت تختلف في أي خصائص ملحوظة، بما في ذلك على سبيل المثال لا الحصر: الحجم وعنوان URL المعلَن وسمات التصميم الإعلاني وأنواع المورّدين. بعبارة أخرى، يجب منح معرّفات مختلفة للتصميمات الإعلانية لأي إعلانَين:

  • أن تبدو أو تتصرف بشكل مختلف
  • عرض صور مختلفة
  • يتم عرضها بوسائل مختلفة (على سبيل المثال، يتألف أحد الإعلانات من صورة، بينما يتألف الإعلان الآخر من فيديو).

عند تصميم تطبيقك، عليك تحديد طريقة منهجية لإنشاء المعرّفات التي تتناسب مع أنواع مواد العرض التي تخطّط لإرسالها.

سمات الإعلان

تنصح Google بالإفصاح عن سمات المواد الإبداعية لوصف خصائص إعلانك واستهدافه باستخدام مزيج من BidResponse.seatbid.bid.apis وBidResponse.seatbid.bid.attr، أو باستخدام الإضافة BidResponse.seatbid.bid.ext.attribute. يوضّح ما يلي كيفية تعريف السمات:

  • VPAID
    اضبط قيمة BidResponse.seatbid.bid.apis على VPAID_1 أو VPAID_2. بالنسبة إلى تنسيق JSON، يمكن ضبط هذا الخيار على 1 أو 2 على التوالي.
  • MRAID
    اضبط BidResponse.seatbid.bid.apis على MRAID_1 أو 3 لتنسيق JSON.
  • SIZELESS
    اضبط BidResponse.seatbid.bid.attr على RESPONSIVE أو 18 لتحديد تنسيق JSON.
  • PLAYABLE
    يتم الإشارة إلى ذلك من خلال ضبط BidResponse.seatbid.bid.attr على USER_INTERACTIVE أو 13 لتنسيق JSON.

راجِع مرجع "تصاميم الإعلانات" للحصول على شرح حول كيفية تلقّي ملاحظات بشأن الخصائص التي تم رصدها في تصاميم إعلاناتك.

حقول "عرض الأسعار المفتوح"

تتشابه ردود عروض الأسعار التي يرسلها مقدّمو عروض الأسعار من شبكات ومواقع إعلانية مشاركين في "عرض الأسعار المفتوح" مع ردود عروض الأسعار التي يرسلها "الشراة المعتمَدون" المشاركون في "عرض الأسعار في الوقت الفعلي" العادي. يمكن لعملاء Open Bidding تحديد عدد صغير من الحقول الإضافية، وقد يكون لبعض الحقول الحالية استخدامات بديلة. وتشمل هذه الخدمات ما يلي:

الحقل التفاصيل
BidResponse.imp.pmp.deals.id

معرّف الصفقة من مساحة الاسم الخاصة بتبادل الإعلانات والمرتبط بعرض السعر هذا والذي يتم إرساله إلى الناشرين.

BidResponse.seatbid.bid.ext.exchange_deal_type

نوع الصفقة الذي يتم إبلاغ الناشرين به، ما يؤثر في طريقة التعامل مع الصفقة في المزاد

BidResponse.seatbid.bid.ext.third_party_buyer_token الرمز المميّز المستخدَم لتحديد معلومات المشتري النهائي التابع لجهة خارجية إذا كان التبادل كأحد شركاء "عرض الأسعار المفتوح" وسيطًا يتم الحصول على هذا المعرّف من المشتري التابع لجهة خارجية، ويجب نقله إلى Google بدون أي تغيير في ردّ عرض السعر.

الاقتراحات

  • فعِّل اتصالات HTTPS المستمرة (المعروفة أيضًا باسم "keep-alive" أو "إعادة استخدام الاتصال") على خوادمك. اضبط المهلة على 10 ثوانٍ كحد أدنى، علمًا بأنّ القيم الأعلى تكون مفيدة في العديد من الحالات. تتحقّق Google من ذلك خلال اختبارات وقت الاستجابة الأولية لتطبيقك، لأنّ برنامج "الشراة المعتمَدون" يرسل الطلبات بمعدّل مرتفع ويحتاج إلى تجنُّب زيادة وقت الاستجابة الناتج عن إنشاء اتصال TCP منفصل لكل طلب.
  • أدرِج عنوان URL الاختياري لتتبُّع مرّات الظهور من أجل تتبُّع وقت عرض مرّة الظهور بدلاً من وقت فوز مقدّم العرض. وبسبب الانخفاض بين عدد مرات الفوز وعدد مرات العرض، يؤدي ذلك إلى إحصاءات تتبُّع أكثر دقة.

  • يجب أن يكون رمز مقدّم العروض خاليًا من التبعيات على الحقول المتوقّفة نهائيًا، لأنّ ذلك قد يؤدي إلى تعذّر تقديم عروضك وظهور أخطاء.
  • أدرِج BidResponse.seatbid.bid.w وBidResponse.seatbid.bid.h في BidResponse. يجب أن يتضمّن الرد BidResponse على طلب يتضمّن أحجام إعلانات متعدّدة الحقول التالية، وإلا سيتم استبعاده من المزاد.
  • يجب أن يكون حجم ردّك أقل من 8 آلاف حرف. قد تؤدي الردود الكبيرة جدًا إلى زيادة وقت استجابة الشبكة وحدوث مهلات.
  • اتّبِع الإرشادات المتعلقة بعروض الأسعار على مستودع iOS الإعلاني الذي يتطلّب تحديد المصدر باستخدام SKAdNetwork.

مثال على الاستجابة لعرض السعر

تمثّل الأمثلة التالية نماذج قابلة للقراءة من قِبل الإنسان لطلبات Protobuf وJSON.

OpenRTB Protobuf

ملف JSON بتنسيق OpenRTB

ملاحظة مهمة: يتم تمثيل رسائل Protobuf الموضّحة في الأمثلة هنا كنص قابل للقراءة. ومع ذلك، لا يتم إرسال الرسائل عبر الشبكة بهذه الطريقة. عند استخدام تنسيق OpenRTB Protobuf، لن يتم قبول سوى رسائل BidResponse المتسلسلة.

يمكنك إنشاء رسالة BidResponse وتسلسلها باستخدام الرمز التالي بلغة C++‎:

BidResponse bid_response;
// fill in bid response with bid information
string post_response;
if (bid_response.SerializeToString(&post_response)) {
  // respond to the POST with post_response as the content
} else {
  // return an error to the POST
}

تحديد تصميم الإعلان

يحدّد ردّ عرض السعر المادة الإبداعية التي سيتم عرضها في حال فوز عرض السعر. يجب أن يتضمّن عرض السعر أحد أشكال الإعلانات المتوافقة (AMP أو الفيديو أو الإعلانات المدمجة مع المحتوى). في هذا المثال، نحدّد تصميم الإعلان باستخدام الحقل html_snippet.

بدلاً من ذلك، يمكنك تحديد تصميم إعلانك باستخدام أحد الحقول التالية، استنادًا إلى شكل الإعلان:

  • إعلان معروض من حزمة تطوير البرامج (SDK)
    • BidResponse.seatbid.bid.ext.sdk_rendered_ad
  • AMP
    • BidResponse.seatbid.bid.amp_ad_url
  • الفيديو
    • BidResponse.seatbid.bid.adm
  • Native
    • BidResponse.seatbid.bid.adm_native

حدِّد إعلانًا مستضافًا على الخوادم الخاصة بك باستخدام مقتطف HTML في الحقل BidResponse.seatbid.bid.adm. يتم تضمين المقتطف في إطار iframe يتم إدراجه في صفحة الويب، ما يؤدي إلى استرداد الإعلان وعرضه عند تحميل الصفحة. يجب تصميم مقتطف HTML بطريقة تضمن عرض الإعلان (بانر أو إعلان بيني) بشكل صحيح داخل إطار iframe وبحجم مناسب للمساحة الإعلانية التي تقدّم عرضًا بشأنها.

بالإضافة إلى ذلك، يجب أن يتطابق حجم الإعلان المحدّد في الردّ على عرض السعر مع إحدى مجموعات الأحجام في طلب عرض السعر، وذلك في الحالات التالية:

  • الإعلان هو بانر عادي (وليس فيديو أو إعلانًا مدمجًا مع المحتوى أو إعلانًا بينيًا).
  • أعلن مقدّم عرض السعر عن الحجم في ردّ عرض السعر. يجب تحديد الحجم عندما يكون هناك أكثر من حجم واحد في الطلب.
  • ويتم استثناء الإعلانات البينية من ذلك. بالنسبة إلى الإعلانات البينية، يجب أن يكون العرض% 50 على الأقل من عرض الشاشة، وأن يكون الارتفاع% 40 على الأقل من ارتفاع الشاشة.

يمكنك تحديد تصميم إعلان مقتطف HTML باستخدام أي رمز HTML صالح يتم عرضه بشكل صحيح، ولكن ضَع في اعتبارك القيود المفروضة على تحديد الحقل crid في قسم إنشاء رسالة BidResponse. يمكن استخدام ذلك لوضع معلومات إضافية في وسيطات عناوين URL التي يتم جلبها من خوادمك كجزء من عرض الإعلان. يتيح لك ذلك إرسال بيانات عشوائية حول مرّة الظهور إلى خوادمك.

تتشابه معظم سياسات مقتطفات HTML المعروضة في ردود عروض الأسعار مع سياسات الإعلانات التابعة لجهات خارجية. لمزيد من المعلومات، يُرجى الاطّلاع على إرشادات برنامج الشراة المعتمَدين ومتطلبات عرض الإعلانات التابعة لجهات خارجية والإفصاح عن عناوين URL المؤدية إلى صفحات مقصودة في الإعلانات.

تحديد وحدات الماكرو

وحدات الماكرو هي نصوص منسَّقة مضمَّنة في بعض حقول استجابة عروض الأسعار التي تحتوي على عناوين URL يتم استبدالها بقيمة ذات صلة في وقت عرض الإعلان. على سبيل المثال، إذا كان عرض السعر الفائز يتضمّن وحدة الماكرو AUCTION_PRICE في مقتطف HTML الخاص بتصميم الإعلان المضمّن في عرض السعر، سيتم استبدال وحدة الماكرو بقيمة يمكنك فك تشفيرها لتحديد المبلغ الذي دفعته مقابل مرّة الظهور في المزاد.

يمكنك تضمين وحدات ماكرو في الحقول التالية:

  • BidResponse.seatbid.bid.adm

    تتوفّر وحدات الماكرو لتنسيقات مقتطف HTML والإعلان الأصلي وعنوان URL للفيديو وVAST XML للفيديو.

  • BidResponse.seatbid.bid.adm_native.eventtrackers.url

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

    لا تتوفّر سوى وحدتَي الماكرو WINNING_PRICE وWINNING_PRICE_ESC الخاصتَين بـ Google لتصاميم الإعلانات المتوافقة مع AMP.

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    استخدِم هذا الحقل بدلاً من BidResponse.seatbid.bid.burl إذا كنت بحاجة إلى أكثر من عنوان URL واحد للفوترة.

على سبيل المثال، يمكنك تضمين وحدة ماكرو كجزء من مقتطف HTML من خلال تضمين ${MACRO} في عنوان URL المستخدَم لجلب تصميم الإعلان، حيث MACRO هي إحدى وحدات الماكرو المتوافقة الموضّحة في مواصفات OpenRTB.

وحدات ماكرو Google

يوفّر محرّك بحث Google وحدات ماكرو إضافية غير تلك الواردة في مواصفات OpenRTB، ويتم تنسيقها بشكل مختلف، وستظهر على النحو %%MACRO%% إذا تم تضمينها في عنوان URL. يوضّح الجدول التالي وحدات الماكرو هذه:

وحدة الماكرو الوصف
ADVERTISING_IDENTIFIER تسمح هذه السمة للمشترين بتلقّي معرّف المعلِنين (IDFA) على iOS أو المعرّف الإعلاني على Android عند عرض مرّات الظهور. اطّلِع على فك تشفير معرّفات المعلِنين لمزيد من التفاصيل.
CACHEBUSTER تمثيل سلسلة لعدد صحيح عشوائي غير موقّع يتألف من أربعة بايتات
CLICK_URL_UNESC

عنوان URL للنقرة على الإعلان بدون تخطّي الأحرف الخاصة. في المقتطف، يجب أن يلي وحدة الماكرو مباشرةً نسخة معدَّلة من عنوان URL للنقرة التابع للجهة الخارجية.

على سبيل المثال، إذا كان عنوان URL للنقرة التابع لجهة خارجية هو http://my.adserver.com/some/path/handleclick?click=clk، يمكن استخدام الرمز التالي مع النسخة التي تم إلغاء تسلسلها مرة واحدة من عنوان URL للنقرة التابع لجهة خارجية بعد استدعاء الماكرو:

<a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

عند عرض الإعلان، يتم توسيعه ليصبح:

<a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

سيسجّل عنوان URL النقرة أولاً لدى Google، ثم يعيد التوجيه إلى عنوان URL الخاص بالنقرة التابع للجهة الخارجية.

CLICK_URL_ESC

عنوان URL الخاص بالنقرة على الإعلان، مع استبدال الأحرف الخاصة بأحرف أخرى. استخدِم هذه السمة بدلاً من CLICK_URL_UNESC إذا كنت بحاجة إلى تمرير القيمة أولاً عبر خادم آخر سيعرض بعد ذلك عملية إعادة توجيه.

على سبيل المثال، يمكن استخدام الرمز التالي في مقتطف HTML:

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a>

عند عرض الإعلان، يتم توسيعه ليصبح:

<a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a>

سيؤدي ذلك إلى تسجيل النقرة باستخدام my.adserver.com، الذي سيكون مسؤولاً بعد ذلك عن إعادة التوجيه إلى عنوان URL الذي تم تمريره في المَعلمة google_click_url. ويفترض ذلك أنّ my.adserver.com يزيل علامات الهروب من المَعلمة google_click_url.

يمكنك إضافة عنوان URL تمّت إزالة الترميز منه مرّتين بعد %%CLICK_URL_ESC%%. بعد أن تتم عملية عدم التشفير بواسطة my.adserver.com، سيتبقى إصدار واحد غير مشفّر من عنوان URL مُلحق بالسمة google_click_url. عند استرداد google_click_url، سيتم إلغاء الترميز مرة أخرى ثم إعادة التوجيه.

CLICK_URL_ESC_ESC

عنوان URL الذي تم تخطّيه مرّتين للإعلان. استخدِم هذه السمة بدلاً من CLICK_URL_UNESC إذا كنت بحاجة إلى تمرير القيمة أولاً عبر خادم آخر سيعرض بعد ذلك عملية إعادة توجيه.

على سبيل المثال، يمكن استخدام الرمز التالي في مقتطف HTML:

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a>

عند عرض الإعلان، يتم توسيعه ليصبح:

<a href="http://my.otheradserver.com/click?google_click_url=http%3A%2F%2Fmy.adserver.com%2Fclick%3Fgoogle_click_url%3Dhttp%3A%2F%2Fgoogle-click-%20url%253F...%2526ad_url%253D"></a>
SCHEME يتم توسيعه إلى http: إذا كان طلب عروض الأسعار لا يتطلّب بروتوكول SSL، أو إلى https: إذا كان طلب عروض الأسعار يتطلّب بروتوكول SSL.
SITE نطاق عنوان URL للمحتوى الذي تمّت إزالة الترميز منه أو المعرّف المجهول للمستودع الإعلاني المجهول
SITE_URL تمّ الإيقاف. تم استبدالها بوحدة الماكرو SITE التي توفّر وظائف مطابقة.
TZ_OFFSET تمثّل هذه السمة معادلة المنطقة الزمنية.
VERIFICATION

القيم المختلفة للإنتاج ووقت فحص تصميم الإعلان في مسار التحقّق التنسيق هو: %%?VERIFICATION:true-val:false-val%% حيث يمكن استخدام أي قيم باستثناء وحدات الماكرو في true-val وfalse-val، بما في ذلك السلاسل الفارغة. بالنسبة إلى Open Bidding، ننصح البورصات باستخدام هذا الماكرو، وبعد ذلك، لن تحتاج منصات العرض إلى إجراء أي تغييرات.

على سبيل المثال، إذا كان تصميم الإعلان يتضمّن %%?VERIFICATION:-1:5000%%، سيتم استبدال النص بـ 5000 عند عرض الإعلان وبـ -1 في مسار التحقّق. ويتم ذلك للمساعدة في التمييز بين مجموعتَي طلبات ping هاتين.

WINNING_PRICE

تمثّل هذه السمة تكلفة الظهور المشفرة (أي التكلفة لكل ظهور بدلاً من التكلفة لكل ألف ظهور) بوحدات ميكرو من عملة الحساب. على سبيل المثال، تتوافق تكلفة CPM الفائزة البالغة 5 دولارات أمريكية مع تكلفة CPM تبلغ 5,000,000 جزء من المليون، أو تكلفة CPI تبلغ 5,000 جزء من المليون. ستكون القيمة التي تم فك تشفيرها لـ WINNING_PRICE في هذه الحالة هي 5,000. يتم تحديد السعر الفائز في "تكلفة كلّ إجراء".

لتحليل هذا الماكرو، عليك تنفيذ تطبيق يفك تشفير تأكيدات الأسعار. يُرجى الاطّلاع على صفحة فك تشفير تأكيدات الأسعار للحصول على مزيد من المعلومات.

WINNING_PRICE_ESC WINNING_PRICE بتنسيق URL-escaped

تطلب Google استخدام الماكرو CLICK_URL_UNESC أو CLICK_URL_ESC ضمن تصميم الإعلان الذي تعرضه جهة خارجية. تستخدِم Google وحدات الماكرو CLICK_URL لتتبُّع النقرات.

يستخدم ترميز عناوين URL في وحدات الماكرو المخطط التالي:

  • يتم استبدال حرف المسافة بعلامة الجمع (+).
  • تظل الأحرف الأبجدية الرقمية (0-9، a-z، A-Z) والأحرف من المجموعة !()*,-./:_~ بدون تغيير.
  • يتم استبدال جميع الأحرف الأخرى بـ %XX، حيث XX هو الرقم السداسي العشري الذي يمثّل الحرف.

القيود والمتطلبات المفروضة على الناشرين

يتضمّن طلب عرض السعر معلومات حول أنواع القيود والمتطلبات التي يفرضها الناشرون على تصاميم الإعلانات في المزاد.

  • BidRequest.bcat
    • يمكنك مقارنة الفئات المحظورة المحدّدة في هذا الحقل بالفئات التي تم رصدها لتصاميم الإعلانات التي أرسلتها باستخدام الحقل detectedCategories في Real-time Bidding API.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • في الواقع، سيتم ضبط هذا الحقل دائمًا على true لأنّ Google يتطلّب توفّر توافق مع طبقة المقابس الآمنة لجميع مواد العرض.
  • BidRequest.imp.{audio/banner/native/video}
  • BidRequest.imp.{audio/banner/native/video}.api
  • BidRequest.imp.{audio/banner/native/video}.battr
  • BidRequest.imp.{audio/banner/video}.mimes

لا تقدّم أبدًا عرض سعر يتضمّن إعلانًا يحتوي على ميزة محظورة. بالنسبة إلى الميزات المسموح بها، مثل نوع المورّد، لا تعرض إعلانًا إلا إذا كان نوع المورّد الخاص به مدرجًا في قائمة allowed_vendor_type ضمن BidRequest. يجب تضمين أشكال الإعلانات المحدّدة في طلب عرض السعر فقط من خلال ملء حقول مثل BidRequest.imp.banner في عرض السعر. لمزيد من التفاصيل، راجِع التعليقات الخاصة بهذه الحقول في تعريف BidRequest لبروتوكول المخزن المؤقت.

إذا تم عرض إعلان في BidResponse، عليك ضبط الحقول BidResponse.seatbid.bid.attr وBidResponse.seatbid.bid.cat وBidResponse.seatbid.bid.adomain أو BidResponse.seatbid.bid.adm_native.link.url بدقة في BidResponse. إذا كان الإعلان يتضمّن قيمًا متعددة تنطبق على هذه الحقول، يجب تضمين كل قيمة. يمكنك الاطّلاع على التعليقات الخاصة بهذه الحقول في تعريف BidResponse لبروتوكول المخزن المؤقت للحصول على مزيد من التفاصيل. ويتم تجاهل الردود التي لم يتم ضبط هذه الحقول فيها.

Open Measurement

تتيح لك ميزة &quot;القياس المفتوح&quot; تحديد مورّدين خارجيين يقدّمون خدمات مستقلة للقياس والتحقّق من الإعلانات المعروضة في بيئات التطبيقات على الأجهزة الجوّالة.

تشمل أشكال الإعلانات المتوافقة إعلانات الفيديو وإعلانات البانر والإعلانات البينية. لمزيد من المعلومات حول كيفية استخدام Open Measurement في ردّ على عرض سعر يتضمّن هذه التنسيقات، يُرجى الرجوع إلى مقالة حزمة تطوير البرامج (SDK) الخاصة بميزة Open Measurement في &quot;مركز المساعدة&quot;.

أمثلة على الاستجابات لعروض الأسعار

تعرض الأقسام التالية نماذج لردود عروض الأسعار لأنواع مختلفة من الإعلانات.

بانر التطبيق

OpenRTB Protobuf

ملف JSON بتنسيق OpenRTB

إعلان بيني داخل التطبيق

OpenRTB Protobuf

ملف JSON بتنسيق OpenRTB

فيديو إعلان بيني داخل التطبيق

OpenRTB Protobuf

ملف JSON بتنسيق OpenRTB

إعلان مدمج مع المحتوى داخل التطبيق

OpenRTB Protobuf

ملف JSON بتنسيق OpenRTB

فيديو ويب

OpenRTB Protobuf

ملف JSON بتنسيق OpenRTB

إعلان بانر على الويب للأجهزة الجوّالة خاص بمقدّم عروض الأسعار في شبكة التبادل

OpenRTB Protobuf

ملف JSON بتنسيق OpenRTB