رفتن به محتوا
AdPixمستنداتجست‌وجو در مستنداتفارسیورود به کنسول

رویدادهای تجارت الکترونیک

ادپیکس همان مجموعه رویدادهای تجاری GA4 را می‌پذیرد و آرایه اقلام هر رویداد را به سطرهای جداگانه باز می‌کند. قیف پیش از خرید کار مرورگر است؛ خریدی که درگاه پرداخت تایید کرده باید از سرور بیاید.

دو مسیر جمع‌آوری، یک گزارش#

تجارت الکترونیک در ادپیکس از دو جا تغذیه می‌شود و هر دو در یک گزارش می‌ریزند:

موضوع مرورگر سرور
دیدن محصول، افزودن به سبد، شروع تسویه بله لازم نیست
خریدی که درگاه پرداخت تایید کرده ناقص و شکننده بله
تمدید خودکار، فاکتور دوره‌ای، بازپرداخت خیر بله
سفارشی که اپراتور دستی ثبت می‌کند خیر بله

دلیل این تقسیم کار ساده است: تا پیش از پرداخت، رویداد در همان صفحه‌ای می‌افتد که کاربر باز کرده و مرورگر بهترین جای دیدنش است. لحظه پرداخت اما بیرون از صفحه اتفاق می‌افتد — کاربر به درگاه می‌رود، ممکن است هرگز برنگردد، ممکن است مسدودکننده تبلیغات بیکن را بگیرد. حقیقت خرید در سرور شماست، پس از همان‌جا بفرستیدش.

شکل فرمان در مرورگر#

ap('ecommerce', 'add_to_cart', {
  currency: 'IRR',
  value: 2450000,
  items: [
    { item_id: 'SKU-42', item_name: 'کیف چرم', price: 2450000, quantity: 1, category: 'bags' }
  ]
});

آرگومان دوم نام رویداد است و آرگومان سوم شیء تجارت الکترونیک. فرمان دو کار جدا می‌کند:

  1. یک رویداد کامل با همان نام می‌سازد و value، currency و transaction_id را در پارامترهای آن می‌گذارد — پس گزارش رویدادها و درآمد رویدادهای کلیدی همان لحظه آن را می‌بینند.
  2. آرایه items را در یک بافتار جداگانه کنار رویداد می‌فرستد. گیرنده آن بافتار را باز می‌کند و برای هر قلم یک سطر جدا می‌نویسد. گزارش محصولات و میانگین ارزش سفارش از همان سطرها ساخته می‌شوند.

ecommerce هم مثل page و track به رضایت دسته «آماری» گره خورده است: تا وقتی بازدیدکننده این دسته را نپذیرفته، فرمان چیزی نمی‌فرستد و بی‌صدا برمی‌گردد.

نام‌های رویداد#

همان مجموعه‌ای که GA4 به کار می‌برد پذیرفته می‌شود. نام را دقیقا با همین املا بفرستید؛ Purchase و purchase دو رویداد جدا شمرده می‌شوند.

نام رویداد چه چیزی آن را می‌خواند
view_item گام اول «قیف تجارت»
add_to_cart گام دوم قیف
begin_checkout گام سوم قیف
purchase درآمد، سفارش‌ها، میانگین ارزش سفارش، واحدها، محصولات برتر، گام چهارم قیف
refund بازپرداخت‌ها و درآمد خالص
view_item_list فقط گزارش رویدادها و کاوش
remove_from_cart فقط گزارش رویدادها و کاوش
add_payment_info فقط گزارش رویدادها و کاوش

چهار گام قیف بر پایه کاربران یکتا شمرده می‌شوند، نه رویدادها. پول و محصول فقط از purchase و refund خوانده می‌شوند؛ بقیه نام‌ها سطر قلم می‌سازند ولی هیچ گزارش پولی سراغشان نمی‌رود.

فیلدهای هر قلم#

فیلد نوع نکته
item_id رشته کلید محصول در گزارش محصولات برتر. سطرها با همین گروه می‌شوند.
item_name رشته نام نمایشی. اگر خالی باشد، جدول item_id را نشان می‌دهد.
price عدد قیمت واحد، در ارز همان رویداد.
quantity عدد اگر نفرستید یا صفر باشد، ۱ در نظر گرفته می‌شود.
category رشته ستون «دسته» در جدول محصولات.
brand رشته ذخیره می‌شود.
variant رشته ذخیره می‌شود.
discount عدد از درآمد همان قلم کم می‌شود.

