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

Sau khi xử lý yêu cầu giá thầu từ Google, ứng dụng của bạn phải tạo và gửi một phản hồi. Hướng dẫn này giải thích cách viết mã ứng dụng để tạo phản hồi.

Tạo thông báo BidResponse

Để gửi giá thầu, ứng dụng đặt giá thầu của bạn phải phản hồi yêu cầu đặt giá thầu bằng một BidResponse chứa Bid theo định dạng mà bạn đã định cấu hình. Nếu bạn đang sử dụng định dạng JSON, thì phản hồi của bạn phải đặt tiêu đề Content-Type thành application/json; charset=utf-8 và đưa JSON BidResponse vào nội dung. Nếu đang sử dụng định dạng Protobuf, ứng dụng của bạn phải đặt tiêu đề Content-Type thành application/octet-stream và thêm BidResponse được chuyển đổi tuần tự vào nội dung.

Để tạo và chuyển đổi một BidResponse cho định dạng Protobuf, bạn phải tạo và sử dụng các thư viện Protobuf dựa trên openrtb.protoopenrtb-adx.proto. Các thư viện này lần lượt triển khai các trường BidResponse OpenRTB tiêu chuẩn và các tiện ích của Google trong Protobuf. Bạn có thể tìm thấy các thông tin này trong phần Protos & Reference Data (Dữ liệu tham chiếu và giao thức).

Nếu không muốn đặt giá thầu cho một lượt hiển thị, bạn phải trả về một phản hồi HTTP 204 trống. Ứng dụng của bạn phải trả về một phản hồi cho mọi BidRequest. Hết thời gian chờ và các phản hồi không phân tích cú pháp được coi là lỗi và Google sẽ điều tiết những bên đặt giá thầu có tỷ lệ lỗi cao.

Mã mẫu quảng cáo

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

  • Có vẻ ngoài hoặc hành vi khác biệt.
  • Kết xuất thành nhiều hình ảnh.
  • Hiển thị bằng nhiều cách (ví dụ: một quảng cáo bao gồm hình ảnh, trong khi quảng cáo kia là video).

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

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

Google đề xuất bạn khai báo các thuộc tính mẫu quảng cáo để mô tả đặc điểm của quảng cáo và mục tiêu nhắm đến bằng cách sử dụng kết hợp BidResponse.seatbid.bid.apisBidResponse.seatbid.bid.attr hoặc tiện ích BidResponse.seatbid.bid.ext.attribute. Sau đây là 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
    Bạn có thể chỉ định điều này bằng cách đặt BidResponse.seatbid.bid.attr thành USER_INTERACTIVE hoặc 13 cho định dạng JSON.

Hãy xem Tài nguyên mẫu quảng cáo để biết thông tin giải thích về cách nhận ý kiế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ác trường Đặt giá thầu mở

Phản hồi giá thầu do bên đặt giá thầu trao đổi và mạng tham gia Đặt giá thầu mở gửi tương tự như phản hồi của Authorized Buyers tham gia đặt giá thầu theo thời gian thực tiêu 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ố ít trường bổ sung và một số trường hiện có có thể có các mục đích sử dụng khác. Trong đó bao gồm:

Trường Thông tin chi tiết
BidResponse.imp.pmp.deals.id

Mã thoả thuận trong không gian tên của sàn giao dịch đượ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

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 Mã thông báo dùng để xác định thông tin người mua bên thứ ba cuối cùng nếu sàn giao dịch là một Người đặt giá thầu mở đóng vai trò trung gian. Thông tin này được lấy từ người mua bên thứ ba và phải được truyền đến Google mà không thay đổi trong phản hồi giá thầu.

