FullStory ডিজিটাল এক্সপেরিয়েন্স ও সেশন রিপ্লে কুকি সম্মতি ইন্টিগ্রেশন গাইড: ২০২৬ প্লেবুক
FullStory ডিজিটাল এক্সপেরিয়েন্স অ্যানালিটিক্স ক্যাটাগরিতে আধিপত্যকারী প্ল্যাটফর্ম একটি কারণে: এটি ডিফল্টরূপে সবকিছু ক্যাপচার করে। যেখানে ঐতিহ্যবাহী অ্যানালিটিক্স টুলগুলি ডেভেলপার ইন্সট্রুমেন্ট করা বিচ্ছিন্ন ইভেন্ট রেকর্ড করে, এবং যেখানে প্রোডাক্ট অ্যানালিটিক্স প্ল্যাটফর্মগুলি ইন্টারঅ্যাকশন প্লাস একটি অটোক্যাপচার্ড সাপ্লিমেন্ট রেকর্ড করে, FullStory সম্পূর্ণ রেন্ডার করা DOM, কার্সার ট্রেইল, কীস্ট্রোক টাইমিং, স্ক্রোল আচরণ, রেজ ক্লিক, ডেড ক্লিক, নেটওয়ার্ক রিকোয়েস্ট এবং JavaScript এরর ক্যাপচার করে — এবং সেগুলিকে সেশন রেকর্ডিংয়ে একত্রিত করে যা বিশ্লেষক ফ্রেম বাই ফ্রেম দেখতে পারেন। সেই কভারেজটিই পণ্য। এটাও কারণ FullStory প্রতিটি আধুনিক প্রাইভেসি রেজিমে সবচেয়ে কঠোর সম্মতি নিয়মের সংযোগস্থলে রয়েছে। EDPB-এর ২০২৩ সেশন-রিপ্লে নির্দেশিকা এবং ২০২৬ টাস্ক ফোর্স অগ্রাধিকারগুলি সেশন-রিপ্লেকে একটি পৃথক, কঠোর সম্মতি বিভাগ হিসেবে বিবেচনা করে। CNIL বিষয়টিতে সবচেয়ে সক্রিয় নিয়ন্ত্রক হয়েছে কিন্তু একা নয় — Garante, ICO, স্প্যানিশ AEPD এবং ডাচ AP সবই একই অবস্থান গ্রহণ করেছে। সম্মতি-প্রথম ক্যাপচারের জন্য কনফিগার করা FullStory ডিপ্লয়মেন্ট, সঠিক মাস্কিং, সঠিক গেটিং এবং সঠিক অডিট ট্রেইল সহ, একটি প্রকাশক চালাতে পারে এমন সবচেয়ে শক্তিশালী টুলগুলির মধ্যে একটি; যেটি এভাবে কনফিগার করা হয়নি সেটি একটি নিয়ন্ত্রক সবচেয়ে সহজে খুঁজে পাবে।
কেন FullStory সবচেয়ে কঠোর সম্মতি বিভাগে রয়েছে
একটি ডিফল্ট FullStory ইনিশিয়ালাইজেশন প্রতিটি সেশন-রিপ্লে টুল যা করে তার বেশি করে। এটি fs_uid এবং fs_lua নেমস্পেসের অধীনে প্রথম-পক্ষ কুকি সেট করে যাতে স্থায়ী ভিজিটর আইডেন্টিফায়ার এবং লাস্ট-অ্যাক্টিভ টাইমস্ট্যাম্প রয়েছে, fs_session-এর অধীনে একটি সেশন আইডেন্টিফায়ার তৈরি করে এবং পেজ লোডের মিলিসেকেন্ডের মধ্যে রেন্ডার করা DOM rs.fullstory.com-এ স্ট্রিম করতে শুরু করে। স্ট্রিমে প্রতিটি ইনপুট ইভেন্ট, প্রতিটি মাউস মুভমেন্ট, প্রতিটি স্ক্রোল পজিশন, প্রতিটি পেজ ট্রানজিশন এবং — নেটওয়ার্ক ক্যাপচার মডিউল সক্রিয় থাকলে — অপারেটর সাপ্রেশন কনফিগার না করলে রেসপন্স বডি সহ পেজটি ইস্যু করা প্রতিটি XHR এবং fetch রেসপন্স অন্তর্ভুক্ত থাকে।
এই ক্যাপচারগুলির প্রতিটি একটি পৃথক সম্মতি গেট সক্রিয় করে। ভিজিটর আইডেন্টিফায়ার টিকিয়ে রাখা EEA, UK এবং একই মানদণ্ড আমদানি করা যেকোনো জুরিসডিকশনে পূর্বে, স্বাধীনভাবে প্রদত্ত, নির্দিষ্ট, অবহিত এবং দ্ব্যর্থহীন সম্মতি প্রয়োজন করে ePrivacy ডাইরেক্টিভের Article 5(3)-এর অধীনে একটি স্টোরেজ-অ্যান্ড-অ্যাক্সেস অপারেশন। রেন্ডার করা DOM রেকর্ড করা GDPR-এর অধীনে ব্যক্তিগত ডেটার প্রক্রিয়াকরণ কারণ ভিজ্যুয়াল রেকর্ড ব্যবহারকারীকে সনাক্ত করতে এবং তার সম্পর্কে উল্লেখযোগ্য বিষয়বস্তু প্রকাশ করতে যথেষ্ট। কীস্ট্রোক স্ট্রিম ক্যাপচার করা বিশেষ সংবেদনশীলতা: ব্যবহারকারী ফর্ম ফিল্ডে যা টাইপ করেন তা ফ্রেম বাই ফ্রেম ক্যাপচার করা হয়, এবং ফিল্ডটি আনমাস্ক করা থাকলে রেকর্ডিংয়ে টাইপ করা বিষয়বস্তু অন্তর্ভুক্ত থাকে। EDPB স্পষ্ট করেছে যে সেশন-রিপ্লে ক্যাপচার এমন একটি বিভাগ যা সাধারণ অ্যানালিটিক্স সম্মতি থেকে আলাদা স্পষ্ট, গ্রানুলার সম্মতি প্রয়োজন করে — এবং যে মাস্কিং সম্মতির পরিপূরক, প্রতিস্থাপক নয়।
FullStory সম্মতির আগে কী লেখে — এবং কী দমন করতে হবে
স্ট্যান্ডার্ড FullStory কুইকস্টার্ট সরাসরি পেজ <head>-এ ট্র্যাকিং স্নিপেট ইনস্টল করে। এটি ডকুমেন্ট করা হিসেবে কাজ করে এবং সবচেয়ে সাধারণ কমপ্লায়েন্স ব্যর্থতার উৎস: স্নিপেটটি কুকি ব্যানার রেন্ডার হওয়ার আগে চলে, fs_uid এবং fs_session কুকিগুলি মিলিসেকেন্ডের মধ্যে লেখা হয় এবং পরে ব্যবহারকারী যাই সিদ্ধান্ত নিক না কেন সেশন-রিপ্লে স্ট্রিম rs.fullstory.com-এ প্রবাহিত হতে শুরু করে। এই প্যাটার্নে রায় দেওয়া প্রতিটি ইউরোপীয় নিয়ন্ত্রক একইভাবে রায় দিয়েছে: সম্মতির আগে সেট করা কুকিগুলি বেআইনি, সম্মতির আগে ক্যাপচার করা রেকর্ডিং বেআইনি প্রক্রিয়াকরণ এবং প্রকাশক দায় বহন করেন।
তাই একটি সম্মতিশীল ইন্টিগ্রেশনকে অবশ্যই প্রাসঙ্গিক সম্মতি বিভাগ দেওয়া না হওয়া পর্যন্ত FullStory স্নিপেটকে ইনিশিয়ালাইজ হতে বাধা দিতে হবে। প্রোডাকশনে কাজ করা প্যাটার্ন হল FS.consent() API ডিফার্ড রেকর্ডিংয়ের সাথে মিলিত: স্নিপেটটি FullStory({ orgId: 'XXX', recordOnlyThisIFrame: false }) দিয়ে লোড করা হয় এবং অবিলম্বে FS.shutdown() কল করা হয়, তারপর CMP সংকেত দেওয়ার পরেই কেবল FS.restart() এবং FS.consent(true) কল করা হয় যে সেশন-রিপ্লে বিভাগ দেওয়া হয়েছে। বিকল্প প্যাটার্ন হল শর্তাধীন স্ক্রিপ্ট ইনজেকশন — FullStory স্নিপেটটি কেবলমাত্র সম্মতি দেওয়ার পরে DOM-এ যোগ করা হয় — যা পরিষ্কার কিন্তু অপারেটরকে FullStory অন্যথায় প্রদান করতে পারে এমন যেকোনো প্রি-কনসেন্ট আইডেন্টিটি স্টিচিং হারাতে হয়।
FullStory যে কুকি এবং স্টোরেজ লেখে
FullStory স্নিপেট ইনিশিয়ালাইজেশনে নিচের আইডেন্টিফায়ারগুলি লেখে, যার সবগুলি অ-অপরিহার্য এবং সম্মতি প্রয়োজন: স্থায়ী ভিজিটর আইডেন্টিফায়ার সহ বহু-বছরের মেয়াদ উত্তীর্ণ হওয়া সহ fs_uid, লাস্ট-ইউজার-অ্যাক্টিভিটি টাইমস্ট্যাম্প সহ fs_lua, সেশন আইডেন্টিফায়ার সহ fs_session, এবং FullStory অভ্যন্তরীণভাবে ব্যবহার করা রেকর্ডিং-স্টেট মার্কার। তাই সম্মতি প্রত্যাহার করলে সেই কুকিগুলি মেয়াদ উত্তীর্ণ করতে হবে এবং আরও ক্যাপচার বন্ধ করতে FS.consent(false) তারপর FS.shutdown() কল করতে হবে, এবং প্রকাশককে অবশ্যই ব্যবহারকারীর পূর্ববর্তী রেকর্ডিংয়ের জন্য FullStory-এর প্রাইভেসি এন্ডপয়েন্টের মাধ্যমে একটি মুছে ফেলার অনুরোধ পাঠাতে হবে।
FullStory-কে সম্মতি ফ্রেমওয়ার্কে ম্যাপ করা
FullStory নেটিভলি IAB TCF বা IAB Global Privacy Platform বাস্তবায়ন করে না — এটি একটি বিজ্ঞাপন-প্রযুক্তি বিক্রেতা নয়, প্রথম-পক্ষ ডিজিটাল অভিজ্ঞতা প্ল্যাটফর্ম। এটি একটি নেটিভ সম্মতি API প্রকাশ করে এবং সম্মতির অবস্থা নির্বিশেষে কাজ করে এমন একটি প্রাইভেট-বাই-ডিফল্ট মাস্কিং মডেল সমর্থন করে। একটি নিয়ন্ত্রকের পর্যালোচনায় টিকে থাকে এমন প্যাটার্ন প্রতিটি FullStory মডিউলকে একটি নির্দিষ্ট CMP সংকেতের সাথে আবদ্ধ একটি পৃথক গেট হিসেবে বিবেচনা করে।
- সেশন রিপ্লে এবং সম্পূর্ণ DOM স্ট্রিম একটি নিবেদিত সেশন-রিপ্লে বা গবেষণা বিভাগের সাথে আবদ্ধ যা সাধারণ অ্যানালিটিক্স থেকে আলাদা। EDPB-এর নির্দেশিকা এই বিষয়ে স্পষ্ট — রিপ্লে সম্মতি আলাদা এবং গ্রানুলার হতে হবে, অ্যানালিটিক্স বা মার্কেটিংয়ের সাথে বান্ডেল করা নয়।
- নেটওয়ার্ক ক্যাপচার একই বিভাগের মধ্যে একটি কঠোর সাব-গেটের পিছনে থাকে কারণ এটি HTTP রেসপন্স বডি ক্যাপচার করে যা দৃশ্যমান ইন্টারফেসের সাথে সম্পর্কহীন ব্যক্তিগত ডেটা ধারণ করতে পারে। নেটওয়ার্ক ক্যাপচার ডিফল্টরূপে বন্ধ থাকা উচিত এবং কেবলমাত্র নির্দিষ্ট অ্যাপ্লিকেশন পাথের জন্য সক্রিয় করা উচিত যেখানে অপারেটর নিশ্চিত করেছেন যে রেসপন্স বডিতে সংবেদনশীল ডেটা নেই।
- FS.identify()-এর মাধ্যমে আইডেন্টিটি স্টিচিং ব্যবহারকারী বেনামী হলে বৈধ-স্বার্থ ভিত্তিতে একটি এফেমেরাল সেশন আইডেন্টিফায়ার দিয়ে চলতে পারে, কিন্তু সেশন জুড়ে একটি স্থায়ী প্রথম-পক্ষ আইডেন্টিফায়ারে আইডেন্টিফিকেশন স্টিচ করতে সেশন রিপ্লে-এর মতো একই সম্মতি প্রয়োজন।
- সেশন-রিপ্লে স্ট্রিম থেকে প্রাপ্ত হিটম্যাপ এবং কনভার্সন অ্যানালিটিক্স আপস্ট্রিম স্ট্রিম থেকে গেট উত্তরাধিকার সূত্রে পায় — সেগুলি আলাদা সম্মতি পৃষ্ঠ নয়, সেগুলি একই ক্যাপচার করা ডেটার ডাউনস্ট্রিম পণ্য।
যে ইন্টিগ্রেশন প্যাটার্ন কাজ করে
রেফারেন্স ডিপ্লয়মেন্টের চারটি অংশ রয়েছে: একটি CMP যা রিয়েল-টাইম সম্মতি পরিবর্তন ইভেন্ট প্রকাশ করে, একটি ডিফার্ড বুটস্ট্র্যাপ যা FS.shutdown()-এর মাধ্যমে ক্যাপচার দমন করে FullStory ইনিশিয়ালাইজ করে, একটি সম্মতি শ্রোতা যা সেশন-রিপ্লে গেট খুললে FS.consent(true) এবং FS.restart() কল করে, এবং একটি প্রাইভেট-বাই-ডিফল্ট মাস্কিং কনফিগারেশন যা স্পষ্টভাবে অপ্ট ইন না করলে প্রতিটি ইনপুট ফিল্ড কঠোরভাবে দমন করে।
প্রাইভেট-বাই-ডিফল্ট মাস্কিং
FullStory-এর মাস্কিং লেয়ার সম্মতি থেকে স্বাধীনভাবে কাজ করে এবং সম্মতি দেওয়া হলেও আক্রমণাত্মকভাবে কনফিগার করা উচিত। যেকোনো এলিমেন্টে fs-mask CSS ক্লাস সেই এলিমেন্টের বিষয়বস্তু রেকর্ডিং থেকে দমন করে; fs-exclude CSS ক্লাস এলিমেন্টটিকে DOM স্ট্রিম থেকে সম্পূর্ণরূপে বাদ দেয়; fs-block ক্লাস বিষয়বস্তু এবং কাঠামো উভয়ই ব্লক করে। GDPR-এর বিশেষ-বিভাগ নিয়ম এবং CCPA-এর সংবেদনশীল-ব্যক্তিগত-তথ্য সংজ্ঞার অধীনে, ব্যবহারকারীর সম্মতির অবস্থা নির্বিশেষে, যেকোনো ফিল্ড যা স্বাস্থ্য তথ্য, আর্থিক বিবরণ, সরকারি আইডেন্টিফায়ার, বায়োমেট্রিক ডেটা, সুনির্দিষ্ট জিওলোকেশন বা ব্যক্তিগত যোগাযোগের বিষয়বস্তু ক্যাপচার করতে পারে সেটিতে মাস্কিং অ্যাট্রিবিউট ব্যবহার করতে হবে। প্রস্তাবিত অবস্থান হল ফিল্ড লেভেলের পরিবর্তে ফর্ম লেভেলে fs-mask প্রয়োগ করা — একটি বিদ্যমান ফর্মে নতুন ফিল্ড যোগ করা ডেভেলপার এটি পৃথকভাবে মাস্ক করার কথা মনে রাখার চেয়ে অনেক কম সম্ভাবনা আছে, যদি তারা একটি ফর্ম-লেভেল মাস্কিং র্যাপারের মধ্যে কাজ করেন যা স্বয়ংক্রিয়ভাবে ধরে।
অঞ্চল নির্বাচন এবং ডেটা রেসিডেন্সি
FullStory পৃথক US এবং EU ইনজেশন এন্ডপয়েন্ট পরিচালনা করে। EEA এবং UK ট্র্যাফিকের জন্য EU এন্ডপয়েন্ট সঠিক ডিফল্ট — এটি EEA-এর মধ্যে ইনজেশন, প্রক্রিয়াকরণ এবং স্টোরেজ রাখে এবং যেকোনো US-অঞ্চল সেশন-রিপ্লে ডিপ্লয়মেন্ট বহন করবে এমন Schrems II এক্সপোজার হ্রাস করে। এন্ডপয়েন্ট প্রতিটি FullStory সংস্থার জন্য কনফিগার করা হয় এবং পূর্ববর্তীভাবে পরিবর্তন করা যায় না, তাই স্কেল করার আগে অঞ্চল পছন্দ করতে হবে এবং প্রাইভেসি নোটিশে ডকুমেন্ট করতে হবে যাতে সংগ্রহ থেকে স্টোরেজ পর্যন্ত বৈধ-ভিত্তি চেইন পরিষ্কার থাকে।
ইন্টিগ্রেশন এবং অডিট ট্রেইল যাচাই করা
যাচাইকরণ পদক্ষেপ হল নিয়ন্ত্রকরা যা পরীক্ষা করেন এবং প্রকাশকরা সেশন-রিপ্লে টুলে সবচেয়ে বেশি এড়িয়ে যান। সঠিকভাবে ইন্টিগ্রেটেড FullStory ডিপ্লয়মেন্ট ক্রমানুসারে চারটি পরীক্ষা পাস করতে হবে। প্রথমত, ব্যানার দেখানো কিন্তু কোনো পছন্দ না করা একটি পরিষ্কার ব্রাউজার সেশন SDK ফাইল ফেচ ছাড়া rs.fullstory.com-এ শূন্য রিকোয়েস্ট এবং document.cookie-তে শূন্য fs_ কুকি তৈরি করতে হবে। দ্বিতীয়ত, সেশন-রিপ্লে সম্মতি প্রত্যাখ্যান করলে সেই অবস্থা রাখতে হবে — কোনো ক্যাপচার নেই, কোনো আইডেন্টিফায়ার নেই, কোনো রেকর্ডিং নেই। তৃতীয়ত, সেশন-রিপ্লে সম্মতি স্বীকার করলে প্রত্যাশিত fs_uid কুকি, একটি একক FS.consent(true) ইভেন্ট এবং কনফিগার করা অঞ্চল এন্ডপয়েন্টে প্রবাহিত DOM স্ট্রিম তৈরি করতে হবে, মাস্ক করা ফিল্ডগুলি কেবলমাত্র মাস্ক প্লেসহোল্ডার ক্যাপচার করে তা নিশ্চিত করতে হবে। চতুর্থত, সম্মতি প্রত্যাহার করলে অবিলম্বে আরও ক্যাপচার বন্ধ করতে হবে, fs_ কুকিগুলি মেয়াদ উত্তীর্ণ করতে হবে এবং ব্যবহারকারীর পূর্ববর্তী রেকর্ডিংয়ের জন্য FullStory-এর প্রাইভেসি এন্ডপয়েন্টের মাধ্যমে একটি মুছে ফেলার অনুরোধ ট্রিগার করতে হবে।
অডিট-ট্রেইল প্রত্যাশা হল যেখানে সেশন-রিপ্লে টুলগুলি সবচেয়ে কঠোর নিরীক্ষার মুখোমুখি হয়। EDPB-এর ২০২৩ কুকি ব্যানার নির্দেশিকা এবং নবায়িত ২০২৬ টাস্ক ফোর্স অগ্রাধিকারগুলি স্পষ্ট করে যে প্রকাশককে অবশ্যই FullStory প্রজেক্টের যেকোনো নির্দিষ্ট সেশন রেকর্ডিংয়ের জন্য প্রমাণ করতে সক্ষম হতে হবে যে যে ব্যবহারকারী এটি তৈরি করেছে সে ক্যাপচারের মুহূর্তে বৈধ সেশন-রিপ্লে সম্মতি দিয়েছিল। স্ট্যান্ডার্ড প্যাটার্ন হল FS.setUserVars({ consent_version: 'v3', consent_ts: ts })-এর মাধ্যমে FullStory আইডেন্টিফায়ারে ব্যবহারকারী ভেরিয়েবল হিসেবে সম্মতি সংস্করণ এবং টাইমস্ট্যাম্প সেট করা যাতে যেকোনো পৃথক রেকর্ডিং একটি নির্দিষ্ট সম্মতি লগ এন্ট্রিতে ট্রেস করা যায়। সঠিকভাবে গেটেড ডিপ্লয়মেন্ট, ডিফল্টরূপে প্রাইভেট মাস্কিং অ্যাট্রিবিউট এবং প্রত্যাহারে সক্রিয় হওয়া মুছে ফেলার পথের সাথে মিলিত, FullStory-এর কভারেজকে নিয়ন্ত্রক ঘনত্ব ঝুঁকি থেকে প্রকাশকের ডিজিটাল অভিজ্ঞতা স্ট্যাকের একটি রক্ষণযোগ্য অংশে পরিণত করে।