কিভাবে একটি পার্টনার রেভেনিউ অ্যাট্রিবিউশন ওয়েব অ্যাপ বানাবেন?
কীভাবে একটি ওয়েব অ্যাপ ডিজাইন ও তৈরি করবেন যা পার্টনার ক্লিক, কনভার্শন এবং রাজস্ব ট্র্যাক করে—ডেটা মডেল, ট্র্যাকিং, রিপোর্টিং, পে-আউট এবং প্রাইভেসি কিভাবে পরিচালনা করবেন তা কভার করে।

পার্টনার রেভেনিউ অ্যাট্রিবিউশনকে কী করতে হবে
পার্টনার রেভেনিউ অ্যাট্রিবিউশন হল সেই সিস্টেম যা একটি সরল প্রশ্নের উত্তর দেয়: কোন পার্টনারকে একটি রাজস্ব ইভেন্টের ক্রেডিট মিলবে (এবং কতটা)? একটি ওয়েব অ্যাপে এর মানে আপনি শুধু ক্লিক গোনা নয়—আপনি পার্টনারের রেফারেলকে পরে ঘটে যাওয়া কনভার্শনের সাথে যুক্ত করে একটি স্পষ্ট রাজস্ব সংখ্যা বানাচ্ছেন, এবং সেটি অডিটযোগ্য রাখছেন।
আপনার ব্যবসার জন্য “পার্টনার রেভেনিউ অ্যাট্রিবিউশন” কীভাবে সংজ্ঞায়িত করবেন
একটি এক-পংক্তির সংজ্ঞা লিখে শুরু করুন যাতে অন্তর্ভুক্ত থাকে (1) কী অ্যাট্রিবিউট করা হচ্ছে, (2) কার কাছে, এবং (3) কোন নিয়মে। উদাহরণ স্বরূপ:
- “৩০ দিনের মধ্যে প্রথম এলিজিবল ক্লিক চালানো পার্টনারকে সাবস্ক্রিপশন রাজস্ব অ্যাট্রিবিউট করা।”
- “কুপন-শুধু কনভার্শন বাদ দিয়ে একটি পার্টনারের রেফারেল লিংকে করা প্রথম পেইড অর্ডারকে অ্যাট্রিবিউট করা।”
এই সংজ্ঞা আপনার রিকোয়্যারমেন্টস, ডেটা মডেল এবং পরে যে বিতর্কগুলো হবে সেগুলোর জন্য অ্যাঙ্কর হয়ে যাবে।
কারা পার্টনার হিসেবে গণ্য হবেন তা পরিষ্কার করুন
“পার্টনার” সাধারণত একাধিক গ্রুপকে অন্তর্ভুক্ত করে যাদের প্রত্যাশা ও ওয়ার্কফ্লো ভিন্ন হতে পারে:
- অ্যাফিলিয়েটস: উচ্চ ভলিউম, লিংক-ভিত্তিক ট্র্যাকিং, ঘন পে-আউট।
- এজেন্সি: কম ডিল, দীর্ঘ সেলস সাইকেল, কখনো-ও কখনো নেগোশিয়েটেড টার্মস।
- রিসেলারস: একটি অ্যাকাউন্ট “অধিকার” করতে পারে, প্রায়ই ইনভয়েসিং প্রয়োজন।
- ইনফ্লুয়েন্সার/ক্রিয়েটর: কোড, শর্ট লিংক এবং মোবাইল-ফার্স্ট রিপোর্টিং পছন্দ করতে পারেন।
শুরুতেই তাদের সবার ওপর একরকম ওয়ার্কফ্লো চাপাবেন না। আপনি এখনো একটি ইউনিফায়েড সিস্টেম (পার্টনার, প্রোগ্রাম, কন্ট্রাক্ট) ব্যবহার করতে পারেন যখন বিভিন্ন রেফারেল পদ্ধতি (লিংক, কোড, ম্যানুয়াল ডিল) সমর্থন করবেন।
যেই আউটকামগুলো অবশ্যই সাপোর্ট করতে হবে
একটি ব্যবহারযোগ্য পার্টনার রেভেনিউ অ্যাট্রিবিউশন ওয়েব অ্যাপ নির্ভরযোগ্যভাবে চারটি আউটকাম দিতে হবে:
- ট্র্যাকিং: পার্টনার টাচপয়েন্টস (ক্লিক, কোড ব্যবহার, রেফারেল) ক্যাপচার করা এবং সেগুলোকে কনভার্শনের সাথে যুক্ত করা।
- রিপোর্টিং: পার্টনার এবং আপনার টিমকে কী ঘটেছে তা দেখানো—ক্লিক, কনভার্শন, রাজস্ব এবং স্ট্যাটাস (pending/approved/paid)।
- পে-আউটস: কমিশন গণনা, হোল্ড/রিফান্ড হ্যান্ডেল এবং পে-আউট-রেডি স্টেটমেন্ট তৈরি করা।
- বিতর্ক: “কেন এই কনভার্শন ক্রেডিট করা হয়েছে (বা করা হয়নি)”—এটা ব্যাখ্যা করার জন্য পর্যাপ্ত ডিটেইল থাকা।
যদি এগুলোর মধ্যে কোনো একটাও দুর্বল থাকে, তাহলে পার্টনাররা সংখ্যাগুলোর প্রতি বিশ্বাস করবে না—ভাল গণিত থাকলেও।
এই গাইডের লক্ষ্য নির্ধারণ করুন (এবং আপনার প্রথম সংস্করণের লক্ষ্য)
একটি অ্যাকশনেবল বিল্ড গাইডের লক্ষ্য হলো বিতর্কে আটকে না থেকে একটি কাজ করা সিস্টেম প্রকাশ করা। একটি বাস্তবসম্মত প্রথম সংস্করণ করা উচিত:
- লিংক/ক্লিক আইডি ট্র্যাক করা এবং সেগুলো সাইনআপ/চেকআউট পর্যন্ত ধরে রাখা
- কনভার্শন সার্ভার-সাইডে রেকর্ড করা (সম্ভব হলে)
- একটি স্পষ্ট অ্যাট্রিবিউশন নিয়ম প্রয়োগ করা (এমনকি সাদাসিধে একটি)
- পার্টনার-ফেসিং রিপোর্টিং এবং ইন্টারনাল রিকনসিলিয়েশন তৈরি করা
প্রাথমিকভাবে উন্নত ফিচারগুলো (মাল্টি-টাচ অ্যাট্রিবিউশন, ক্রস-ডিভাইস স্টিচিং, জটিল ফ্রড স্কোরিং) আপনি পরে যোগ করতে পারেন যখন বেসিকগুলো নির্ভরযোগ্য এবং টেস্টযোগ্য হয়ে উঠবে।
রিকোয়ারমেন্টস এবং গুরুত্বপূর্ণ প্রশ্নগুলো
কোনো অ্যাট্রিবিউশন মডেল বা ডাটাবেস ডিজাইন করার আগে, স্পষ্ট করুন আপনার অ্যাপ ব্যবসার কাছে কী প্রমাণ করতে হবে। পার্টনার রেভেনিউ অ্যাট্রিবিউশন শেষ পর্যন্ত এমন উত্তরগুলোর সেট যা মানুষ এতটা বিশ্বাস করে যে টাকাও পরিশোধ করে।
আপনার ব্যবহারকারীদের চিহ্নিত করুন (এবং “সাফল্য” প্রতিটি জন্য কী)
বেশিরভাগ টিম প্রথমে “পার্টনার” এর জন্য তৈরি করে এবং পরে জানতে পারে যে ফাইনান্স বা সাপোর্ট কিছুই যাচাই করতে পারছে না। আপনার প্রাথমিক ব্যবহারকারীদের তালিকা এবং তারা কোন সিদ্ধান্ত নেয় তা লিখুন:
- পার্টনার (অ্যাফিলিয়েট/রেফারার): ক্রেডিটেড কনভার্শন, রাজস্ব এবং পে-আউট স্ট্যাটাস দেখতে চায়।
- মার্কেটিং/গ্রোথ: কোন পার্টনার পারফর্ম করছে এবং কোথায় ইনভেস্ট করা উচিত তা জানতে চায়।
- ফাইনান্স: অডিটেবল পে-আউট ক্যালকুলেশন এবং রিকনসিলিয়েশন খায়।
- সাপোর্ট/পার্টনার ম্যানেজারস: কেন একটি কনভার্শন ক্রেডিটেড হয়েছে বা হয়নি তা ব্যাখ্যা করতে চায়।
- এঞ্জিনিয়ারিং/ডেটা: নির্ভরযোগ্য ইভেন্ট, স্পষ্ট নিয়ম এবং কম-মেইনটেন্যান্স অপারেশন চায়।
আপনার অ্যাপকে উত্তর দিতে হবে এমন ৫–৮টি মূল প্রশ্ন
এগুলোকে প্লেইন-ল্যাঙ্গুয়েজ প্রশ্ন হিসেবে লিখুন—যেগুলো আপনার UI এবং রিপোর্টিং সাপোর্ট করবে:
- এই অর্ডার/সাবস্ক্রিপশন কোন পার্টনার (যদি থাকে) চালিয়েছে?
- কোন প্রমাণ এই কনভার্শনকে ওই পার্টনারের সাথে লিংক করে? (ক্লিক ID, কুপন, রেফারেল কোড ইত্যাদি)
- ক্লিক/লিড কনভার্শনের نسبت কবে ঘটেছে? (অনুমোদিত উইন্ডোর মধ্যে?)
- এই কনভার্শন কমিশন-এ যোগ্য কি? (নতুন কাস্টমার মাত্র, প্রোডাক্ট বহিষ্কার, মিনিমাম স্পেন্ড)
- কমিশন পরিমাণ এবং রেট কত, এবং কোন নিয়ম তা নির্ধারণ করেছে?
- কনভার্শন পরে পরিবর্তিত হয়েছে কি? (রিফান্ড, চার্জব্যাক, ক্যান্সেল, ডাউনগ্রেড)
- কোন নির্দিষ্ট পিরিয়ডের জন্য আমরা প্রতিটি পার্টনারকে কত বাধ্যতামূলক অর্থই আছি, এবং কি পরিশোধ হয়েছে?
- পার্টনার-চালিত কনভার্শনগুলো অন্যান্য চ্যানেলের সাথে কিভাবে তুলনা করে? (মার্কেটিং রিপোর্টিং জন্য)
ক্যাপচার করতে হবে এমন ইভেন্টগুলো নির্ধারণ করুন
সর্বনিম্নে পরিকল্পনা করুন: click, lead, trial start, purchase, renewal, এবং refund/chargeback। সিদ্ধান্ত নিন কোনগুলো “কমিশনেবল” এবং কোনগুলো সহায়ক প্রমাণ হিসেবে ব্যবহার করা হবে।
কেমন অ্যাট্রিবিউশন টাইপ প্রথমে সাপোর্ট করবেন তা ঠিক করুন
একটি পরিষ্কার নিয়ম সেট দিয়ে শুরু করুন—সাধারণত কনফিগারেবল উইন্ডো সহ last-touch—এর পরে কেবলমাত্র শক্তিশালী রিপোর্টিং চাহিদা এবং পরিষ্কার ডেটা থাকলে multi-touch যোগ করুন। প্রথম সংস্করণটি সহজে ব্যাখ্যা ও অডিটযোগ্য রাখুন।
একটি অ্যাট্রিবিউশন মডেল এবং নিয়ম বেছে নিন
কোন কোড লেখার আগে ঠিক করুন কী “ক্রেডিট পাবে” এবং কখন সেই ক্রেডিট মেয়াদ শেষ হবে। যদি আপনি আগেই নিয়ম সেট না করেন, তাহলে প্রতিটি পে-আউটে এজ কেস নিয়ে বিতর্ক হবে।
সাধারণ অ্যাট্রিবিউশন মডেল (উচ্চ-স্তরে)
Last click কনভার্শনের আগে সবচেয়ে সম্প্রতি করা পার্টনার ক্লিককে ১০০% ক্রেডিট দেয়। এটা সহজ এবং বিস্তৃতভাবে বোঝা যায়, কিন্তু লেট-স্টেজ কুপন ট্রাফিককে অতিরিক্ত পুরস্কৃত করতে পারে।
First click গ্রাহককে প্রথম পরিচয় করানো পার্টনারকে ১০০% ক্রেডিট দেয়। এটি ডিসকভারির পার্টনারকে সুবিধা দেয়, কিন্তু ক্লোজ করতে সাহায্য করা পার্টনারদের অপর্যাপ্ত মূল্য দিতে পারে।
Linear উইন্ডোর মধ্যে সমস্ত যোগ্য পার্টনার টাচকে সমানভাবে ভাগ করে ক্রেডিট দেয়। এটা “ফেয়ার” মনে হতে পারে, কিন্তু বুঝানো কঠিন এবং প্রণোদনা হ্রাস করতে পারে।
Time-decay কনভার্শনের কাছে থাকা টাচগুলোকে বেশি ক্রেডিট দেয় যখন পূর্বের ইনফ্লুয়েন্সকেও স্বীকৃতি দেয়। এটা একটি সমঝোতা মডেল, কিন্তু বেশি গণিত ও পরিষ্কার রিপোর্টিং প্রয়োজন।
একটি ডিফল্ট পছন্দ করুন, তারপর ব্যতিক্রম নথিভুক্ত করুন
প্রায়শই একটি ডিফল্ট মডেল বেছে নিন (অনেক অ্যাপ last click দিয়ে শুরু করে কারণ এটি সহজে ব্যাখ্যা ও রিকনসাইল করা যায়)। তারপর স্পষ্টভাবে ব্যতিক্রমগুলো নথিভুক্ত করুন যাতে সাপোর্ট ও ফাইনান্স একইভাবে প্রয়োগ করতে পারে:
- কুপন কোড: একটি বৈধ পার্টনার কুপন কি ক্লিক ইতিহাসকে ওভাররাইড করবে, ক্রেডিট শেয়ার করবে, নাকি কেবল তখনই প্রযোজ্য হবে যখন পার্টনার একইসাথে ক্লিকও ড্রাইভ করুক—এসব নির্ধারণ করুন।
- ডিরেক্ট ট্রাফিক: ডিরেক্ট ভিজিট কি “চেইন ভেঙে দেয়” (অ্যাট্রিবিউশন রিসেট করে) নাকি কেবল একটি টাচ হিসেবে গণ্য হবে না—এটি পরিষ্কার করুন।
- নবায়ন: recurring subscription renewal কি মূল পার্টনারকে ক্রেডিট করে চলবে, শুধুমাত্র সীমিত সময় পে করবে, না কি পুনরায় এনগেজমেন্ট প্রয়োজন হবে—এসব ঠিক করুন।
অ্যাট্রিবিউশন উইন্ডো এবং রি-এনগেজমেন্ট
একটি বা একাধিক উইন্ডো সেট করুন যেমন 7 / 30 / 90 দিন। একটি বাস্তবসম্মত পন্থা হলো একটি স্ট্যান্ডার্ড উইন্ডো (যেমন 30 দিন) এবং প্রয়োজনে কুপন পার্টনারদের জন্য ছোট উইন্ডো।
রি-এনগেজমেন্ট নিয়মও নির্ধারণ করুন: যদি একটি কাস্টমার উইন্ডোর মধ্যে অন্য পার্টনার লিংকে ক্লিক করে, তখন কি আপনি তৎক্ষণাৎ ক্রেডিট সোয়াপ করবেন (last click), ক্রেডিট ভাগ করবেন, না কি মূল পার্টনারকে রাখবেন যতক্ষণ না নতুন ক্লিক একটি “ক্লোজ উইন্ডো” (উদাহরণ: 24 ঘণ্টা) এর মধ্যে না থাকে?
আপগ্রেড, ডাউনগ্রেড, রিফান্ড এবং চার্জব্যাক হ্যান্ডেল করা
আপনি কী অ্যাট্রিবিউট করবেন তা নির্ধারণ করুন: শুধুমাত্র প্রাথমিক ক্রয়, না কি সময়ের সাথে নেট রেভেনিউ।
- আপগ্রেডস: সাধারণত কমিশনযোগ্য; সিদ্ধান্ত নিন আপনি ডেল্টা (বিবর্ধিত অংশ) এ কমিশন দেবেন না কি নতুন প্ল্যানের পুরো পরিমাণে।
- ডাউনগ্রেডস: সাধারণত ভবিষ্যৎ কমিশন কমায়; কি আপনি অতীতের পে-আউট ক্লবব্যাক করবেন সেটিও নির্ধারণ করুন।
- রিফান্ড/চার্জব্যাক: ক্লবব্যাক পলিসি নির্ধারণ করুন (পূর্ণ উল্টানো বনাম আংশিক) এবং সময় (তৎক্ষণাৎ বনাম পরবর্তী পে-আউট সাইকেল)।
এই নিয়মগুলো একটি সংক্ষিপ্ত “অ্যাট্রিবিউশন পলিসি” ডকে লিখে পার্টনার পোর্টালে লিংক করুন যাতে সিস্টেমের আচরণ পার্টনার প্রত্যাশার সাথে মেলে।
অ্যাট্রিবিউশনের জন্য ডেটা মডেল ডিজাইন করুন
একটি পরিষ্কার ডেটা মডেলই পার্থক্য সৃষ্টি করে—“আমরা মনে করি এই পার্টনার বিক্রয় চালিয়েছে” থেকে “আমরা প্রমাণ করতে পারি, রিকনসাইল করতে পারি, এবং সঠিক পেমেন্ট করতে পারি” পর্যন্ত। ছোট কিছু কোর সত্তা দিয়ে শুরু করুন এবং immutable আইডি-গুলোর মাধ্যমে সম্পর্কগুলো স্পষ্ট করুন।
কোর সত্তাগুলো (এবং কী বোঝায়)
- Partner: যার কাছে আপনি পে-আউট করবেন (পাব্লিশার, ইনফ্লুয়েন্সার, এজেন্সি)। স্টোর করুন
partner_id, স্ট্যাটাস, পে-আউট টার্মস, ডিফল্ট কারেন্সি। - Campaign: রিপোর্টিং ও নিয়মের জন্য একটি গ্রুপিং (সিজনাল প্রোমো, প্রোডাক্ট লাইন)। কী:
campaign_id, start/end dates। - Link: পার্টনারকে ইস্যু করা ট্র্যাকারযোগ্য URL। কী:
link_id, কোনpartner_idএবং অপশনালিcampaign_idএর সাথে সম্পর্কিত। - Click: একটি একক ট্র্যাক করা ইন্টারঅ্যাকশন। কী:
click_id,link_idএবংpartner_idরেফারেন্স। - Visitor: একটি আইডেন্টিটি আপনি সেশনের উপর চিনতে পারেন। কী:
visitor_id(প্রায়শই প্রথম-পার্টি কুকি ID থেকে উৎপন্ন)। - Conversion: অ্যাট্রিবিউট করা ইভেন্ট (লিড, সাইনআপ, ক্রয়)। কী:
conversion_id, যখন পাওয়া যায় তখনclick_idএবংvisitor_idরেফারেন্স করে। - Order: অর্থনৈতিক রেকর্ড যা টাকাসংক্রান্ত। কী:
order_id,customer_idরেফারেন্স করে এবংconversion_idএর সাথে লিঙ্ক থাকে। - Payout: আপনি কী এবং কখন দিতে হবে। কী:
payout_id,partner_idরেফারেন্স করে এবং যোগ্য অর্ডারগুলোকে অ্যাগ্রিগেট করে।
কীভাবে আইডিগুলো সংযুক্ত হয় (“চেইন অফ কস্টডি”)
আপনার গোল্ডেন পাথ হলো:
partner_id → link_id → click_id → visitor_id → conversion_id → order_id → payout_id
customer_id কে order_id alongside রাখুন যাতে রিট-বাইট ক্রয় বা “ফার্স্ট পারচেজ অনলি” বনাম “লাইফটাইম” নীতিগুলো অনুসরণ করা যায়। আপনার অভ্যন্তরীণ আইডি এবং বাহ্যিকগুলো (যেমন shopify_order_id) উভয়ই রাখুন রিকনসিলিয়েশনের জন্য।
মানি ফিল্ডস এবং অ্যাডজাস্টমেন্ট
অর্ডার বদলে যায়। এটি স্পষ্টভাবে মডেল করুন:
- অ্যামাউন্টগুলো মিনর ইউনিটে (সেন্ট) স্টোর করুন:
gross_amount,tax_amount,shipping_amount,fee_amount,discount_amount। currency_codeএবং একটিfx_rate_to_payout_currency(এবং সেই রেটের টাইমস্ট্যাম্প/সোর্স) রাখুন।- রিফান্ড/চার্জব্যাকগুলোকে
order_id-এর সাথে টায়েড অ্যাডজাস্টমেন্ট রো হিসেবে উপস্থাপন করুন (উদাহরণ:order_adjustment_id, type = partial_refund)। এতে একটি অডিটেবল ইতিহাস থাকে এবং মোটালগুলো পুনঃলিখা যায় না।
অডিটেবিলিটি এবং ডেটা কোয়ালিটি
প্রতি জায়গায় অডিট ফিল্ড যোগ করুন: created_at, updated_at, ingested_at, source (web, server-to-server, import), এবং ইমিউটেবল আইডি।
ফ্রড বিশ্লেষণের জন্য কাঁচা ব্যক্তিগত ডেটা না রেখে, ip_hash এবং user_agent_hash মত হ্যাশ করা ফিল্ড রাখুন। শেষ পর্যন্ত একটি হালকা চেঞ্জ লগ (entity, entity_id, old/new values, actor) রাখুন যাতে পে-আউট সিদ্ধান্তগুলো পরে ব্যাখ্যা করা যায়।
ক্লিক ট্র্যাকিং এবং পার্টনার লিংক ইমপ্লিমেন্ট করুন
ক্লিক ট্র্যাকিং হলো পার্টনার রেভেনিউ অ্যাট্রিবিউশনের ভিত্তি: প্রতিটি পার্টনার লিঙ্ক একটি টেকসই “ক্লিক রেকর্ড” তৈরি করা উচিত যা পরে কনভার্শনের সাথে সংযুক্ত করা যায়।
একটি স্পষ্ট লিংক স্ট্রাকচার ডিফাইন করুন (এবং সেটা প্রেডিক্টেবল রাখুন)
একটি একক ক্যানোনিক্যাল লিংক ফরম্যাট ব্যবহার করুন যা পার্টনাররা কপি/পেস্ট করতে পারে। বেশিরভাগ সিস্টেমে, পার্টনার-ফেসিং লিংকে click_id থাকা উচিত নয়—আপনার সার্ভার সেটি জেনারেট করবে।
একটি পরিষ্কার প্যাটার্ন হলো:
/r/{partner_id}?campaign_id=...&utm_source=...&utm_medium=partner&utm_campaign=...
ব্যবহারিক প্যারামিটার গাইডলাইন:
- partner_id: আবশ্যক; ক্লিকের মূল মালিক।
- campaign_id: অপশনাল কিন্তু সুপারিশকৃত; অফার, প্লেসমেন্ট বা প্রচার আলাদা করে।
- utm_*: অ্যানালিটিকস টুল এবং মার্কেটিং রিপোর্টিং-এর জন্য রাখুন—এগুলোকে মেটাডেটা হিসেবে দেখুন, ট্রুথ সোর্স হিসেবে নয়।
রিডাইরেক্ট এন্ডপয়েন্টের মাধ্যমে সার্ভার-সাইড ট্র্যাকিং প্রেফার করুন
সকল পার্টনার ট্র্যাফিককে একটি রিডাইরেক্ট এন্ডপয়েন্ট (উদাহরণ: /r/{partner_id}) দিয়ে রুট করুন:
- ইনবাউন্ড রিকোয়েস্ট গ্রহণ করুন এবং প্যারামিটার পড়ুন।
- একটি ইউনিক click_id (UUID/ULID) জেনারেট করুন এবং সার্ভার-সাইডে একটি ক্লিক রো স্টোর করুন (partner_id, campaign_id, user agent, IP hash, timestamp, landing URL)।
- একটি প্রথম-পার্টি কুকি সেট করুন (এবং অপশনালি localStorage)।
- 302 রিডাইরেক্ট দিয়ে চূড়ান্ত ল্যান্ডিং পেজে পাঠান।
এটি ক্লিক ক্রিয়েশন কনসিস্টেন্ট করে, পার্টনারদের ক্লিক আইডি স্পুফিং থামায়, এবং নিয়ম প্রয়োগ কেন্দ্রিক করে।
Cookie বনাম localStorage বনাম সার্ভার-সাইড সেশন
- Cookies: প্রতিটি অনুরোধে পাঠানো হয়; সার্ভার-সাইড কনভার্শন ম্যাচিংয়ের জন্য সর্বোত্তম। ব্রাউজার ও কনসেন্ট বিধি কুকি ব্লক বা সীমাবদ্ধ করতে পারে।
- localStorage: পেজে সহজে পার্সিস্ট হয়, কিন্তু স্বয়ংক্রিয়ভাবে সার্ভারে পাঠানো হয় না; আপনাকে ক্লায়েন্ট-সাইড থেকে পড়তে হবে।
- Server-side session storage: ব্রাউজার যখন সেশন আইডি রাখে তখন কাজ করে; শর্ট উইন্ডোর জন্য ভালো, দীর্ঘ অ্যাট্রিবিউশন উইন্ডোর জন্য দুর্বল।
অধিকাংশ টিম কুকি কে প্রাথমিক, localStorage কে ফ্যালব্যাক, এবং সার্ভার-সাইড সেশনগুলোকে কেবল স্বল্প-কালীন ফ্লোগুলোর জন্য ব্যবহার করে।
মোবাইল এবং অ্যাপ-টু-ওয়েব বিবেচ্য বিষয়
মোবাইল ওয়েবে কুকি কম নির্ভরযোগ্য হতে পারে, তাই রিডাইরেক্ট এন্ডপয়েন্ট ব্যবহার করুন এবং click_id কুকি + localStorage উভয় জায়গায় স্টোর করুন।
অ্যাপ-টু-ওয়েবে সমর্থন করুন:
- ডিপ লিংকস (পার্টনার কনটেক্সটসহ অ্যাপ খুলে দেয়)
- ডিফার্ড অ্যাট্রিবিউশন বেসিকস: যদি অ্যাপ ইন্সটল না থাকে, ওয়েব/অ্যাপ স্টোরে রুট করুন, তারপর প্রথম অ্যাপ লঞ্চে মূল
click_idএক্সচেঞ্জ করার জন্য একটি শর্ট-লাইভ টোকেন পাঠান।
পার্থনার পোর্টালে সঠিক লিংক নিয়মগুলো ডকুমেন্ট করুন (দেখুন /blog/partner-links) যাতে পার্টনাররা প্যারামিটার নিয়ে “ক্রিয়েটিভ” না হন।
কনভার্শনগুলো নির্ভরযোগ্যভাবে ক্যাপচার করুন
কনভার্শন ট্র্যাকিংই সেই জায়গা যেখানে অ্যাট্রিবিউশন সিস্টেম বিশ্বাস অর্জন করে—অথবা চুপচাপ তা হারায়। আপনার লক্ষ্য হলো প্রতিটি বাস্তব ক্রয়ের জন্য একটি সিঙ্গল ক্যানোনিক্যাল “কনভার্শন” ইভেন্ট রেকর্ড করা, যথেষ্ট কনটেক্সট সহ যাতে এটি পরে একটি পার্টনার ক্লিকের সাথে সংযুক্ত করা যায়।
কনভার্শন সোর্স বেছে নিন (এবং একটি ক্যানোনিক্যাল সোর্স পছন্দ করুন)
অনেক প্রোডাক্ট বিভিন্ন জায়গা থেকে কনভার্শন পর্যবেক্ষণ করতে পারে:
- চেকআউট “থ্যাংক ইউ” পেজ (ক্লায়েন্ট-সাইড): ইমপ্লিমেন্ট করা সহজ, কিন্তু ব্লক বা ড্রপ হতে পারে, অথবা দ্বিগুণ ফায়ার হতে পারে।
- ব্যাকএন্ড অর্ডার সার্ভিস (সার্ভার-সাইড): সবচেয়ে নির্ভরযোগ্য সোর্স কারণ এটি সিস্টেম-অফ-রেকর্ডকে প্রতিফলিত করে।
- পেমেন্ট প্রোভাইডার ওয়েবহুকস (সার্ভার-সাইড): পেমেন্ট কনফার্মেশন অ্যাসিঙ্ক্রোনাস হলে দরকারী (উদাহরণ: 3DS, ব্যাংক ট্রান্সফার), কিন্তু রিট্রায়েস হ্যান্ডেল করতে হবে।
প্রস্তাবনা: আপনার ব্যাকএন্ড অর্ডার সার্ভিসকে ক্যানোনিক্যাল কনভার্শন রেকর্ডার হিসেবে গ্রহণ করুন, এবং অপশনালি পেমেন্ট ওয়েবহুকগুলোকে কনফার্মেশন/আপডেট সিগন্যাল হিসেবে ব্যবহার করুন (যেমন pending থেকে paid এ আপডেট)। ক্লায়েন্ট-সাইড ইভেন্টকে ডিবাগ বা ফানেল অ্যানালিটিকসের জন্য ব্যবহার করুন, পে-আউট-গ্রেড অ্যাট্রিবিউশনের জন্য নয়।
সার্ভার-সাইডে কনভার্শন রেকর্ড করুন (এবং অ্যাট্রিবিউশন কনটেক্সট পার্সিস্ট করুন)
পরে রাজস্ব অ্যাট্রিবিউট করার জন্য, কনভার্শন ইভেন্টকে একটি স্থিতিশীল আইডি এবং ক্লিকের সাথে লিংক করার উপায় থাকা প্রয়োজন।
সাধারণ পদ্ধতি:
- কেউ পার্টনার লিংকের মাধ্যমে এলে একটি click_id জেনারেট/স্টোর করুন।
- এটিকে প্রথম-পার্টি কুকি এবং/অথবা আপনার ডাটাবেসে সেশন/ইউজারের সাথে টায়েড করে রাখুন।
- ক্রয় সময় ব্যাকএন্ডে ক্লিক_id অর্ডারের সাথে সংযুক্ত করুন (উদাহরণ: সেশন স্টেট, কাস্টমার রেকর্ড, অথবা ক্লায়েন্ট থেকে পাঠানো সাইন করা টোকেন থেকে)।
ক্লিককে কনভার্শনে ম্যাপ করুন (স্পষ্ট ফallback নিয়মসহ)
আপনার প্রাথমিক জয়েন হওয়া উচিত conversion.click_id → click.id। যদি click_id না থাকে, স্পষ্ট fallback নিয়ম নির্ধারণ করুন, যেমন:
- যদি ইউজার লগ ইন থাকে: সেই ইউজারের জন্য উইন্ডোর মধ্যে সবচেয়ে সাম্প্রতিক যোগ্য ক্লিক ব্যবহার করুন।
- নচেৎ: সেই সেশনের জন্য সবচেয়ে সাম্প্রতিক যোগ্য ক্লিক ব্যবহার করুন।
- যদি একাধিক ক্লিক থাকে: আগেই সিদ্ধান্ত নিন “last touch wins” না কি মাল্টি-টাচ অনুমোদন করবেন।
এই ফallbackগুলো অ্যাডমিন টুলিং-এ দৃশ্যমান করুন যেন সাপোর্ট অনুমান না করে ফলাফল ব্যাখ্যা করতে পারে।
রিট্রায় এবং ডুপ্লিকেটের সাথে idempotency হ্যান্ডেল করুন
ওয়েবহুক এবং ক্লায়েন্ট কল রিট্রায় করবে। একই কনভার্শন একাধিকবার পাওয়ার ক্ষমতা রাখুন যাতে ডাবল-কাউন্টিং না হয়।
idempotency keys ইমপ্লিমেন্ট করুন একটি স্থিতিশীল ইউনিক মান ব্যবহার করে, যেমন:
order_id(যদি গ্লোবালি ইউনিক হয় তবে সেরা)- অথবা
payment_provider_charge_id
কনভার্শন রেকর্ডে কী স্টোর করে একটি ইউনিক কনস্ট্রেইন্ট রাখুন। রিট্রিতে সফল রেসপন্স ফেরত দিন এবং দ্বিতীয় কনভার্শন সৃষ্টির আগে কিছুই করবেন না। এটি সবচেয়ে সাধারণ “ফ্যান্টম রেভেনিউ” পে-আউট বাগ প্রতিরোধ করে।
রেভেনিউ গণনা, রিকনসিলিয়েশন, এবং পে-আউট লজিক
এটাই সেই বিন্দু যেখানে ট্র্যাকিং টাকা-তে পরিণত হয়। আপনার অ্যাপকে একটি পরিষ্কার, অডিটেবল পথ দরকার একটি ট্র্যাক করা ইভেন্ট থেকে এমন একটি অ্যামাউন্টে যা আপনি দিতে পারবেন—সাথে সাথে ফাইনান্স কীভাবে রাজস্ব পরিমাপ করে তার সাথে মিল রেখে।
একটি মৌলিক end-to-end ফ্লো
একটি ব্যবহারিক লাইফসাইকেল দেখতে পারে:
- Click: আপনি পার্টনার + ক্লিক আইডি এবং যে কোনো ক্যাম্পেইন কনটেক্সট স্টোর করেন।
- Pending conversion: একটি কনভার্শন রেকর্ড করা হয়, ক্লিক/পার্টনারকে অ্যাট্রিবিউট করা হয়, কিন্তু এখনও চূড়ান্ত নয় (উদাহরণ: রিফান্ড উইন্ডোয়ের মধ্যে)।
- Approved conversion: ভ্যালিডেশন চেক এবং আপনার অনুমোদন নিয়মের পরে কনভার্শন “লক” হয়ে যায়।
- Payable revenue: অনুমোদিত কনভার্শনগুলো পে-আউট পিরিয়ডে রোল ইন করে এবং পেমেন্টের জন্য যোগ্য হয়।
প্রতিটি স্টেট পরিবর্তনের জন্য টাইমস্ট্যাম্প রাখুন যাতে আপনি ব্যাখ্যা করতে পারেন কখন এবং কেন একটি কনভার্শন পে-আউট-এ পরিণত হয়েছে।
রেভেনিউ ম্যাথ: গ্রস বনাম নিট, সাবস্ক্রিপশন, এবং অ্যাডজাস্টমেন্ট
আপনার সিস্টেমে “রেভেনিউ” কী বোঝায় তা নির্ধারণ করুন এবং স্পষ্টভাবে স্টোর করুন:
- Gross vs net: গ্রস হলো চার্জ করা পরিমাণ; নিট হলো ডিসকাউন্ট, ট্যাক্স, শিপিং, ফি ইত্যাদি বাদে পরিমাণ (প্রযোজ্য হলে কী প্রযোজ্য তা নির্বাচন করুন এবং ধারাবাহিক থাকুন)।
- রিফান্ড এবং চার্জব্যাক: এগুলোকে মূল কনভার্শনের সাথে টায়েড অ্যাডজাস্টমেন্ট হিসেবে মডেল করুন। যদি রিফান্ড অনুমোদনের পরে ঘটে, তখন পরবর্তী পে-আউট সাইকেলে নেগেটিভ লাইন আইটেম তৈরি করতে পারেন।
- সাবস্ক্রিপশন নবায়ন: প্রত্যেক নবায়নকে একটি নতুন কনভার্শন ইভেন্ট হিসেবে ট্রীট করুন যা মূল কাস্টমার ও পার্টনারের সাথে লিঙ্কড (যেখানে পলিসি অনুমোদন করে), অথবা অ্যাট্রিবিউশনকে একটি নির্দিষ্ট সময়সীমায় সীমাবদ্ধ করুন।
পে-আউট শিডিউল এবং থ্রেশহোল্ড (অপশনস)
কয়েকটি সাধারণ স্ট্রাকচার যা কঠোর নীতিতে হার্ডকোড না করে সাপোর্ট করা যায়:
- শিডিউলস: মাসিক, দ্বিসাপ্তাহিক, সাপ্তাহিক, বা রোলিং “অনুমোদনের N দিনের পরে”।
- থ্রেশহোল্ডস: মিনিমাম পে-আউট ব্যালেন্স (যেমন, পার্টনারটি একটি কনফিগারেবল পরিমাণ না পাওয়া পর্যন্ত পে-আউট না করা)।
- হোল্ড পিরিয়ডস: রিফান্ড রিস্ক কমানোর জন্য N দিন দেরি করে অনুমোদন।
ফাইনান্স এবং অডিটেবিলিটির জন্য এক্সপোর্ট
ফাইনান্স টিমকে এমন ডেটা দরকার যা তারা রিকনসাইল করতে পারে:
- CSV এক্সপোর্ট: কনভার্শন, অ্যাডজাস্টমেন্ট, এবং পে-আউট সামারি।
- API অ্যাক্সেস: একাউন্টিং সিস্টেমে পে-আউট ও লাইন আইটেম পুল করার জন্য।
- লেজার-স্টাইল রিপোর্ট: প্রতিটি আর্থিক ইভেন্টের জন্য একটি সারি (অ্যাপ্রুভাল, রিফান্ড, চার্জব্যাক, পে-আউট), ইমিউটেবল আইডি এবং সোর্স কনভার্শনের রেফারেন্সসহ।
পার্টনার পোর্টাল এবং অ্যাডমিন ড্যাশবোর্ড তৈরি করুন
একটি পার্টনার প্রোগ্রাম TRUST-এ বেঁচে থাকে বা মারা যায়। আপনার পোর্টালই সেই জায়গা যেখানে পার্টনাররা যাচাই করে ক্লিক কি কনভার্শনে পরিণত হয়েছে এবং কনভার্শন টাকা হয় কিনা। আপনার অ্যাডমিন ড্যাশবোর্ড হলো সেই জায়গা যেখানে আপনার দল প্রোগ্রামকে পরিষ্কার, প্রতিক্রিয়াশীল এবং ন্যায্য রাখে।
পার্টনার পোর্টালের অপরিহার্যতা
শুরুতে এমন কিছু স্ক্রিন দিয়ে শুরু করুন যা পার্টনাররা প্রতিদিন যে প্রশ্নগুলো করে সেগুলোর উত্তর দেয়:
- Get links: প্রতিটি পার্টনারকে তাদের রেফারেল লিংক(গুলি), সাপোর্টেড UTM টেমপ্লেট, এবং যেগুলো প্রয়োজনীয় প্যারামিটার দেখান। কপি করা সহজ করুন।
- Performance overview: সময়ের সাথে ক্লিক, কনভার্শন, এবং অ্যাট্রিবিউটেড রেভেনিউ চারটসহ একটি সহজ চার্ট, এবং টপ ক্যাম্পেইন।
- Conversion list: কনভার্শনগুলির একটি টেবিল স্ট্যাটাস এবং টাইমস্ট্যাম্প সহ যাতে পার্টনার অডিট করতে পারে।
- Payout status: আয়ের সারাংশ (pending, approved, paid), পে-আউট ইতিহাস, এবং পরবর্তী পে-আউট তারিখ।
কনভার্শন তালিকার জন্য, সেই কলামগুলো রাখুন যা সাপোর্ট টিকিট কমায়: কনভার্শন টাইম, অর্ডার ID (অথবা মাস্কড আইডি), অ্যাট্রিবিউটেড পরিমাণ, কমিশন রেট, স্ট্যাটাস (pending/approved/rejected/paid), এবং রিজেকশনের ক্ষেত্রে সংক্ষিপ্ত “কারণ” ফিল্ড।
এমন ফিল্টারগুলো যা সত্যিই গুরুত্বপূর্ণ
পার্টনার এবং অ্যাডমিন—দুজনেই দ্রুত ফলাফল স্লাইস করতে চান। অগ্রাধিকার দিন:
- ডেট রেঞ্জ (প্রিসেট যেমন গত 7/30/90 দিন)
- ক্যাম্পেইন (অথবা লিংক নাম)
- স্ট্যাটাস (pending/approved/rejected/paid)
- ডিভাইস (ডেক্সটপ/মোবাইল/ট্যাবলেট)
- দেশ/রিজিয়ন
আপনি যদি একাধিক প্রোডাক্ট বা প্ল্যান ট্র্যাক করেন, তবে পণ্য ফিল্টার যোগ করুন—কিন্তু কেবল বেসিকগুলো স্থিতিশীল হওয়ার পরে।
ইন্টারনাল অ্যাডমিন অপরিহার্যতা
অ্যাডমিন টুলিংটি গতি ও দায়বদ্ধতার উপর ফোকাস করা উচিত:
- পার্টনার ম্যানেজমেন্ট: পার্টনার তৈরি/এডিট, কমিশন টার্মস সেট করা, পে-আউট মেথড নিযুক্ত করা, এবং অ্যাক্টিভ স্ট্যাটাস টগল করা।
- অ্যাপ্রুভালস & ওভাররাইডস: কনভার্শনগুলো ব্যাচে অনুমোদন/বাতিল করা এবং সীমিত কন্ট্রোলের মাধ্যমে এজ-কেসে ওভাররাইড করার অনুমতি (উদাহরণ: মিসড ক্লিক আইডি-র ক্ষেত্রে সাপোর্টিং প্রমাণ)।
- নোটস এবং অডিট ট্রেইল: প্রতিটি ম্যানুয়াল পরিবর্তনকে কে, কখন, এবং কেন করেছে তা রেকর্ড করা উচিত।
ম্যানুয়াল কন্ট্রোলগুলো সীমিত রাখুন: আপনি চান অ্যাডমিনরা এক্সসেপ্টশনগুলি ঠিক করুক, ইতিহাস খসাতে না।
রোল-ভিত্তিক অ্যাক্সেস কন্ট্রোল (RBAC)
প্রথম দিন থেকেই RBAC প্রয়োগ করুন:
- পার্টনাররা কেবল তাদের নিজেস্ব লিংক, ক্লিক, কনভার্শন, এবং পে-আউট দেখতে পারবে।
- পার্টনার ম্যানেজাররা তাদের কাছে নিযুক্ত পার্টনারগুলো দেখতে ও অ্যাকশন নিতে পারবে (যদি আপনি রিজিয়ন/টিম অনুযায়ী সেগমেন্ট করেন)।
- ফাইনান্স/অ্যাডমিন পে-আউট এবং রিকনসিলিয়েশন ডিটেইল দেখতে পারবে।
API স্তরে পারমিশন চেক করে রক্ষা করুন (শুধুমাত্র UI নয়), এবং সেনসিটিভ ভিউ যেমন পে-আউট এক্সপোর্ট-এ অ্যাক্সেস লগ করুন।
আর্কিটেকচার এবং স্কেলিং বিবেচ্য বিষয়
পার্টনার রেভেনিউ অ্যাট্রিবিউশন অ্যাপ সাধারণত “write-heavy”: অনেক ক্লিক, অনেক কনভার্শন ইভেন্ট, এবং পর্যায়ক্রমে রিড-হেভি রিপোর্টিং। উচ্চ-ভলিউম ইনজেশন প্রথমে ডিজাইন করুন, তারপর অগ্রিগেশন দিয়ে রিপোর্টিং দ্রুত করুন।
একটি প্রাকটিক্যাল, ফ্লেক্সিবল স্ট্যাক
একটি কাজ করে এমন বেসলাইন হলো Postgres + একটি API + একটি আধুনিক ফ্রন্টএন্ড:
- Postgres ট্রানজ্যাকশনাল ট্রুথ (পার্টনার, নিয়ম, কনভার্শন, পে-আউট) এর জন্য।
- API সার্ভিস (Node/TypeScript, Python, Go—যেকোনো) যা ইভেন্ট ইনজেস্ট করে এবং রিপোর্টিং এন্ডপয়েন্ট এক্সপোজ করে।
- Frontend (Next.js/React, Vue ইত্যাদি) পার্টনার পোর্টাল এবং অ্যাডমিনের জন্য।
ট্র্যাকিং এন্ডপয়েন্টগুলো স্টেটলেস রাখুন যাতে আপনি লোড ব্যালান্সারের পিছনে হরিজন্টালি স্কেল করতে পারেন।
যদি আপনি স্পেস থেকে স্পিডে কাজ করতে চান, Koder.ai প্রোটোটাইপিং-এ সাহায্য করতে পারে—কিন্তু এটি কেবল একটি বিকল্প।
ব্যাকগ্রাউন্ড জবস (স্লো-পাথ) সম্পর্কে
রিকোয়েস্ট/রেসপন্স সাইকেলে ব্যয়বহুল কাজ করবেন না। একটি কিউ (SQS/RabbitMQ/Redis queues) এবং ওয়ার্কার ব্যবহার করুন:
- ওয়েবহুক ডেলিভারি এবং রিট্রায়
- রিকনসিলিয়েশন (ইমপোর্ট করা অর্ডার/রিফান্ডগুলিকে ট্র্যাকড কনভার্শনের সাথে মিলানো)
- রিপোর্ট জেনারেশন (ডেইলি রোলআপ, CSV এক্সপোর্ট, “গত 30 দিন” সামারি)
ওয়ার্কারগুলো idempotent হওয়া উচিত: যদি একটি জব দুইবার চালানো হয়, ফলাফল ঠিক থাকবে।
ক্লিকের জন্য ডেটা রিটেনশন এবং পার্টিশনিং
ক্লিক টেবিল দ্রুত বাড়ে। রিটেনশন আগে থেকেই পরিকল্পনা করুন:
- কাঁচা ক্লিকগুলো সংক্ষিপ্ত উইন্ডোর জন্য রাখুন (উদাহরণ: 30–90 দিন) যদি সেটাই বিতর্ক সমাধানের জন্য পর্যাপ্ত হয়।
- বেশি সময়ের বিশ্লেষণের জন্য অ্যাগ্রিগেটস (দৈনিক পার্টনার/ক্যাম্পেইন টোটাল) ধরে রাখুন।
Postgres-এ, ক্লিকগুলোর জন্য টাইম-ভিত্তিক পার্টিশনিং বিবেচনা করুন (উদাহরণ: মাসিক পার্টিশন) এবং (occurred_at, partner_id) এবং lookup কী click_id অনুযায়ী ইনডেক্স করুন। পার্টিশনিং ভ্যাকিউম/ইনডেক্স মেইনটেন্যান্স উন্নত করে এবং পুরোনো পার্টিশন ড্রপ করে রিটেনশন সহজ করে।
অবজারভেবিলিটি যা অ্যাট্রিবিউশন ব্রেক ধরবে
ট্র্যাকিং ফেলিয়র প্রায়ই নীরবভাবে ঘটে যদি না আপনি মাপেন। রাখুন:
- Event drop rate: প্রাপ্ত রিকোয়েস্ট বনাম পার্সিস্ট করা ইভেন্ট; % ভ্যালিডেশন দ্বারা প্রত্যাখ্যাত।
- Latency: ক্লিক ইনজেস্ট এবং কনভার্শন ইনজেস্ট এ p95/p99।
- Webhook failures: ফেলিয়ার রেট, রিট্রায়, ডেলিভারি সময়, এবং ডেড-লেটার ভলিউম।
কনসিস্টেন্ট করিলেশন আইডি (উদাহরণ: click_id/conversion_id) দিয়ে লগিং করুন যাতে সাপোর্ট একটি পার্টনারের দাবিকে end-to-end ট্রেস করতে পারে।
ফ্রড প্রতিরোধ এবং ডেটা কোয়ালিটি
ফ্রড কন্ট্রোল কেবল খারাপ অর্গানিজম ধরার জন্য নয়—এগুলি সৎ পার্টনারদের অপ্রয়োজনীয় ডেটা শোর থেকে underpaid হওয়া থেকে রক্ষা করে। ভাল পন্থা হল স্বয়ংক্রিয় সেফগার্ড (দ্রুত, ধারাবাহিক) এবং মানুষের রিভিউ (নমনীয়, প্রসঙ্গগত) মিশ্রণ।
প্রচলিত অ্যাবিউজ প্যাটার্নগুলো পরিকল্পনা করুন
সেলফ-রেফারেল তখন ঘটে যখন পার্টনারেরা তাদের নিজের ক্রয় বা সাইনআপে কমিশন পাওয়ার চেষ্টা করে (প্রায়শই পেমেন্ট ফিঙ্গারপ্রিন্ট, ইমেইল বা ডিভাইস সিগন্যাল দিয়ে শনাক্তযোগ্য)।
কুকি স্টাফিং এবং ক্লিক স্প্যাম ব্যবহার করে ইউজার ছাড়াই কনভার্শন দাবির চেষ্টা করা হয়—উদাহরণ: ইনভিজিবল আইফ্রেম, জোরপূর্বক রিডাইরেক্ট, বা অত্যন্ত উচ্চ ক্লিক ভলিউম সহ প্রায়-শূন্য এঙ্গেজমেন্ট।
ফেক লিডস হলো লো-কোয়ালিটি ফর্ম সাবমিশন যা CPA পে-আউট ট্রিগার করে। কুপন লিকেজ ঘটে যখন একটি প্রাইভেট কোড পাবলিকলি শেয়ার হয়।
প্রাথমিক প্রতিরোধ যা দ্রুত মূল্য দেয়
পার্টনার/IP/সেশন অনুযায়ী ক্লিক ও কনভার্শনের রেট লিমিট থেকে শুরু করুন। এটাকে বট ডিটেকশন সিগন্যালের সাথে জোড়া লাগান: ইউজার-এজেন্ট অস্বাভাবিকতা, JS এক্সিকিউশন সংকেত অনুপস্থিত, সন্দেহজনক ধারাবাহিক টাইমিং, ডেটা-সেন্টার IP, এবং পুনরাবৃত্ত ডিভাইস ফিঙ্গারপ্রিন্ট।
অ্যনোমালি অ্যালার্ট যোগ করুন। উন্নত ML না-থাকলেও সাধারণ থ্রেশহোল্ড (যেমন “কনভার্শন রেট সপ্তাহ-ওভার-সপ্তাহ 5× স্পাইক” বা “একই মেটাডেটার সঙ্গে অনেক কনভার্শন”) বেশিরভাগ ইস্যু ধরতে পারে। অ্যালার্টগুলোকে অ্যাডমিন ড্যাশবোর্ডের একটি ড্রিল-ডাউন ভিউতে লিংক করুন (উদাহরণ: /admin/partners/:id/attribution)।
ডেটা কোয়ালিটির জন্য ইনজেশনের সময় ইনপুট ভ্যালিডেট করুন। যেখানে প্রযোজ্য সেখানে ক্লিক ID বা সাইন করা পার্টনার টোকেন চাইুন, malformed UTM গুলো প্রত্যাখ্যান করুন, এবং দেশ/কারেন্সি ফিল্ড নর্মালাইজ করুন। অনেক তদন্তই ইনভcomplete লগ বা বিভ্রান্তিকর জয়েনের কারণে স্টল হয়ে যায়।
ম্যানুয়াল রিভিউ ওয়ার্কফ্লো
অপারেটরদের একটি পরিষ্কার কিউ দিন: ফ্ল্যাগ (কারণ + সিরিয়াসিটি), নোট, এবং সম্পর্কিত ক্লিক ও কনভার্শনের একটি টাইমলাইন।
কনভার্শন হোল্ডস (“pending”) সাপোর্ট করুন যাতে সন্দেহজনক ইভেন্টগুলো সাথে সাথে পে-আউটে ঢোকে না। পার্টনার ওয়ার্নিং এবং এসক্যালেশন (অস্থায়ী পে-আউট দেরি, ট্রাফিক রেসট্রিকশন, বা প্রোগ্রাম থেকে অপসারণ) বাস্তবায়ন করুন, এবং টেমপ্লেট ব্যবহার করে অ্যাকশনগুলো ধারাবাহিক করুন।
বিশ্বাস ও অনুবর্তিতার জন্য অডিট ট্রেইল
ইমিউটেবল অডিট ট্রেইল রাখুন:
- অ্যাট্রিবিউশন নিয়ম পরিবর্তন (কি পরিবর্তিত হলো, কে পরিবর্তন করলো, কখন)
- পে-আউট অ্যাডজাস্টমেন্ট এবং রিভার্সাল (সহ justification)
- ওভাররাইডস (ম্যানুয়াল রি-অ্যাট্রিবিউশন বা এক্সসেপশন হ্যান্ডলিং)
এটি পার্টনার বিতর্ক, ফাইনান্স রিকনসিলিয়েশন, এবং অভ্যন্তরীণ দায়বদ্ধতার জন্য অপরিহার্য—বিশেষত যখন একাধিক ব্যক্তি নিয়ম ও পে-আউট পরিবর্তন করতে পারেন।
প্রাইভেসি, সিকিউরিটি, এবং কমপ্লায়েন্স বেসিকস
পার্টনার রেভেনিউ অ্যাট্রিবিউশন ট্র্যাকিং, আইডেন্টিটি, এবং পেমেন্ট—এই তিনটি ক্ষেত্র স্পর্শ করে—যেখানে ছোট ভুল বড় ঝুঁকি সৃষ্টি করতে পারে। লক্ষ্য হল রেফারেল পরিমাপ ও পে-আউট গণনা করা এমনভাবে যাতে অপরিহার্য ব্যক্তিগত ডেটা যতটা সম্ভব কম সংগ্রহ করা হয় এবং যা রাখা হয় তা সুরক্ষিত থাকে।
আপনি আসলে কোন ডেটা লাগবে (এবং কোনটা লাগবে না)
অ্যাট্রিবিউট করতে এবং রিকনসাইল করতে ন্যূনতম ডেটাসেট থেকে শুরু করুন:
- পার্টনার আইডেন্টিফায়ারস:
partner_id,campaign_id, এবং অনুরূপ জেনারেট করাclick_id। - ইভেন্ট টাইমস্ট্যাম্প:
click_timeএবংconversion_time। - অ্যাট্রিবিউশন কনটেক্সট: ল্যান্ডিং পেজ, রেফারার ডোমেন (পাথ/কোয়েরি ট্রাঙ্কেট বিবেচনা করুন), UTM ফিল্ড, এবং ডিভাইস টাইপ (ঐচ্ছিক)।
- অর্ডার ফ্যাক্টস:
order_id(বা internal transaction_id), কারেন্সি, নিট রেভেনিউ, এবং রিফান্ড স্ট্যাটাস।
অপ্রয়োজনীয় ডেটা সংগ্রহ থেকে বিরত থাকুন:
- যদি সম্ভব হয় পুরো IP ঠিকানা সংরক্ষণ করবেন না—কোনো কোর্স সিগন্যাল (উদাহরণ: দেশ) ব্যবহার করুন বা IP হ্যাশ করুন (রোটেশনসহ) ফ্রড অ্যানালাইসিসের জন্য।
- কাঁচা ইউজার আইডেন্টিফায়ার (ইমেল/ফোন) স্টোর করবেন না যদি আপনার প্রোডাক্ট সেটি স্পষ্টভাবে না চায়।
- ব্যক্তিগত শনাক্তকারী আইডির বদলে প্সিউডোনিমাস আইডি (click_id, internal customer_id) পছন্দ করুন।
কনসেন্ট এবং ট্র্যাকিং বিবেচ্য বিষয়
যদি আপনি কুকি বা অনুরূপ আইডেন্টিফায়ার ব্যবহার করেন, অঞ্চলের ওপর নির্ভর করে কনসেন্ট প্রয়োজন হতে পারে।
- কুকি ব্যানার/কনসেন্ট ম্যানেজমেন্ট: যদি আপনি অ্যাট্রিবিউশনের জন্য নন-এনসেসারি কুকি সেট করেন, একটি কনসেন্ট মেকানিজম ইন্টিগ্রেট করুন এবং ইউজারের পছন্দ রেসপেক্ট করুন।
- অপ্ট-আউট: একটি পরিষ্কার অপ্ট-আউট পথ দিন এবং নিশ্চিত করুন যে অপ্ট-আউটের পরে আপনার ট্র্যাকিং বন্ধ হয় (বা কেবল ন্যায্য-প্রয়োজনীয় সিগন্যাল ব্যবহার করে)।
- ক্ষেত্রবিশেষের প্রয়োজনীয়তা: GDPR/UK GDPR (লৌফুল বেস, ট্রান্সপারেন্সি, ডেটা মিনিমাইজেশন), ePrivacy (কুকি কনসেন্ট), এবং CCPA/CPRA (নোটিশ, রাইটস, “Do Not Sell/Share” যেখানে প্রযোজ্য)।
একটি ব্যবহারিক পন্থা হলো পার্টনারদের জন্য সার্ভার-সাইড ট্র্যাকিং (পোস্টব্যাক) সাপোর্ট করা এবং কেবল যেখানে অনুমোদিত ও প্রয়োজন সেখানে ক্লায়েন্ট-সাইড কুকি ব্যবহার করা।
সুরক্ষিত স্টোরেজ এবং অ্যাক্সেস
অ্যাট্রিবিউশন ও পে-আউট ডেটাকে সংবেদনশীল ব্যবসায়িক ডেটা হিসেবে বিবেচনা করে স্ট্যান্ডার্ড কন্ট্রোল প্রয়োগ করুন:
- ট্রান্সিটে এনক্রিপশন (TLS সব জায়গায়) এবং রেস্টে এনক্রিপশন ডাটাবেস ও অবজেক্ট স্টোরেজের জন্য।
- সিক্রেটস ম্যানেজমেন্ট: API কী, ওয়েবহুক সিক্রেট, DB ক্রেডেনশিয়াল ম্যানেজড সিক্রেট ভল্টে রাখুন; নিয়মিত রোটেট করুন।
- লিস্ট-প্রিভিলেজ অ্যাক্সেস: অ্যাডমিন, ফাইনান্স, সাপোর্ট, এবং পার্টনারের জন্য পৃথক রোলে বিভক্ত করুন; DB অ্যাক্সেস সীমাবদ্ধ ও স্কোপড টোকেন ব্যবহার করুন।
ডেটা রিটেনশনও বিবেচনা করুন: রিকনসিলিয়েশন ও বিতর্কের জন্য কাঁচা ইভেন্ট-লেভেল রেকর্ড যতটুকু প্রয়োজন ততদিন রাখুন, পরে অ্যাগ্রিগেট বা মুছে ফেলুন।
লগ হাইজিন (ইউজার এবং আপনার ব্যবসা সুরক্ষিত রাখুন)
লগিং প্রায়শই দুর্ঘটনাক্রমে ডেটা লিকের উৎস হয়ে যায়। লগিং নিয়ম স্পষ্ট করুন:
- কখনই কাঁচা পেমেন্ট ডিটেইল (কার্ড নাম্বার, ব্যাংক ডিটেইল), ফুল বিলিং অ্যাড্রেস, বা ফুল অথেনটিকেশন টোকেন লগ করবেন না।
- সেনসিটিভ কুয়েরি প্যারামিটার (যেমন ব্যক্তিগত কুজন, সেশন টোকেন) রিড্যাক্ট করুন।
- অভ্যন্তরীণ আইডি (order_id, click_id) লগ করতে পছন্দ করুন এবং কোনও সেনসিটিভ পে-লোড সিকিউর স্টোরেজে রাখুন, নয়তো প্লেইনটেক্সট লগে নয়।
একটি স্পষ্ট প্রাইভেসি নোটিশ প্রকাশ করুন এবং আপনার ডেটা ফ্লো ডকুমেন্ট করুন। যখন পার্টনাররা জিজ্ঞেস করবে ট্র্যাকিং কীভাবে কাজ করে, আপনি সহজে এবং নিরাপদে ব্যাখ্যা করতে পারবেন।
টেস্টিং, লঞ্চ, এবং ইটারেশন প্ল্যান
একটি পার্টনার অ্যাট্রিবিউশন সিস্টেম তখনই ব্যবহারযোগ্য যখন পার্টনাররা তাতে বিশ্বাস করে এবং ফাইনান্স রিকনসাইল করতে পারে। টেস্টিং এবং লঞ্চকে প্রোডাক্ট হিসেবে আচরণ করুন: আপনি ব্যবসায়িক নিয়ম, ডেটা ইন্টিগ্রিটি, এবং অপারেশনাল ওয়ার্কফ্লো যাচাই করছেন—শুধু কোড নয়।
টেস্টিং চেকলিস্ট (কি অটোমেট করবেন)
কিছু “গোল্ডেন” সিনারিও দিয়ে শুরু করুন যা আপনি end-to-end রেপ্লে করতে পারবেন:
- অ্যাট্রিবিউশন নিয়মের ইউনিট টেস্ট: last/first touch সিলেকশন, লুকব্যাক উইন্ডোজ, কুপন বনাম ক্লিক প্রিসিডেন্স, পার্টনার যোগ্যতা, এবং এজ-কেস যেমন মিসিং ক্লিক ID বা একাধিক ক্লিক।
- ওয়েবহুক রেপ্লে টেস্ট: Stripe, Shopify, বা ইনটারনাল বিলিং থেকে আসা রিয়েল পেয়লোড ক্যাপচার করে CI-তে রেপ্লে করুন idempotency, সিগনেচার ভ্যালিডেশন, এবং সঠিক মেপিং ভেরিফাই করতে।
- টাইম এবং কারেন্সি টেস্ট: টাইমজোন বাউন্ডারি (মিডনাইট, DST), রাউন্ডিং রুল, রিফান্ড/চার্জব্যাক, এবং মাল্টি-কারেন্সি কনভার্শন।
- ডেটা ইন্টিগ্রিটি টেস্ট: ইউনিকনেস কনস্ট্রেইন্ট (conversion_id), নেগেটিভ পে-আউট নেই, এবং “অ্যাট্রিবিউটেড রেভেনিউ” বনাম “পে-আউট বেস” এর মধ্যে সামঞ্জস্য।
নিয়ম বা সোর্স পরিবর্তনের সময় ব্যাকফিল স্ট্র্যাটেজি
অ্যাট্রিবিউশন নিয়ম পরিবর্তন করলে ঐতিহাসিক সংখ্যাগুলো পরিবর্তিত হবে—এটার জন্য পরিকল্পনা করুন। কাঁচা ইভেন্টগুলো (ক্লিক, কনভার্শন, রিফান্ড) ইমিউটেবল রাখুন, তারপর ভার্সন করা টেবিলে পুনরায় কম্পিউট করুন (উদাহরণ: attribution_results_v1, v2)। বড় ইতিহাসের ক্ষেত্রে, ব্যাচে (দিন/সপ্তাহ অনুযায়ী) ব্যাকফিল করুন এবং একটি ড্রাই-রান মোড রাখুন যা ফাইনান্স রিভিউয়ের জন্য ডিফ রিপোর্ট তৈরি করে।
লঞ্চ প্ল্যান
একটি ছোট গ্রুপ পার্টনার (5–10) দিয়ে পাইলট করুন। পাইলটে:
- পার্টনার রিপোর্ট এবং ফাইনান্স রেকর্ড (অর্ডার, রিফান্ড, নিট রেভেনিউ, পে-আউট অমাউন্ট) সাপ্তাহিকভাবে তুলনা করুন।
- পাইলট পিরিয়ডে নিয়ম ফ্রিজ করুন; অ্যানোমালি লগ করুন, নীরবে “টিক” ঠিক করবেন না।
- পার্টনারদের কাছ থেকে ব্যাখ্যাযোগ্যতা নিয়ে ফিডব্যাক নিন: কী অ্যাট্রিবিউট করা হলো, কেন, এবং কী বাদ পড়লো।
আস্থা ভাঙা ছাড়া ইটারেট করুন
ফিচার ফ্ল্যাগের পেছনে পরিবর্তন প্রকাশ করুন, পোর্টালে নিয়ম ভার্সনিং ডকুমেন্ট করুন, এবং যে কোনো পরিবর্তন যা আয়ে প্রভাব ফেলতে পারে সেগুলো ঘোষণা করুন।
অপাচরণally, রিপোর্টিং ও পে-আউট লজিকে দ্রুত রোলব্যাক থাকা সহায়ক। যদি আপনি দ্রুত বানাতে চান (উদাহরণ: Koder.ai ব্যবহার করে), স্ন্যাপশট এবং রোলব্যাক সুবিধা_rule code এবং ড্যাশবোর্ড পরিবর্তনগুলো নিরাপদে ইটারেট করতে সাহায্য করে যখন একটি known-good সংস্করণ প্রস্তুত থাকে।
যদি আপনি প্যাকেজিং ও অনবোর্ডিং পরে এক্সপ্লোর করতে চান, দেখুন /pricing, অথবা সম্পর্কিত গাইডগুলি ব্রাউজ করুন /blog।
সাধারণ প্রশ্ন
প্রায়োগিকভাবে পার্টনার রেভেনিউ অ্যাট্রিবিউশন কী?
পার্টনার রেভেনিউ অ্যাট্রিবিউশন হলো নিয়ম ও ডেটার সেট যা নির্ধারণ করে কোন পার্টনার কোন রাজস্ব ইভেন্টের জন্য ক্রেডিট পাবে (আর কতটুকু), ক্লিক আইডি, কুপন কোড এবং টাইমিং উইন্ডোর মতো প্রমাণের ভিত্তিতে।
একটি কার্যকর সংজ্ঞায় অন্তর্ভুক্ত করা উচিত:
- কী অ্যাট্রিবিউট করা হচ্ছে (প্রথম অর্ডার, নিট রেভেনিউ, নবায়ন ইত্যাদি)
- কারা ক্রেডিট পাবে (অ্যাফিলিয়েট, এজেন্সি, রিসেলার)
- কী নিয়মে (উদাহরণ: ৩০ দিনের মধ্যে লাস্ট-ক্লিক, কুপন অগ্রাধিকার ইত্যাদি)
প্রথম সংস্করণের জন্য কিভাবে একটি অ্যাট্রিবিউশন মডেল নির্বাচন করব?
একটি এক-পংক্তির নীতি লিখে শুরু করুন, তারপর ব্যতিক্রমগুলো তালিকাভুক্ত করুন।
একটি সলিড V1 নীতির উদাহরণ:
- ডিফল্ট মডেল: লাস্ট-ক্লিক
- উইন্ডো: ৩০ দিন
- প্রমাণ: রিডাইরেক্টের মাধ্যমে ক্যাপচার করা
click_idএবং সার্ভার-সাইডে অর্ডারের সাথে সংযুক্ত করা
তারপর কুপন অগ্রাধিকার, নবায়ন, এবং কিভাবে ডিরেক্ট ট্রাফিক পরিচালিত হবে—এসব ব্যতিক্রম নথিভুক্ত করুন।
পে-আউটকে নির্ভরযোগ্য করতে প্রথমে কোন ইভেন্টগুলো ক্যাপচার করা উচিত?
কমপক্ষে এগুলো ট্র্যাক করুন:
- Click (আপনার রিডাইরেক্ট এন্ডপয়েন্টে তৈরি)
- Conversion (সাইনআপ/ক্রয়/নবায়ন; আদর্শভাবে সার্ভার-সাইডে রেকর্ড করা)
- Refund/chargeback (একটি অ্যাডজাস্টমেন্ট হিসেবে)
এই তিনটি থাকলেই আপনি ট্র্যাফিক → রেভেনিউ → রিভার্সাল পর্যন্ত সংযুক্ত করার জন্য যথেষ্ট ভিত্তি পাবেন।
পার্টনার লিংক এবং ক্লিক ট্র্যাকিং বাস্তবায়নের সবচেয়ে নিরাপদ উপায় কী?
একটি রিডাইরেক্ট এন্ডপয়েন্ট ব্যবহার করুন (উদাহরণ: /r/{partner_id}) যা:
- পার্টনার/ক্যাম্পেইন প্যারামিটার ভ্যালিডেট করে
- একটি সার্ভার-জারি
click_idজেনারেট করে - সার্ভার-সাইডে একটি ক্লিক রো পার্সিস্ট করে
- প্রথম-পার্টি কুকি (এবং অপশনালি localStorage) সেট করে
- চূড়ান্ত ল্যান্ডিং পেজে রিডাইরেক্ট করে
এটি পার্টনারদের কাছে click_id স্পুফিং থামায় এবং ট্র্যাকিং কনসিস্টেন্ট করে।
কিভাবে কনভার্শনগুলো নির্ভরযোগ্যভাবে ক্লিকের সাথে যুক্ত করব?
আপনার ব্যাকএন্ড অর্ডার ক্রিয়েশনকে ক্যানোনিক্যাল কনভার্শন সোর্স হিসাবেই ব্যবহার করুন।
প্রায়োগিকভাবে:
- কুকি/সেশন/সাইন করা টোকেন থেকে ক্লিক কনটেক্সট পড়ুন
- ক্রিয়েশন সময়
click_id(অথবা অ্যাট্রিবিউশন টোকেন) অর্ডারের সাথে সংযুক্ত করুন - পেমেন্ট ওয়েবহুকগুলোকে স্ট্যাটাস আপডেট (paid/refunded) হিসেবে ব্যবহার করুন, একমাত্র সোর্স হিসেবে নয়
এতে ডাবল-ফায়ার কমে যায় এবং ফাইনান্স রিকনসিলিয়েশন অনেক সহজ হয়।
ওয়েবহুক এবং রিট্রায়ের কারণে কনভার্শন ডাবল-কাউন্টিং কীভাবে প্রতিরোধ করব?
রিট্রায়েড রিকয়েস্টগুলো ডুপ্লিকেট কনভার্শন তৈরি না করায় নিশ্চিত করতে idempotency keys ব্যবহার করুন।
সাধারণ কীগুলো:
order_id(যদি গ্লোবালি ইউনিক হয় তবে সেরা)payment_provider_charge_id
ডাটাবেজে ইউনিক কনস্ট্রেইন্ট আরোপ করুন। রিট্রিতে একই কী এলে সাফল্য ফেরত দিন এবং দ্বিতীয় কনভার্শন বা কমিশন লাইন আইটেম তৈরি করবেন না।
অ্যাট্রিবিউশন ডেটা মডেলের কোর সত্তাগুলো কোনগুলো থাকা উচিত?
আপনি এমন একটি চেইন লক্ষ্য করুন যা শেষ পর্যন্ত প্রমাণযোগ্য:
partner_id → link_id → click_id → visitor_id → conversion_id → order_id → payout_id
ওভরভিউ হিসেবে:
- অভ্যন্তরীণ ও বাহ্যিক উভয় আইডি (যেমন
shopify_order_id) সংরক্ষণ করুন - টাইমস্ট্যাম্পসমূহ (
created_at,ingested_at) রাখুন যাতে ডিসপিউট ট্রেস করা যায়
এমন কোর সত্তাগুলো আপনার সিস্টেমে থাকা উচিত যাতে রিকনসিলিয়েশন সম্ভব হয়।
রিফান্ড, চার্জব্যাক, এবং গ্রস বনাম নিট রেভেনিউ কিভাবে হ্যান্ডল করব?
টাকা নিয়ে কাজ করার সময় ইতিহাস ও বৈধ রিভার্সাল মডেল করা গুরুত্বপূর্ণ:
- অ্যামাউন্টগুলো মিনর ইউনিটে (সেন্ট) স্টোর করুন এবং
currency_codeরাখুন - কমিশন কি গ্রস না নিট—এটি নির্দিষ্ট করুন এবং ধারাবাহিক থাকুন
- রিফান্ড/চার্জব্যাকগুলোকে অ্যাডজাস্টমেন্ট রো হিসেবে মডেল করুন, মূল অর্ডার এডিট না করে
এইভাবে ইতিহাস অট-ডকুমেন্টেড থাকবে এবং প্রয়োজনে পরবর্তী পে-আউটে নেগেটিভ লাইন আইটেম তৈরি করা যাবে।
প্রথম দিন পার্টনার পোর্টালে কী থাকা উচিত?
দিন ০ তে এমন কিছু স্ক্রিন দিয়ে শুরু করুন যা সাপোর্ট টিকিট কমায়:
- লিংক জেনারেটর (কপি/পেস্ট রেডি)
- পারফরম্যান্স ওভারভিউ (ক্লিক, কনভার্সন, অ্যাট্রিবিউটেড রেভেনিউ)
- কনভার্সন তালিকা যার সঙ্গে স্ট্যাটাস (pending/approved/paid) এবং রিজেকশনের সংক্ষিপ্ত কারণ থাকবে
- পে-আউট সামারি এবং পে-আউট হিস্ট্রি
প্রতিটি কনভার্শনকে প্রমাণসহ ব্যাখ্যা করার মতো ফিল্ড রাখুন: ক্লিক টাইম, অর্ডার আইডি (মাস্কড), প্রয়োগকৃত নিয়ম ইত্যাদি।
অ্যাট্রিবিউশন সিস্টেমের জন্য সবচেয়ে গুরুত্বপূর্ণ ফ্রড ও প্রাইভেসি বেসিকগুলো কী?
হালকা কিন্তু সুনির্দিষ্ট প্রতিরোধগুলো ব্যবহার করুন:
- পার্টনার/IP/সেশন অনুযায়ী রেট লিমিট
- বট ও অ্যনোমালি সিগন্যাল (কনভার্সন স্পাইক, কম এঙ্গেজমেন্টে উচ্চ ক্লিক)
- কনভার্সনগুলো pending রাখা যাতে সন্দেহজনক ইভেন্টগুলি সরাসরি পে-আউটে না যায়
- নিয়ম পরিবর্তন, ওভাররাইড ও পে-আউট অ্যাডজাস্টমেন্টের ইমিউটেবল অডিট ট্রেইল
গোপনীয়তার জন্য: মিনিমাম ডেটা রাখুন (প্সিউডোনিমাস আইডি ব্যবহার করুন), সম্ভব হলে সংবেদনশীল সিগন্যাল হ্যাশ করে রাখুন, এবং সিক্রেট বা পেমেন্ট ডেটা লগিং এড়ান।