Đề xuất

  • Bật các kết nối HTTPS liên tục (còn gọi là "keep-alive" hoặc "connection reuse") trên máy chủ của bạn. Đặt thời gian chờ tối thiểu là 10 giây – trong nhiều trường hợp, giá trị cao hơn sẽ có lợi. Google xác minh điều này trong các 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 độ trễ khi thiết lập một kết nối TCP riêng cho mỗi yêu cầu.
  • Thêm URL theo dõi lượt hiển thị (không bắt buộc) để theo dõi thời điểm lượt hiển thị hiển thị thay vì thời điểm giá thầu giành chiến thắng. Do sự sụt giảm giữa số lượt thắng và số lượt hiển thị, điều này mang lại số liệu thống kê theo dõi chính xác hơn.

  • Giữ cho mã đặt giá thầu của bạn không phụ thuộc vào các trường không dùng nữa. Điều này có thể khiến giá thầu của bạn không thành công do lỗi.
  • Thêm BidResponse.seatbid.bid.wBidResponse.seatbid.bid.h vào BidResponse. BidResponse cho một yêu cầu bao gồm nhiều kích thước quảng cáo phải có các trường này, nếu không yêu cầu đó sẽ bị loại khỏi phiên đấu giá.
  • Giới hạn kích thước phản hồi ở mức dưới 8K. Các phản hồi có kích thước rất lớn có thể làm tăng độ trễ mạng và gây ra tình trạng hết thời gian chờ.
  • Làm theo các nguyên tắc 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 minh hoạ các mẫu yêu cầu Protobuf và JSON mà con người có thể đọc được.

OpenRTB Protobuf

JSON OpenRTB

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 dễ đọc. Tuy nhiên, đó không phải là cách các thông báo được gửi qua mạng. Khi sử dụng định dạng OpenRTB Protobuf, hệ thống sẽ chỉ chấp nhận các thông báo BidResponse được chuyển đổi tuần tự.

Bạn có thể tạo và chuyển đổi một thông báo BidResponse thành chuỗi bằng cách sử dụng mã C++ sau:

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

Phản hồi giá thầu 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 các định dạng quảng cáo được hỗ trợ (AMP, video, quảng cáo gốc). Trong ví dụ này, chúng ta chỉ định mẫu quảng cáo bằng cách sử dụng trường html_snippet.

Ngoài ra, bạn có thể chỉ định mẫu quảng cáo 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 một 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 đặt trong một iFrame được chèn vào trang web, dẫn đến việc 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 sao cho 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 một iFrame và có 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 giá thầu phản hồi 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à 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 giá thầu phản hồi. Bạn 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.
  • Quảng cáo xen kẽ là một trường hợp ngoại lệ. Đố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 màn hình và chiều cao bằng ít nhất 40% 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 cách sử dụng mã HTML hợp lệ bất kỳ để hiển thị đúng cách, nhưng hãy lưu ý các quy tắc hạn chế khi chỉ định trường crid trong phần Tạo thông báo BidResponse. Một trường hợp sử dụng cho việc 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. Thao tác này cho phép bạn truyền dữ liệu tuỳ ý về lượt hiển thị trở lại máy chủ của riêng mình.

Hầu hết các chính sách đối với đoạn mã HTML được trả về trong phản hồi giá thầu đều giống như đối với quảng cáo của bên thứ ba. Hãy xem Nguyên tắc của chương trình Authorized Buyers, Yêu cầu đối với hoạt động phân phát quảng cáo của bên thứ baKhai báo URL chuyển qua 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, được nhúng vào một số trường phản hồi giá thầu có chứa URL. Các URL này sẽ được thay thế bằng một giá trị phù hợp 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 có chứa 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ể thêm macro vào các trường sau:

  • BidResponse.seatbid.bid.adm

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

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

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

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

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    Hãy sử dụng phương thức này thay vì BidResponse.seatbid.bid.burl nếu bạn cần nhiều URL thanh toán.

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

Macro của Google

Google hỗ trợ các macro bổ sung ngoài những macro có trong quy cách OpenRTB. Các macro này được định dạng khác và sẽ xuất hiện dưới dạng %%MACRO%% nếu được nhúng trong một 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 IDFA trên 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 phần Giải mã giá trị nhận dạng nhà quảng cáo để biết thông tin chi tiết.
CACHEBUSTER Giá trị biểu thị chuỗi của một số nguyên ngẫu nhiên, không dấu, có kích thước 4 byte.
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 đi ngay sau macro.

