কোডল্যাব: জেমিনি ব্যবহার করে জাভাস্ক্রিপ্টে একটি ক্রোম এক্সটেনশন তৈরি করুন

1. ভূমিকা

আপনি কি একটি মিট কলে যোগ দিচ্ছেন কিন্তু প্রথম ব্যক্তি হতে চান না? যদি এটি আপনাকে বর্ণনা করে, আমাদের কাছে আপনার জন্য সমাধান আছে!

এই কোডল্যাব অনুসরণ করে, আপনি একটি ক্রোম এক্সটেনশন তৈরি করবেন যা আপনাকে সতর্ক করবে যখন প্রথম অংশগ্রহণকারী কলে যোগদান করবে।

আপনি একটি ক্রোম এক্সটেনশনের বিভিন্ন উপাদান শিখবেন এবং তারপর এক্সটেনশনের প্রতিটি অংশে গভীরভাবে ডুব দেবেন। আপনি এক্সটেনশন ফাংশন সম্পর্কে শিখবেন যেমন বিষয়বস্তু স্ক্রিপ্ট, পরিষেবা কর্মী এবং বার্তা পাসিং।

যখনই একজন অংশগ্রহণকারী একটি মিট কলে যোগ দেয় তখন একটি বিজ্ঞপ্তি পেতে সক্ষম হতে আপনাকে ম্যানিফেস্ট v3 রিলিজ মেনে চলতে হবে।

2. আপনি শুরু করার আগে

পূর্বশর্ত

যদিও এই কোডল্যাবটি নতুনদের জন্য উপযোগী, জাভাস্ক্রিপ্টের একটি মৌলিক বোঝার অধিকারী হওয়া আপনার অভিজ্ঞতাকে ব্যাপকভাবে বাড়িয়ে তুলতে পারে।

সেটআপ/প্রয়োজনীয়তা

  • ক্রোম ব্রাউজার
  • আপনার স্থানীয় সিস্টেমে একটি IDE/Editor সেটআপ।
  • আপনি gcloud ব্যবহার করে Gemini API সক্ষম করতে চাইলে gcloud cli ইনস্টল করুন।

Gemini API সক্ষম করুন

Note that if you're writing the code in the Cloud Shell editor,
then you will have to download the folder somewhere on your local filesystem to test the extension locally.

3. মজা শুরু করা যাক

বেসিক এক্সটেনশন ইনস্টলেশন

আসুন একটি ডিরেক্টরি তৈরি করি যা আমরা আমাদের প্রকল্পের রুট হিসাবে ব্যবহার করব।

mkdir gemini-chrome-ext
cd gemini-chrome-ext

আমরা মিথুনকে নির্দিষ্ট প্রশ্ন জিজ্ঞাসা করা শুরু করার আগে, আসুন একটি ক্রোম এক্সটেনশনের জেনেরিক গঠন সম্পর্কে কিছু প্রশ্ন জিজ্ঞাসা করি।

প্রম্পট:

What are the important parts to build a chrome extension?

আমরা manifest ফাইল, background script এবং ইউজার ইন্টারফেস সম্পর্কে বিশদ বিবরণ উল্লেখ করে একটি প্রতিক্রিয়া পাই। আসুন এই নির্দিষ্ট ফাইলগুলির জন্য আরও বিশদে জেনে নেওয়া যাক।

প্রম্পট:

Create a manifest.json file to build a chrome extension.
Make the name of the extension "Meet Joinees Notifier"
and the author "<YOUR_EMAIL>"

আপনি লেখক ক্ষেত্রে একটি পছন্দসই নাম এবং আপনার ইমেল ব্যবহার করতে পারেন.

Gemini আমাদের প্রয়োজনীয় ম্যানিফেস্ট ফাইলের বিষয়বস্তু ফেরত দেয়, কিন্তু আমরা কিছু অতিরিক্ত ক্ষেত্র পাই যা আমাদের প্রয়োজন হবে না, যেমন action ফিল্ড। এছাড়াও, আমরা একটি বিবরণ প্রয়োজন. এর ঠিক করা যাক.

প্রম্পট:

Remove the "action" field and make the description as
"Adds the ability to receive a notification when a participant joins a Google meet".

আপনার প্রজেক্টের রুটে manifest.json ফাইলে এই বিষয়বস্তু রাখি।

