Xây dựng câu trả lời

Sau khi xử lý yêu cầu giá thầu của Google, ứng dụng của bạn phải tạo và gửi phản hồi. Hướng dẫn này giải thích cách lập trình ứng dụng của bạn để tạo bản dựng nội dung phản hồi.

Tạo thông báo Phản hồi giá thầu Protobuf

Authorized Buyers gửi BidRequest dưới dạng nội dung thư của POST HTTP. Nếu điểm cuối đặt giá thầu được định cấu hình để sử dụng định dạng Protobuf, thì ứng dụng của bạn phải gửi một phản hồi có tiêu đề Content-Type được đặt thành application/octet-stream và nội dung thông báo bao gồm vùng đệm giao thức được chuyển đổi tuần tự. Vùng đệm giao thức là một thông báo BidResponse như được xác định trong openrtb.proto. Ứng dụng của bạn phải trả về một trình phân tích cú pháp BidResponse để phản hồi mỗi BidRequest. Số lần bị tạm ngừng và những phản hồi không thể phân tích cú pháp sẽ bị coi là lỗi và Google sẽ chặn bên đặt giá thầu có tỷ lệ lỗi cao.

Nếu không muốn đặt giá thầu cho một lượt hiển thị, bạn có thể đặt Chỉ có BidResponse.ext.processing_time_ms và để lại tất cả các trường khác trống. Bạn có thể lấy openrtb.proto từ trang dữ liệu tham chiếu.

Mã mẫu quảng cáo

BidResponse của bạn chỉ định mẫu quảng cáo thông qua Trường BidResponse.seatbid.bid.crid (giới hạn 64 byte). Thậm chí tương tự quảng cáo phải có các giá trị duy nhất cho trường này nếu chúng khác nhau về mọi đặc điểm đáng chú ý, bao gồm nhưng không giới hạn ở: kích thước, URL đã khai báo, các thuộc tính của mẫu quảng cáo và kiểu nhà cung cấp. Nói cách khác, bạn phải cung cấp ID quảng cáo với bất kỳ hai quảng cáo nào:

  • Có vẻ ngoài hoặc hành vi khác.
  • Hiển thị sang các hình ảnh khác.
  • Kết xuất theo nhiều phương thức (ví dụ: một quảng cáo bao gồm hình ảnh, còn quảng cáo còn lại là video).

Khi thiết kế ứng dụng, bạn nên quyết định theo một cách có hệ thống tạo giá trị nhận dạng phù hợp với loại mẫu quảng cáo mà bạn dự định để gửi.

Thuộc tính quảng cáo

Bạn nên khai báo các thuộc tính mẫu quảng cáo để mô tả các đặc điểm và tiêu chí nhắm mục tiêu của quảng cáo bằng cách kết hợp BidResponse.seatbid.bid.apisBidResponse.seatbid.bid.attr hoặc tiện ích BidResponse.seatbid.bid.ext.attribute. Nội dung sau đây mô tả cách bạn có thể khai báo các thuộc tính:

  • VPAID
    Đặt BidResponse.seatbid.bid.apis thành VPAID_1, hoặc VPAID_2. Đối với định dạng JSON, bạn có thể đặt giá trị này thành 1 hoặc 2 tương ứng.
  • MRAID
    Đặt BidResponse.seatbid.bid.apis thành MRAID_1 hoặc 3 cho định dạng JSON.
  • SIZELESS
    Đặt BidResponse.seatbid.bid.attr thành RESPONSIVE hoặc 18 cho định dạng JSON.
  • PLAYABLE
    Điều này được thể hiện bằng cách đặt BidResponse.seatbid.bid.attr thành USER_INTERACTIVE hoặc 13 đối với JSON .

Xem Tài nguyên về mẫu quảng cáo để được giải thích về cách nhận phản hồi liên quan đến các thuộc tính đã được phát hiện của mẫu quảng cáo của mình.

Các trường trong tính năng Đặt giá thầu mở

Phản hồi giá thầu do bên đặt giá thầu mạng và bên đặt giá thầu trao đổi tham gia tính năng Đặt giá thầu mở gửi tương tự như phản hồi giá thầu của Authorized Buyers tham gia tính năng đặt giá thầu theo thời gian thực chuẩn. Khách hàng sử dụng tính năng Đặt giá thầu mở có thể chỉ định một số trường bổ sung và một số trường hiện có có thể có cách sử dụng thay thế. Các bao gồm:

