Schain (SupplyChain): цепочка продавцов в запросе OpenRTB
Пока показ идет от приложения к покупателю, его могут перепродать несколько раз. Объект 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 |
Как покупатель проверяет цепочку
- Пара
asi+sidпервого узла должна быть в ads.txt или app-ads.txt площадки — как правило, с типомDIRECT. - Для каждого узла открывают
https://<asi>/sellers.jsonи ищутsid. По сложившейся практике у первого узла ожидаютPUBLISHER, у остальных —INTERMEDIARYилиBOTH; сама спецификация такого соответствия не задает. Подробнее — в статье про sellers.json. - Если
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.