JavaScript কুইকস্টার্ট

একটি জাভাস্ক্রিপ্ট ওয়েব অ্যাপ্লিকেশন তৈরি করুন যা Gmail API-তে অনুরোধ পাঠায়।

কুইকস্টার্টে ব্যাখ্যা করা হয়েছে যে কীভাবে এমন অ্যাপ সেট-আপ ও রান করতে হয় যা Google Workspace API কল করে। এই কুইকস্টার্ট একটি সহজ যাচাইকরণ পদ্ধতি ব্যবহার করে যা টেস্টিং এনভায়রনমেন্টের জন্য উপযুক্ত। প্রোডাকশন এনভায়রনমেন্টের জন্য, আপনার অ্যাপের পক্ষে উপযুক্ত অ্যাক্সেস ক্রেডেনশিয়াল বেছে নেওয়ার আগে যাচাইকরণ ও অনুমোদন সম্পর্কে জেনে নেওয়ার সাজেশন আমরা দিই।

এই কুইকস্টার্ট যাচাইকরণ ও অনুমোদনের ফ্লোয়ের কিছু বিবরণ ম্যানেজ করতে Google Workspace-এর সাজেস্ট করা API ক্লায়েন্ট লাইব্রেরি ব্যবহার করে।

উদ্দেশ্য

  • আপনার এনভায়রনমেন্ট সেট-আপ করুন।
  • স্যাম্পেল সেট-আপ করুন।
  • স্যাম্পেল রান করুন।

পূর্বশর্ত

  • Gmail চালু আছে এমন Google অ্যাকাউন্ট।

আপনার পরিবেশ সেট-আপ করুন

এই কুইকস্টার্ট সম্পূর্ণ করতে, আপনার এনভায়রনমেন্ট সেট-আপ করুন।

API চালু করুন

Google API ব্যবহার করার আগে, আপনাকে Google Cloud প্রোজেক্টে সেগুলি চালু করতে হবে। আপনি একটি Google Cloud প্রোজেক্টে এক বা একাধিক API চালু করতে পারবেন।

OAuth-এর সম্মতি সংক্রান্ত স্ক্রিন কনফিগার করা

এই কুইকস্টার্ট সম্পূর্ণ করার জন্য আপনি নতুন Google Cloud প্রোজেক্ট ব্যবহার করলে, OAuth-এর সম্মতি সংক্রান্ত স্ক্রিন কনফিগার করুন। আপনি যদি আগেই আপনার Cloud প্রোজেক্টের জন্য এই ধাপ সম্পূর্ণ করে থাকেন, তাহলে পরবর্তী বিভাগে যান।

  1. Google API Console-এ, 'মেনু > Google Auth প্ল্যাটফর্ম > ব্র্যান্ডিং' বিকল্পে যান।

    ব্র্যান্ডিং বিকল্পে যান

  2. আপনি যদি আগে থেকেই Google Auth প্ল্যাটফর্ম কনফিগার করে থাকেন, তাহলে আপনি ব্র্যান্ডিং, দর্শক এবং ডেটা অ্যাক্সেস-এ নিম্নলিখিত OAuth-এর সম্মতি সংক্রান্ত স্ক্রিন সেটিংস কনফিগার করতে পারবেন। আপনি যদি Google Auth প্ল্যাটফর্ম এখনও কনফিগার করা হয়নি লেখা মেসেজ দেখতে পান, তাহলে শুরু করুন বিকল্পে ক্লিক করুন:
    1. অ্যাপের তথ্য বিকল্পের অধীনে, অ্যাপের নাম বিকল্পে, অ্যাপের জন্য একটি নাম লিখুন।
    2. ব্যবহারকারী সহায়তা ইমেল বিকল্পে, একটি সহায়তা ইমেল আইডি বেছে নিন যেখানে ব্যবহারকারীরা তাদের সম্মতি সম্পর্কে প্রশ্ন থাকলে আপনার সাথে যোগাযোগ করতে পারবেন।
    3. পরবর্তী বিকল্পে ক্লিক করুন।
    4. দর্শক বিকল্পের অধীনে, ইন্টার্নাল বিকল্প বেছে নিন।
    5. পরবর্তী বিকল্পে ক্লিক করুন।
    6. যোগাযোগের তথ্য বিকল্পের মধ্যে, একটি ইমেল আইডি লিখুন যেখানে আপনার প্রোজেক্টে কোনও পরিবর্তন হলে আপনাকে জানানো হবে।
    7. পরবর্তী বিকল্পে ক্লিক করুন।
    8. শেষ করুন বিকল্পের মধ্যে, Google API পরিষেবা সংক্রান্ত ব্যবহারকারীর ডেটা নীতি পর্যালোচনা করুন এবং আপনি সম্মত হলে, আমি Google API পরিষেবা: ব্যবহারকারীর ডেটা নীতিতে সম্মতি জানাচ্ছি বিকল্প বেছে নিন।
    9. চালিয়ে যান বিকল্পে ক্লিক করুন।
    10. তৈরি করুন বিকল্পে ক্লিক করুন।
  3. আপাতত, আপনি স্কোপ যোগ করা এড়িয়ে যেতে পারেন। ভবিষ্যতে, আপনার Google Workspace সংস্থার বাইরে ব্যবহার করার জন্য কোনও অ্যাপ তৈরি করলে, আপনাকে অবশ্যই ব্যবহারকারীর ধরন পরিবর্তন করে এক্সটার্নাল করতে হবে। তারপর আপনার অ্যাপের জন্য প্রয়োজনীয় অনুমোদনের স্কোপ যোগ করুন। আরও জানতে, সম্পূর্ণ OAuth সম্মতি কনফিগার করুন গাইড দেখুন।

