এই পৃষ্ঠাটি ব্যাখ্যা করে কিভাবে Google ক্লাউড পাব/সাব থেকে Google ড্রাইভ ইভেন্টগুলি গ্রহণ করতে হয়৷
একটি ড্রাইভ ইভেন্ট একটি ক্রিয়াকলাপ বা ড্রাইভ সংস্থানে পরিবর্তনের প্রতিনিধিত্ব করে, যেমন একটি ফোল্ডারে একটি নতুন ফাইল৷ আপনি কি ঘটেছে তা বুঝতে এবং তারপর পদক্ষেপ নিতে বা আপনার ব্যবহারকারীদের জন্য একটি অর্থপূর্ণ উপায়ে প্রতিক্রিয়া জানাতে ইভেন্টগুলি ব্যবহার করতে পারেন৷
আপনি কীভাবে ইভেন্টগুলি ব্যবহার করতে পারেন তার কিছু উদাহরণ এখানে দেওয়া হল:
একটি ফাইল, ফোল্ডার বা শেয়ার্ড ড্রাইভে পরিবর্তনগুলি পর্যবেক্ষণ করুন এবং প্রতিক্রিয়া জানান, যেমন যখন একটি ফাইল সম্পাদনা করা হয় বা একটি নতুন সংশোধন আপলোড করা হয়৷
আপনার অ্যাপের পারফরম্যান্স উন্নত করতে ফাইলের পরিবর্তনগুলি মনিটর করুন।
সম্ভাব্য ডেটা ফাঁস এবং অননুমোদিত অ্যাক্সেস সনাক্ত করতে সহায়তা করার জন্য ফাইল শেয়ারিং, ফাইল সরানো এবং মুছে ফেলার মতো অডিট কার্যক্রম।
ব্যবহারকারীরা কীভাবে তাদের ফাইলগুলি পরিচালনা করছেন তার অন্তর্দৃষ্টি অফার করুন, বিষয়বস্তু পরিচালনার উন্নতি করা যেতে পারে এমন ক্ষেত্রগুলি সনাক্ত করতে সহায়তা করে৷
নিয়ন্ত্রক প্রয়োজনীয়তা বা নিরাপত্তা নীতির সাথে সম্মতি যাচাই করতে ফাইলের পরিবর্তনগুলি ট্র্যাক করুন৷
অন্যান্য Google ক্লাউড পণ্য যেমন Eventarc , Workflows , এবং BigQuery ব্যবহার করে ড্রাইভ কার্যকলাপ বিশ্লেষণ করুন৷
ঘটনা কিভাবে কাজ করে
যখনই ড্রাইভে কিছু ঘটে, একটি Google ড্রাইভ API সংস্থান তৈরি, আপডেট করা বা মুছে ফেলা হয়৷ ড্রাইভ আপনার অ্যাপ্লিকেশানে ঘটে যাওয়া কার্যকলাপের ধরণ এবং প্রভাবিত হয়েছে এমন ড্রাইভ API সংস্থান সম্পর্কে তথ্য সরবরাহ করতে ইভেন্টগুলি ব্যবহার করে৷
ড্রাইভ প্রকার অনুসারে ইভেন্টকে শ্রেণীবদ্ধ করে। ইভেন্টের ধরনগুলি আপনাকে ফিল্টার করতে এবং শুধুমাত্র আপনার প্রয়োজনীয় তথ্যের ধরণ পেতে সাহায্য করে এবং আপনাকে একইভাবে একই ধরনের কার্যকলাপ পরিচালনা করতে দেয়।
নিম্নলিখিত সারণী দেখায় যে কীভাবে ড্রাইভে একটি কার্যকলাপ সম্পর্কিত ড্রাইভ API সংস্থানকে প্রভাবিত করে এবং আপনার ড্রাইভ অ্যাপটি কী ধরনের ইভেন্ট গ্রহণ করে:
কার্যকলাপ | ড্রাইভ API সংস্থান | ইভেন্টের ধরন |
---|---|---|
একজন ব্যবহারকারী একটি ফোল্ডার বা শেয়ার্ড ড্রাইভে একটি ফাইল যোগ করেন। | একটি File সম্পদ তৈরি করা হয়। | নতুন ফাইল |
একজন ব্যবহারকারী একটি ফাইলে একটি অ্যাক্সেস প্রস্তাব তৈরি করে। | একটি AccessProposal সংস্থান তৈরি করা হয়েছে। | নতুন অ্যাক্সেস প্রস্তাব |
Google ড্রাইভ থেকে ইভেন্টগুলি গ্রহণ করুন৷
ঐতিহ্যগতভাবে, আপনার ড্রাইভ অ্যাপটি ড্রাইভ এপিআই বা গুগল ড্রাইভ অ্যাক্টিভিটি এপিআই-এর মাধ্যমে ইভেন্টগুলি সনাক্ত করতে পারে। Google Workspace Events API-এ Drive ইভেন্ট যোগ করার সাথে, এখন ইভেন্ট রিসিভ করার তৃতীয় পদ্ধতি রয়েছে:
ডেভেলপার প্রিভিউ : ইভেন্ট হওয়ার সাথে সাথে পেতে Google Workspace Events API ব্যবহার করে সাবস্ক্রাইব করুন।
ড্রাইভ API ব্যবহার করে ইভেন্টগুলিতে সদস্যতা নিন।
changes.watch
পদ্ধতি বাfiles.watch
পদ্ধতি ব্যবহার করে ফাইল পরিবর্তন ইভেন্টের মাধ্যমে ব্যবহারকারী পরিবর্তন ইভেন্ট পান।Google ড্রাইভ কার্যকলাপ API কল করে সাম্প্রতিক ইভেন্টগুলির জন্য ক্যোয়ারী করুন৷
নিম্নলিখিত সারণীটি ইভেন্টগুলিতে সাবস্ক্রাইব করার জন্য অনুসন্ধান বনাম তাদের জন্য অনুসন্ধানের পার্থক্য এবং কারণগুলি ব্যাখ্যা করে:
Google Workspace ইভেন্টে সদস্যতা নিন | ড্রাইভ API ঘড়ির ইভেন্টগুলিতে সদস্যতা নিন | ড্রাইভ কার্যকলাপ API ইভেন্টের জন্য ক্যোয়ারী | |
---|---|---|---|
কেস ব্যবহার করুন |
|
|
|
API | Google Workspace ইভেন্ট API | ড্রাইভ API | ড্রাইভ কার্যকলাপ API |
ঘটনার উৎস | ফাইল, ফোল্ডার এবং শেয়ার্ড ড্রাইভ | changes.watch এবং files.watch | DriveActivity |
সমর্থিত ঘটনা |
| Channel সমর্থিত ইভেন্ট প্রকারের তালিকার জন্য, ড্রাইভ এপিআই ডকুমেন্টেশনে Google ড্রাইভ API বিজ্ঞপ্তি ইভেন্টগুলি বুঝুন দেখুন৷ | Action সমর্থিত ক্ষেত্রগুলির একটি তালিকার জন্য, ড্রাইভ কার্যকলাপ API রেফারেন্স ডকুমেন্টেশনে Action রিসোর্স দেখুন৷ |
ইভেন্ট বিন্যাস | একটি পাব/সাব বার্তা, ক্লাউড ইভেন্ট স্পেসিফিকেশন অনুযায়ী ফর্ম্যাট করা হয়েছে। বিস্তারিত জানতে, Google Workspace ইভেন্টের কাঠামো দেখুন। | একটি ড্রাইভ API সংস্থান ( Channel ) | একটি ড্রাইভ কার্যকলাপ API সংস্থান ( Action ) |
ইভেন্ট ডেটা | বেস64-এনকোডেড স্ট্রিং রিসোর্স ডেটা সহ বা ছাড়া। উদাহরণস্বরূপ পেলোড, ইভেন্ট ডেটা দেখুন। | JSON পেলোড যাতে রিসোর্স ডেটা থাকে। একটি উদাহরণ পেলোডের জন্য, রেফারেন্স ডকুমেন্টেশনে Channel রিসোর্স দেখুন। | JSON পেলোড যাতে রিসোর্স ডেটা থাকে। পেলোডের উদাহরণের জন্য, রেফারেন্স ডকুমেন্টেশনে activity.query রেসপন্স বডি দেখুন। |
ড্রাইভ ইভেন্ট দিয়ে শুরু করুন
ড্রাইভ রিসোর্সে কীভাবে Google Workspace ইভেন্ট সাবস্ক্রিপশন তৈরি এবং ম্যানেজ করতে হয় তা এই গাইডে ব্যাখ্যা করা হয়েছে। এটি আপনার অ্যাপকে Google Cloud Pub/Sub-এর মাধ্যমে ইভেন্টগুলি পেতে দেয়।
একটি Google ক্লাউড প্রকল্প তৈরি করুন
একটি Google ক্লাউড প্রকল্প তৈরি করতে, একটি Google ক্লাউড প্রকল্প তৈরি করুন দেখুন।
Google Workspace Events API, Google Cloud Pub/Sub API এবং Google Drive API চালু করুন
Google API ব্যবহার করার আগে, আপনাকে একটি Google ক্লাউড প্রকল্পে সেগুলি চালু করতে হবে। আপনি একটি একক Google ক্লাউড প্রকল্পে এক বা একাধিক API চালু করতে পারেন৷গুগল ক্লাউড কনসোল
Google ক্লাউড কনসোলে, আপনার অ্যাপের জন্য Google ক্লাউড প্রজেক্ট খুলুন এবং Google Workspace Events API, Pub/Sub API এবং Drive API চালু করুন:
নিশ্চিত করুন যে আপনি সঠিক ক্লাউড প্রকল্পে API গুলি সক্ষম করছেন, তারপর পরবর্তী ক্লিক করুন।
নিশ্চিত করুন যে আপনি সঠিক API গুলি সক্ষম করছেন, তারপর সক্ষম করুন ক্লিক করুন৷
জিক্লাউড
আপনার কাজের ডিরেক্টরিতে, আপনার Google অ্যাকাউন্টে সাইন ইন করুন:
gcloud auth login
আপনার অ্যাপ্লিকেশনের জন্য ক্লাউড প্রকল্পে আপনার প্রকল্প সেট করুন:
gcloud config set project PROJECT_ID
আপনার অ্যাপ্লিকেশানের জন্য ক্লাউড প্রকল্পের জন্য প্রকল্প ID দিয়ে
PROJECT_ID
প্রতিস্থাপন করুন।Google Workspace Events API, Pub/Sub API এবং Drive API চালু করুন:
gcloud services enable workspaceevents.googleapis.com \ pubsub.googleapis.com \ drive.googleapis.com
একটি ক্লায়েন্ট আইডি সেট আপ করুন
একটি OAuth 2.0 ক্লায়েন্ট আইডি তৈরি করতে, OAuth ক্লায়েন্ট আইডি শংসাপত্র তৈরি করুন দেখুন।
একটি পাব/সাব বিষয় তৈরি করুন
একটি সাবস্ক্রিপশন তৈরি করার আগে, আপনাকে অবশ্যই একটি Google ক্লাউড পাব/সাব বিষয় তৈরি করতে হবে যা প্রাসঙ্গিক ইভেন্টগুলি পাবে যা আপনার অ্যাপ্লিকেশন আগ্রহী। পাব/সাব বিষয় তৈরি করতে, একটি পাব/সাব বিষয় তৈরি করুন এবং সদস্যতা নিন দেখুন।
আপনার অনুরোধের জন্য ড্রাইভ পরিষেবা অ্যাকাউন্ট ( drive-api-event-push@system.gserviceaccount.com
) উল্লেখ করা নিশ্চিত করুন৷
একটি ড্রাইভ সদস্যতা তৈরি করুন৷
সাবস্ক্রিপশনের বিষয় (বা বিষয়ের অনুক্রমের নীচে অন্য কোনো ফাইল) পরিবর্তন হলে ক্লাউড ইভেন্টগুলি পাঠানো হয়। উদাহরণস্বরূপ, আপনি যদি একটি শেয়ার্ড ড্রাইভে একটি সাবস্ক্রিপশন তৈরি করেন এবং সেই শেয়ার্ড ড্রাইভের বেশ কয়েকটি সাবফোল্ডারের মধ্যে নেস্ট করা একটি ফাইল পরিবর্তন করে, এটি একটি ইভেন্ট তৈরি করে। সমর্থিত সংস্থান এবং ড্রাইভ ইভেন্টের প্রকারের জন্য, সদস্যতা তৈরির জন্য ইভেন্ট প্রকারগুলি দেখুন৷
নিম্নলিখিত Node.js অ্যাপ্লিকেশনটি সামগ্রী পরিবর্তনের ইভেন্টগুলি শোনার জন্য একটি ফাইল বা ফোল্ডারে একটি ড্রাইভ ইভেন্ট সদস্যতা তৈরি করে৷ আরও তথ্যের জন্য, একটি Google Workspace সদস্যতা তৈরি করুন দেখুন।
এই উদাহরণটি চালানোর জন্য, নিশ্চিত করুন যে আপনার Node.js এবং npm উভয়ই ইনস্টল করা আছে। এই উদাহরণটি চালানোর জন্য আপনাকে প্রয়োজনীয় নির্ভরতা ইনস্টল করা আছে তা নিশ্চিত করতে হবে।
# Install needed dependencies
$ npm install googleapis @google-cloud/local-auth axios
ড্রাইভ সাবস্ক্রিপশন তৈরি করতে আপনি Google Workspace Events API-এর subscriptions.create()
পদ্ধতি ব্যবহার করে Subscription
রিসোর্স তৈরি করেন:
// app.js
const fs = require('fs').promises;
const {authenticate} = require('@google-cloud/local-auth');
const {google} = require('googleapis');
const axios = require('axios');
// Scopes for Google Drive API access.
const SCOPES = ['SCOPES'];
/**
* Loads saved credentials from token.json, or authenticates the user.
* @return {Promise<OAuth2Client>} The authorized client.
*/
async function authorize() {
try {
const content = await fs.readFile('token.json');
const credentials = JSON.parse(content);
return google.auth.fromJSON(credentials);
} catch (err) {
const client = await authenticate({
scopes: SCOPES,
keyfilePath: 'credentials.json',
});
if (client.credentials) {
const content = await fs.readFile('credentials.json');
const keys = JSON.parse(content);
const { client_id, client_secret } = keys.installed || keys.web;
const payload = JSON.stringify({
type: 'authorized_user',
client_id,
client_secret,
refresh_token: client.credentials.refresh_token,
});
await fs.writeFile('token.json', payload);
}
return client;
}
}
/**
* Creates a subscription to Google Drive events.
* @param {OAuth2Client} authClient An authorized OAuth2 client.
*/
async function createSubscription(authClient) {
const url = 'https://workspaceevents.googleapis.com/v1beta/subscriptions';
const data = {
targetResource: 'TARGET_RESOURCE',
eventTypes: ['EVENT_TYPES'],
payload_options: {
include_resource: RESOURCE_DATA
},
drive_options: {
include_descendants: INCLUDE_DESCENDANTS
},
notification_endpoint: {
pubsub_topic: 'TOPIC_NAME'
}
};
try {
const { token } = await authClient.getAccessToken();
const response = await axios.post(url, data, {
headers: { 'Authorization': `Bearer ${token}` }
});
console.log('Subscription created:', response.data);
} catch (error) {
const message = error.response ? error.response.data : error.message;
console.error('Error creating subscription:', message);
}
}
authorize().then(createSubscription).catch(console.error);
নিম্নলিখিতগুলি প্রতিস্থাপন করুন:
SCOPES
: এক বা একাধিক OAuth স্কোপ যা সাবস্ক্রিপশনের জন্য প্রতিটি ইভেন্টের ধরনকে সমর্থন করে। স্ট্রিংগুলির একটি অ্যারে হিসাবে ফর্ম্যাট করা হয়েছে৷ একাধিক স্কোপের তালিকা করতে, কমা দ্বারা পৃথক করুন। একটি সর্বোত্তম অনুশীলন হিসাবে, আপনার সবচেয়ে সীমাবদ্ধ সুযোগ ব্যবহার করা উচিত যা এখনও আপনার অ্যাপটিকে কাজ করার অনুমতি দেয়। উদাহরণস্বরূপ,'https://www.googleapis.com/auth/drive.file'
।TARGET_RESOURCE
: আপনি যে Google Workspace রিসোর্সটিতে সদস্যতা নিচ্ছেন, সেটির পুরো রিসোর্স নাম হিসেবে ফর্ম্যাট করা হয়েছে। উদাহরণস্বরূপ, একটি ড্রাইভ ফাইল বা ফোল্ডারে সদস্যতা নিতে,//drive.googleapis.com/v3/files/FileID
ব্যবহার করুন।EVENT_TYPES
: এক বা একাধিক ইভেন্ট প্রকার যা আপনি লক্ষ্য সংস্থানে সদস্যতা নিতে চান৷ স্ট্রিংগুলির একটি অ্যারে হিসাবে ফর্ম্যাট করুন, যেমন'google.workspace.drive.file.v3.contentChanged'
।RESOURCE_DATA
: একটি বুলিয়ান যা নির্দিষ্ট করে যে সদস্যতা ইভেন্ট পেলোডে রিসোর্স ডেটা অন্তর্ভুক্ত করে কিনা। এই বৈশিষ্ট্যটি আপনার সদস্যতার সময়কালকে প্রভাবিত করে। আরও জানতে, ইভেন্ট ডেটা দেখুন।True
: সমস্ত সম্পদ ডেটা অন্তর্ভুক্ত করে। কোন ক্ষেত্রগুলি অন্তর্ভুক্ত করা হয়েছে তা সীমিত করতে,fieldMask
যোগ করুন এবং পরিবর্তিত সংস্থানের জন্য কমপক্ষে একটি ক্ষেত্র নির্দিষ্ট করুন। রিসোর্স ডেটা সহ শুধুমাত্র চ্যাট এবং ড্রাইভ রিসোর্স সাপোর্টের সদস্যতা।False
: রিসোর্স ডেটা বাদ দেয়।
INCLUDE_DESCENDANTS
: একটি বুলিয়ান ক্ষেত্র যাDriveOptions
অংশ। শুধুমাত্র তখনই পাওয়া যায় যখনtargetResource
হয় একটি ড্রাইভ ফাইল বা একটি শেয়ার্ড ড্রাইভ যার MIME প্রকারটিapplication/vnd.google-apps.folder
এ সেট করা থাকে। মাই ড্রাইভ বা শেয়ার্ড ড্রাইভের রুট ফোল্ডারে সেট করা যাবে না।True
: সদস্যতা ইভেন্টের তালিকায় সমস্ত বংশধর ড্রাইভ ফাইল অন্তর্ভুক্ত করে।False
: সাবস্ক্রিপশনটি একক ফাইল বা শেয়ার্ড ড্রাইভের জন্য তৈরি করা হয়েছে যাtargetResource
হিসাবে নির্দিষ্ট করা হয়েছে।
TOPIC_NAME
: আপনার ক্লাউড প্রজেক্টে তৈরি করা পাব/সাব বিষয়ের পুরো নাম। এই পাব/সাব বিষয় সাবস্ক্রিপশনের জন্য ইভেন্ট গ্রহণ করে।projects/ PROJECT_ID /topics/ TOPIC_ID
হিসাবে ফর্ম্যাট করা হয়েছে।notificationEndpoint
ক্ষেত্রটি পাব/সাব বিষয় নির্দিষ্ট করতে ব্যবহৃত হয় এবং এটিই যেখানে সাবস্ক্রিপশন ইভেন্টগুলি সরবরাহ করে।
আপনার ড্রাইভ সদস্যতা পরীক্ষা করুন
আপনি ড্রাইভ ইভেন্টগুলি পাচ্ছেন তা পরীক্ষা করতে, আপনি একটি ইভেন্ট ট্রিগার করতে পারেন এবং পাব/সাবস্ক্রিপশনে বার্তাগুলি টানতে পারেন৷ আরও তথ্যের জন্য, আপনার Google Workspace সাবস্ক্রিপশন পরীক্ষা করুন দেখুন।
ক্লাউড ফাংশন ব্যবহার করে ড্রাইভ ইভেন্টগুলি প্রক্রিয়া করুন৷
ড্রাইভ ইভেন্টগুলি আপনার তৈরি করা সাবস্ক্রিপশনে পাব/সাব বিষয়ে পাঠানো হয়। ট্রিগার তৈরি করার সময় নিশ্চিত করুন যে ট্রিগারের জন্য Pub/Sub বিষয় আপনার ইভেন্ট সদস্যতার Pub/Sub বিষয়ের সাথে মেলে। তারপরে আপনি আপনার ক্লাউড রান ফাংশন স্থাপন করতে পারেন এবং লগগুলিতে ইভেন্ট পরিবর্তনগুলি দেখতে ফাইলটিতে সম্পাদনা করতে পারেন৷
আপনি ফাংশন তৈরি করার আগে, নির্ভরতাগুলির জন্য package.json
আপডেট করুন:
{
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0",
"cloudevents": "^8.0.0"
}
}
এরপরে, ফাংশনের জন্য সোর্স কোড তৈরি করুন:
const functions = require('@google-cloud/functions-framework');
const { HTTP } = require("cloudevents");
/**
* A Cloud Function triggered by Pub/Sub messages containing Google Drive activity events.
* This function processes different types of Drive events.
*
* @param {object} cloudEvent The CloudEvent object.
* @param {object} cloudEvent.data The data payload from the event source.
*/
functions.cloudEvent('helloFromDrive', async (cloudEvent) => {
try {
// Verify the Pub/Sub message exists
if (!cloudEvent.data || !cloudEvent.data.message) {
console.warn("Event is missing the Pub/Sub message payload.");
return;
}
// Extract the Pub/Sub message details
const { message } = cloudEvent.data;
const { attributes, data } = message;
// The original Drive CloudEvent is reconstructed from the Pub/Sub message attributes
const driveEvent = HTTP.toEvent({ headers: attributes });
const { type } = driveEvent;
// The Drive event's payload is a base64 encoded JSON string
const payload = JSON.parse(Buffer.from(data, "base64").toString());
console.log(`Processing Drive event type: ${type}`);
// Use a switch statement to handle different event types
switch (type) {
case 'google.workspace.drive.file.v3.contentChanged':
console.log('File Content Changed:', payload);
break;
case 'google.workspace.drive.accessproposal.v3.created':
console.log('Access Proposal Created:', payload);
break;
default:
console.log(`Received unhandled event type: ${type}`);
break;
}
} catch (error) {
console.error("An error occurred while processing the Drive event:", error);
}
});
সীমাবদ্ধতা
- যখন
DriveOptions
includeDescendants
বুলিয়ান ক্ষেত্রটিtrue
হয়, তখন শেয়ার্ড ড্রাইভ এবং ফোল্ডারে ড্রাইভ সাবস্ক্রিপশন সর্বদা একটি ইভেন্ট প্রেরণ করে, এমনকি যে ফাইলটি ইভেন্টটিকে ট্রিগার করেছে সেটি ড্রাইভ সাবস্ক্রিপশনের জন্য ব্যবহৃত ফোল্ডারের নীচে অনেক স্তর নেস্ট করা থাকলেও৷ - যদিও আপনি একটি ফোল্ডারে একটি সাবস্ক্রিপশন তৈরি করেছেন, আপনি ফাইল অনুক্রমের মধ্যে সমস্ত ইভেন্ট নাও পেতে পারেন কারণ ব্যবহারকারী বা অ্যাপ্লিকেশনটিকে সেগুলিতে অ্যাক্সেস দেওয়া নাও হতে পারে৷ এই ক্ষেত্রে, সাবস্ক্রিপশন সক্রিয় থাকে তবে আপনি যে সংস্থানগুলিতে অ্যাক্সেস নেই তার জন্য আপনি কোনও ইভেন্ট পাবেন না।
- সাবস্ক্রিপশন সমস্ত ফাইল এবং ফোল্ডারে ইভেন্টের জন্য সমর্থিত কিন্তু শেয়ার্ড ড্রাইভের রুট ফোল্ডারে নয়। সাবস্ক্রিপশন শুধুমাত্র শেয়ার্ড ড্রাইভের মধ্যে থাকা ফাইল এবং ফোল্ডারগুলির জন্য সমর্থিত। শেয়ার্ড ড্রাইভের রুট ফোল্ডারে সরাসরি করা পরিবর্তন ইভেন্ট ট্রিগার করবে না।
- সাবস্ক্রিপশন অনুমোদনকারী ব্যবহারকারীর অবশ্যই ফাইলটিতে অনুমতি থাকতে হবে যা তারা সদস্যতা নিয়েছে।
- সাবস্ক্রিপশন শুধুমাত্র সেই রিসোর্সের জন্য ইভেন্ট গ্রহণ করে যেখানে ব্যবহারকারীর Google Workspace অ্যাকাউন্ট বা Google অ্যাকাউন্টের মাধ্যমে অ্যাক্সেস থাকে।