OpenRTB Authorized Buyers Thông tin chi tiết
BidResponse.imp[].pmp.deals[].id BidResponse.ad[].adslot[].exchange_deal_id

Mã giao dịch trong không gian tên của hệ thống trao đổi được liên kết với giá thầu này và được báo cáo cho nhà xuất bản.

BidResponse.seatbid[].bid[].ext.exchange_deal_type BidResponse.ad[].adslot[].exchange_deal_type

Loại giao dịch được báo cáo cho nhà xuất bản, ảnh hưởng đến cách giao dịch được xử lý trong phiên đấu giá.

BidResponse.seatbid[].bid[].ext.third_party_buyer_token BidResponse.ad[].adslot[].third_party_buyer_token Mã thông báo được sử dụng để xác định thông tin cuối của người mua bên thứ ba nếu với vai trò là Bên đặt giá thầu mở là một bên trung gian. Thông tin này lấy từ người mua bên thứ ba và phải được chuyển cho Google mà không thay đổi trong giá thầu của bạn.

Đề xuất

  • Bật kết nối HTTPS ổn định (còn gọi là "keep-alive" hoặc "sử dụng lại kết nối") trên máy chủ của bạn. Đặt thời gian chờ tối thiểu là 10 giây – các giá trị cao hơn sẽ có lợi trong nhiều trường hợp. Google xác minh điều này trong quá trình kiểm thử độ trễ ban đầu của ứng dụng, vì Authorized Buyers gửi yêu cầu với tốc độ cao và cần tránh hao tổn độ trễ khi thiết lập kết nối TCP riêng cho từng yêu cầu.
  • Bao gồm URL theo dõi lượt hiển thị tuỳ chọn để theo dõi khi lượt hiển thị hiển thị thay vì khi bên đặt giá thầu thắng. Do sự sụt giảm giữa số lần chiến thắng và số lần kết xuất, điều này sẽ mang lại số liệu thống kê theo dõi chính xác hơn.

  • Đảm bảo mã của bên đặt giá thầu không có phần phụ thuộc trên các trường không dùng nữa, vì điều này có thể khiến giá thầu của bạn không thành công và gặp lỗi.
  • Thêm BidResponse.seatbid.bid.wBidResponse.seatbid.bid.h vào BidResponse. BidResponse đến một yêu cầu bao gồm nhiều kích thước quảng cáo phải bao gồm các trường này, nếu không sẽ bị loại khỏi phiên đấu giá.
  • Giới hạn kích thước câu trả lời dưới 8K. Phản hồi quá nhiều có thể tăng độ trễ mạng và gây ra thời gian chờ.
  • Làm theo hướng dẫn về giá thầu trên khoảng không quảng cáo iOS yêu cầu mô hình phân bổ SKAdNetwork.

Ví dụ về phản hồi giá thầu

Các ví dụ sau đây thể hiện các mẫu Protobuf mà con người có thể đọc được và Yêu cầu JSON.

Protobuf OpenRTB

JSON OpenRTB

Google

Lưu ý quan trọng: Các thông báo Protobuf được mô tả trong các mẫu được trình bày ở đây dưới dạng văn bản mà con người có thể đọc được. Tuy nhiên, đó không phải là cách gửi thông báo qua mạng. Khi sử dụng Google hoặc OpenRTB Protobuf thì chỉ thông báo phản hồi giá thầu được chuyển đổi tuần tự mới được chấp nhận.

Bạn có thể tạo và chuyển đổi tuần tự một thông báo BidResponse bằng mã C++ sau đây:

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
}

Chỉ định mẫu quảng cáo

Giá thầu phản hồi của bạn chỉ định mẫu quảng cáo sẽ phân phát nếu giá thầu của bạn thắng. Giá thầu của bạn phải bao gồm một trong những định dạng quảng cáo được hỗ trợ (AMP, video, gốc). Trong phần này ví dụ: chúng tôi chỉ định mẫu quảng cáo bằng trường html_snippet.

Ngoài ra, bạn có thể chỉ định mẫu quảng cáo của mình bằng cách sử dụng một trong các trường sau, dựa trên định dạng quảng cáo:

  • Quảng cáo do SDK hiển thị
    • BidResponse.seatbid.bid.ext.sdk_rendered_ad
  • AMP
    • BidResponse.seatbid.bid.amp_ad_url
  • Video
    • BidResponse.seatbid.bid.adm
  • Quảng cáo gốc
    • BidResponse.seatbid.bid.adm_native

