paint-brush
আমি কিভাবে NodeJs এ একটি ইভেন্ট শিডিউলার তৈরি করেছিদ্বারা@arindam1729
303 পড়া
303 পড়া

আমি কিভাবে NodeJs এ একটি ইভেন্ট শিডিউলার তৈরি করেছি

দ্বারা Arindam Majumder 12m2024/08/18
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

এই নিবন্ধে, আমি আপনাকে দেখাব কীভাবে একটি Node.js অ্যাপ্লিকেশন তৈরি করতে হয় যা ইভেন্ট তৈরি করতে পারে এবং Google Meet লিঙ্কগুলির সাথে স্বয়ংক্রিয়ভাবে ইমেল আমন্ত্রণ পাঠাতে পারে। ইভেন্ট শিডিউলার তৈরি করতে আমরা এক্সপ্রেস ফ্রেমওয়ার্ক ব্যবহার করব। শুরু করার জন্য, আমাদের একটি node.js পরিবেশ সেট আপ করতে হবে এবং একটি এক্সপ্রেস সার্ভার সেট আপ করতে হবে।
featured image - আমি কিভাবে NodeJs এ একটি ইভেন্ট শিডিউলার তৈরি করেছি
Arindam Majumder  HackerNoon profile picture

ভূমিকা

COVID-এর পর থেকে, আমার ক্যালেন্ডার স্ট্যান্ড-আপ, টিম মিটিং এবং ক্লায়েন্ট কলে পরিপূর্ণ।


যাইহোক, একটি ইভেন্টের সময় নির্ধারণ করা এবং অতিথিদের আমন্ত্রণ জানানো বিরক্তিকর কাজ। এক শুক্রবার, এসব নিয়ে অনেক সময় কাটানোর পর আমি ভাবলাম-

কেন আমি এই জন্য এত সময় ব্যয় করছি?

গম্ভীরভাবে হতাশ GIF

এইভাবে, আমার কাজকে সহজ করার জন্য একটি ইভেন্ট শিডিউলার তৈরি করার ধারণা ছিল!


এই নিবন্ধে, আমি আপনাকে দেখাব কীভাবে একটি Nodejs অ্যাপ্লিকেশন তৈরি করতে হয় যা ইভেন্ট তৈরি করতে পারে এবং Google Meet লিঙ্কগুলির সাথে স্বয়ংক্রিয়ভাবে ইমেল আমন্ত্রণ পাঠাতে পারে।


উত্তেজিত? আমিও।


তাই আর দেরি না করে!


শুরু করা যাক!

প্রকল্প সেটআপ:

1. Node.js প্রকল্প তৈরি করুন:

আমাদের প্রকল্প শুরু করতে, আমাদের একটি Node.js পরিবেশ সেট আপ করতে হবে। সুতরাং, এর একটি নোড প্রকল্প তৈরি করা যাক. টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।

 npm init -y


এটি একটি নতুন Node.js প্রকল্প শুরু করবে।

2. নির্ভরতা ইনস্টল করুন:

এখন, আমরা আমাদের প্রকল্পের প্রয়োজনীয় নির্ভরতা ইনস্টল করব।

 npm install express googleapis dotenv


এটি নিম্নলিখিত প্যাকেজগুলি ইনস্টল করবে:

  • express: Node.js এর জন্য একটি জনপ্রিয় ওয়েব ফ্রেমওয়ার্ক


  • dotenv: একটি .env ফাইল থেকে পরিবেশ ভেরিয়েবল লোড করে।


  • googleapis: বিভিন্ন Google API-এ অ্যাক্সেস প্রদান করে

3. এনভায়রনমেন্ট ভেরিয়েবল সেটআপ করুন:

এরপরে, আমরা আমাদের সংবেদনশীল তথ্য যেমন API শংসাপত্রের মতো নিরাপদে সংরক্ষণ করতে একটি .env ফোল্ডার তৈরি করব।

 //.env PORT = YOUR_PORT || 8000 CLIENT_ID = YOUR_CLIENT_ID CLIENT_SECRET = YOUR_CLIENT_SECRET REDIRECT_URL = http://localhost:8000/auth/redirect API_KEY = YOUR_API_KEY

4. এক্সপ্রেস সার্ভার তৈরি করুন:

এখন, আমরা রুট ডিরেক্টরিতে একটি index.js ফাইল তৈরি করব এবং একটি মৌলিক এক্সপ্রেস সার্ভার সেট আপ করব। নিম্নলিখিত কোড দেখুন:

 const express = require("express"); const dotenv = require("dotenv"); dotenv.config(); const app = express(); const port = process.env.PORT || 8000; app.get("/", (req, res) => { res.send("Hello World"); }); app.listen(port, () => { console.log(`Server running on port ${port}`); });

এখানে, আমরা .env ফাইল থেকে PORT নম্বর অ্যাক্সেস করতে "dotenv" প্যাকেজ ব্যবহার করছি।


প্রোজেক্টের শীর্ষে, আমরা dotenv.config() ব্যবহার করে এনভায়রনমেন্ট ভেরিয়েবল লোড করছি যাতে এটি পুরো ফাইল জুড়ে অ্যাক্সেসযোগ্য হয়।

গুগল কনসোল সেট আপ করা হচ্ছে

প্রথমে, আমরা Google Cloud Console- এ যাব।


তারপর আমরা এই ড্যাশবোর্ড পাব। (আমি আগে একটি প্রকল্প তৈরি করেছি তাই আমি এটি পাচ্ছি, আপনি অন্য কিছু পেতে পারেন)।

গুগল ক্লাউড কনসোল

এখন, আমরা একটি নতুন প্রকল্প শুরু করতে 'নতুন প্রকল্প' বোতামে ক্লিক করব।

নতুন প্রকল্প পাতা


পরবর্তী, আমরা এই মত কিছু পাবেন. এখানে, আমরা আমাদের প্রকল্পের নাম এবং সংস্থা যোগ করব। এই প্রকল্পের জন্য, আমি এটিকে "মেল-ইন্টিগ্রেশন-ডেমো" হিসাবে রাখছি। তারপরে আমরা এগিয়ে যাওয়ার জন্য তৈরি বোতামে ক্লিক করব


নতুন প্রকল্পের বিবরণ

এর পরে, পাশের নেভিগেশন বারে, আমরা "এপিআই এবং পরিষেবাদি" পাব। এই বিভাগের মধ্যে, API এবং পরিষেবাগুলি সক্ষম করার জন্য একটি সাবমেনু রয়েছে৷ আমরা এগিয়ে যেতে যে ক্লিক করব.

API এবং পরিষেবা

এর পরে, আমরা এই প্রজেক্টে যে APIটি ব্যবহার করব তা সক্রিয় করব, যেমন Google ক্যালেন্ডার API।

গুগল ক্যালেন্ডার API

এর পরে, আমরা OAuth সম্মতি স্ক্রীনে যাব। এখানে, আমরা External হিসেবে User Type নির্বাচন করব। এবং আমরা এগিয়ে যাওয়ার জন্য তৈরি বোতাম টিপুন।

OAuth সম্মতি স্ক্রীন


তারপর, আমরা অ্যাপ রেজিস্ট্রেশন পৃষ্ঠায় যাব। এখানে আমরা আমাদের আবেদন সম্পর্কে আরো তথ্য যোগ করা হবে. আমরা ব্যবহারকারীর সহায়তার জন্য আমাদের অ্যাপের নাম এবং একটি ইমেল ঠিকানা যোগ করে শুরু করি।


এই প্রকল্পের জন্য, আমি এটির নাম দেব "অরিন্দমের মেল ইন্টিগ্রেশন" এবং সমর্থনের জন্য আমার নিজের ইমেল ঠিকানা ব্যবহার করব৷

অ্যাপ তথ্য পৃষ্ঠা

এর পরে, আমাদের অ্যাপ্লিকেশনের সুযোগ নির্ধারণ করতে হবে।

স্কোপ পৃষ্ঠা

স্কোপ-এ, আমরা এই প্রকল্পের জন্য userinfo.email এবং userinfo.profile এর মতো প্রয়োজনীয় অনুমতি যোগ করব।

নির্বাচিত সুযোগ

এর পরে, আমরা আমাদের অ্যাপ্লিকেশনটিতে একজন পরীক্ষামূলক ব্যবহারকারী যুক্ত করব।

পরীক্ষা ব্যবহারকারী পৃষ্ঠা

সেটাই। আমাদের আবেদন প্ল্যাটফর্মের সাথে নিবন্ধিত।