এই পর্যায়ে ম্যানিফেস্ট ফাইলটি এরকম কিছু দেখতে হবে।

{
    "name": "Meet Joinees Notifier",
    "version": "1.0",
    "manifest_version": 3,
    "description": "Adds the ability to receive a notification when a participant joins a Google Meet",
    "author": "<YOUR_EMAIL>"
}

এই কোডল্যাব আপনার ম্যানিফেস্ট ফাইলে এই ক্ষেত্রগুলিকে অনুমান করার জন্য আপনার ম্যানিফেস্ট ফাইলে তৈরি হওয়া অন্য যেকোন অতিরিক্ত ক্ষেত্রগুলিকে সরান৷

এখন, আমরা কিভাবে পরীক্ষা করব যে এক্সটেনশন কাজ করে? আসুন আমাদের বন্ধু মিথুনকে জিজ্ঞাসা করি, আমরা করব?

প্রম্পট:

Guide me on the steps needed to test a chrome extension on my local filesystem.

এটি আমাকে কীভাবে পরীক্ষা করতে হয় তার কিছু পদক্ষেপ দেয়। আসুন chrome://extensions এ নেভিগেট করে "Extensions Page" -এ নেভিগেট করি এবং "Developer Mode" বোতামটি সক্ষম করার বিষয়টি নিশ্চিত করুন, যা "Load unpacked" বোতামটি প্রকাশ করবে, যা আমরা ফোল্ডারে নেভিগেট করতে ব্যবহার করতে পারি যেটিতে স্থানীয়ভাবে এক্সটেনশন ফাইল। একবার আমরা এটি করি, আমরা "Extensions Page" এ এক্সটেনশনটি দেখতে সক্ষম হব।

3d802a497ce0cfc2.png

92db1999a1800ecd.png

দারুণ! আমরা আমাদের এক্সটেনশন দেখতে পারি, কিন্তু কিছু কার্যকারিতা যোগ করা শুরু করা যাক।

4. একটি বিষয়বস্তু স্ক্রিপ্ট যোগ করুন

আমরা শুধুমাত্র https://meet.google.com এ কিছু জাভাস্ক্রিপ্ট কোড চালাতে চাই যা আমরা কন্টেন্ট স্ক্রিপ্ট ব্যবহার করে করতে পারি। আসুন মিথুনকে জিজ্ঞাসা করুন, আমাদের এক্সটেনশনে কীভাবে এটি অর্জন করা যায়।

প্রম্পট:

How to add a content script in our chrome extension?

বা আরও নির্দিষ্টভাবে:

প্রম্পট:

How to add a content script to run on meet.google.com subdomain in our chrome extension?

অথবা অন্য সংস্করণ:

প্রম্পট:

Help me add a content script named content.js to run on meet.google.com subdomain
in our chrome extension. The content
script should simply log "Hello Gemini" when we navigate to "meet.google.com".

Gemini আমাদের manifest.json ফাইলে এবং আমাদের content.js ফাইলে আমাদের প্রয়োজনীয় জাভাস্ক্রিপ্টের সঠিক পরিবর্তনগুলি দেয়।

content_scripts যোগ করার সাথে সাথে, আমাদের ম্যানিফেস্ট ফাইল হয়ে যায়:

{
    "name": "Meet Joinees Notifier",
    "version": "1.0",
    "manifest_version": 3,
    "description": "Adds the ability to receive a notification when a participant joins a Google Meet",
    "author": "abc@example.com",
    "content_scripts": [
        {
          "matches": ["https://meet.google.com/*"],
          "js": ["content.js"]
        }
    ]
}

যখনই আমরা সাবডোমেন " https://meet.google.com "-এর একটি পৃষ্ঠায় নেভিগেট করি তখন এটি chrome-কে কন্টেন্ট স্ক্রিপ্ট content.js ইনজেক্ট করতে বলে৷ আসুন এই ফাইলটি যোগ করে পরীক্ষা করা যাক?

এই কোডটি content.js ফাইলে যোগ করা যাক।

console.log("Hello Gemini");

যথেষ্ট নিশ্চিত! যখন আমরা meet.google.com পরিদর্শন করি তখন আমরা জাভাস্ক্রিপ্ট কনসোলে "হ্যালো জেমিনি" দেখতে পাই (Mac: Cmd + Opt + J / Win/Linux: Ctrl + Shift + J )।

