سفرهای موازی جرنی با کانتکست رویداد: یک کاربر، چند نمونه محصول
سفر موازی جرنی با کانتکست رویداد: تعریف، جدول، مثال دو سبد ایران، کلید product_id، FAQ و Leadara.

رضا احمدی
بهینهسازی سایت و محتوا برای گوگل؛ افزایش ترافیک ارگانیک و دیدهشدن برند در نتایج جستجو.
۱ مهر ۱۴۰۵ · 5 دقیقه مطالعه
نسخه دیگر English

سفر موازی جرنی با کانتکست رویداد چیست؟
ثبتنام سطح کاربر معمولاً یک trip فعال از هر جرنی برای هر نفر اجازه میدهد. ثبتنام با کلید کانتکست (مثل product_id، شناسه وام، شماره بیمهنامه) اجازه میدهد همان کاربر چند trip موازی از همان جرنی داشته باشد؛ هر کدام به ویژگی ایونت خودش تا wait و خروج وصل است.
یکخطی: یک نفر ≠ یک سبد. اگر چهار SKU باز دارد، چهار یادآوری نباید همدیگر را لغو کنند.
در فروشگاههای ایرانی شبیه دیجیکالا، کاربر صبح موبایل و عصر هدفون به سبد میزند. اگر enrollment فقط روی user_id باشد، trip دوم trip اول را میکشد یا هرگز ساخته نمیشود. نتیجه: یکی از سبدها یادآوری نمیگیرد.
این قاب روی مدل ایونت سوار است: اتومیشن event-centric در برابر contact-centric.
هر کدام چطور کار میکند؟
Trip سطح کاربر
ورود با نفر. تا وقتی آن trip زنده است، همان جرنی دوباره برای همان نفر باز نمیشود (یا re-entry قواعد جدا دارد). Wait و goal روی پروفایل شخصاند نه روی نمونه محصول.
Trip با کانتکست رویداد
کلید enrollment = نفر + ویژگی ایونت (مثلاً product_id). سبد SKU-A یک trip میسازد؛ سبد SKU-B trip دوم موازی. Wait تا خرید باید به همان product_id مقید باشد؛ خرید هدفون نباید یادآوری موبایل را ببندد.
| بعد | سطح کاربر | کلید کانتکست |
|---|---|---|
| کلید | user_id | user_id + context |
| Trip موازی | معمولاً خیر | بله |
| خروج | هر خرید شخص | خرید همان context |
| ریسک | لغو متقابل سبدها | انفجار trip اگر کلید بد |
| جای درست | آنبوردینگ، وینبک کلی | سبد چند SKU، وام، بیمه |
مثال ایران: دو سبد باز
کاربر ساعت ۱۱ cart_updated برای گوشی میفرستد؛ ساعت ۱۵ برای هندزفری. جرنی سبد wait ۲ ساعت + ایمیل + پیامک دارد ولی enrollment فقط user-level است. Trip گوشی ساخته میشود؛ trip هندزفری رد میشود. ساعت ۱۳ ایمیل گوشی میرود؛ هندزفری هیچ لمسی نمیگیرد. تیم میگوید «اتومیشن برای دسته لوازم جانبی کار نمیکند» — در واقع کلید کانتکست ندارد.
تشخیص
| مشکل | اثر |
|---|---|
| Enrollment فقط user | سبد دوم گم |
| Goal خرید بدون فیلتر product_id | خرید A مسیر B را میبندد |
| کلید خیلی درشت (فقط دسته) | تداخل هنوز هست |
| کلید خیلی ریز (هر pageview) | هزار trip زامبی |
اصلاح عملی
- ایونت
cart_updatedرا باproduct_id(و در صورت نیازsku) غنی کن. - جرنی سبد را با کلید
user_id + product_idباز کن. - Wait-until / goal خرید را با همان
product_idفیلتر کن. - سقف: حداکثر ۳ trip موازی سبد برای هر نفر؛ قدیمیتر از ۷ روز را expire کن.
- آنبوردینگ را user-level نگه دار — آنجا کانتکست محصول معنا ندارد.
مکمل realtime: جرنی در برابر کمپین realtime رویداد. قاب کلی مسیر: جرنی مارکتینگ در برابر کمپین.
چه وقت کانتکست، چه وقت سطح کاربر؟
- یک مسیر زندگی برای نفر (خوشآمد، سکوت کلی)؟ → user-level.
- چند نمونه مستقل (SKU، وام، تیکت)؟ → context key.
- آیا خروج باید فقط همان نمونه را ببندد؟ اگر بله، حتماً فیلتر context روی goal.
- آیا کاتالوگ ایونت ویژگی پایدار دارد؟ بدون
product_idثابت trip موازی دروغین میشود.
اتصال به Leadara
- ایونتها با propertyهای پایدار:
product_id،category_id،cart_id. - جرنی سبد با enrollment کانتکستدار و goal مقید.
- جرنی خوشآمد user-level جدا.
- سگمنت برای سقف tripهای موازی / suppress بلست.
- ایمیل/پیامک با توکن همان محصول از context trip — نه «سبد عمومی».
اشتباهات رایج
- فرض یک سبد برای هر کاربر همیشه
- goal خرید سراسری روی trip محصولی
- کلید کردن روی نام محصول متنی ناپایدار
- باز گذاشتن trip بدون TTL
- کپی متن سبد بدون نام/لینک همان SKU
زبان تیم برنامهنویس
| مفهوم | معنی |
|---|---|
| Trip | نمونه در حال اجرای جرنی |
| Context key | کلید موازیسازی |
| Profile attribute | فیلد شخص |
| Event property | فیلد همان ایونت |
مثل instance در کد: یک class (جرنی)، چند instance (trip) با state جدا.
چکلیست go-live
product_idدر ایونت سبد و خرید یکسان است؟- Goal خرید فیلتر context دارد؟
- TTL و سقف trip موازی؟
- آنبوردینگ هنوز user-level است؟
- قالب پیام فیلد محصول از context میخواند؟
- گزارش per-product abandonment جدا از per-user؟
- holdout روی درصد user نه فقط trip؟
سوالات پرتکرار
آیا یک کاربر میتواند چند نمونه از یک جرنی را همزمان داشته باشد؟
بله اگر enrollment با کلید کانتکست باشد؛ در مدل فقط-کاربر معمولاً خیر.
خرید یک SKU آیا باید همهٔ سبدها را ببندد؟
خیر؛ فقط trip همان product_id مگر سیاست «سبد واحد» صریح داشته باشی.
چه کلیدی انتخاب کنیم؟
پایدار و در خرید تکرارشونده: product_id یا cart_line_id — نه عنوان فارسی محصول.
خطر انفجار trip چیست؟
کلید کردن روی هر pageview یا session بیثبات؛ TTL و سقف بگذار.
آیا Leadara فیچر جدا «contextual journey» دارد؟
با ایونتهای غنی، enrollment و goal مقید به property همان منطق را میسازی.
متریک درست؟
نرخ بازیابی per-product و RPR همان trip — نه فقط «کاربر پیام گرفت».
وینبک کلی هم کانتکست میخواهد؟
معمولاً نه؛ وینبک سطح رابطه است مگر per-subscription.
جمعبندی و قدم بعدی
یک کاربر میتواند چند trip موازی داشته باشد اگر کلید کانتکست درست باشد. این هفته جرنی سبد را از user-only به user_id + product_id ببر، goal را فیلتر کن، و TTL بگذار.
الگوی ۱۴ روزه
روز ۱–۲: ایونت سبد/خرید را با product_id یکسان کن.
روز ۳–۵: جرنی کانتکستدار با سقف ۳ trip بساز.
روز ۶–۱۰: ۱۰٪ holdout نگه دار.
روز ۱۱–۱۴: بازیابی per-SKU را با نسخهٔ قبلی مقایسه کن.
| مدل | کلید | مثال |
|---|---|---|
| User-level | user | خوشآمد |
| Context | user+product | سبد چند SKU |
antimatter: چه چیز را کانتکست نکن
مسیرهای رابطهای را با product_id تکهتکه نکن: خوشآمد، ترجیح کانال، sunset، وینبک کلی. کانتکست برای نمونهٔ تکرارشونده است نه برای کل رابطه.
قرارداد داده با بکاند
- همان شناسه در
cart_updatedوorder_completed. - شناسه بعد از merge کاتالوگ عوض نشود.
- حذف محصول: trip را expire کن نه اینکه تا ابد timeout بماند.
- در پیام، نام و لینک همان شناسه را از context بخوان — fallback عمومی ممنوع در تست پذیرش.