এখন, আমরা আমাদের OAuth ক্লায়েন্ট আইডি সিক্রেট তৈরি করব। এর জন্য, আমরা ক্রেডেনশিয়াল অংশে যাব।

গুগল কনসোল ড্যাশবোর্ড

এখানে, আমরা আমাদের অ্যাপ্লিকেশনের ধরন এবং এর নাম যোগ করব। এই প্রকল্পের জন্য, এটি একটি ওয়েব অ্যাপ্লিকেশন, এবং এর নাম অরিন্দমের মেইল ডেমো।

OAuth ক্লায়েন্ট আইডি

এছাড়াও, আমরা একটি পুনঃনির্দেশ URL যোগ করেছি। এই প্রকল্পের জন্য, এটি হতে যাচ্ছে http://localhost:8000/auth/redirect

ইউআরএল রিডাইরেক্ট করুন

এবং তারপর আমরা OAuth শংসাপত্র পাব।

OAuth ক্লায়েন্ট তৈরি করা হয়েছে

পরবর্তীতে, আমরা API কী তৈরি করব।

API কী জেনারেশন পৃষ্ঠা

এই সব করার পরে, আমরা আমাদের .env ফাইলটি API কী এবং OAuth শংসাপত্রের সাথে আপডেট করব যা আমরা আগে তৈরি করেছি।


এর সাথে, আমরা এই প্রকল্পের জন্য আমাদের Google ক্লাউড কনসোল সেট আপ করেছি, এখন পরবর্তী বিভাগে যাওয়া যাক

OAuth 2 প্রমাণীকরণ:

এখন পর্যন্ত, আমরা আমাদের মৌলিক প্রকল্প সেটআপ সম্পন্ন করেছি। এখন, আমরা আমাদের প্রকল্পে OAuth2 প্রমাণীকরণকে একীভূত করব। এটি আমাদের অ্যাপ্লিকেশনকে Google পরিষেবাগুলির সাথে নিরাপদে যোগাযোগ করতে সক্ষম করে৷ এর জন্য, প্রথমে, আমরা প্রয়োজনীয় প্যাকেজগুলি index.js ফাইলে আমদানি করব।

 const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv');


তারপরে আমরা Google ক্যালেন্ডার API-এর জন্য প্রয়োজনীয় অ্যাক্সেসের সুযোগ নির্ধারণ করব।

 const scopes = ['https://www.googleapis.com/auth/calendar'];


এরপর, আমরা .env ফাইলে যে শংসাপত্রগুলি সংরক্ষণ করেছি তা ব্যবহার করে আমরা OAuth 2 ক্লায়েন্ট কনফিগার করব।

 // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL );


OAuth 2 কনফিগারেশনের পরে, আমরা আমাদের ব্যবহারকারীদের প্রমাণীকরণের জন্য একটি রুট তৈরি করব।

 app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } );

যখন আমাদের ব্যবহারকারীরা এই রুটে যায়, তখন তাদের Google এর প্রমাণীকরণ পৃষ্ঠায় পুনঃনির্দেশিত করা হবে যেখানে এটি আমাদের অ্যাপ্লিকেশনের জন্য নির্দিষ্ট অনুমতি চাইবে।


সফল প্রমাণীকরণের পরে, Google ব্যবহারকারীকে আমাদের পুনঃনির্দেশ URL এ পুনঃনির্দেশ করবে ( /auth/redirect )

 app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );


এখানে, আমরা ক্যোয়ারী থেকে রিফ্রেশ টোকেন পাচ্ছি এবং সেগুলিকে oauth2Client এ শংসাপত্র হিসাবে সংরক্ষণ করছি। এই শংসাপত্রগুলি আমাদের Google ক্যালেন্ডার API এ অনুরোধ করতে সাহায্য করবে৷


এখানে index.js এর জন্য সম্পূর্ণ কোড আছে:

 //index.js const express = require('express'); const { google } = require('googleapis'); const dotenv = require('dotenv'); const app = express(); dotenv.config(); const port = process.env.PORT || 8000; app.get('/', (req, res) => { res.send('Hello World'); } ); // Define the scope of access for the Google Calendar API. const scopes = ['https://www.googleapis.com/auth/calendar']; // OAuth 2 configuration const oauth2Client = new google.auth.OAuth2 ( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URL ); app.get('/auth', (req, res) => { const url = oauth2Client.generateAuthUrl ({ access_type: 'offline', scope: scopes }); res.redirect(url); } ); app.get("/auth/redirect", async (req, res) => { const {tokens} = await oauth2Client.getToken(req.query.code); oauth2Client.setCredentials(tokens); res.send('Authentication successful! Please return to the console.'); } );

