מעקב מסחר אלקטרוני
ה-SDKs של Joryio כוללים מעקב מובנה אחר מסחר אלקטרוני למעורבות במוצרים, לפעילות עגלות ולעסקאות רכישה. כלי המעקב פועל באותה צורה בכל הפלטפורמות: אותן מתודות, אותם שמות אירועים סטנדרטיים ואותה משמעות למאפיינים - רק תחביר השפה שונה.
בחרו את הפלטפורמה שלכם בכל דוגמת קוד למטה; הבחירה מסתנכרנת לאורך כל העמוד. להתקנה ותצורה, ראו את מדריכי הפלטפורמות: Web SDK, iOS SDK, Android SDK, React Native SDK. ל-React Native אין עוקב ייעודי - הלשונית שלו מציגה את קריאות ה-Joryio.track() המקבילות (ראו React Native בהמשך).
מוסכמת שמות מזהים
Joryio משתמש במוסכמת שמות ברורה למזהים:
| המזהה שלך | תיאור | דוגמה |
|---|---|---|
productId | מזהה המוצר שלך (מק"ט, מזהה מוצר מפלטפורמת המסחר האלקטרוני שלך) | "SKU-12345" |
orderId | מזהה ההזמנה שלך (מספר הזמנה מהפלטפורמה שלך) | "ORD-2024-001" |
userId | מזהה המשתמש שלך (מועבר ל-identify()) | "user-123" |
השתמשו במזהים שלכם באופן טבעי - אין צורך בתחיליות מיוחדות.
אתחול המעקב אחר מסחר אלקטרוני
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Get the e-commerce tracker from your SDK instance
// (joryio is the instance created with `new JoryioSDK({ sdkKey: ... })`)
const ecommerce = joryio.ecommerce({
currency: 'ILS', // Default currency for all events
});
// Get the e-commerce tracker with default currency
let ecommerce = Joryio.shared.ecommerce(config: EcommerceConfig(currency: "ILS"))
import io.joryio.sdk.ecommerce.*
// Get the e-commerce tracker with default currency
val ecommerce = Joryio.getInstance().ecommerce(EcommerceConfig(currency = "ILS"))
// The React Native SDK has a typed e-commerce tracker, same as web, iOS and
// Android. Use it rather than Joryio.track() with hand-written names: it
// applies the platform's canonical event names and property keys for you, and
// a name that is close but not exact is stored verbatim and matches no report.
import Joryio from '@joryio/react-native-sdk';
const product = {
productId: 'SKU-12345',
name: 'Classic Blue T-Shirt',
price: 29.99,
category: 'Clothing/T-Shirts',
brand: 'Acme Apparel',
imageUrl: 'https://example.com/images/blue-tshirt.jpg',
url: 'https://example.com/products/blue-tshirt',
};
מעקב צפיות במוצרים וחיפוש
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Track product view
ecommerce.viewProduct({
productId: 'SKU-12345',
name: 'חולצת טי כחולה קלאסית',
price: 99.99,
category: 'ביגוד',
brand: 'אופנה ישראלית',
variant: 'מידה M',
sku: 'BTS-001-M',
});
// Track category view
ecommerce.viewCategory('cat_123', 'חולצות', {
sort_by: 'popularity',
});
// Track product search
ecommerce.search('חולצות כחולות', 42);
// Track product view
let product = EcommerceProduct(
productId: "SKU-12345",
name: "חולצת טי כחולה קלאסית",
price: 99.99,
category: "ביגוד",
brand: "אופנה ישראלית",
variant: "מידה M",
sku: "BTS-001-M"
)
ecommerce.viewProduct(product)
// Track category view
ecommerce.viewCategory(categoryId: "cat_123", categoryName: "חולצות", properties: [
"sort_by": "popularity"
])
// Track product search
ecommerce.search(query: "חולצות כחולות", resultCount: 42)
// Track product view
val product = EcommerceProduct(
productId = "SKU-12345",
name = "חולצת טי כחולה קלאסית",
price = 99.99,
category = "ביגוד",
brand = "אופנה ישראלית",
variant = "מידה M",
sku = "BTS-001-M"
)
ecommerce.viewProduct(product)
// Track category view
ecommerce.viewCategory(
categoryId = "cat_123",
categoryName = "חולצות",
properties = mapOf("sort_by" to "popularity")
)
// Track product search
ecommerce.search(query = "חולצות כחולות", resultCount = 42)
// When user views a product page
Joryio.ecommerce.viewProduct(product);
// When user views a category page
Joryio.ecommerce.viewCategory('tshirts', 'T-Shirts');
// When user searches
Joryio.ecommerce.search('blue shirts', 42);
מעקב פעילות עגלה
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Add item to cart
ecommerce.addToCart({
productId: 'SKU-12345',
name: 'חולצת טי כחולה',
price: 99.99,
quantity: 2,
category: 'ביגוד',
}, 199.98); // Optional: current cart value
// Remove from cart
ecommerce.removeFromCart({
productId: 'SKU-12345',
name: 'חולצת טי כחולה',
price: 99.99,
}, 1); // quantity to remove
// Update cart
ecommerce.updateCart([
{ productId: 'SKU-12345', name: 'חולצה', price: 99.99, quantity: 2 },
{ productId: 'SKU-67890', name: 'מכנסיים', price: 149.99, quantity: 1 },
], 349.97);
// Add item to cart
let cartItem = EcommerceCartItem(
productId: "SKU-12345",
name: "חולצת טי כחולה",
price: 99.99,
quantity: 2,
category: "ביגוד"
)
ecommerce.addToCart(item: cartItem, cartValue: 199.98)
// Remove from cart
ecommerce.removeFromCart(product: product, quantity: 1)
// Update cart
ecommerce.updateCart(items: [cartItem1, cartItem2], cartValue: 349.97)
// Add item to cart
val cartItem = EcommerceCartItem(
productId = "SKU-12345",
name = "חולצת טי כחולה",
price = 99.99,
quantity = 2,
category = "ביגוד"
)
ecommerce.addToCart(item = cartItem, cartValue = 199.98)
// Remove from cart
ecommerce.removeFromCart(product = product, quantity = 1)
// Update cart
ecommerce.updateCart(items = listOf(cartItem1, cartItem2), cartValue = 349.97)
// Add item to cart
Joryio.ecommerce.addToCart({...product, quantity: 2}, 59.98);
// Remove item from cart
Joryio.ecommerce.removeFromCart(product, 1);
// Cart contents changed
Joryio.ecommerce.updateCart([{...product, quantity: 2}], 59.98);
מעקב תהליך התשלום
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Start checkout
ecommerce.startCheckout([
{ productId: 'SKU-12345', name: 'חולצה', price: 99.99, quantity: 2 },
], 199.98);
// Add payment info
ecommerce.addPaymentInfo('credit_card', {
card_type: 'visa',
});
// Start checkout
ecommerce.startCheckout(items: cartItems, cartValue: 199.98)
// Add payment info
ecommerce.addPaymentInfo(paymentMethod: "credit_card", properties: [
"card_type": "visa"
])
// Start checkout
ecommerce.startCheckout(items = cartItems, cartValue = 199.98)
// Add payment info
ecommerce.addPaymentInfo(paymentMethod = "credit_card", properties = mapOf(
"card_type" to "visa"
))
// When user starts checkout
Joryio.ecommerce.startCheckout([{...product, quantity: 2}], 65.97);
// When payment details are entered
Joryio.ecommerce.addPaymentInfo('credit_card');
מעקב רכישות
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Complete purchase
ecommerce.purchase({
orderId: 'ORD-2024-001',
items: [
{ productId: 'SKU-12345', name: 'חולצה', price: 99.99, quantity: 2, category: 'ביגוד' },
],
value: 199.98,
currency: 'ILS',
shipping: 15.00,
tax: 34.00,
discount: 20.00,
coupon: 'SAVE20',
});
// Complete purchase
let order = EcommerceOrder(
orderId: "ORD-2024-001",
items: cartItems,
value: 199.98,
currency: "ILS",
shipping: 15.00,
tax: 34.00,
discount: 20.00,
coupon: "SAVE20"
)
ecommerce.purchase(order: order)
// Complete purchase
val order = EcommerceOrder(
orderId = "ORD-2024-001",
items = cartItems,
value = 199.98,
currency = "ILS",
shipping = 15.00,
tax = 34.00,
discount = 20.00,
coupon = "SAVE20"
)
ecommerce.purchase(order)
// When order is completed.
//
// `value` here is the ORDER OBJECT's field name; the tracker sends it as the
// `total` property the revenue pipeline reads. Sending a raw event with
// `value` instead would record the order at $0 - there is deliberately no
// alias layer, so a near-miss is stored verbatim and read by nothing.
Joryio.ecommerce.purchase({
orderId: 'ORD-2024-001',
items: [
{productId: 'SKU-12345', name: 'Classic Blue T-Shirt', price: 29.99, quantity: 2},
{productId: 'SKU-67890', name: 'Black Jeans', price: 49.99, quantity: 1},
],
value: 109.97,
currency: 'USD',
shipping: 5.99,
tax: 8.8,
discount: 10.0,
coupon: 'SAVE10',
});
המתודה purchase() דורשת לשלוח את פריטי ההזמנה במפורש. ה-SDK לא שומר את עגלת הקניות בצד הלקוח ולא מאחזר אוטומטית את הפריטים מהעגלה שנעקבה או מצד השרת. כך מובטח דיוק, כי עמוד או מסך אישור ההזמנה יודעים בדיוק אילו פריטים נרכשו.
מעקב שינויי סטטוס הזמנה
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Order fulfilled (shipped)
ecommerce.orderFulfilled('ORD-2024-001', '1Z999AA10123456784', 'DHL');
// Order delivered
ecommerce.orderDelivered('ORD-2024-001');
// Order cancelled
ecommerce.orderCancelled('ORD-2024-001', 'לקוח ביקש ביטול');
// Order refunded
ecommerce.orderRefunded('ORD-2024-001', 99.99, 'מוצר פגום');
// Order fulfilled (shipped)
ecommerce.orderFulfilled(orderId: "ORD-2024-001", trackingNumber: "1Z999AA10123456784", carrier: "DHL")
// Order delivered
ecommerce.orderDelivered(orderId: "ORD-2024-001")
// Order cancelled
ecommerce.orderCancelled(orderId: "ORD-2024-001", reason: "לקוח ביקש ביטול")
// Order refunded
ecommerce.orderRefunded(orderId: "ORD-2024-001", refundAmount: 99.99, reason: "מוצר פגום")
// Order fulfilled (shipped)
ecommerce.orderFulfilled(orderId = "ORD-2024-001", trackingNumber = "1Z999AA10123456784", carrier = "DHL")
// Order delivered
ecommerce.orderDelivered(orderId = "ORD-2024-001")
// Order cancelled
ecommerce.orderCancelled(orderId = "ORD-2024-001", reason = "לקוח ביקש ביטול")
// Order refunded
ecommerce.orderRefunded(orderId = "ORD-2024-001", refundAmount = 99.99, reason = "מוצר פגום")
// Order shipped
Joryio.ecommerce.orderFulfilled('ORD-2024-001', '1Z999AA10123456784', 'UPS');
// Order delivered
Joryio.ecommerce.orderDelivered('ORD-2024-001');
// Order cancelled or refunded
Joryio.ecommerce.orderCancelled('ORD-2024-001', 'customer_request');
Joryio.ecommerce.orderRefunded('ORD-2024-001', 29.99, 'damaged');
מעקב רשימת משאלות ושיתוף
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Wishlist
ecommerce.addToWishlist({ productId: 'SKU-12345', name: 'חולצה', price: 99.99 });
ecommerce.removeFromWishlist({ productId: 'SKU-12345', name: 'חולצה', price: 99.99 });
// Share product
ecommerce.shareProduct({ productId: 'SKU-12345', name: 'חולצה', price: 99.99 }, 'whatsapp');
// Wishlist
ecommerce.addToWishlist(product: product)
ecommerce.removeFromWishlist(product: product)
// Share product
ecommerce.shareProduct(product: product, shareMethod: "whatsapp")
// Wishlist
ecommerce.addToWishlist(product)
ecommerce.removeFromWishlist(product)
// Share product
ecommerce.shareProduct(product, shareMethod = "whatsapp")
// Add to wishlist
Joryio.ecommerce.addToWishlist(product);
// Remove from wishlist
Joryio.ecommerce.removeFromWishlist(product);
// Share a product
Joryio.ecommerce.shareProduct(product, 'whatsapp');
מעקב קופונים
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Coupon
ecommerce.applyCoupon('SAVE20', 20.00, 'percentage');
ecommerce.removeCoupon('SAVE20');
// Coupon
ecommerce.applyCoupon(couponCode: "SAVE20", discountAmount: 20.00, discountType: "percentage")
ecommerce.removeCoupon(couponCode: "SAVE20")
// Coupon
ecommerce.applyCoupon(couponCode = "SAVE20", discountAmount = 20.00, discountType = "percentage")
ecommerce.removeCoupon(couponCode = "SAVE20")
// Coupon applied
Joryio.ecommerce.applyCoupon('SAVE10', 10.0, 'percentage');
// Coupon removed
Joryio.ecommerce.removeCoupon('SAVE10');
מעקב ביקורות
- Web (JS)
- iOS (Swift)
- Android (Kotlin)
- React Native
// Review
ecommerce.submitReview('SKU-12345', 5, 'מוצר מעולה!');
// Review
ecommerce.submitReview(productId: "SKU-12345", rating: 5, reviewText: "מוצר מעולה!")
// Review
ecommerce.submitReview(productId = "SKU-12345", rating = 5, reviewText = "מוצר מעולה!")
// Product review submitted
Joryio.ecommerce.submitReview('SKU-12345', 5, 'Great shirt, true to size.');
אירועי מסחר אלקטרוני סטנדרטיים
כלי המעקב אחר מסחר אלקטרוני שולח את אותם אירועים סטנדרטיים בכל הפלטפורמות:
| שם האירוע | תיאור |
|---|---|
Product Viewed | משתמש צופה בעמוד מוצר |
Product List Viewed | משתמש צופה בעמוד קטגוריה |
Products Searched | משתמש מחפש מוצרים |
Product Added | פריט נוסף לעגלה |
Product Removed | פריט הוסר מהעגלה |
Cart Updated | תוכן העגלה השתנה |
Checkout Started | משתמש מתחיל תשלום |
Payment Info Entered | משתמש מוסיף אמצעי תשלום |
Order Completed | הזמנה הושלמה |
Order Fulfilled | ההזמנה נשלחה |
Order Delivered | ההזמנה נמסרה |
Order Cancelled | ההזמנה בוטלה |
Order Refunded | ההזמנה זוכתה |
Product Added to Wishlist | מוצר נוסף לרשימת המשאלות |
Product Removed from Wishlist | מוצר הוסר מרשימת המשאלות |
Product Shared | מוצר שותף |
Coupon Applied | קוד קופון הוחל |
Coupon Removed | קוד קופון הוסר |
Product Reviewed | ביקורת מוצר נשלחה |
React Native
ה-React Native SDK לא כולל כלי ייעודי למעקב אחר מסחר אלקטרוני. אפליקציות React Native שולחות בדיוק את אותם אירועים סטנדרטיים עם Joryio.track(), עם אותם שמות אירועים ואותם שמות מאפיינים שכלי המעקב ב-SDKs האחרים שולחים (כלי המעקב ממירים את שדות ה-camelCase שהם מקבלים למאפייני אירוע ב-snake_case). הלשונית React Native בכל סעיף למעלה מציגה את קריאת ה-Joryio.track() המקבילה לכל מתודה של כלי המעקב.
כשחנות (Shopify, WooCommerce, Magento) או ה-API של ההזמנות שולחים את ההזמנות שלכם, Joryio יוצר את Order Refunded ו-Order Cancelled בעצמו - אל תקראו גם ל-orderRefunded / orderCancelled עבור ההזמנות האלה, אחרת כל החזר יירשם פעמיים. אירועי השרת משתמשים באותם מפתחות order_id, refund_amount ו-reason כמו ה-trackers, כך שתנאי מסע אחד מתאים לשניהם. ראו אירועי החזר וביטול.
ארגומנטים נדרשים
כל tracker דוחה קריאה חסרה באותו אופן, בכל SDK: הוא רושם אזהרה ולא שולח כלום - לעולם לא אירוע עם מזהה ריק או סכום אפס, שדוח הכנסות היה סופר כאמיתי. אף קריאה לא זורקת חריגה.
| קריאה | נדרש |
|---|---|
viewProduct, removeFromCart, addToWishlist, removeFromWishlist | מוצר עם productId ו-price סופי |
addToCart | פריט עם productId ו-price סופי |
shareProduct | מוצר כמו למעלה, ו-shareMethod |
viewCategory | categoryId ו-categoryName |
search | query |
cartViewed, updateCart, startCheckout | מערך items, כל פריט עם productId ו-price סופי, ו-cartValue סופי |
addPaymentInfo | paymentMethod |
purchase | orderId, מערך items (יכול להיות ריק; כל פריט כמו למעלה) ו-value סופי |
orderFulfilled, orderDelivered, orderCancelled, orderRefunded | orderId |
applyCoupon, removeCoupon | couponCode |
submitReview | productId |
מזהה או תווית ריקים, או כאלה שמכילים רק רווחים, נחשבים חסרים. סכום אופציונלי - cartValue ב-addToCart, shipping, tax ו-discount בהזמנה, refundAmount, discountAmount - אפשר להשמיט, אבל סכום שמעבירים חייב להיות מספר סופי: NaN או אינסוף דוחים את כל הקריאה, במקום לשלוח אותה בלי הסכום הזה.
מאפיינים מותאמים שאתם מעבירים לצד הקריאה כפופים לכלל הכללי: ערך NaN או אינסופי שם מושמט עם אזהרה והקריאה נשלחת בלי המפתח הזה - ראו מאפיינים וסוגי נתונים.
ב-Unity השמות ב-PascalCase (ViewProduct, ProductId); הכללים זהים.
צעדים הבאים
- Web SDK - התקנה, תצורה ותיעוד API מלא
- iOS SDK - שילוב SDK ל-iOS
- Android SDK - שילוב Android SDK
- React Native SDK - שילוב React Native SDK
- אירועים מותאמים - מעקב אחרי אירועים מותאמים
- E-Commerce API - שילוב מסחר אלקטרוני בצד השרת