ডেভেলপারস
মিনিটের মধ্যে ইভেন্ট পাঠান
যা শুধু ব্রাউজার জানে তার জন্য একটি ৪.৫ KB ব্রাউজার SDK, এবং যা আপনার সার্ভার নিশ্চিতভাবে জানে তার জন্য একটি প্লেইন HTTP API।
<script async src="https://track.yourstore.com/sdk/v1/trakero.js"></script>
<script>
trakero('init', { key: 'pk_live_…' });
</script>কুইক স্টার্ট
- একটি ফ্রি অ্যাকাউন্ট তৈরি করুন। আপনার স্টোর একটি পাবলিশেবল কি (ব্রাউজার) এবং একটি সিক্রেট কি (সার্ভার) পাবে।
- স্নিপেটটি প্রতিটি পেজে পেস্ট করুন। ড্যাশবোর্ড এটি আপনার কি দিয়ে পূরণ করে দেখাবে।
- ডেস্টিনেশনস থেকে মেটা বা GA4 কানেক্ট করুন, তারপর “টেস্ট ইভেন্ট পাঠান” এ চাপুন।
<script>
window.trakero=window.trakero||function(){(trakero.q=trakero.q||[]).push(arguments)};
trakero('init', { key: 'pk_live_…' });
</script>
<script async src="https://track.yourstore.com/sdk/v1/trakero.js"></script>স্ক্রিপ্ট লোড হওয়ার আগে করা কলগুলো কিউতে রাখা হয় এবং ক্রমানুসারে চালানো হয়। স্ক্রিপ্টটি async এবং পেজ লোডে বাধা দেয় না।
ব্রাউজার SDK
| কল (Call) | এটি কী করে |
|---|---|
trakero('init', { key }) | SDK চালু করে এবং একটি page_view পাঠায় (বন্ধ করতে autoPageView: false)। অপশন: endpoint, cookieDomain, cookieDays (365), consent, debug, tags (ড্যাশবোর্ড পিক্সেল লোড করে, ডিফল্ট true), keeper (কুকি কিপার URL), dataLayer (GA4 dataLayer ইভেন্ট পড়ে)। |
trakero('page') | URL, টাইটেল এবং রেফারিং URL সহ page_view পাঠায়। |
trakero('track', name, properties?) | যেকোনো স্ট্যান্ডার্ড বা কাস্টম ইভেন্ট। নাম: লেটার, ডিজিট, _ . : - (সর্বোচ্চ ৬৪)। |
trakero('viewItem', item, currency?) | আইটেমের ভ্যালু সহ view_content। |
trakero('addToCart', items, currency?) | add_to_cart; প্রাইস × কোয়ান্টিটি থেকে ভ্যালু হিসাব করা হয়। |
trakero('beginCheckout', ecommerce) | begin_checkout. |
trakero('addPaymentInfo', ecommerce) | add_payment_info. |
trakero('purchase', ecommerce) | purchase, সাথে সাথে পাঠানো হয়। order_id, value, currency প্রয়োজন। event_id ডিফল্টভাবে purchase_{order_id} হয়। |
trakero('identify', identity) | ইমেইল, ফোন, নাম, শহর, দেশ, external_id, user_id। শুধুমাত্র পেজের জন্য মেমরিতে রাখা হয়, পৌঁছানোর সাথে সাথে হ্যাশ করা হয়। |
trakero('consent', { ads, analytics }) | granted | denied | unknown। ads denied হলে, কোনো অ্যাড কুকি তৈরি হয় না এবং অ্যাড ডেস্টিনেশনগুলোতে কিছুই যায় না। |
কুকিগুলো আপনার ডোমেইনে ফার্স্ট-পার্টি হিসেবে থাকে: _cdt_vid (ভিজিটর), _cdt_sid (৩০ মিনিটের সেশন), _cdt_clk (অ্যাড ক্লিক আইডি), _cdt_ft/_cdt_lt (ফার্স্ট ও লাস্ট টাচ), এবং _fbp/_fbc (যদি ads কনসেন্ট denied না হয়)। যে ইভেন্টগুলো পাঠানো যায় না (অফলাইন, 429, 5xx) সেগুলো সংরক্ষণ করা হয় এবং পরের পেজে আবার পাঠানো হয়।
বান্ডলারের জন্য: import { createTrakero } from "@trakero/browser"।
সার্ভার ইভেন্টস API
আপনার ট্র্যাকিং ডোমেইনে POST /v1/events, সাথে Authorization: Bearer sk_live_…। একটি ইভেন্ট অবজেক্ট পাঠান, অথবা { "events": [ … ] } দিয়ে সর্বোচ্চ ৫০টি। ওয়েব পেজ থেকে Origin হেডার থাকলে সিক্রেট কি প্রত্যাখ্যান করা হয়, তাই এগুলো পেজ থেকে ব্যবহার করা যাবে না।
POST https://track.yourstore.com/v1/events
Authorization: Bearer sk_live_…
Content-Type: application/json
Idempotency-Key: order-10023-confirmed (ঐচ্ছিক)
{
"event_name": "purchase",
"event_id": "purchase_10023",
"occurred_at": "2026-09-27T13:45:17Z",
"source": "server",
"visitor_id": "<অর্ডার থেকে _cdt_vid কুকি>",
"context": { "ip": "<ক্রেতার ip>", "user_agent": "<ক্রেতার user agent>" },
"attribution": { "fbp": "<_fbp>", "fbc": "<_fbc>", "ga_client_id": "<_ga থেকে>" },
"identity": { "email": "[email protected]", "phone": "01712345678", "country": "BD" },
"consent": { "ads": "granted", "analytics": "granted" },
"ecommerce": {
"order_id": "10023", "value": 2580, "currency": "BDT", "shipping": 80,
"payment_method": "cod",
"items": [{ "item_id": "SKU-RED-M", "name": "Red Dress", "price": 1250, "quantity": 2 }]
}
}আপনি প্রি-হ্যাশ করা email_sha256 / phone_sha256 (৬৪ হেক্স ক্যারেক্টার) পাঠাতে পারেন। টেস্ট কি (pk_test_, sk_test_) প্রতিটি ইভেন্টকে TEST হিসেবে চিহ্নিত করে।
সার্ভার SDKs
ইভেন্টস API এর উপর হালকা ক্লায়েন্ট: এরা event_id কে purchase_{order_id} এ সেট করে, রিকোয়েস্ট থেকে ব্রাউজার SDK-এর কুকি পড়ে যাতে অ্যাড ক্লিক অর্ডারের সাথে যায়, এবং 429/5xx/network এররে ইডেমপোটেন্সি কি দিয়ে আবার চেষ্টা করে। Next.js এবং Node.js এবং PHP এবং Laravel দেখুন।
// Node.js / Next.js (@trakero/node)
import { Trakero, shopperFromRequest } from "@trakero/node";
const trakero = new Trakero({ secretKey: process.env.TRAKERO_SECRET_KEY!, endpoint: "https://track.yourstore.com" });
await trakero.purchase({ orderId: "10023", value: 2580, currency: "BDT", customer: { phone: "01712345678" }, shopper: shopperFromRequest(req) });// PHP / Laravel (trakero/trakero-php)
$trakero = new TrakeroClient(getenv('TRAKERO_SECRET_KEY'), 'https://track.yourstore.com');
$trakero->purchase(['order_id' => '10023', 'value' => 2580, 'currency' => 'BDT'], ['phone' => '01712345678'],
TrakeroBrowserContext::shopperFromGlobals());// .NET / ASP.NET Core (Trakero.Client)
var trakero = new TrakeroClient(new TrakeroOptions { SecretKey = config["Trakero:SecretKey"]!, Endpoint = "https://track.yourstore.com" });
var shopper = Shopper.From(ctx.Connection.RemoteIpAddress?.ToString(), ctx.Request.Headers.UserAgent, ctx.Request.Headers.Referer, ctx.Request.Headers.Cookie);
await trakero.PurchaseAsync("10023", 2580m, "BDT", customer: new Customer(Phone: "01712345678"), shopper: shopper);গুগল ট্যাগ ম্যানেজার এবং dataLayer
dataLayer: true থাকলে, SDK আপনার সাইট বা GTM কন্টেইনারের আগে থেকেই থাকা GA4 ই-কমার্স ইভেন্টগুলো পড়ে (dataLayer.push({ event, ecommerce }) এবং gtag("event", …)), এমনকি লোড হওয়ার আগের ইভেন্টগুলোও। পারচেজের জন্য transaction_id দরকার; এটি purchase_{transaction_id} এ পরিণত হয় যাতে এটি আপনার সার্ভারের কপির সাথে মিলে যায়। GTM-এ, এটি একটি Custom HTML ট্যাগে পেস্ট করুন যা Initialization - All Pages এ ফায়ার হয়। অন্য নামের অ্যারে পড়তে true এর বদলে স্ট্রিং দিন। গুগল ট্যাগ ম্যানেজার গাইড দেখুন।
<script>
window.trakero=window.trakero||function(){(trakero.q=trakero.q||[]).push(arguments)};
trakero("init", { key: "pk_live_…", dataLayer: true });
</script>
<script async src="https://track.yourstore.com/sdk/v1/trakero.js"></script>একই ইভেন্টের জন্য trakero("purchase", …) কল করবেন না, নতুবা ইভেন্টগুলো দুবার গোনা হবে।
ওয়েবহুক (Webhooks)
আপনার নিজস্ব https এন্ডপয়েন্টে (আপনার ERP, ডেটা ওয়্যারহাউস, স্ল্যাক বট) প্রতিটি ইভেন্ট JSON হিসেবে পেতে একটি ওয়েবহুক ডেস্টিনেশন যোগ করুন। কাস্টমার ডেটা হিসেবে শুধু SHA-256 হ্যাশ পাঠানো হয়। প্রাইভেট এবং ইন্টারনাল অ্যাড্রেস প্রত্যাখ্যান করা হয়। প্রতিটি রিকোয়েস্টে Trakero-Signature: t=<unix>,v1=<hex> থাকে, যেখানে v1 হলো আপনার সাইনিং সিক্রেট দিয়ে {t}.{raw body} এর HMAC-SHA256। ৫ মিনিটের বেশি পুরনো t যুক্ত রিকোয়েস্ট বাতিল করুন। 2xx রেসপন্স দিন; 5xx এবং টাইমআউটে আবার চেষ্টা করা হয়, 410 পেলে ডেস্টিনেশন পজ হয়ে যায়।
// Node.js
import { createHmac, timingSafeEqual } from "node:crypto";
export function verify(rawBody: string, header: string, secret: string) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
return timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}// PHP
function trakero_verify(string $raw, string $header, string $secret): bool {
parse_str(str_replace(',', '&', $header), $p);
if (abs(time() - (int) $p['t']) > 300) return false;
return hash_equals(hash_hmac('sha256', $p['t'] . '.' . $raw, $secret), $p['v1']);
}স্ট্যান্ডার্ড ইভেন্টস
page_view, view_content, search, add_to_cart, remove_from_cart, view_cart, begin_checkout, add_payment_info, purchase, refund, cancel, lead, generate_lead, sign_up, login, contact, complete_registration, subscribe, start_trial, add_to_wishlist। অন্য যেকোনো নামকে কাস্টম ইভেন্ট ধরা হয়।
| ইভেন্ট | প্রয়োজনীয় |
|---|---|
purchase | ecommerce.order_id, ecommerce.value ≥ 0, ecommerce.currency (ISO-4217) |
refund | ecommerce.order_id। আংশিক রিফান্ডের জন্য: প্রতিটি রিফান্ডের একটি ভিন্ন event_id, সাথে value এবং items। |
ডিডুপ্লিকেশন (Deduplication)
একটি পারচেজ purchase:order:{order_id} দিয়ে শনাক্ত করা হয়; অন্য ইভেন্টগুলো {event_name}:id:{event_id} দিয়ে। ৪৮ ঘণ্টার মধ্যে একই সোর্স থেকে আসা হুবহু রিপিট ইনজেশনে বাতিল করা হয় (রেসপন্সে duplicates এ দেখানো হয়)। ভিন্ন সোর্স থেকে (ব্রাউজার এবং সার্ভার) আসা কপিগুলো একটি ইভেন্টে মার্জ হয়। ডেস্টিনেশনগুলো সবসময় একই লজিক্যাল event_id পায়, এবং GA4 অর্ডার আইডিকে transaction_id হিসেবে পায়, ফলে তাদের নিজস্ব ডিডুপ্লিকেশনও ঠিক থাকে। পিক্সেল + CAPI ডিডুপ্লিকেশন দেখুন।
লিমিটস
| লিমিট | ভ্যালু |
|---|---|
রিকোয়েস্ট বডি | ২৫৬ KB |
একটি ইভেন্ট | ৬৪ KB |
প্রতি রিকোয়েস্টে ইভেন্ট | ৫০ |
ecommerce.items | ২০০ |
প্রপার্টি (properties) | ৫০ কি (keys) |
স্ট্রিং ফিল্ড | ২,০৪৮ ক্যারেক্টার (URL ৪,০৯৬) |
occurred_at | ৭ দিনের বেশি পুরনো নয়, ৫ মিনিটের বেশি ভবিষ্যতের নয় |
রেসপন্স এবং এরর
একটি সঠিক রিকোয়েস্ট 202 রিটার্ন করে, সাথে প্রতি-ইভেন্টের রেজাল্ট থাকে। একটি ইনভ্যালিড ইভেন্ট শুধু নিজেই বাতিল হয়; ব্যাচের বাকি অংশ গ্রহণ করা হয়।
202 Accepted
{ "request_id": "…", "accepted": 1, "duplicates": 0,
"errors": [ { "index": 1, "code": "missing_order_id", "message": "purchase requires ecommerce.order_id." } ] }| স্ট্যাটাস · কোড | অর্থ এবং কী করতে হবে |
|---|---|
400 invalid_json / empty_body | বডিটি JSON নয়। রিকোয়েস্ট ঠিক করুন। |
400 invalid_batch | ১ থেকে ৫০টি ইভেন্টের মধ্যে পাঠান। |
401 missing_key / invalid_key | একটি পাবলিশেবল কি (ব্রাউজার) বা সিক্রেট কি (সার্ভার) পাঠান। যাচাই করুন যে এটি বাতিল হয়নি। |
401 secret_key_in_browser | একটি ওয়েব পেজ থেকে সিক্রেট কি পাঠানো হয়েছে। ব্রাউজারে পাবলিশেবল কি ব্যবহার করুন এবং প্রকাশিত সিক্রেট কি পরিবর্তন করুন। |
401 key_hostname_mismatch | কি-টি এই ট্র্যাকিং ডোমেইন ছাড়া অন্য স্টোরের। |
403 origin_not_allowed | পেজের অরিজিন স্টোরের অ্যালাউড অরিজিনে (Settings) নেই। |
403 tenant_inactive | স্টোরটি অ্যাক্টিভ নয়। |
413 payload_too_large | বডি ২৫৬ KB এর বেশি। ছোট ব্যাচ পাঠান। |
429 rate_limited | গতি কমান; Retry-After মেনে চলুন। |
503 overloaded / queue_unavailable | সাময়িক সমস্যা। Retry-After সেকেন্ড পর আবার চেষ্টা করুন। সার্ভার SDK-গুলোর সবসময় এগুলো আবার চেষ্টা করা উচিত। |
| প্রতি-ইভেন্ট কোড | অর্থ |
|---|---|
invalid_event_name | শুধুমাত্র লেটার, ডিজিট, _ . : -, সর্বোচ্চ ৬৪। |
missing_order_id / missing_currency / invalid_value | পারচেজের প্রয়োজনীয় শর্ত পূরণ হয়নি। |
invalid_currency | BDT বা USD এর মতো একটি ISO-4217 কোড ব্যবহার করুন। |
invalid_event_id / invalid_order_id | অত্যধিক দীর্ঘ। |
invalid_item | নেগেটিভ প্রাইস বা কোয়ান্টিটি। |
too_many_items / too_many_properties | উপরের লিমিট অতিক্রম করেছে। |
occurred_at_too_old | ৭ দিনের বেশি পুরনো। |
unsupported_event_version | event_version 1 পাঠান অথবা বাদ দিন। |
track.yourstore.comTrakeroআপনার স্টোর → আপনার ডোমেইন → মেটা, গুগল, টিকটক
আজই প্রতিটি অর্ডার গুনতে শুরু করুন
ফ্রি অ্যাকাউন্ট খুলুন, স্টোর যুক্ত করুন আর দেখুন একটি টেস্ট অর্ডার মেটা ইভেন্টস ম্যানেজারে পৌঁছাচ্ছে।
ফ্রি প্ল্যান · কার্ড লাগবে না · এক বিকেলেই সেটআপ