ibiza
CPM · CTR …
/

Schain (SupplyChain): цепочка продавцов в запросе OpenRTB

≈ 3 мин чтения · обновлено

Пока показ идет от приложения к покупателю, его могут перепродать несколько раз. Объект SupplyChain, коротко schain, записывает этот путь прямо в запрос ставки: каждый продавец и посредник добавляет в конец списка свой узел — домен рекламной системы и ID продавца в ней. По цепочке покупатель видит, сколько было перепродаж и кому уходят деньги.

Где лежит schain и как выглядит

Место в запросе зависит от версии OpenRTB: source.schain в 2.6, source.ext.schain в 2.5, ext.schain в 2.4 и раньше. Пример для 2.6:

"source": {
  "schain": {
    "ver": "1.0",
    "complete": 1,
    "nodes": [
      { "asi": "ssp.example", "sid": "4815162342", "hp": 1, "rid": "a91" },
      { "asi": "exchange.example", "sid": "pub-0099", "hp": 1, "rid": "c07" }
    ]
  }
}

Первый узел — система, где открыт аккаунт владельца площадки, последний — тот, кто отправил запрос вам. Здесь показ продан через одну SSP и одну биржу.

Поля объекта

Поле Значение
ver Версия спецификации, сейчас "1.0"
complete 1 — цепочка доходит до владельца площадки, 0 — нет
nodes[].asi Канонический домен рекламной системы, тот же, что в ads.txt
nodes[].sid ID аккаунта продавца в этой системе, равен seller_id в ее sellers.json
nodes[].hp 1 — узел участвует в оплате: система из asi платит продавцу sid
nodes[].rid ID запроса в том виде, в каком его выпустил этот узел
nodes[].name, domain Название и домен продавца — только если его нет в sellers.json

Как покупатель проверяет цепочку

  1. Пара asi + sid первого узла должна быть в ads.txt или app-ads.txt площадки — как правило, с типом DIRECT.
  2. Для каждого узла открывают https://<asi>/sellers.json и ищут sid. По сложившейся практике у первого узла ожидают PUBLISHER, у остальных — INTERMEDIARY или BOTH; сама спецификация такого соответствия не задает. Подробнее — в статье про sellers.json.
  3. Если complete равен 1 и каждый узел нашелся, путь прозрачен.

Один и тот же показ часто приходит к DSP несколькими путями. Почти каждое звено берет комиссию, поэтому покупатели предпочитают короткие цепочки — этот подход называют supply path optimization (SPO). Если цепочка неполная или узел в черном списке, DSP вправе отказаться от ставки и сообщить причину кодом nbr 16 или 17.

Что ломает цепочку

  • Посредник не дописал свой узел. Цепочка выглядит короче, чем есть, и проверка дает ложный результат.
  • Узел записан не туда. Запрос пришел в формате 2.5, а посредник добавил объект в поле версии 2.6: получатель читает одно место и не видит другое.
  • sid нет в sellers.json. Узел формально есть, но проверить его нельзя.
  • В asi корпоративный домен вместо домена рекламной системы — не сойдется ни с ads.txt, ни с sellers.json.

SupplyChain на бирже Ibiza

Биржа Ibiza всегда добавляет в цепочку свой узел с hp: 1. Для площадок, подключенных к ней напрямую, она создает цепочку с complete: 1 из одного узла: домен биржи и seller_id площадки из ее sellers.json. Перепродавая трафик внешнего источника, биржа дописывает узел в ту же форму, в которой цепочка пришла, — source.schain или source.ext.schain. Если цепочки в запросе не было, создается новая с complete: 0: за участников до биржи поручиться нечем.

Частые вопросы

Где искать schain в OpenRTB 2.5 и 2.6?

В 2.6 — в поле source.schain, в 2.5 — в source.ext.schain, в 2.4 и раньше — в ext.schain на верхнем уровне запроса. Сам объект во всех случаях одинаковый.

Что значит complete: 0?

Цепочка не доходит до владельца площадки: кто-то из участников не добавил свой узел или получил запрос без цепочки. Покупатель видит только часть пути и сам решает, доверять ли ему.

Почему DSP может отказаться от запроса из-за schain?

Если цепочка неполная или в ней есть узел, которому покупатель не доверяет. Для таких отказов в списке кодов OpenRTB 3.0 предусмотрены nbr 16 и 17.