PostHog প্রোডাক্ট অ্যানালিটিক্স কুকি সম্মতি ইন্টিগ্রেশন গাইড: ২০২৬ সালের জন্য সেলফ-হোস্টেড ও ক্লাউড ডিপ্লয়মেন্ট প্লেবুক
PostHog হল প্রোডাক্ট অ্যানালিটিক্স প্ল্যাটফর্ম যেখানে ইঞ্জিনিয়ারিং দলগুলি যায় যখন তারা পাঁচটি ভেন্ডরকে একসাথে জুড়ে দেওয়ার পরিবর্তে একটি একক স্ট্যাকে প্রোডাক্ট অ্যানালিটিক্স, সেশন রিপ্লে, ফিচার ফ্ল্যাগ, এক্সপেরিমেন্টেশন, সার্ভে এবং ওয়েব অ্যানালিটিক্স চায়। সেই বান্ডলিংই মূল্যের প্রস্তাব। এটিই কারণ যে একটি ডিফল্ট PostHog ডিপ্লয়মেন্ট একজন পাবলিশার ইনস্টল করবে এমন অন্য যেকোনো টুলের তুলনায় বেশি কেন্দ্রীভূত সম্মতির বাধ্যবাধকতা বহন করে। একই posthog.init() কল যা প্রোডাক্ট ইভেন্ট ক্যাপচার করে সেশন রেকর্ডিং শুরু করতে পারে, একটি স্থায়ী আইডেন্টিফায়ারের বিপরীতে ফিচার ফ্ল্যাগ মূল্যায়ন করতে পারে এবং সার্ভে ইম্প্রেশন কিউ করতে পারে — এবং এই ক্রিয়াকলাপগুলির প্রতিটি GDPR, ePrivacy এবং CCPA-এর অধীনে একটি ভিন্ন আইনি ভিত্তি প্রবর্তন করে। সুখবর হল যে PostHog অ্যানালিটিক্স ইকোসিস্টেমের সবচেয়ে গ্র্যানুলার সম্মতি API-গুলির মধ্যে একটি নিয়ে আসে; কাজটি হল এটি আসলে ব্যবহার করা। এই গাইডটি ব্যাখ্যা করে যে কীভাবে PostHog ডিপ্লয় করতে হবে যাতে আইনি অবস্থান সেলফ-হোস্টেড ইনস্টলেশন এবং PostHog Cloud জুড়ে, US এবং EU অঞ্চল জুড়ে এবং অ্যানালিটিক্স, রিপ্লে, ফ্ল্যাগ এবং সার্ভেগুলির সম্পূর্ণ সারফেস জুড়ে প্রযুক্তিগত বাস্তবতার সাথে মেলে।
কেন PostHog সম্মতি প্রয়োজন — এবং কেন উত্তর প্রতিটি মডিউলের জন্য একই নয়
PostHog-এর ওয়েব SDK একটি নিষ্ক্রিয় পেজ ট্যাগ নয়। একটি ডিফল্ট ইনিশিয়ালাইজেশনে SDK এক বা একাধিক পার্সিস্টেন্স এন্ট্রি সেট করে — ডিফল্টরূপে ph_{projectKey}_posthog-এর অধীনে কী করা একটি কম্বাইন্ড কুকি প্লাস localStorage স্কিম — একটি স্থিতিশীল ডিস্টিনক্ট আইডেন্টিফায়ার তৈরি করে, রেফারার, UTM প্যারামিটার এবং ক্লিক আইডেন্টিফায়ার সহ প্রাথমিক পেজভিউ ক্যাপচার করে এবং কনফিগার করা ইনজেস্ট হোস্টের কাছে একটি দীর্ঘমেয়াদী ইভেন্ট চ্যানেল খোলে। যদি সেশন রিপ্লে প্রজেক্ট স্তরে সক্ষম হয়, SDK অতিরিক্তভাবে রেন্ডার করা DOM, মাউস কোঅর্ডিনেট এবং ইনপুট ইভেন্টগুলির একটি ক্রমাগত রেকর্ড স্ট্রিম করা শুরু করে। যদি ফিচার ফ্ল্যাগ কনফিগার করা হয়, SDK সেগুলিকে ডিস্টিনক্ট আইডেন্টিফায়ারের বিপরীতে মূল্যায়ন করে, সেশনের জন্য সিদ্ধান্তগুলি সংরক্ষণ করে এবং প্রতিটি মূল্যায়নের জন্য একটি $feature_flag_called ইভেন্ট নির্গত করে।
এই ক্রিয়াকলাপগুলির প্রতিটি একটি ভিন্ন সম্মতি গেটে ম্যাপ করে। একটি ডিস্টিনক্ট আইডেন্টিফায়ার বজায় রাখা ePrivacy নির্দেশিকার Article 5(3)-এর অধীনে একটি স্টোরেজ-এন্ড-অ্যাক্সেস অপারেশন এবং EEA, UK এবং একই মান আমদানি করা যেকোনো জুরিসডিকশন জুড়ে পূর্বের, অবাধে প্রদত্ত, নির্দিষ্ট, অবহিত এবং দ্ব্যর্থহীন সম্মতি প্রয়োজন। আচরণগত ইভেন্ট ক্যাপচার করা GDPR-এর অধীনে ব্যক্তিগত ডেটার প্রক্রিয়াকরণ কারণ আইডেন্টিফায়ার, IP ঠিকানা এবং আচরণগত ট্রেসের সমন্বয় একটি ব্যক্তিকে আলাদা করার জন্য যথেষ্ট। সেশন রিপ্লে EDPB-এর সেশন-রিপ্লে গাইডেন্সের অধীনে একটি পৃথক, কঠোর বিভাগে বসে — রিপ্লে রেন্ডার করা DOM এবং যেকোনো আনমাস্কড ইনপুট ফিল্ড ক্যাপচার করে এবং জেনেরিক অ্যানালিটিক্স সম্মতি থেকে আলাদা স্পষ্ট, গ্র্যানুলার সম্মতি প্রয়োজন। ফিচার ফ্ল্যাগ মূল্যায়ন হল সূক্ষ্ম বিষয়টি: একটি ফ্ল্যাগ চেক যা একটি বুলিয়ান ফেরত দেয় তার জন্য নিজেই সম্মতির প্রয়োজন হয় না, কিন্তু সেশন জুড়ে একটি স্থিতিশীল আইডেন্টিফায়ারে ব্যবহারকারীর ফ্ল্যাগ অ্যাসাইনমেন্ট বজায় রাখতে প্রয়োজন, কারণ তখনই ফ্ল্যাগ-ভিত্তিক এক্সপেরিমেন্টেশন ট্রেসযোগ্য ব্যবহারকারী-স্তরের ডেটা তৈরি করে।
সম্মতির আগে PostHog কী লেখে — এবং কী দমন করতে হবে
ডিফল্ট PostHog Browser SDK ইনিশিয়ালাইজেশনে নিম্নলিখিতটি লেখে: ডিস্টিনক্ট আইডেন্টিফায়ার, সেশন আইডেন্টিফায়ার এবং ফিচার-ফ্ল্যাগ সিদ্ধান্ত ধারণকারী ph_{projectKey}_posthog-এর অধীনে একটি কম্বাইন্ড কুকি এবং localStorage এন্ট্রি, এছাড়া সেশন রিপ্লে সক্ষম হলে প্রতি কয়েক সেকেন্দে ইনজেস্ট এন্ডপয়েন্টে ফ্লাশ হওয়া একটি অতিরিক্ত ইন-মেমোরি রেকর্ডিং বাফার। SDK এছাড়াও একটি তাৎক্ষণিক $pageview ইভেন্ট পাঠায় এবং অটোক্যাপচার চালু থাকলে প্রতিটি পরবর্তী ক্লিক, ফর্ম ইন্টারঅ্যাকশন এবং পেজে রেজ-ক্লিক করে।
প্রস্তাবিত প্যাটার্ন হল opt_out_capturing_by_default: true এবং disable_session_recording: true দিয়ে PostHog ইনিশিয়ালাইজ করা, তারপর সম্মতি ব্যানার একটি ইতিবাচক সংকেত ফেরত দিলে উভয় ফ্ল্যাগ ফ্লিপ করা। এটি হল ইন্টিগ্রেশন অবস্থান যা PostHog ডকুমেন্টেশন এখন সুপারিশ করে, এবং এটি একটি নিয়ন্ত্রকের পর্যালোচনায় টিকে থাকে কারণ এটি ডিফল্ট উল্টে দেয়: সম্মতি রেকর্ড না হওয়া পর্যন্ত কিছু ক্যাপচার হয় না, এবং SDK একটি স্টেটফুল রেট্রোফিটের পরিবর্তে একটি পরিষ্কার ট্রানজিশন সরবরাহ করে।
PostHog যে কুকি, localStorage এন্ট্রি এবং আইডেন্টিফায়ার বজায় রাখে
Browser SDK 1.x ডিফল্টরূপে 365 দিনের মেয়াদ শেষ হওয়ার তারিখ সহ ph_{projectKey}_posthog-এর অধীনে কী করা প্রতি প্রজেক্টে একটি পার্সিস্টেন্স এন্ট্রি লেখে। persistence ইনিট অপশন অন্তর্নিহিত মেকানিজম নিয়ন্ত্রণ করে: শুধুমাত্র cookie, শুধুমাত্র localStorage, localStorage+cookie (ডিফল্ট), sessionStorage বা memory। একটি সম্মতি-প্রথম ডিপ্লয়মেন্টের জন্য, সম্মতি এখনও দেওয়া না হলে memory পার্সিস্টেন্স হল সঠিক ডিফল্ট — এটি নিশ্চিত করে যে কোনো আইডেন্টিফায়ার পেজ সেশনের বাইরে বাঁচে না — সম্মতি ফ্লিপ হলে localStorage+cookie-তে ট্রানজিশন সহ। SDK __ph_opt_in_out_{projectKey}-এর অধীনে একটি অপ্ট-ইন বা অপ্ট-আউট মার্কারও লেখে যাতে ভিজিট জুড়ে ব্যবহারকারীর পছন্দ মনে রাখা যায়; সেই মার্কার নিজেই একটি কঠোরভাবে প্রয়োজনীয় কুকি কারণ এটি একটি সম্মতির সিদ্ধান্ত বজায় রাখে।
PostHog মডিউলগুলিকে সম্মতি ফ্রেমওয়ার্কে ম্যাপ করা
PostHog নেটিভলি IAB TCF বা IAB Global Privacy Platform ইমপ্লিমেন্ট করে না এবং এটি একটি অ্যাড-টেক ভেন্ডর হিসাবে তৈরি নয়। তবে এটি পাবলিশার-সাইড ব্রিজিংয়ের মাধ্যমে Google Consent Mode v2-এর সাথে ইন্টিগ্রেট করে, একটি নেটিভ অপ্ট-ইন এবং অপ্ট-আউট API প্রকাশ করে এবং respect_dnt ইনিট অপশনের মাধ্যমে Do Not Track হেডার সম্মান করে। প্রোডাকশনে যে প্যাটার্নটি কাজ করে তা প্রতিটি PostHog মডিউলকে একটি নির্দিষ্ট CMP সংকেতের সাথে আবদ্ধ একটি পৃথক গেট হিসাবে বিবেচনা করে।
- প্রোডাক্ট অ্যানালিটিক্স ইভেন্ট অ্যানালিটিক্স উদ্দেশ্যের সাথে আবদ্ধ। TCF পরিপ্রেক্ষিতে এটি সবচেয়ে সাধারণত উদ্দেশ্য 1 (তথ্য সংরক্ষণ এবং/বা অ্যাক্সেস) এর সাথে মিলিত উদ্দেশ্য 8 (কন্টেন্ট পারফরম্যান্স পরিমাপ)। Consent Mode-এর জন্য এটি analytics_storage-এ ম্যাপ করে।
- সেশন রিপ্লে একটি কঠোর গেটের পিছনে বসে। PostHog-এর সেশন রিপ্লে রেন্ডার করা DOM এবং যেকোনো আনমাস্কড ইনপুট ফিল্ড ক্যাপচার করে, তাই EDPB-এর গাইডেন্সের অধীনে অ্যানালিটিক্স থেকে আলাদা একটি প্রেফারেন্স-স্তর বা গবেষণা-স্তরের অপ্ট-ইন হল রক্ষণযোগ্য অবস্থান।
- ফিচার ফ্ল্যাগ এবং এক্সপেরিমেন্টেশন শুধুমাত্র রেন্ডার করা পেজ পরিবর্তন করা লক্ষ্য হলে বৈধ-স্বার্থ ভিত্তিতে ক্ষণস্থায়ী, ইন-মেমোরি মূল্যায়ন সহ চলতে পারে। সেশন জুড়ে একটি স্থিতিশীল আইডেন্টিফায়ারের সাথে আবদ্ধ স্থায়ী ফ্ল্যাগ অ্যাসাইনমেন্টের জন্য অ্যানালিটিক্সের মতো একই সম্মতি প্রয়োজন, কারণ তখনই ফ্ল্যাগটি একটি ট্রেসযোগ্য ব্যবহারকারী-স্তরের ডেটা পয়েন্ট হয়ে ওঠে।
- সার্ভে এবং ফিডব্যাক মুক্ত-পাঠ্য ইনপুট সংগ্রহ করলে সেশন রিপ্লের মতো একই গেটের সাথে আবদ্ধ, বা শুধুমাত্র রেটিং বা একক-নির্বাচন প্রতিক্রিয়া সংগ্রহ করলে অ্যানালিটিক্স গেটের সাথে।
যে ইন্টিগ্রেশন প্যাটার্নটি কাজ করে
রেফারেন্স ডিপ্লয়মেন্টে চারটি অংশ রয়েছে: একটি CMP যা একটি রিয়েল-টাইম সম্মতি পরিবর্তন ইভেন্ট প্রকাশ করে, একটি ডিফার্ড বুটস্ট্র্যাপ যা ক্যাপচার এবং রিপ্লে অক্ষম করে PostHog ইনিশিয়ালাইজ করে, একটি সম্মতি শ্রোতা যা সংশ্লিষ্ট গেটগুলি খুললে opt_in_capturing এবং রেকর্ডিং সুইচ ফ্লিপ করে এবং একটি উইথড্রয়াল পথ যা opt_out_capturing কল করে, রিপ্লে বাফার থামায় এবং SDK-এর রিসেট API-এর মাধ্যমে স্থায়ী আইডেন্টিফায়ারগুলি পরিষ্কার করে।
ওয়েব ইমপ্লিমেন্টেশন
সবচেয়ে পরিষ্কার প্যাটার্ন হল প্রতিটি পেজে PostHog SDK লোড করা কিন্তু প্রাথমিক বুটস্ট্র্যাপ হিসাবে posthog.init(apiKey, { api_host: 'https://eu.posthog.com', opt_out_capturing_by_default: true, disable_session_recording: true, persistence: 'memory', respect_dnt: true }) কল করা। CMP-এর সম্মতি পরিবর্তন ইভেন্টে সাবস্ক্রাইব করুন। অ্যানালিটিক্স ক্যাটাগরি true-তে ট্রানজিশন করলে posthog.set_config({ persistence: 'localStorage+cookie' }) কল করুন এবং তারপর posthog.opt_in_capturing(); এটি ইভেন্ট ক্যাপচার পুনরায় সক্ষম করে এবং পার্সিস্টেন্স ট্রানজিশন ডিস্টিনক্ট আইডেন্টিফায়ার লেখা শুরু করে। সেশন-রিপ্লে ক্যাটাগরি true-তে ট্রানজিশন করলে posthog.startSessionRecording() কল করুন। যেকোনো গেট প্রত্যাহার করলে, অ্যানালিটিক্স গেটের জন্য posthog.opt_out_capturing() বা রিপ্লে গেটের জন্য posthog.stopSessionRecording() কল করুন, posthog.reset()-এর মাধ্যমে সংশ্লিষ্ট পার্সিস্টেন্স এন্ট্রিগুলির মেয়াদ শেষ করুন এবং ব্যবহারকারী মুছে ফেলার অধিকার প্রয়োগ করলে PostHog-এর GDPR API-এর মাধ্যমে একটি মুছে ফেলার অনুরোধ পাঠান।
অঞ্চল নির্বাচন: PostHog Cloud US বনাম EU বনাম সেলফ-হোস্টেড
PostHog দুটি ক্লাউড অঞ্চলে কাজ করে — US (us.posthog.com) এবং EU (eu.posthog.com) — এবং গ্রাহকের নিজস্ব অবকাঠামোতে সেলফ-হোস্টেড ইনস্টলেশন সমর্থন করে। EEA এবং UK ট্র্যাফিকের জন্য, EU ক্লাউড হল সঠিক ডিফল্ট; এটি EEA-এর ভেতরে ইনজেস্ট, প্রক্রিয়াকরণ এবং স্টোরেজ রাখে এবং যেকোনো US-অঞ্চল অ্যানালিটিক্স ডিপ্লয়মেন্ট বহন করে এমন Schrems II এক্সপোজার কমায়। api_host ইনিট অপশন অঞ্চল পিন করে। সেলফ-হোস্টেড PostHog সম্পূর্ণ স্ট্যাককে পাবলিশারের নিজস্ব অবকাঠামোতে নিয়ে যায়, যা সবচেয়ে শক্তিশালী ডেটা-রেসিডেন্সি অবস্থান কিন্তু সম্মতির বাধ্যবাধকতা সরায় না — আইনি ভিত্তি অপারেটরকে নয়, ডেটা অনুসরণ করে। যেটিই বেছে নেওয়া হোক তা গোপনীয়তা নোটিশ এবং কন্ট্রোলারের প্রক্রিয়াকরণের রেকর্ডে প্রতিফলিত হতে হবে।
সার্ভার-সাইড ক্যাপচার
PostHog Python, Node, Go, Ruby এবং PHP SDK-এর মাধ্যমে সার্ভার-সাইড ইভেন্ট ইনজেস্টশন সমর্থন করে। সার্ভার-সাইড ইভেন্টগুলি সম্মতি থেকে মুক্ত নয় — আইনি ভিত্তি ডেটা অনুসরণ করে — কিন্তু সার্ভার-সাইড ইনজেস্টশন পাবলিশারকে কোন ক্ষেত্রগুলি কখন নির্গত হয় তার উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়। একটি সাধারণ প্যাটার্ন হল বৈধ স্বার্থের অধীনে সার্ভার-সাইড থেকে একটি ন্যূনতম শুধুমাত্র প্রয়োজনীয় ইভেন্ট সেট ক্যাপচার করা, তারপর ব্যবহারকারী অ্যানালিটিক্স সম্মতি দেওয়ার পরেই ক্লায়েন্ট থেকে আচরণগত বিশদ সহ সেই ইভেন্টগুলি সমৃদ্ধ করা। সার্ভার-সাইড এবং ক্লায়েন্ট-সাইড ইভেন্টগুলি সম্মতি ফ্লিপ হলে একই ডিস্টিনক্ট আইডেন্টিফায়ারে যোগ দেয়; সম্মতির আগে, সার্ভার-সাইড ইভেন্টগুলি প্রতি সেশনে রিসেট হওয়া একটি বেনামী, ক্ষণস্থায়ী আইডেন্টিফায়ার সহ নির্গত হয়।
ইন্টিগ্রেশন এবং অডিট ট্রেইল যাচাই করা
যাচাইকরণ ধাপটি হল যা নিয়ন্ত্রকরা পরীক্ষা করেন এবং পাবলিশাররা প্রায়শই এড়িয়ে যান। একটি সঠিকভাবে ইন্টিগ্রেটেড PostHog ডিপ্লয়মেন্ট অবশ্যই ক্রমানুসারে চারটি পরীক্ষায় উত্তীর্ণ হতে হবে। প্রথমত, ব্যানার দেখানো কিন্তু কোনো পছন্দ না করা একটি পরিষ্কার ব্রাউজার সেশন SDK ফাইল ফেচ ছাড়া কনফিগার করা api_host-এ শূন্য অনুরোধ, document.cookie-তে শূন্য ph_ কুকি এবং localStorage-এ শূন্য ph_ এন্ট্রি তৈরি করতে হবে। দ্বিতীয়ত, অ্যানালিটিক্স প্রত্যাখ্যান করা সেই অবস্থা বজায় রাখতে হবে — কোনো ক্যাপচার নেই, কোনো রেকর্ডিং নেই, কোনো স্থায়ী আইডেন্টিফায়ার নেই। তৃতীয়ত, অ্যানালিটিক্স গ্রহণ করা অবশ্যই একটি তাৎক্ষণিক $opt_in ইভেন্ট, সঠিক SameSite অ্যাট্রিবিউট সহ প্রত্যাশিত ph_{projectKey}_posthog পার্সিস্টেন্স এন্ট্রি এবং কনফিগার করা হোস্টে প্রবাহিত ইভেন্ট ট্র্যাফিক তৈরি করতে হবে। চতুর্থত, ঘটনার পরে সম্মতি প্রত্যাহার করা অবশ্যই অবিলম্বে আরও ক্যাপচার এবং রিপ্লে থামাতে হবে, স্থায়ী আইডেন্টিফায়ারগুলির মেয়াদ শেষ করতে হবে এবং ব্যবহারকারী মুছে ফেলা প্রয়োগ করলে PostHog-এর GDPR API-এর মাধ্যমে একটি মুছে ফেলার অনুরোধ ট্রিগার করতে হবে।
EDPB-এর ২০২৩ সালের কুকি ব্যানার গাইডলাইন এবং নবায়িত ২০২৬ সালের টাস্ক ফোর্স অগ্রাধিকারের অধীনে অডিট-ট্রেইলের প্রত্যাশা হল যে পাবলিশার PostHog প্রজেক্টের যেকোনো প্রদত্ত ইভেন্টের জন্য প্রমাণ করতে পারেন যে এটি তৈরি করা ব্যবহারকারী ক্যাপচারের মুহূর্তে বৈধ সম্মতি দিয়েছিলেন। স্ট্যান্ডার্ড প্যাটার্ন হল posthog.setPersonProperties({ consent_version: 'v3', consent_ts: ts })-এর মাধ্যমে ডিস্টিনক্ট ID-তে ব্যক্তি বৈশিষ্ট্য হিসাবে সম্মতি সংস্করণ এবং টাইমস্ট্যাম্প সেট করা যাতে যেকোনো পৃথক ইভেন্ট একটি নির্দিষ্ট সম্মতি লগ এন্ট্রিতে ট্রেস করা যায়। সঠিকভাবে গেটেড ডিপ্লয়মেন্ট, দর্শকদের সাথে মিলে অঞ্চল নির্বাচন, মেমোরিতে ডিফল্ট করা পার্সিস্টেন্স এবং প্রত্যাহারে সক্রিয় হওয়া মুছে ফেলার পথের সাথে মিলিত, এটিই PostHog-কে একটি নিয়ন্ত্রক ঘনত্বের ঝুঁকি থেকে প্রোডাক্ট অ্যানালিটিক্স স্ট্যাকের একটি রক্ষণযোগ্য কেন্দ্রে রূপান্তরিত করে।