ওয়েব অ্যাপ্লিকেশনের জন্য ক্রেডেনশিয়াল অনুমোদন করা

ব্যবহারকারীদের যাচাই করতে এবং আপনার অ্যাপে ব্যবহারকারীর ডেটা অ্যাক্সেস করতে, আপনাকে এক বা একাধিক OAuth 2.0 ক্লায়েন্ট আইডি তৈরি করতে হবে। Google-এর OAuth সার্ভারে একটি অ্যাপ শনাক্ত করতে ক্লায়েন্ট আইডি ব্যবহার করা হয়। আপনার অ্যাপ একাধিক প্ল্যাটফর্মে চললে, আপনাকে প্রতিটি প্ল্যাটফর্মের জন্য আলাদা ক্লায়েন্ট আইডি তৈরি করতে হবে।
  1. Google Cloud Console-এ, 'মেনু > Google Auth প্ল্যাটফর্ম > ক্লায়েন্ট' বিকল্পে যান।

    ক্লায়েন্ট বিকল্পে যান

  2. ক্লায়েন্ট তৈরি করুন বিকল্পে ক্লিক করুন।
  3. অ্যাপ্লিকেশনের ধরন > ওয়েব অ্যাপ্লিকেশন বিকল্পে ক্লিক করুন।
  4. নাম ফিল্ডে, ক্রেডেনশিয়ালের জন্য একটি নাম টাইপ করুন। এই নাম শুধুমাত্র Google Cloud Console-এ দেখানো হয়।
  5. আপনার অ্যাপের সাথে সম্পর্কিত অনুমোদিত URI যোগ করুন:
    • ক্লায়েন্ট-সাইড অ্যাপ (জাভাস্ক্রিপ্ট)–অনুমোদিত জাভাস্ক্রিপ্ট অরিজিন বিকল্পের মধ্যে, URI যোগ করুন বিকল্পে ক্লিক করুন। তারপর, ব্রাউজার অনুরোধের জন্য ব্যবহার করতে URI লিখুন। এটি সেইসব ডোমেন শনাক্ত করে যেগুলি থেকে আপনার অ্যাপ্লিকেশন OAuth 2.0 সার্ভারে API অনুরোধ পাঠাতে পারে।
    • সার্ভার-সাইড অ্যাপ (Java, Python এবং আরও অনেক কিছু)–অনুমোদিত রিডাইরেক্ট URI-এর অধীনে, URI যোগ করুন বিকল্পে ক্লিক করুন। তারপর, একটি এন্ডপয়েন্ট URI লিখুন যেখানে OAuth 2.0 সার্ভার উত্তর পাঠাতে পারবে।
  6. ঐচ্ছিক: আপনার অ্যাপ যদি এমন কোনও AI এজেন্ট হয় যা ব্যবহারকারীর হয়ে অ্যাকশন নেয়, তাহলে AI-পরিচালিত এজেন্টের জন্য এই ক্লায়েন্ট ব্যবহার করুন বিকল্প বেছে নিন। আপনার অ্যাপ যদি AI এজেন্ট ওয়ার্কফ্লো এবং স্ট্যান্ডার্ড ব্যবহারকারী ফিচার, দুটির সাথেই কাজ করে, তাহলে প্রতিটির জন্য আলাদা OAuth ক্লায়েন্ট তৈরি করুন। ক্লায়েন্ট তৈরি করার পরে আপনি এই সেটিং পরিবর্তন করতে পারবেন না।
  7. তৈরি করুন বিকল্পে ক্লিক করুন।

    নতুন তৈরি করা ক্রেডেনশিয়াল OAuth 2.0 ক্লায়েন্ট আইডি-এর অধীনে দেখা যাবে।

    মনে রাখবেন, ওয়েব অ্যাপ্লিকেশনের জন্য ক্লায়েন্ট সিক্রেট ব্যবহার করা হয় না।

  8. এই কুইকস্টার্টে পরে ব্যবহার করার জন্য ক্লায়েন্ট আইডি সেভ করুন।