manifest.json

{

"name": "Meet Joinees Notifier",

"version": "1.0",

"manifest_version": 3,

"description": "Adds the ability to receive a notification when a participant joins a Google Meet",

"author": "luke@cloudadvocacyorg.joonix.net",

"permissions": [

    "tabs",

    "notifications"

],

"content_scripts": [

    {

        "matches": [

            "https://meet.google.com/*"

        ],

        "js": [

            "content.js"

        ]

    }

]

}

content.js

console.log("হ্যালো মিথুন!");

6216bab627c31e6c.png

d61631cd9962ffe5.png

দারুণ! এখন আমরা এমন একটি অবস্থানে আছি যেখানে আমরা আমাদের অ্যাপে কিছু জাভাস্ক্রিপ্ট নির্দিষ্ট কার্যকারিতা যোগ করতে পারি। আসুন একটু সময় নিয়ে ভাবি যে আমরা কী অর্জন করার চেষ্টা করছি।

বিষয়বস্তু স্ক্রিপ্ট উন্নত

আমরা যখন মিটিং পৃষ্ঠায় থাকি তখন কেউ একটি মিটিংয়ে যোগদান করলে আমরা একটি বিজ্ঞপ্তি পেতে সক্ষম হতে চাই (যেখানে আমাদের মিটিংয়ে যোগদানের বিকল্প আছে)। এটি অর্জন করার জন্য, দেখা যাক মিটিং ফাঁকা থাকলে স্ক্রীনটি কীভাবে দৃশ্যত পরিবর্তন হয় বনাম যখন কেউ মিটিংয়ে যোগ দেয়।

মিটিংয়ে কেউ না থাকলে এমনই দেখায়।

fe5a0c95b20e7f72.png

যখন মিটিংয়ে কিছু অংশগ্রহণকারী থাকে তখন এই দৃশ্যগুলি হয়।

7a5ef60521d961cc.png

ব্যাট থেকে আমরা 2টি উল্লেখযোগ্য পার্থক্য দেখতে পাচ্ছি:

  1. স্ট্যাটাস টেক্সট "এখানে আর কেউ নেই" থেকে "[ব্যবহারকারী] এই কলে আছেন" এ পরিবর্তিত হয়।
  2. আমরা কলে যোগদানকারী ব্যবহারকারীদের ছবি দেখতে পাচ্ছি।

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

হটকি দিয়ে ক্রোমে "এলিমেন্টস ইন্সপেক্টর" খুলুন ( Mac: Cmd + Opt + C / Win: Ctrl + Shift + C ) তারপর যোগদানকারী ব্যবহারকারীর ছবিতে ক্লিক করুন।

আমরা লক্ষ্য করতে পারি যে কয়েকটি শ্রেণির স্ট্রিং সহ একটি চিত্র রয়েছে এবং চিত্রটির শিরোনাম বৈশিষ্ট্যটিতে মিটিংয়ে যোগদানকারী ব্যবহারকারীর নাম রয়েছে। তাছাড়া, এই ইমেজ ট্যাগটি ক্লাস U04fid এর সাথে একটি ডিভ-এ মোড়ানো। একবার আমরা আমাদের পরীক্ষার মিটিংয়ে কিছু যোগদানকারীকে যোগ করলে আমরা দেখতে পাব যে এই প্যারেন্ট ডিভ একাধিক ছবি হোস্ট করে (বিভিন্ন ব্যবহারকারীদের সাথে সম্পর্কিত)।

সুতরাং, আমাদের মনে একটি আংশিক কৌশল রয়েছে:

  1. U04fid ক্লাসের ডিভ-এ কোন উপাদান থাকলে তা শনাক্ত করুন।
  2. যদি তা হয়, তাহলে এর মানে হল যে আমাদের মিটিংয়ে আমরা যোগদান করেছি।
  3. ব্যবহারকারীকে অবহিত করুন।

আসুন মিথুন রাশিতে ফিরে যাই এবং জিজ্ঞাসা করি কিভাবে আমরা ধাপে ধাপে এই অর্জন করতে পারি।

প্রম্পট:

How to detect for element changes in the HTML page?