درآمد هر قلم برابر است با price × quantity − discount، و همین عدد است که در ستون درآمد جدول محصولات جمع می‌شود. حداکثر ۲۰۰ قلم در یک رویداد پذیرفته می‌شود.

فیلدهای coupon، shipping، tax و affiliation در سطح سفارش و coupon و index در سطح قلم پذیرفته می‌شوند و رویداد را رد نمی‌کنند، ولی امروز هیچ گزارشی آن‌ها را نمی‌خواند. اگر به یکی از آن‌ها در گزارش نیاز دارید، به جای اتکا به این فیلدها آن را به عنوان یک پارامتر معمولی رویداد بفرستید و از آن یک بُعد سفارشی بسازید.

سه چیزی که بدون آن‌ها گزارش خالی می‌ماند#

`transaction_id` تعیین می‌کند «سفارش» چند تاست

شمارش سفارش‌ها، میانگین ارزش سفارش و اقلام به ازای سفارش همگی با گروه‌بندی روی transaction_id محاسبه می‌شوند. اگر این فیلد را نفرستید، همه خریدهای بازه در یک گروه با شناسه خالی می‌افتند: تعداد سفارش ۱ می‌شود و میانگین ارزش سفارش برابر کل درآمد. عدد اشتباه نیست — بی‌معناست. در مسیر سرور همین نقش را order_id بازی می‌کند.

  • بدون items هیچ سطری نوشته نمی‌شود. رویداد خریدی که آرایه اقلام ندارد در گزارش رویدادها و در درآمد رویدادهای کلیدی دیده می‌شود، ولی برای گزارش تجارت الکترونیک اصلا وجود ندارد. اگر ریز اقلام را ندارید، دست‌کم یک قلم با item_id سفارش و مبلغ کل بفرستید.
  • بدون transaction_id سفارش شمرده نمی‌شود — بالا توضیح داده شد.
  • بدون currency مبلغ‌ها زیر ارز «نامشخص» جمع می‌شوند. کد ارز را با سه حرف بزرگ لاتین بفرستید، مثل IRR یا USD. مسیر سرور کد نامعتبر را با خطای 422 رد می‌کند.

خرید را از سرور بفرستید#

مسیر سرور به سرور همان آرایه items را می‌پذیرد و order_id را به عنوان شناسه تراکنش به کار می‌برد:

curl -X POST https://api.adpix.io/api/v1/s2s/events \
  -H 'Authorization: Bearer sk_...' \
  -H 'X-Sov-Site: <property_id>' \
  -H 'Content-Type: application/json' \
  -d '{
    "event": "purchase",
    "event_id": "order_10482",
    "order_id": "10482",
    "email": "ali@example.com",
    "value": 4900000,
    "currency": "IRR",
    "items": [
      { "item_id": "SKU-42", "item_name": "Leather bag", "price": 2450000, "quantity": 2 }
    ]
  }'

سه چیز را این مسیر به شما می‌دهد که مرورگر نمی‌دهد:

  • ارسال دوباره سفارش تازه نمی‌سازد. event_id را خودتان انتخاب می‌کنید و باید همیشه همان سفارش را نشان دهد. ارسال دوم با همان شناسه و همان بدنه، پاسخ اول را برمی‌گرداند و رویداد جدیدی نمی‌نویسد.
  • انتساب سفارش منجمد می‌شود. کانال و کمپینی که خرید را ساخته یک بار روی سفارش نوشته می‌شود و رفتار بعدی مشتری آن را بازنویسی نمی‌کند.
  • مسدودکننده تبلیغات و ترک صفحه بی‌اثرند.

جزئیات کلید سرور، سرصفحه‌ها و خطاها در ردیابی سمت سرور آمده است.

یک سفارش را از دو مسیر نفرستید

