پرش به مطلب اصلی

ساخت درخواست

POST /api/v1/partners/ads HTTP/1.1
Host: jamssp.yektanet.com
Content-Type: application/json

بدنه‌ی درخواست از چهار بخش اصلی تشکیل می‌شود:

{
"requestId": "9b0f5a4e-2e4e-4a1f-88a8-d0fce5e5b1f1",
"debug": false,
"user": { ... },
"page": { ... },
"positions": [ ... ]
}

فیلدهای سطح بالا​

فیلدنوعالزامیتوضیح
requestIdstring✅شناسه‌ی یکتای هر درخواست (پیشنهاد: UUID v4). برای حذف درخواست‌های تکراری استفاده می‌شود. برای هر بار بارگذاری صفحه یا هر صفحه‌ی جدید از یک لیست، مقدار جدید بسازید.
debugbooleanاگر true باشد، هیچ هزینه یا درآمدی ثبت نمی‌شود. فقط در تست.
userobject✅اطلاعات کاربر و دستگاه.
pageobjectاطلاعات صفحه.
positionsarray✅جایگاه‌هایی که باید پر شوند (حداقل یکی).

کاربر (user)​

فیلدنوعالزامیتوضیح
environmentstring✅یکی از mobile (اپ بومی)، mobile-pwa (وب موبایل / PWA)، desktop. برای نمایش تبلیغ مناسب ضروری است؛ مثلاً تبلیغ نصب اپ در دسکتاپ بی‌فایده است.
sessionTokenstringتوکن نشست (UUID). تا وقتی کاربر فعال است ثابت بماند و پس از ۳۰ دقیقه عدم فعالیت عوض شود. جزئیات
gaidstringGoogle Advertising ID (UUID) در اپ‌های اندروید. مقدار صفر یا نامعتبر نادیده گرفته می‌شود. بدون آن، کمپین‌هایی که به attribution نصب نیاز دارند نمایش داده نمی‌شوند.
platformIdstringشناسه‌ی کاربر در سیستم شما، فقط برای کاربران لاگین‌شده. به شمارش دقیق کاربران یکتا و جلوگیری از نمایش تبلیغ تکراری یا اسپم کمک می‌کند. برای کاربر مهمان خالی بگذارید.
screenWidthintegerعرض صفحه‌ی نمایش به پیکسل.
screenHeightintegerارتفاع صفحه‌ی نمایش به پیکسل.
searchQuerystringعبارتی که کاربر جستجو کرده است (در صفحات نتایج جستجو). تبلیغات مرتبط‌تری برمی‌گرداند و از تجربه‌ی کاربری محافظت می‌کند.
شناسه‌ی کاربر در وب

در وب و PWA، شناسه‌ی کاربر یکتانت در کوکی _yngt روی دامنه‌ی یکتانت نگه‌داری می‌شود و توسط اسکریپت نمایش‌دهندگان ساخته می‌شود. برای اینکه مرورگر این کوکی را بفرستد، درخواست را با credentials: 'include' ارسال کنید (پایین را ببینید).

در WebView داخل اپ، کوکی‌ها با هر بار باز شدن WebView پاک می‌شوند. برای شناسایی بهتر کاربر، پس از کلیک روی تبلیغ لینک را در مرورگر (Chrome) باز کنید، نه WebView. TWA از کوکی‌های Chrome استفاده می‌کند و مشکلی ندارد.

صفحه (page)​

فیلدنوعتوضیح
urlstringآدرس کامل صفحه.
titlestringعنوان صفحه (<title>).
descriptionstringتوضیحات صفحه (<meta name="description">).
refererstringآدرس صفحه‌ی قبلی (با یک r، مطابق هدر HTTP).
breadcrumbsstring[]مسیر دسته‌بندی صفحه، مثلاً ["خودرو", "سواری", "پراید"]. برای صفحات لیستی مفید است.

url، title و description یکتانت را از محتوای اطراف تبلیغ آگاه می‌کنند و در وب (mobile-pwa و desktop) باید ارسال شوند. در اپ بومی (mobile) می‌توانند خالی باشند.

اطلاع

breadcrumbs برای سازگاری با نسخه‌های آینده پذیرفته می‌شود و فعلاً در انتخاب تبلیغ اثری ندارد. ارسال آن از همین حالا پیشنهاد می‌شود.

جایگاه‌ها (positions)​

فیلدنوعالزامیتوضیح
idinteger✅شناسه‌ی جایگاه برای درخواست: شناسه‌ی پنل ناشر به‌علاوه‌ی یک عدد ثابت بر اساس نوع جایگاه. محاسبه‌گر
slotCountinteger✅تعداد اسلاتی که می‌خواهید پر شود.

در یک درخواست می‌توانید چند جایگاه را با هم بخواهید. بهتر است همه‌ی جایگاه‌های یک صفحه را در یک درخواست بفرستید تا یکتانت از نمایش تبلیغ تکراری در آن صفحه جلوگیری کند.

فیلدهای سفارشی​

اگر داده‌ی دیگری دارید که به هدف‌گیری کمک می‌کند (مثلاً شهر یا استان کاربر یا دسته‌بندی اختصاصی)، با تیم یکتانت هماهنگ کنید تا راه مناسب را پیدا کنیم.

نمونه در مرورگر​

async function loadYektanetAds(positions) {
const response = await fetch('https://jamssp.yektanet.com/api/v1/partners/ads', {
method: 'POST',
credentials: 'include', // کوکی شناسه‌ی کاربر یکتانت ارسال شود
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
requestId: crypto.randomUUID(),
user: {
environment: window.matchMedia('(max-width: 768px)').matches ? 'mobile-pwa' : 'desktop',
sessionToken: getSessionToken(), // پیاده‌سازی: صفحه‌ی «رویدادها»
screenWidth: window.screen.width,
screenHeight: window.screen.height,
},
page: {
url: location.href,
title: document.title,
description: document.querySelector('meta[name="description"]')?.content ?? '',
referer: document.referrer,
},
positions, // مثلاً [{id: 4294973520, slotCount: 2}]
}),
});
if (!response.ok) return [];
const text = await response.text();
return text ? JSON.parse(text).positions : [];
}