এটি আমাদের MutationObserver সাথে জড়িত একটি সমাধান দেয়, কিন্তু আমাদের প্রয়োজনীয়তার জন্য নির্দিষ্ট কিছু নয়, আসুন প্রম্পটটি পরিবর্তন করার চেষ্টা করি।

প্রম্পট:

How can I detect if an element "div.U04fid" has any child images in the HTML page?

এইবার আমরা একটি সমাধান পেয়েছি যা MutationObserver অন্তর্ভুক্ত করে না কিন্তু একটি সমাধান যা প্যারেন্ট ডিভ ব্যবহার করে যোগদানকারীদের জন্য পরীক্ষা করে।

আমরা যা পেয়েছি তা হল:

const divU04fid = document.querySelector('div.U04fid');
const childImages = divU04fid.querySelectorAll('img');
if (childImages.length > 0) {
  // div.U04fid has at least one child image.
}

আসুন আমাদের পদ্ধতিকে আরও সংশোধন করার চেষ্টা করি:

প্রম্পট:

Create a method which checks if the element div.U04fid has any child elements,
if it does it should log it on the console. The method should be called checkJoinees
and it should be called as a callback for MutationObserver which is observing the document.body.

এটি নিম্নলিখিত কোড স্নিপেটের সাথে ফিরে আসে:

function checkJoinees(mutations) {
    for (const mutation of mutations) {
      if (mutation.type === 'childList') {
        // A child node was added or removed.
        if (document.querySelector('div.U04fid') && document.querySelector('div.U04fid').childElementCount > 0) {
          // div.U04fid has at least one child element.
          console.log('div.U04fid has at least one child element.');
        }
      }
    }
    return false;
}

const observer = new MutationObserver(checkJoinees);
observer.observe(document.body, {
  childList: true,
  delay: 1000
});

এই কোডটি content.js ফাইলে কপি করুন, এক্সটেনশনটি পুনরায় লোড করুন (তারপর মিট পৃষ্ঠাটি পুনরায় লোড করুন)।

এখন কেউ আমাদের মিটিংয়ে যোগ দিলে আমরা কনসোলে লগ স্টেটমেন্ট দেখতে পাব।

5. ব্যবহারকারীকে একটি বিজ্ঞপ্তি পাঠান

এখন যেহেতু একজন অংশগ্রহণকারী কখন মিটিংয়ে যোগ দিয়েছে তা আমরা শনাক্ত করতে সক্ষম হয়েছি, আসুন আমাদের ক্রোম এক্সটেনশনে বিজ্ঞপ্তি অংশ যোগ করার চেষ্টা করি। আমরা chrome এক্সটেনশনের ডকুমেন্টেশন ব্রাউজ করতে পারি বা এমনকি আমরা কী খুঁজছি তা জানতে প্রম্পটগুলিকে টুইক করতে পারি, কিন্তু মূলত আমাদের chrome.notifications.create API ব্যবহার করতে হবে এবং এই পদ্ধতিতে কলটি একজন ব্যাকগ্রাউন্ড পরিষেবা কর্মী হতে হবে৷

প্রম্পট:

Using the documentation for chrome notifications tell me how to use the chrome.notifications.create method.

আমরা প্রধান হাইলাইট সহ কিছু বিস্তারিত পদক্ষেপ দেখতে পাই:

  • ম্যানিফেস্ট ফাইলে notifications অনুমতি যোগ করুন।
  • chrome.notifications.create-এ একটি কল করুন৷
  • কলটি একটি ব্যাকগ্রাউন্ড স্ক্রিপ্টে হওয়া উচিত।

manifest version 3 এ একটি ক্রোম এক্সটেনশনে একটি ব্যাকগ্রাউন্ড স্ক্রিপ্ট যোগ করার জন্য, আমাদের manifest.json ফাইলে background.service_worker ঘোষণার প্রয়োজন।

সুতরাং, আমরা background.js নামে একটি ফাইল তৈরি করি এবং আমাদের manifest.json ফাইলে নিম্নলিখিতগুলি যুক্ত করি।

"background": {
        "service_worker": "background.js"
},
"permissions": [
        "notifications"
]

উপরের সংযোজনগুলির সাথে, আমাদের ম্যানিফেস্ট ফাইলটি হয়ে যায়:

{
    "name": "Meet Joinees Notifier",
    "version": "1.0",
    "manifest_version": 3,
    "description": "Adds the ability to receive a notification when a participant joins a Google Meet",
    "author": "<YOUR_EMAIL>",
    "content_scripts": [
        {
          "matches": ["https://meet.google.com/*"],
          "js": ["content.js"]
        }
    ],
    "background": {
        "service_worker": "background.js"
    },
    "permissions": [
            "notifications"
    ]
}

প্রম্পট:

Create a method sendNotification that calls the chrome.notifications.create
method with the message, "A user joined the call" for a chrome extension with manifest v3,
the code is in the background service worker

এই ছবিটিকে আপনার ফোল্ডারের রুটে সংরক্ষণ করুন এবং এটির নাম success.png

b2c22f064a3f2d9c.png

তারপর আপনার background.js এ নিম্নলিখিত কোড স্নিপেট যোগ করুন।

function sendNotification(notificationId, message) {
    chrome.notifications.create(notificationId, {
      type: "basic",
      title: "A user joined the call",
      message: message,
      iconUrl: "./success.png"
    });
}

sendNotification("notif-id", "test message");

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

6. আপনার ক্রোম এক্সটেনশনে পাসিং বার্তা যোগ করুন

এখন, আমাদের প্রয়োজন শেষ বড় পদক্ষেপটি হল একটি অংশগ্রহণকারীর বিষয়বস্তু স্ক্রিপ্টের সনাক্তকরণ এবং ব্যাকগ্রাউন্ড স্ক্রিপ্টে sendNotification পদ্ধতি সংযুক্ত করা। ক্রোম এক্সটেনশনের পরিপ্রেক্ষিতে এটি করার উপায় হল message passing নামক একটি কৌশলের মাধ্যমে।

এটি একটি ক্রোম এক্সটেনশনের বিভিন্ন অংশের মধ্যে যোগাযোগ সক্ষম করে, আমাদের ক্ষেত্রে বিষয়বস্তু স্ক্রিপ্ট থেকে ব্যাকগ্রাউন্ড পরিষেবা কর্মী পর্যন্ত। আসুন আমাদের বন্ধু মিথুনকে জিজ্ঞাসা করুন কিভাবে এটি অর্জন করা যায়।

প্রম্পট:

How to send a message from the content script to the background script in a chrome extension

Gemini chrome.runtime.sendMessage এবং chrome.runtime.onMessage.addListener এ প্রাসঙ্গিক কলের সাথে সাড়া দেয়।

মূলত আমরা কন্টেন্ট স্ক্রিপ্ট থেকে একটি বার্তা পাঠাতে sendMessage ব্যবহার করব যে কেউ মিট কলে যোগ দিয়েছে এবং কনটেন্ট স্ক্রিপ্ট দ্বারা প্রেরিত বার্তায় প্রতিক্রিয়া জানাতে একটি ইভেন্ট লিসেনার হিসাবে onMessage.addListener । এই ক্ষেত্রে আমরা এই ইভেন্ট লিসেনার থেকে sendNotification পদ্ধতিতে কলটি ট্রিগার করব।

আমরা ব্যাকগ্রাউন্ড সার্ভিস ওয়ার্কারকে বিজ্ঞপ্তি বার্তা এবং একটি action প্রপার্টি পাঠাব। ব্যাকগ্রাউন্ড স্ক্রিপ্ট কি সাড়া দিচ্ছে তা action প্রপার্টি বর্ণনা করে।

সুতরাং, এখানে আমাদের content.js কোড:

function checkJoinees(mutations) {
    for (const mutation of mutations) {
      if (mutation.type === 'childList') {
        // A child node was added or removed.
        if (document.querySelector('div.U04fid') && document.querySelector('div.U04fid').childElementCount > 0) {
          // div.U04fid has at least one child element.
          sendMessage();
        }
      }
    }
    return false;
}

const observer = new MutationObserver(checkJoinees);
observer.observe(document.body, {
  childList: true,
  delay: 1000
});

function sendMessage() {
    chrome.runtime.sendMessage({
        txt: "A user has joined the call!",
        action: "people_joined"
    });
}

এবং এটি আমাদের background.js কোড:

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
    if (message.action === "people_joined") {
      sendNotification("notif-id", message.txt);
    }
  });
  

function sendNotification(notificationId, message) {
    chrome.notifications.create(notificationId, {
      type: "basic",
      title: "A user joined the call",
      message: message,
      iconUrl: "./success.png"
    });
}