Chỉ định quảng cáo được lưu trữ trên(các) máy chủ của riêng bạn bằng cách sử dụng một đoạn mã HTML trong trường BidResponse.seatbid.bid.adm. Đoạn mã được đưa vào một iFrame được chèn vào trang web, nhờ đó quảng cáo được truy xuất và hiển thị khi trang được tải. Bạn phải tạo đoạn mã HTML để quảng cáo (biểu ngữ hoặc quảng cáo xen kẽ) hiển thị chính xác bên trong iFrame và ở kích thước phù hợp với vị trí quảng cáo mà bạn đang đặt giá thầu.

Ngoài ra, kích thước quảng cáo được khai báo trong phản hồi giá thầu phải khớp chính xác với một trong các tổ hợp kích thước trong yêu cầu giá thầu khi:

  • Quảng cáo là một biểu ngữ thông thường (không phải quảng cáo dạng video, quảng cáo gốc hoặc quảng cáo xen kẽ).
  • Bên đặt giá thầu đã khai báo kích thước trong phản hồi giá thầu. Bạn bắt buộc phải khai báo kích thước bất cứ khi nào có nhiều kích thước trong yêu cầu.
  • Một trường hợp ngoại lệ là quảng cáo xen kẽ. Đối với quảng cáo xen kẽ, chiều rộng phải bằng ít nhất 50% chiều rộng và chiều cao ít nhất 40% của màn hình chiều cao màn hình.

Bạn có thể chỉ định mẫu quảng cáo đoạn mã HTML bằng bất kỳ mã HTML hợp lệ nào hiển thị đúng cách, nhưng hãy lưu ý các quy định hạn chế về việc chỉ định trường crid trong phần Tạo thông báo BidResponse. Một cách sử dụng cho trường hợp này là đưa thêm thông tin vào các đối số của URL được tìm nạp từ máy chủ của bạn trong quá trình hiển thị quảng cáo. Điều này cho phép bạn chuyển dữ liệu tuỳ ý về lượt hiển thị về lại máy chủ của riêng bạn.

Hầu hết các chính sách cho đoạn mã HTML được trả về trong giá thầu phản hồi đều giống với cho quảng cáo của bên thứ ba. Xem Authorized Buyers Nguyên tắc chương trình, Yêu cầu đối với bên thứ ba việc phân phát quảng cáoKhai báo URL của trang đích khi nhấp trong quảng cáo để biết thêm thông tin.

Chỉ định macro

Macro là văn bản được định dạng nhúng vào một số trường phản hồi giá thầu chứa các URL được thay thế bằng một giá trị có liên quan tại thời điểm phân phát quảng cáo. Ví dụ: nếu giá thầu chiến thắng của bạn bao gồm macro AUCTION_PRICE trong mẫu quảng cáo đoạn mã HTML đi kèm với giá thầu, thì macro đó sẽ được thay thế bằng một giá trị mà bạn có thể giải mã để xác định số tiền bạn đã trả cho lượt hiển thị trong phiên đấu giá.

Bạn có thể bao gồm macro trong các trường sau:

  • BidResponse.seatbid.bid.adm

    Macro được hỗ trợ cho đoạn mã HTML, gốc, URL video và VAST video Định dạng XML.

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

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

    Chỉ hỗ trợ các macro WINNING_PRICEWINNING_PRICE_ESC dành riêng cho Google cho mẫu quảng cáo AMP.

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    Sử dụng thuộc tính này thay vì BidResponse.seatbid.bid.burl nếu bạn yêu cầu nhiều URL thanh toán.

Ví dụ: bạn có thể bao gồm macro trong đoạn mã HTML bằng cách nhúng ${MACRO} trong URL dùng để tìm nạp mẫu quảng cáo, trong đó MACRO là một trong những macro được hỗ trợ được mô tả trong Đặc tả OpenRTB.

Macro Google RTB

Google hỗ trợ các macro bổ sung ngoài các macro có trong OpenRTB quy cách Các quảng cáo này được định dạng khác nhau và sẽ xuất hiện dưới dạng %%MACRO%% nếu được nhúng trong URL. Bảng sau đây mô tả các macro này:

Macro Nội dung mô tả
ADVERTISING_IDENTIFIER Cho phép người mua nhận được IDFA cho iOS hoặc mã nhận dạng cho quảng cáo của Android khi hiển thị lượt hiển thị. Hãy xem bài viết Giải mã Giá trị nhận dạng nhà quảng cáo để biết thông tin chi tiết.
CACHEBUSTER Một chuỗi đại diện cho một số nguyên 4 byte ngẫu nhiên, chưa ký.
CLICK_URL_UNESC

URL nhấp chuột không thoát cho quảng cáo. Trong đoạn mã, phiên bản đã thoát của URL lượt nhấp của bên thứ ba phải trực tiếp theo sau macro.

Ví dụ: nếu URL nhấp của bên thứ ba là http://my.adserver.com/some/path/handleclick?click=clk, thì bạn có thể sử dụng mã sau với phiên bản thoát một lần của URL nhấp của bên thứ ba sau lệnh gọi macro:

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

Tại thời điểm phân phát quảng cáo, giới hạn này được mở rộng thành:

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

Trước tiên, URL này sẽ đăng ký lượt nhấp với Google, sau đó chuyển hướng vào URL nhấp chuột của bên thứ ba.

CLICK_URL_ESC

URL lượt nhấp có thoát cho quảng cáo. Hãy sử dụng phương thức này thay vì CLICK_URL_UNESC nếu trước tiên bạn cần truyền giá trị thông qua một máy chủ khác, sau đó máy chủ này sẽ trả về một lệnh chuyển hướng.

Ví dụ: bạn có thể sử dụng mã sau trong một đoạn mã HTML:

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

Tại thời điểm phân phát quảng cáo, giới hạn này được mở rộng thành:

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

Thao tác này sẽ đăng ký lượt nhấp bằng my.adserver.com. Sau đó, my.adserver.com sẽ chịu trách nhiệm chuyển hướng đến URL được truyền trong tham số google_click_url. Điều này giả định rằng my.adserver.com bỏ thoát khỏi Tham số google_click_url.

Bạn có thể thêm một URL được thoát kép sau %%CLICK_URL_ESC%%. Sau khi my.adserver.com thực hiện việc huỷ thoát, hệ thống sẽ để lại một phiên bản URL thoát một lần được thêm vào google_click_url. Khi google_click_url đã được tìm nạp, nó sẽ huỷ thoát một lần nữa rồi chuyển hướng.

CLICK_URL_ESC_ESC

URL thoát kép của quảng cáo. Sử dụng địa chỉ này thay vì CLICK_URL_UNESC nếu trước tiên bạn cần truyền giá trị thông qua một máy chủ khác, sau đó sẽ trả lại chuyển hướng.

Ví dụ: bạn có thể sử dụng mã sau đây trong đoạn mã HTML:

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

Tại thời điểm phân phát quảng cáo, giới hạn này được mở rộng thành:

<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 Đã mở rộng thành http: nếu yêu cầu giá thầu không yêu cầu SSL hoặc https: nếu yêu cầu giá thầu yêu cầu SSL.
SITE Miền được thoát URL của URL nội dung hoặc mã nhận dạng ẩn danh cho khoảng không quảng cáo ẩn danh.
SITE_URL Không dùng nữa. Được thay thế bằng macro SITE có chức năng tương tự.
TZ_OFFSET Chênh lệch múi giờ.
VERIFICATION

Các giá trị khác nhau đối với phiên bản chính thức và khi quét mẫu quảng cáo trong quy trình xác minh. Định dạng là: %%?VERIFICATION:true-val:false-val%%, trong đó mọi giá trị ngoại trừ macro đều có thể được dùng cho true-valfalse-val, bao gồm cả chuỗi trống. Đối với tính năng Đặt giá thầu mở, bạn nên sử dụng macro này cho các sàn giao dịch; sau khi thực hiện việc này, các nền tảng bên cầu không cần thực hiện thay đổi nào.

Ví dụ: nếu quảng cáo phải bao gồm %%?VERIFICATION:-1:5000%% thì thay thế văn bản sẽ là 5000 khi phân phát và -1 trong quy trình xác minh. Điều này giúp phân biệt giữa hai bộ ping.

WINNING_PRICE

Chi phí lượt hiển thị đã mã hoá (tức là CPI thay vì CPM) tính bằng đơn vị vi mô của đơn vị tiền tệ của tài khoản. Ví dụ: CPM chiến thắng là 5 USD tương ứng với 5.000.000 micro CPM hoặc 5.000 micro CPI. Đã giải mã giá trị của WINNING_PRICE trong trường hợp này là 5.000. Giá trúng thầu được chỉ định trong CPI.