اگر همان خرید هم از مرورگر و هم از سرور برود، دو سطر مستقل ثبت می‌شود و درآمد دو برابر می‌شود. این دو مسیر شناسه‌های متفاوتی دارند و ادپیکس عمدا آن‌ها را روی هم نمی‌اندازد. یکی را انتخاب کنید — و اگر سرور را انتخاب کردید، مطمئن شوید قاعده «ساخت رویداد» روی صفحه پرداخت موفق هم هم‌زمان یک خرید دیگر نمی‌سازد.

تکرار خرید در مرورگر#

اگر ناچارید خرید را از مرورگر بفرستید، transaction_id را حتما بگذارید. رویدادی که نامش دقیقا purchase است و شناسه تراکنش دارد، شناسه‌ای ثابت و برگرفته از همان تراکنش می‌گیرد؛ پس بارگذاری دوباره صفحه «پرداخت موفق»، بازگشت به عقب و ارسال دوباره تراکر همگی روی هم می‌افتند و یک خرید شمرده می‌شوند.

این حفاظ فقط برای نام purchase کار می‌کند. اگر رویداد خریدتان نام دیگری دارد — چون قاعده رویداد آن را ساخته یا نامش را عوض کرده — روش دیگری لازم است که در قواعد ایجاد و اصلاح رویداد توضیح داده شده.

ارز#

مبلغ‌ها در همان ارزی که فرستاده‌اید ذخیره می‌شوند و هیچ تبدیلی انجام نمی‌شود. گزارش تجارت الکترونیک هم مبلغ‌ها را با علامت $ نمایش می‌دهد؛ آن علامت واحد پول شما را عوض نمی‌کند و عدد کنارش همان مقدار در ارز خودتان است.

نتیجه عملی: یک دارایی که هم‌زمان با دو ارز می‌فروشد، جمع درآمدش ریال و دلار را روی هم می‌ریزد. برای هر ارز یک دارایی جدا بسازید.

چه چیزی کجا دیده می‌شود#

جا از کجا می‌آید
درآمد، سفارش‌ها، میانگین ارزش سفارش، واحدها سطرهای قلم رویدادهای purchase، گروه‌شده بر transaction_id
بازپرداخت‌ها و درآمد خالص همان، برای refund
محصولات برتر جمع درآمد قلم به تفکیک item_id
قیف تجارت کاربران یکتای چهار رویداد قیف در events_local
درآمد رویدادهای کلیدی پارامتر value روی خود رویداد، نه سطرهای قلم

این دو منبع آخر عمدا از هم جدا مانده‌اند: درآمد رویداد کلیدی از پارامتر value می‌آید و به آرایه اقلام کاری ندارد، پس اگر خرید بدون اقلام بفرستید فقط گزارش تجارت الکترونیک را از دست می‌دهید، نه درآمد را.

خواندن خود گزارش در گزارش تجارت الکترونیک توضیح داده شده است.

پرسش‌های پرتکرار#

خرید را از مرورگر بفرستم یا از سرور؟

قیف پیش از خرید را از مرورگر و خود خرید را از سرور. خرید در مرورگر به مسدودکننده تبلیغات، بسته شدن مرورگر پیش از بازگشت از درگاه و شبکه ضعیف حساس است؛ همان خرید وقتی از سرور می‌آید یک شناسه پایدار دارد و ارسال دوباره‌اش سفارش تازه نمی‌سازد.

چرا گزارش تجارت الکترونیک خالی است در حالی که رویداد purchase در گزارش رویدادها دیده می‌شود؟

چون گزارش تجارت الکترونیک روی سطرهای اقلام ساخته شده است. رویداد خریدی که آرایه items ندارد هیچ سطر قلمی نمی‌سازد، پس درآمد و سفارش و محصولات برتر آن را نمی‌بینند. مقدار value همان رویداد همچنان در درآمد رویدادهای کلیدی شمرده می‌شود.

چرا همه خریدها یک سفارش شمرده می‌شوند؟

چون transaction_id خالی مانده است. شمارش سفارش با گروه‌بندی روی همین فیلد انجام می‌شود، پس اگر همه خریدها شناسه خالی داشته باشند همه در یک گروه می‌افتند و میانگین ارزش سفارش بی‌معنا می‌شود. در مسیر سرور، order_id همین نقش را دارد.

ادپیکس ارزها را به هم تبدیل می‌کند؟

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

با API بسازیدبفهمید درآمد از کجا می‌آید.
آیا این صفحه مفید بود؟