আসুন বিজ্ঞপ্তি বার্তাটি কাস্টমাইজ করার চেষ্টা করি এবং একটি অনন্য বিজ্ঞপ্তি আইডি পেতে পারি। বিজ্ঞপ্তি বার্তার জন্য, আমরা ব্যবহারকারীর নাম অন্তর্ভুক্ত করতে পারি। আমরা যদি পূর্ববর্তী ধাপ থেকে স্মরণ করি, আমরা চিত্রের শিরোনাম বৈশিষ্ট্যে ব্যবহারকারীর নাম দেখতে পাব। সুতরাং, আমরা document.querySelector('div.U04fid > img').getAttribute('title').

বিজ্ঞপ্তি আইডি সম্পর্কে, আমরা বিষয়বস্তু স্ক্রিপ্টের ট্যাব আইডি আনতে পারি এবং এটি একটি বিজ্ঞপ্তি আইডি হিসাবে ব্যবহার করতে পারি। এটি sender.tab.id. ব্যবহার করে আমাদের ইভেন্ট লিসেনার chrome.runtime.onMessage.addListener এর ভিতরে সম্পন্ন করা যেতে পারে।

অবশেষে, আমাদের ফাইলগুলি এইরকম দেখতে হবে:

manifest.json

{
    "name": "Meet Joinees Notifier",
    "version": "1.0",
    "manifest_version": 3,
    "description": "Adds the ability to receive a notification when a participant joins a Google Meet",
    "author": "<YOUR_EMAIL>",
    "content_scripts": [
        {
          "matches": ["https://meet.google.com/*"],
          "js": ["content.js"]
        }
    ],
    "background": {
        "service_worker": "background.js"
    },
    "permissions": [
            "notifications"
    ]
}

content.js

function checkJoinees(mutations) {
    for (const mutation of mutations) {
      if (mutation.type === 'childList') {
        // A child node was added or removed.
        if (document.querySelector('div.U04fid') && document.querySelector('div.U04fid').childElementCount > 0) {
            const name = document.querySelector('div.U04fid > img').getAttribute('title');
            sendMessage(name);
        }
      }
    }
    return false;
}

const observer = new MutationObserver(checkJoinees);
observer.observe(document.body, {
  childList: true,
  delay: 1000
});

function sendMessage(name) {
    const joinee = (name === null ? 'Someone' : name),
        txt = `${joinee} has joined the call!`;

    chrome.runtime.sendMessage({
        txt,
        action: "people_joined",
    });
}

background.js

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
    if (message.action === "people_joined") {
      sendNotification("" + sender.tab.id, message.txt); // We are casting this to string as notificationId is expected to be a string while sender.tab.id is an integer.
    }
  });
  

function sendNotification(notificationId, message) {
    chrome.notifications.create(notificationId, {
      type: "basic",
      title: "A user joined the call",
      message: message,
      iconUrl: "./success.png"
    });
}

7. অভিনন্দন

অল্প সময়ের মধ্যে আমরা মিথুনের সাহায্যে একটি ক্রোম এক্সটেনশন তৈরি করতে সক্ষম হয়েছি। আপনি একজন অভিজ্ঞ ক্রোম এক্সটেনশন ডেভেলপার হোন বা এক্সটেনশনের জগতে নতুন, আপনি যে কাজগুলি অর্জন করতে চান তাতে মিথুন আপনাকে সাহায্য করতে পারে৷

আমি আপনাকে একটি ক্রোম এক্সটেনশনের সাথে বিভিন্ন জিনিস সম্পর্কে জিজ্ঞাসা করতে উত্সাহিত করব৷ chrome.storage , alarms ইত্যাদির মতো ব্রাউজ করার মতো অনেক API রয়েছে৷ আপনি যেখানেই আটকে থাকবেন, আপনি কী ভুল করছেন তা জানতে বা সমস্যা সমাধানের বিভিন্ন উপায় সংগ্রহ করতে Gemini বা ডকুমেন্টেশন ব্যবহার করুন৷

প্রয়োজনীয় সহায়তা পেতে প্রায়শই প্রম্পট পরিবর্তন করতে লাগে, তবে আমরা একটি ট্যাব থেকে তা করতে পারি যা আমাদের সমস্ত প্রাসঙ্গিক যাত্রাকে ধরে রাখে।