API key তৈরি করুন

  1. Google Cloud কনসোলে, 'মেনু > API ও পরিষেবা > ক্রেডেনশিয়াল' বিকল্পে যান।

    ক্রেডেনশিয়ালে যান

  2. ক্রেডেনশিয়াল তৈরি করুন > API key বিকল্পে ক্লিক করুন।
  3. আপনার নতুন API কী দেখানো হচ্ছে।
    • আপনার অ্যাপের কোডে ব্যবহার করার জন্য API কী কপি করতে, 'কপি করুন ' বিকল্পে ক্লিক করুন। এছাড়াও, আপনার প্রোজেক্টের ক্রেডেনশিয়ালের "API key" বিভাগে API key খুঁজে পাওয়া যাবে।
    • অননুমোদিত ব্যবহার আটকাতে, আমরা API কী কোথায় এবং কোন API-এর জন্য ব্যবহার করা যাবে তা সীমাবদ্ধ করার সাজেস্ট করি। আরও জানতে, API সংক্রান্ত বিধিনিষেধ যোগ করুন।

স্যাম্পেল সেট-আপ করুন

  1. আপনার ওয়ার্কিং ডিরেক্টরিতে, index.html নামের একটি ফাইল তৈরি করুন।
  2. index.html ফাইলে, নিম্নলিখিত স্যাম্পেল কোড পেস্ট করুন:

    gmail/quickstart/index.html
    <!DOCTYPE html>
    <html>
      <head>
        <title>Gmail API Quickstart</title>
        <meta charset="utf-8" />
      </head>
      <body>
        <p>Gmail API Quickstart</p>
    
        <!--Add buttons to initiate auth sequence and sign out-->
        <button id="authorize_button" onclick="handleAuthClick()">Authorize</button>
        <button id="signout_button" onclick="handleSignoutClick()">Sign Out</button>
    
        <pre id="content" style="white-space: pre-wrap;"></pre>
    
        <script type="text/javascript">
          /* exported gapiLoaded */
          /* exported gisLoaded */
          /* exported handleAuthClick */
          /* exported handleSignoutClick */
    
          // TODO(developer): Set to client ID and API key from the Developer Console
          const CLIENT_ID = '<YOUR_CLIENT_ID>';
          const API_KEY = '<YOUR_API_KEY>';
    
          // Discovery doc URL for APIs used by the quickstart
          const DISCOVERY_DOC = 'https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest';
    
          // Authorization scopes required by the API; multiple scopes can be
          // included, separated by spaces.
          const SCOPES = 'https://www.googleapis.com/auth/gmail.readonly';
    
          let tokenClient;
          let gapiInited = false;
          let gisInited = false;
    
          document.getElementById('authorize_button').style.visibility = 'hidden';
          document.getElementById('signout_button').style.visibility = 'hidden';
    
          /**
           * Callback after api.js is loaded.
           */
          function gapiLoaded() {
            gapi.load('client', initializeGapiClient);
          }
    
          /**
           * Callback after the API client is loaded. Loads the
           * discovery doc to initialize the API.
           */
          async function initializeGapiClient() {
            await gapi.client.init({
              apiKey: API_KEY,
              discoveryDocs: [DISCOVERY_DOC],
            });
            gapiInited = true;
            maybeEnableButtons();
          }
    
          /**
           * Callback after Google Identity Services are loaded.
           */
          function gisLoaded() {
            tokenClient = google.accounts.oauth2.initTokenClient({
              client_id: CLIENT_ID,
              scope: SCOPES,
              callback: '', // defined later
            });
            gisInited = true;
            maybeEnableButtons();
          }
    
          /**
           * Enables user interaction after all libraries are loaded.
           */
          function maybeEnableButtons() {
            if (gapiInited && gisInited) {
              document.getElementById('authorize_button').style.visibility = 'visible';
            }
          }
    
          /**
           *  Sign in the user upon button click.
           */
          function handleAuthClick() {
            tokenClient.callback = async (resp) => {
              if (resp.error !== undefined) {
                throw (resp);
              }
              document.getElementById('signout_button').style.visibility = 'visible';
              document.getElementById('authorize_button').innerText = 'Refresh';
              await listLabels();
            };
    
            if (gapi.client.getToken() === null) {
              // Prompt the user to select a Google Account and ask for consent to share their data
              // when establishing a new session.
              tokenClient.requestAccessToken({prompt: 'consent'});
            } else {
              // Skip display of account chooser and consent dialog for an existing session.
              tokenClient.requestAccessToken({prompt: ''});
            }
          }
    
          /**
           *  Sign out the user upon button click.
           */
          function handleSignoutClick() {
            const token = gapi.client.getToken();
            if (token !== null) {
              google.accounts.oauth2.revoke(token.access_token);
              gapi.client.setToken('');
              document.getElementById('content').innerText = '';
              document.getElementById('authorize_button').innerText = 'Authorize';
              document.getElementById('signout_button').style.visibility = 'hidden';
            }
          }
    
          /**
           * Print all Labels in the authorized user's inbox. If no labels
           * are found an appropriate message is printed.
           */
          async function listLabels() {
            let response;
            try {
              response = await gapi.client.gmail.users.labels.list({
                'userId': 'me',
              });
            } catch (err) {
              document.getElementById('content').innerText = err.message;
              return;
            }
            const labels = response.result.labels;
            if (!labels || labels.length == 0) {
              document.getElementById('content').innerText = 'No labels found.';
              return;
            }
            // Flatten to string to display
            const output = labels.reduce(
                (str, label) => `${str}${label.name}\n`,
                'Labels:\n');
            document.getElementById('content').innerText = output;
          }
        </script>
        <script async defer src="https://apis.google.com/js/api.js" onload="gapiLoaded()"></script>
        <script async defer src="https://accounts.google.com/gsi/client" onload="gisLoaded()"></script>
      </body>
    </html>

    নিম্নলিখিতগুলি পরিবর্তন করুন:

স্যাম্পেল রান করুন

  1. আপনার ওয়ার্কিং ডিরেক্টরিতে, http-server প্যাকেজ ইনস্টল করুন:

    npm install http-server
    
  2. আপনার ওয়ার্কিং ডিরেক্টরিতে, একটি ওয়েব সার্ভার চালু করুন:

    npx http-server -p 8000
    
  1. আপনার ব্রাউজারে, http://localhost:8000-এ নেভিগেট করুন।
  2. অ্যাক্সেস অনুমোদন করার জন্য আপনি একটি প্রম্পট দেখতে পাবেন:
    1. আপনি আগে থেকে নিজের Google অ্যাকাউন্টে সাইন-ইন করে না থাকলে, প্রম্পট করা হলে সাইন-ইন করুন। আপনি একাধিক অ্যাকাউন্টে সাইন-ইন করে থাকলে, অনুমোদনের জন্য ব্যবহার করতে একটি অ্যাকাউন্ট বেছে নিন।
    2. স্বীকার করুন বিকল্পে ক্লিক করুন।

আপনার JavaScript অ্যাপ্লিকেশন রান করে এবং Gmail API কল করে।

পরবর্তী ধাপ