Google ক্যালেন্ডারে ইভেন্টের সময় নির্ধারণ করা

এখানে সবচেয়ে গুরুত্বপূর্ণ অংশ আসে! এই বিভাগে, আমরা Google ক্যালেন্ডারে একটি ইভেন্টের সময় নির্ধারণ করব!


শুরু করার জন্য, আমরা Google ক্যালেন্ডার API ক্লায়েন্ট শুরু করব।

 const calendar = google.calendar({ version: 'v3', auth: oauth2Client });


এর পরে, আমরা একটি ইভেন্ট অবজেক্ট তৈরি করব যেখানে আমরা ইভেন্টের সমস্ত বিবরণ যোগ করব যেমন সারাংশ, অবস্থান, শুরু এবং শেষের সময় ইত্যাদি।

 const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, };

এর পরে আমরা একটি রুট তৈরি করব ( /create-event ) যেখানে আমরা ইভেন্টটি তৈরি করব।


এখানে আমরা calendar.events.insert() পদ্ধতি ব্যবহার করে ব্যবহারকারীর ক্যালেন্ডারে একটি ইভেন্ট সন্নিবেশ করছি।

 app.get('/create-event', async (req, res) => { try { const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client, resource: event }); res.send({ status: 200, message: 'Event created', }); } catch (err) { console.log(err); res.send(err); } } );

এটির সাহায্যে, আমরা গতিশীলভাবে গুগল ক্যালেন্ডারে ইভেন্টগুলি নির্ধারণ করতে পারি।

Google Meet লিঙ্ক যোগ করা হচ্ছে:

এখন পর্যন্ত, আমরা কীভাবে গুগল ক্যালেন্ডারে একটি সাধারণ ইভেন্ট তৈরি করতে হয় তা অনুসন্ধান করেছি। এই বিভাগে, আমরা সেই ইভেন্টে কীভাবে একটি Google Meet লিঙ্ক যোগ করতে হয় তা অন্বেষণ করব!


এর জন্য, আমরা পূর্ববর্তী বিভাগে যে ইভেন্ট অবজেক্ট তৈরি করেছি তা আপডেট করব। Google Meet লিঙ্ক তৈরির অনুরোধ উল্লেখ করতে আমরা conferenceData প্রপার্টি যোগ করব।

 conferenceData: { createRequest: { requestId: uuid(), } },


ইভেন্টে অতিথিদের আমন্ত্রণ জানাতে আমরা একটি attendees সম্পত্তিও যোগ করব। এখানে এর একটি সহজ উদাহরণ:

 attendees: [ {email: '[email protected]'}, ]


এখন, ইভেন্ট অবজেক্ট এই মত দেখায়:

 const event = { summary: 'Tech Talk with Arindam', location: 'Google Meet', description: "Demo event for Arindam's Blog Post.", start: { dateTime: "2024-03-14T19:30:00+05:30", timeZone: 'Asia/Kolkata' }, end: { dateTime: "2024-03-14T20:30:00+05:30", timeZone: 'Asia/Kolkata' }, colorId: 1, conferenceData: { createRequest: { requestId: uuid(), } }, attendees: [ {email: '[email protected]'}, ] };


এর পরে, ইভেন্ট সন্নিবেশ ধাপে, আমরা এতে conferenceDataVersion প্যারামিটার যোগ করব।

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1, resource: event });


এটি একটি Google Meet লিঙ্ক দিয়ে একটি ইভেন্ট তৈরি করবে। আমরা এই মত একটি প্রতিক্রিয়া হিসাবে লিঙ্ক শেয়ার করতে পারেন:

 res.send({ status: 200, message: 'Event created', link: result.data.hangoutLink });

অংশগ্রহণকারীদের অনুস্মারক পাঠানো হচ্ছে:

সুতরাং, আমরা আমাদের প্রকল্পের সাথে প্রায় সম্পন্ন করেছি, শুধু চূড়ান্ত স্পর্শ বাকি আছে। এখন পর্যন্ত, আমাদের প্রকল্প সরাসরি আমন্ত্রিত অতিথিদের ক্যালেন্ডারে ইভেন্ট যোগ করবে।


যাইহোক, এই ঘটনাগুলি সম্পর্কে তাদের অবহিত করার জন্য, আমাদের একটি মেইল পাঠাতে হবে। এর জন্য, ইভেন্ট তৈরির অংশে আমাদের একটি প্যারামিটার sendUpdates: 'all', এর মাধ্যমে, অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে আমন্ত্রিত অতিথিদের ইমেল পাঠাবে।

 const result = await calendar.events.insert({ calendarId: 'primary', auth:oauth2Client , conferenceDataVersion: 1 , sendUpdates: 'all', resource: event });

এই সংযোজনের সাথে, আমাদের প্রকল্পটি এখন ইভেন্ট তৈরি এবং ইমেল বিজ্ঞপ্তি উভয়ই নির্বিঘ্নে পরিচালনা করে।

আবেদন পরীক্ষা করা:

আমাদের প্রকল্পের কোডিং অংশ সম্পন্ন হয়েছে. এখন দেখা যাক কাজ হয় কি না!


যে জন্য, আমরা প্রকল্প শুরু করব!

 npm run start


এবং আমরা 8000 পোর্টে আমাদের সার্ভার চালু করেছি! এখন, আমরা ব্যবহারকারীকে প্রমাণীকরণ করতে http://localhost:8000/auth/ রুটে যাব। এটি আমাদের এইরকম কিছুতে পুনঃনির্দেশিত করবে:

সাইন ইন পৃষ্ঠা

এটি আবেদনের জন্য কিছু অনুমতি চাইবে।

অনুমতি পৃষ্ঠা

এটি code ক্যোয়ারী প্যারামিটার সহ /auth/redirect রুটে পুনঃনির্দেশিত করবে।

/auth/রিডাইরেক্ট রুট

ব্যবহারকারীকে সফলভাবে প্রমাণীকরণ করার পরে, আমরা ইভেন্টটি নির্ধারণ করতে http://localhost:8000/create-event রুটে যাব।

http://localhost:8000/create-event রুট

অসাধারন! এর মানে আমাদের ইভেন্টটি একটি Google Meet লিঙ্ক দিয়ে তৈরি করা হয়েছে।


ইভেন্ট তৈরির প্রক্রিয়া সঠিকভাবে কাজ করছে কিনা তা যাচাই করতে, আসুন আমাদের Google ক্যালেন্ডার পরীক্ষা করি

গুগল ক্যালেন্ডার

আশ্চর্যজনক! আমাদের ইভেন্ট তৈরি হয়েছে যার মানে ইভেন্ট-সৃষ্টি রুট পুরোপুরি কাজ করছে! এবং আমরা একটি আমন্ত্রণ মেইলও পেয়েছি:

ইভেন্ট আমন্ত্রণ মেইল.

দারুণ! আমাদের অ্যাপ্লিকেশন পুরোপুরি কাজ করছে!


এর সাথে, আমরা আমাদের Node.js অ্যাপে Google ক্যালেন্ডারকে একীভূত করেছি। নিম্নলিখিত নিবন্ধগুলিতে, আমরা Google ক্যালেন্ডারের সাথে আরও ব্যবহারের ক্ষেত্রে অন্বেষণ করব৷


ততক্ষণ, সাথেই থাকুন!

উপসংহার

আপনি যদি এই ব্লগ পোস্টটি সহায়ক বলে মনে করেন, অনুগ্রহ করে এটিকে অন্যদের সাথে ভাগ করে নিন যারা উপকৃত হতে পারে। আপনি জাভাস্ক্রিপ্ট, প্রতিক্রিয়া, এবং অন্যান্য ওয়েব ডেভেলপমেন্ট বিষয়গুলিতে আরও সামগ্রীর জন্য আমাকে অনুসরণ করতে পারেন।


অর্থপ্রদানের সহযোগিতার জন্য, আমাকে ইমেল করুন: [email protected]


আমার সাথে Twitter , LinkedIn , YouTube , এবং GitHub- এ সংযোগ করুন।


পড়ার জন্য আপনাকে ধন্যবাদ :)

ধন্যবাদ