Để phân tích cú pháp macro này, bạn cần triển khai một ứng dụng giải mã thông báo xác nhận giá. Hãy tham khảo trang Giải mã thông báo xác nhận giá để biết thêm thông tin.

WINNING_PRICE_ESC WINNING_PRICE đã thoát URL.

Google yêu cầu bạn sử dụng CLICK_URL_UNESC hoặc Macro CLICK_URL_ESC trong mẫu quảng cáo của bên thứ ba phân phát quảng cáo. Google sử dụng macro CLICK_URL để theo dõi lượt nhấp.

Việc thoát URL trong macro sử dụng lược đồ sau:

  • Ký tự dấu cách được thay thế bằng dấu cộng (+).
  • Ký tự chữ và số (0-9, a-z, A-Z) và các ký tự trong tập hợp !()*,-./:_~ vẫn không thay đổi.
  • Tất cả các ký tự khác được thay thế bằng %XX, trong đó XX là số thập lục phân biểu thị ký tự.

Các quy định hạn chế và yêu cầu đối với nhà xuất bản

Yêu cầu giá thầu bao gồm thông tin về các loại hạn chế và mà nhà xuất bản đặt cho mẫu quảng cáo trong phiên đấu giá.

  • BidRequest.bcat
    • Bạn có thể so sánh các danh mục bị chặn do trường này chỉ định với các danh mục phát hiện cho các quảng cáo mà bạn đã gửi bằng cách sử dụng API Đặt giá thầu theo thời gian thực Trường detectedCategories.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • Trong thực tế, giá trị này sẽ luôn được đặt thành true vì Google yêu cầu tất cả mẫu quảng cáo đều phải hỗ trợ SSL.
  • 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

Không bao giờ đặt giá thầu bằng quảng cáo có chứa tính năng bị hạn chế. Cho các tính năng được phép chẳng hạn như loại nhà cung cấp, chỉ trả về một quảng cáo nếu loại nhà cung cấp nằm trong Danh sách allowed_vendor_type trong BidRequest. Chỉ quảng cáo định dạng được chỉ định trong yêu cầu giá thầu bằng cách điền vào các trường, chẳng hạn như BidRequest.imp.banner phải được bao gồm trong giá thầu của bạn. Hãy xem các nhận xét về các trường này trong định nghĩa vùng đệm giao thức BidRequest để biết thêm thông tin chi tiết.

Nếu một quảng cáo được trả về trong BidResponse, bạn bắt buộc phải đặt chính xác BidResponse.seatbid.bid.attr, BidResponse.seatbid.bid.cat và có một trong hai BidResponse.seatbid.bid.adomain hoặc BidResponse.seatbid.bid.adm_native.link.url trường trong BidResponse. Nếu một quảng cáo có nhiều giá trị áp dụng cho các trường này, thì bạn phải thêm mọi giá trị. Hãy xem các nhận xét cho các trường này trong định nghĩa vùng đệm giao thức BidResponse để biết thêm thông tin chi tiết. Những phản hồi không có các trường này sẽ bị loại bỏ.

Đo lường mở

Đo lường mở cho phép bạn chỉ định các nhà cung cấp bên thứ ba cung cấp dịch vụ đo lường và xác minh độc lập cho quảng cáo được phân phát đến môi trường ứng dụng di động.

Các định dạng quảng cáo được hỗ trợ bao gồm quảng cáo dạng video, quảng cáo biểu ngữ và quảng cáo xen kẽ. Để biết thêm thông tin về cách sử dụng tính năng Đo lường mở trong giá thầu phản hồi có chứa các định dạng khác, hãy tham khảo SDK đo lường mở bài viết trên Trung tâm trợ giúp.

Phản hồi giá thầu mẫu

Các mục sau đây trình bày giá thầu phản hồi mẫu cho các loại quảng cáo khác nhau.

Biểu ngữ ứng dụng

OpenRTB Protobuf

JSON OpenRTB

Google

Quảng cáo xen kẽ trong ứng dụng

OpenRTB Protobuf

JSON OpenRTB

Google

Video quảng cáo xen kẽ trong ứng dụng

Protobuf OpenRTB

Google

Ứng dụng gốc

Protobuf OpenRTB

JSON OpenRTB

Google

Video trên web

Google

Biểu ngữ web dành cho thiết bị di động cho bên đặt giá thầu trao đổi

Protobuf OpenRTB