Ví dụ: nếu URL nhấp chuột 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 đơn của URL nhấp chuột 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, quảng cáo này sẽ 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 đến URL nhấp qua của bên thứ ba.

CLICK_URL_ESC

URL nhấp chuột được thoát cho quảng cáo. Hãy sử dụng giá trị 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, quảng cáo này sẽ 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 sẽ bỏ thoát tham số google_click_url.

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

CLICK_URL_ESC_ESC

URL được thoát hai lần cho quảng cáo. Hãy sử dụng giá trị 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_ESC%%"></a>

Tại thời điểm phân phát quảng cáo, quảng cáo này sẽ 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 đặt giá thầu không yêu cầu SSL hoặc thành https: nếu yêu cầu đặt 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 cho sản phẩm và khi mẫu quảng cáo được quét trong quy trình xác minh. Định dạng là: %%?VERIFICATION:true-val:false-val%%, trong đó bạn có thể dùng mọi giá trị (ngoại trừ macro) cho true-valfalse-val, kể cả chuỗi trống. Đối với tính năng Đặt giá thầu mở, các nền tảng trao đổi nên sử dụng macro này; sau khi sử dụng, các nền tảng phía nhu cầu không cần thực hiện thay đổi.

Ví dụ: nếu một mẫu quảng cáo có chứa %%?VERIFICATION:-1:5000%% thì văn bản thay thế 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 nhóm ping này.

WINNING_PRICE

Chi phí được mã hoá cho lượt hiển thị (tức là CPI chứ không phải 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 micros CPM hoặc 5.000 micros CPI. Giá trị đã giải mã của WINNING_PRICE trong trường hợp này sẽ là 5.000. Giá giành chiến thắng đượ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 tin xác nhận giá. Hãy tham khảo trang Giải mã thông tin xác nhận giá để biết thêm thông tin.

WINNING_PRICE_ESC WINNING_PRICE được thoát URL.

Google yêu cầu bạn sử dụng macro CLICK_URL_UNESC hoặc CLICK_URL_ESC trong mẫu quảng cáo của quảng cáo do bên thứ ba phân phát. 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 (+).
  • Các 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 sẽ đượ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 quy định hạn chế và yêu cầu mà nhà xuất bản đặt ra đối với 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 được phát hiện cho mẫu quảng cáo mà bạn đã gửi bằng cách sử dụng trường detectedCategories của API Đặt giá thầu theo thời gian thực.
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • Trên 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 với quảng cáo có chứa một tính năng bị hạn chế. Đối với các tính năng được phép như loại nhà cung cấp, chỉ trả về quảng cáo nếu loại nhà cung cấp của quảng cáo đó nằm trong danh sách allowed_vendor_type trong BidRequest. Bạn chỉ nên đưa những định dạng quảng cáo được chỉ định trong yêu cầu giá thầu bằng cách điền sẵn các trường như BidRequest.imp.banner vào giá thầu của mình. Hãy xem phần nhận xét về các trường này trong định nghĩa bộ đệ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 phải đặt chính xác các trường BidResponse.seatbid.bid.attr, BidResponse.seatbid.bid.catBidResponse.seatbid.bid.adomain hoặc BidResponse.seatbid.bid.adm_native.link.url 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 phần 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 câu trả lời không có các trường này sẽ bị loại bỏ.

Đo lường mở

Chức năng Đo lường mở cho phép bạn chỉ định những 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 các 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 Open Measurement trong một phản hồi giá thầu có chứa các định dạng này, hãy tham khảo bài viết SDK Open Measurement trên Trung tâm trợ giúp.

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

Các phần sau đây cho thấy các phản hồi về giá thầu mẫu cho nhiều loại quảng cáo.

Biểu ngữ ứng dụng

OpenRTB Protobuf

JSON OpenRTB

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

OpenRTB Protobuf

JSON OpenRTB

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

OpenRTB Protobuf

JSON OpenRTB

Ứng dụng gốc

OpenRTB Protobuf

JSON OpenRTB

Video trên web

OpenRTB Protobuf

JSON OpenRTB

Biểu ngữ trên web di động cho đơn vị đặt giá thầu trao đổi

OpenRTB Protobuf

JSON OpenRTB