Python এবং Google Meet REST API-এর সাথে মিটিং ইভেন্টগুলি পর্যবেক্ষণ করুন

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

কোনো নির্দিষ্ট মিটিং স্পেসে সাবস্ক্রাইব করার পরিবর্তে, আপনি কোনো Meet ব্যবহারকারীকে সাবস্ক্রাইব করতে পারেন, যার মাধ্যমে সেই ব্যবহারকারীর মালিকানাধীন বা আয়োজিত যেকোনো মিটিং স্পেসের ইভেন্ট আপনি পাবেন। বিস্তারিত জানতে, Google Workspace Events API ডকুমেন্টেশনে "Subscribe to Google Meet events" অংশটি দেখুন।

পূর্বশর্ত

আপনার প্রতিষ্ঠানের জন্য যদি এই পূর্বশর্তগুলোর কোনোটি চালু করার প্রয়োজন হয়, তাহলে আপনার Google Workspace অ্যাডমিনিস্ট্রেটরকে সেগুলো চালু করতে বলুন:

আপনার পরিবেশ প্রস্তুত করুন

এই অংশে দেখানো হয়েছে কীভাবে এই টিউটোরিয়ালের জন্য আপনার লোকাল এনভায়রনমেন্ট এবং গুগল ক্লাউড প্রজেক্ট তৈরি ও কনফিগার করতে হয়।

একটি ওয়ার্কিং ডিরেক্টরি এবং পাইথন ভার্চুয়াল এনভায়রনমেন্ট তৈরি করুন

একটি নতুন ভার্চুয়াল এনভায়রনমেন্ট তৈরি ও সক্রিয় করতে, আপনার টার্মিনালে নিম্নলিখিত কমান্ডগুলো চালান।

লিনাক্স/ম্যাকওএস

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
source env/bin/activate

উইন্ডোজ (কমান্ড প্রম্পট)

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.bat

উইন্ডোজ (পাওয়ারশেল)

mkdir meet-tutorial
cd meet-tutorial
python3 -mvenv env
env/bin/activate.ps1

একটি গুগল ক্লাউড প্রজেক্ট তৈরি করুন

গুগল এপিআই কনসোল

  1. Google API কনসোলে, > IAM ও অ্যাডমিন > একটি প্রজেক্ট তৈরি করুন- এ যান।

    প্রজেক্ট তৈরি করতে যান

  2. 'প্রজেক্ট নেম' ফিল্ডে আপনার প্রজেক্টের জন্য একটি বর্ণনামূলক নাম লিখুন।

    ঐচ্ছিক: প্রজেক্ট আইডি সম্পাদনা করতে, 'সম্পাদনা' (Edit) বোতামে ক্লিক করুন। প্রজেক্ট তৈরি হয়ে গেলে তা আর পরিবর্তন করা যায় না, তাই এমন একটি আইডি বেছে নিন যা প্রজেক্টটির পুরো জীবনকাল জুড়ে আপনার প্রয়োজন মেটাবে।

  3. লোকেশন ফিল্ডে, আপনার প্রোজেক্টের জন্য সম্ভাব্য লোকেশনগুলো দেখতে ব্রাউজ-এ ক্লিক করুন। এরপর, সিলেক্ট-এ ক্লিক করুন।
  4. Create-এ ক্লিক করুন। Google API Console আপনাকে ড্যাশবোর্ড পৃষ্ঠায় নিয়ে যাবে এবং কয়েক মিনিটের মধ্যেই আপনার প্রজেক্টটি তৈরি হয়ে যাবে।

gcloud CLI

নিম্নলিখিত ডেভেলপমেন্ট এনভায়রনমেন্টগুলির মধ্যে যেকোনো একটিতে Google Cloud CLI ( gcloud ) অ্যাক্সেস করুন:

  • ক্লাউড শেল : আগে থেকে সেট আপ করা gcloud CLI সহ একটি অনলাইন টার্মিনাল ব্যবহার করতে, ক্লাউড শেল সক্রিয় করুন।
    ক্লাউড শেল সক্রিয় করুন
  • লোকাল শেল : স্থানীয় উন্নয়ন পরিবেশ ব্যবহার করতে, gcloud CLI ইনস্টলচালু করুন
    ক্লাউড প্রজেক্ট তৈরি করতে, gcloud projects create কমান্ডটি ব্যবহার করুন:
    gcloud projects create PROJECT_ID
    আপনি যে প্রজেক্টটি তৈরি করতে চান, তার আইডি দিয়ে PROJECT_ID প্রতিস্থাপন করুন।

গুগল ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম করুন

গুগল এপিআই কনসোল

  1. Google API কনসোলে, বিলিং- এ যান। মেনু > বিলিং > আমার প্রজেক্টস- ক্লিক করুন।

    আমার প্রোজেক্টগুলোর বিলিং-এ যান

  2. 'একটি সংস্থা নির্বাচন করুন' -এ, আপনার গুগল ক্লাউড প্রকল্পের সাথে যুক্ত সংস্থাটি বেছে নিন।
  3. প্রজেক্ট রো-তে, অ্যাকশনস মেনু ( ) খুলুন, চেঞ্জ বিলিং-এ ক্লিক করুন এবং ক্লাউড বিলিং অ্যাকাউন্টটি বেছে নিন।
  4. অ্যাকাউন্ট সেট করুন -এ ক্লিক করুন।

gcloud CLI

  1. উপলব্ধ বিলিং অ্যাকাউন্টগুলির তালিকা পেতে, চালান:
    gcloud billing accounts list
  2. একটি গুগল ক্লাউড প্রজেক্টের সাথে একটি বিলিং অ্যাকাউন্ট লিঙ্ক করুন:
    gcloud billing projects link PROJECT_ID --billing-account=BILLING_ACCOUNT_ID

    নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

    • PROJECT_ID হলো সেই ক্লাউড প্রজেক্টের প্রজেক্ট আইডি , যার জন্য আপনি বিলিং চালু করতে চান।
    • BILLING_ACCOUNT_ID হলো গুগল ক্লাউড প্রজেক্টের সাথে লিঙ্ক করার জন্য বিলিং অ্যাকাউন্ট আইডি

প্রমাণীকরণ এবং অনুমোদন সেট আপ করুন

প্রমাণীকরণ এবং অনুমোদন অ্যাপটিকে Meet REST API রিসোর্স অ্যাক্সেস করতে দেয়। Meet REST API কল করার জন্য ব্যবহারকারীর অনুমোদন প্রয়োজন। এই বিভাগে দেখানো হয়েছে কীভাবে ব্যবহারকারীর পরিচয়পত্র কনফিগার করতে হয় এবং অনুমোদনের জন্য অনুরোধ করতে হয়।

OAuth সম্মতি স্ক্রিনটি কনফিগার করুন এবং স্কোপগুলি বেছে নিন

নিম্নলিখিত ধাপগুলোতে আপনার অ্যাপের জন্য OAuth সম্মতি স্ক্রিন কনফিগার করার জন্য প্লেসহোল্ডার তথ্য দেওয়া হয়েছে। অ্যাপটি বাহ্যিকভাবে প্রকাশ করার আগে এই তথ্যগুলো আপডেট করুন।

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

    ব্র্যান্ডিং-এ যান

  2. আপনি যদি ইতিমধ্যেই Google Auth প্ল্যাটফর্মটি কনফিগার করে থাকেন, তাহলে আপনি Branding , Audience , এবং Data Access- এ নিম্নলিখিত OAuth Consent Screen সেটিংস কনফিগার করতে পারেন। যদি আপনি এমন কোনো বার্তা দেখতে পান যেখানে লেখা আছে ‘Google Auth প্ল্যাটফর্ম এখনও কনফিগার করা হয়নি’ , তাহলে Get Started-এ ক্লিক করুন:
    1. অ্যাপ ইনফরমেশন- এর অধীনে অ্যাপ নেম- এর জায়গায় Meet REST API Tutorial লিখুন।
    2. ব্যবহারকারী সহায়তা ইমেল- এ, এমন একটি সহায়তা ইমেল ঠিকানা বেছে নিন যেখানে ব্যবহারকারীরা তাদের সম্মতি সম্পর্কে কোনো প্রশ্ন থাকলে আপনার সাথে যোগাযোগ করতে পারে।
    3. পরবর্তী ধাপে যান।
    4. Audience-এর অধীনে Internal নির্বাচন করুন।
    5. পরবর্তী ধাপে যান।
    6. যোগাযোগের তথ্যের অধীনে, একটি ইমেল ঠিকানা লিখুন যেখানে আপনার প্রকল্পের যেকোনো পরিবর্তন সম্পর্কে আপনাকে জানানো যাবে।
    7. পরবর্তী ধাপে যান।
    8. Finish-এর অধীনে, Google API Services ব্যবহারকারীর ডেটা নীতি পর্যালোচনা করুন এবং যদি আপনি সম্মত হন, তাহলে I agree to the Google API Services: User Data Policy নির্বাচন করুন।
    9. চালিয়ে যান-এ ক্লিক করুন।
    10. তৈরি করুন- এ ক্লিক করুন।
    11. যদি আপনি ব্যবহারকারীর ধরন হিসেবে 'এক্সটার্নাল' নির্বাচন করে থাকেন, তাহলে পরীক্ষামূলক ব্যবহারকারী যোগ করুন:
      1. দর্শকবৃন্দে ক্লিক করুন।
      2. টেস্ট ইউজার্স-এর অধীনে, অ্যাড ইউজার্স-এ ক্লিক করুন।
      3. আপনার ইমেল ঠিকানা এবং অন্য কোনো অনুমোদিত পরীক্ষামূলক ব্যবহারকারীর তথ্য প্রবেশ করান, তারপর সেভ-এ ক্লিক করুন।
  3. ডেটা অ্যাক্সেস > স্কোপ যোগ বা অপসারণ-এ ক্লিক করুন। একটি প্যানেল প্রদর্শিত হবে, যেখানে আপনার গুগল ক্লাউড প্রজেক্টে সক্রিয় করা প্রতিটি এপিআই-এর স্কোপের একটি তালিকা থাকবে।
  4. ‘Manually add scopes’- এর অধীনে, নিম্নলিখিত স্কোপগুলি পেস্ট করুন:
    • https://www.googleapis.com/auth/meetings.space.created
  5. টেবিলে যোগ করুন-এ ক্লিক করুন।
  6. আপডেট-এ ক্লিক করুন।
  7. আপনার অ্যাপের জন্য প্রয়োজনীয় স্কোপগুলো নির্বাচন করার পর, সেভ-এ ক্লিক করুন।

OAuth সম্মতি কনফিগার করার বিষয়ে আরও তথ্যের জন্য, Google Auth প্ল্যাটফর্মের সাথে শুরু করুন দেখুন।

একটি ক্লায়েন্ট আইডি তৈরি করুন

OAuth 2.0 ফ্লো চলাকালীন ক্লায়েন্ট আইডিটি আপনার অ্যাপ্লিকেশনের ক্রেডেনশিয়াল হিসেবে কাজ করে। যেহেতু অ্যাপটি স্থানীয়ভাবে চলে, তাই একটি ডেস্কটপ ক্লায়েন্ট আইডি তৈরি করুন।

  1. Google API কনসোলে, > Google Auth প্ল্যাটফর্ম > ক্লায়েন্টস- এ যান।

    ক্লায়েন্টদের কাছে যান

  2. ক্লায়েন্ট তৈরি করুন -এ ক্লিক করুন।
  3. অ্যাপ্লিকেশন টাইপ > ডেস্কটপ অ্যাপ-এ ক্লিক করুন।
  4. Name ফিল্ডে ক্রেডেনশিয়ালটির জন্য একটি নাম টাইপ করুন। এই নামটি শুধুমাত্র Google API Console-এ দেখানো হয়।
  5. তৈরি করুন- এ ক্লিক করুন।

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

গুগল অথোরাইজেশন লাইব্রেরিগুলো ইনস্টল করুন

গুগল অথেন্টিকেশন লাইব্রেরিগুলো ইনস্টল করুন:

pip install google-auth google-auth-oauthlib

অনুমোদন কার্যকর করুন

Meet REST API-এর জন্য OAuth 2.0 অ্যাক্সেস টোকেন আকারে ব্যবহারকারীর পরিচয়পত্র প্রয়োজন হয়। এই অংশে, আপনি ব্যবহারকারীর জন্য একটি অ্যাক্সেস টোকেন এবং একটি রিফ্রেশ টোকেন অনুরোধ করার জন্য OAuth 2.0 ফ্লোটি বাস্তবায়ন করবেন।

  1. আপনার ওয়ার্কিং ডিরেক্টরিতে main.py ফাইলটি তৈরি করুন এবং নিম্নলিখিত বিষয়বস্তু যোগ করুন:

    import os
    import json
    
    from google.auth.transport import requests
    from google.oauth2.credentials import Credentials
    from google_auth_oauthlib.flow import InstalledAppFlow
    
    def authorize() -> Credentials:
        """Ensure valid credentials for calling the Meet REST API."""
        CLIENT_SECRET_FILE = "./client_secret.json"
        credentials = None
    
        if os.path.exists('token.json'):
            credentials = Credentials.from_authorized_user_file('token.json')
    
        if credentials is None:
            flow = InstalledAppFlow.from_client_secrets_file(
                CLIENT_SECRET_FILE,
                scopes=[
                    'https://www.googleapis.com/auth/meetings.space.created',
                ])
            flow.run_local_server(port=0)
            credentials = flow.credentials
    
        if credentials and credentials.expired:
            credentials.refresh(requests.Request())
    
        if credentials is not None:
            with open("token.json", "w") as f:
                f.write(credentials.to_json())
    
        return credentials
    
    USER_CREDENTIALS = authorize()
    
  2. কোডটি চালানোর জন্য ক্লায়েন্ট আইডি এবং পূর্বে তৈরি করা সিক্রেট উভয়ই প্রয়োজন। ডাউনলোড করা ক্লায়েন্ট সিক্রেট ফাইলটি প্রজেক্টের ওয়ার্কিং ডিরেক্টরিতে কপি করুন এবং এর নাম পরিবর্তন করে client_secret.json রাখুন।

  3. অনুমোদন কীভাবে কাজ করে তা পরীক্ষা করতে চাইলে, নিম্নলিখিত কমান্ডটি চালান। অ্যাপটি অনুমোদনের জন্য অনুরোধ করবে এবং অনুরোধটি অনুমোদিত হওয়ার পর প্রজেক্টের ওয়ার্কিং ডিরেক্টরিতে একটি token.json ফাইল তৈরি করবে।

    python3 main.py

Meet REST API যোগ করুন

অনুমোদন কোডটি সম্পূর্ণ হয়ে গেলে, এখন Meet REST API-টি সক্রিয় করে কল করার সময় এসেছে।

এপিআইগুলি সক্রিয় করুন

যদিও এই অংশটি Meet REST API-এর উপর আলোকপাত করে, এই টিউটোরিয়ালটিতে Google Cloud Pub/Sub এবং Google Workspace Events API-ও ব্যবহার করা হয়েছে।

গুগল এপিআই কনসোল

  1. Google API কনসোলে Google Meet REST API, Google Workspace Events API, এবং Google Cloud Pub/Sub সক্রিয় করুন।

    এপিআইগুলি সক্রিয় করুন

  2. আপনি সঠিক ক্লাউড প্রজেক্টে এপিআইগুলো সক্রিয় করছেন কিনা তা নিশ্চিত করুন, তারপর 'Next' বাটনে ক্লিক করুন।

  3. আপনি সঠিক API-গুলো সক্রিয় করছেন কিনা তা নিশ্চিত করুন, তারপর 'Enable'-এ ক্লিক করুন।

gcloud CLI

  1. প্রয়োজনে, gcloud config set project কমান্ড ব্যবহার করে আপনার তৈরি করা প্রজেক্টটিকে বর্তমান ক্লাউড প্রজেক্ট হিসেবে সেট করুন:

    gcloud config set project PROJECT_ID

    PROJECT_ID জায়গায় আপনার তৈরি করা ক্লাউড প্রজেক্টের প্রজেক্ট আইডিটি বসান।

  2. gcloud services enable কমান্ড ব্যবহার করে Google Meet REST API, Google Workspace Events API, এবং Google Cloud Pub/Sub সক্রিয় করুন:

    gcloud services enable meet.googleapis.com workspaceevents.googleapis.com pubsub.googleapis.com

Meet REST API ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন

Meet REST API ক্লায়েন্ট লাইব্রেরি ইনস্টল করতে এই ধাপগুলো অনুসরণ করুন:

  1. কমান্ডটি চালান:

    pip install google-apps-meet
  2. ক্লায়েন্ট ইম্পোর্ট করার জন্য main.py ফাইলটি সম্পাদনা করুন:

    from google.apps import meet_v2 as meet
    

একটি জায়গা তৈরি করুন

এখন যেহেতু Meet REST API উপলব্ধ, সাবস্ক্রাইব করা যায় এমন একটি মিটিং স্পেস তৈরি করার জন্য একটি ফাংশন সংজ্ঞায়িত করুন।

main.py সম্পাদনা করুন এবং যোগ করুন:

def create_space() -> meet.Space:
    """Create a meeting space."""
    client = meet.SpacesServiceClient(credentials=USER_CREDENTIALS)
    request = meet.CreateSpaceRequest()
    return client.create_space(request=request)

ইভেন্টগুলিতে সাবস্ক্রাইব করুন

কোনো মিটিং স্পেস সম্পর্কিত ইভেন্ট পেতে, আপনাকে গুগল ওয়ার্কস্পেস ইভেন্টস এপিআই (Google Workspace Events API) ব্যবহার করে একটি সাবস্ক্রিপশন তৈরি করতে হবে। এছাড়াও আপনাকে একটি গুগল ক্লাউড পাব/সাব (Google Cloud Pub/Sub) টপিক তৈরি করে তাতে সাবস্ক্রাইব করতে হবে, যা নোটিফিকেশন এন্ডপয়েন্ট হিসেবে কাজ করে এবং যেখান থেকে আপনার অ্যাপ ইভেন্টগুলো গ্রহণ করে।

গুগল ক্লাউড পাব/সাব কনফিগার করুন

একটি পাব/সাব টপিক তৈরি করতে এবং সাবস্ক্রাইব করতে:

গুগল এপিআই কনসোল

  1. Google API কনসোলে, > পাব/সাব- এ যান।

    পাব/সাব-এ যান

    আপনার অ্যাপের জন্য ক্লাউড প্রজেক্টটি নির্বাচিত আছে কিনা, তা নিশ্চিত করুন।

  2. ক্লিক করে টপিক তৈরি করুন এবং নিম্নলিখিত কাজগুলো করুন:
    1. টপিকের নাম হিসেবে workspace-events লিখুন।
    2. ডিফল্ট সাবস্ক্রিপশন যোগ করুন বিকল্পটি নির্বাচিত রাখুন।
    3. Create-এ ক্লিক করুন। আপনার সম্পূর্ণ টপিকের নামটি projects/{project}/topics/{topic} ফরম্যাটে থাকবে। পরবর্তী ধাপগুলোতে ব্যবহারের জন্য এই নামটি লিখে রাখুন।
  3. আপনার টপিকে পাব/সাব বার্তা প্রকাশ করার অনুমতি দিন:
    1. সাইড প্যানেলে, পারমিশন ট্যাবটি খুলুন।
    2. প্রিন্সিপাল যোগ করুন -এ ক্লিক করুন।
    3. New principals- এ, meet-api-event-push@system.gserviceaccount.com লিখুন।
    4. ভূমিকা নির্ধারণ (Assign roles) -এ, Pub/Sub Publisher ) নির্বাচন করুন।
    5. সংরক্ষণ করুন- এ ক্লিক করুন।

    আপনার টপিকের অনুমতিগুলো আপডেট করতে কয়েক মিনিট সময় লাগতে পারে।

gcloud CLI

  1. আপনার ক্লাউড প্রজেক্টে, নিম্নলিখিত কমান্ডটি চালিয়ে একটি টপিক তৈরি করুন:
    gcloud pubsub topics create workspace-events

    আউটপুটে সম্পূর্ণ টপিকের নামটি projects/{project}/topics/{topic} ফরম্যাটে প্রদর্শিত হয়। পরবর্তী ধাপগুলোতে ব্যবহারের জন্য এই নামটি লিখে রাখুন।

  2. আপনার টপিকে বার্তা প্রকাশ করার অনুমতি দিন:
     gcloud pubsub topics add-iam-policy-binding workspace-events --member='serviceAccount:meet-api-event-push@system.gserviceaccount.com' --role='roles/pubsub.publisher'

    আপনার টপিকের অনুমতিগুলো আপডেট করতে কয়েক মিনিট সময় লাগতে পারে।

  3. বিষয়টির জন্য একটি পাব/সাব সাবস্ক্রিপশন তৈরি করুন:
    gcloud pubsub subscriptions create workspace-events-sub --topic=TOPIC_NAME

    নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

    • TOPIC_NAME : আপনার টপিকের নাম যা আপনি পূর্ববর্তী ধাপে তৈরি করেছেন।

টপিকের নামটি লিখে রাখুন এবং নিশ্চিত করুন যে {project} এর ভ্যালুটি আপনার অ্যাপের ক্লাউড প্রজেক্ট আইডি। পরবর্তীতে গুগল ওয়ার্কস্পেস সাবস্ক্রিপশন তৈরি করার জন্য আপনি এই টপিকের নামটি ব্যবহার করবেন।

একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন

গুগল এপিআই কনসোল

  1. Google API কনসোলে, > IAM ও অ্যাডমিন > সার্ভিস অ্যাকাউন্টস- এ যান।

    পরিষেবা অ্যাকাউন্টগুলিতে যান

  2. সার্ভিস অ্যাকাউন্ট তৈরি করুন -এ ক্লিক করুন।
  3. সার্ভিস অ্যাকাউন্টের বিবরণ পূরণ করুন, তারপর 'তৈরি করুন এবং চালিয়ে যান' -এ ক্লিক করুন।
  4. "এই পরিষেবা অ্যাকাউন্টকে প্রকল্পে অ্যাক্সেস দিন" বিভাগে, নিম্নলিখিত ভূমিকাগুলি যোগ করুন:
    • roles/pubsub.subscriber
  5. চালিয়ে যান-এ ক্লিক করুন।
  6. ঐচ্ছিক: সেইসব ব্যবহারকারী বা গোষ্ঠীর নাম লিখুন যারা এই পরিষেবা অ্যাকাউন্টটি দিয়ে পরিচালনা ও কার্যকলাপ সম্পাদন করতে পারবে। আরও বিস্তারিত জানতে, ‘পরিষেবা অ্যাকাউন্টের ছদ্মবেশ পরিচালনা’ দেখুন।
  7. Done-এ ক্লিক করুন। সার্ভিস অ্যাকাউন্টের ইমেল ঠিকানাটি লিখে রাখুন।

gcloud CLI

  1. পরিষেবা অ্যাকাউন্ট তৈরি করুন:
    gcloud iam service-accounts create meet-event-listener \
      --display-name="meet-event-listener"
  2. সার্ভিস অ্যাকাউন্টটিকে প্রয়োজনীয় ভূমিকাগুলো প্রদান করুন:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:meet-event-listener@PROJECT_ID.iam.gserviceaccount.com" \
      --role="roles/pubsub.subscriber"

    PROJECT_ID জায়গায় আপনার গুগল ক্লাউড প্রজেক্ট আইডি বসান।

পরিষেবা অ্যাকাউন্ট ব্যবহার করুন

সার্ভিস অ্যাকাউন্ট তৈরি করার পর, সার্ভিস অ্যাকাউন্টটির ছদ্মবেশ ধারণ করার জন্য নিজেকে অ্যাক্সেস দিন।

গুগল এপিআই কনসোল

  1. নতুন তৈরি করা সার্ভিস অ্যাকাউন্টের জন্য Actions কলামে, > Manage permissions- এ ক্লিক করুন।
  2. কী যোগ করুন > অ্যাক্সেস দিন-এ ক্লিক করুন।
  3. ‘Add principals’- এর অধীনে আপনার ইমেল ঠিকানা লিখুন।
  4. ভূমিকা হিসেবে সার্ভিস অ্যাকাউন্টস > সার্ভিস অ্যাকাউন্ট টোকেন ক্রিয়েটর নির্বাচন করুন।
  5. সংরক্ষণ করুন- এ ক্লিক করুন।
  6. আপনার টার্মিনালে ফিরে যান এবং অ্যাপ্লিকেশনটির ডিফল্ট ক্রেডেনশিয়াল সার্ভিস অ্যাকাউন্টে সেট করার জন্য gcloud দিয়ে সাইন ইন করুন। অনুমোদনের জন্য অনুরোধ করা হলে, পূর্ববর্তী ধাপগুলিতে ব্যবহৃত একই অ্যাকাউন্ট দিয়ে সাইন ইন করুন।
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

gcloud CLI

  1. অনুমতিটি যোগ করতে, সার্ভিস অ্যাকাউন্ট এবং ব্যবহারকারীর ইমেল ঠিকানা ব্যবহার করে gcloud iam service-accounts add-iam-policy-binding চালান।
    gcloud iam service-accounts add-iam-policy-binding \
      SERVICE_ACCOUNT_EMAIL \
      --member="user:YOUR_EMAIL" \
      --role="roles/iam.serviceAccountTokenCreator"
  2. অ্যাপ্লিকেশনটির ডিফল্ট ক্রেডেনশিয়াল সার্ভিস অ্যাকাউন্টে সেট করতে সাইন ইন করুন। অনুমোদনের জন্য অনুরোধ করা হলে, পূর্ববর্তী ধাপগুলিতে ব্যবহৃত একই অ্যাকাউন্ট দিয়ে সাইন ইন করুন।
    gcloud auth application-default login --impersonate-service-account=SERVICE_ACCOUNT_EMAIL

পাব/সাব ক্লায়েন্ট লাইব্রেরি ইনস্টল করুন

  1. Pub/Sub-এর জন্য ক্লায়েন্ট লাইব্রেরি ইনস্টল করতে pip ব্যবহার করুন:

    pip install google-cloud-pubsub
  2. এরপর ক্লায়েন্ট ইম্পোর্ট করার জন্য main.py সম্পাদনা করুন:

    from google.cloud import pubsub_v1
    

গুগল ওয়ার্কস্পেস সাবস্ক্রিপশন তৈরি করুন

Meet ইভেন্টগুলিতে সাবস্ক্রাইব করার জন্য একটি মেথড সংজ্ঞায়িত করতে main.py তে নিম্নলিখিত কোডটি যোগ করুন। এই কোডটি একটি মিটিং স্পেসের সমস্ত ইভেন্টে সাবস্ক্রাইব করে। সাবস্ক্রাইব করা হলে, ইভেন্টগুলি Pub/Sub টপিকে পোস্ট করা হয়।

def subscribe_to_space(space_name: str = None, topic_name: str = None):
    """Subscribe to events for a meeting space."""
    session = requests.AuthorizedSession(USER_CREDENTIALS)
    body = {
        'targetResource': f"//meet.googleapis.com/{space_name}",
        "eventTypes": [
            "google.workspace.meet.conference.v2.started",
            "google.workspace.meet.conference.v2.ended",
            "google.workspace.meet.participant.v2.joined",
            "google.workspace.meet.participant.v2.left",
            "google.workspace.meet.recording.v2.fileGenerated",
            "google.workspace.meet.transcript.v2.fileGenerated",
        ],
        "payloadOptions": {
            "includeResource": False,
        },
        "notificationEndpoint": {
            "pubsubTopic": topic_name
        },
        "ttl": "86400s",
    }
    response = session.post("https://workspaceevents.googleapis.com/v1/subscriptions", json=body)
    return response

এরপরে, ইভেন্টগুলো পুল এবং প্রসেস করার জন্য সংশ্লিষ্ট কোড যোগ করুন।

ইভেন্টগুলির জন্য নজর রাখুন এবং সেগুলি পরিচালনা করুন

Continue to edit main.py and add the following sample code. This code implements the receiving side and uses the Google Cloud Pub/Sub API to pull events as they're made available. The various handler methods print information about the corresponding events.

def format_participant(participant: meet.Participant) -> str:
    """Formats a participant for display on the console."""
    if participant.anonymous_user:
        return f"{participant.anonymous_user.display_name} (Anonymous)"

    if participant.signedin_user:
        return f"{participant.signedin_user.display_name} (ID: {participant.signedin_user.user})"

    if participant.phone_user:
        return f"{participant.phone_user.display_name} (Phone)"

    return "Unknown participant"


def fetch_participant_from_session(session_name: str) -> meet.Participant:
    """Fetches the participant for a session."""
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    # Use the parent path of the session to fetch the participant details
    parsed_session_path = client.parse_participant_session_path(session_name)
    participant_resource_name = client.participant_path(
        parsed_session_path["conference_record"],
        parsed_session_path["participant"])
    return client.get_participant(name=participant_resource_name)


def on_conference_started(message: pubsub_v1.subscriber.message.Message):
    """Display information about a conference when started."""
    payload = json.loads(message.data)
    resource_name = payload.get("conferenceRecord").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    conference = client.get_conference_record(name=resource_name)
    print(f"Conference (ID {conference.name}) started at {conference.start_time.rfc3339()}")


def on_conference_ended(message: pubsub_v1.subscriber.message.Message):
    """Display information about a conference when ended."""
    payload = json.loads(message.data)
    resource_name = payload.get("conferenceRecord").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    conference = client.get_conference_record(name=resource_name)
    print(f"Conference (ID {conference.name}) ended at {conference.end_time.rfc3339()}")


def on_participant_joined(message: pubsub_v1.subscriber.message.Message):
    """Display information about a participant when they join a meeting."""
    payload = json.loads(message.data)
    resource_name = payload.get("participantSession").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    session = client.get_participant_session(name=resource_name)
    participant = fetch_participant_from_session(resource_name)
    display_name = format_participant(participant)
    print(f"{display_name} joined at {session.start_time.rfc3339()}")


def on_participant_left(message: pubsub_v1.subscriber.message.Message):
    """Display information about a participant when they leave a meeting."""
    payload = json.loads(message.data)
    resource_name = payload.get("participantSession").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    session = client.get_participant_session(name=resource_name)
    participant = fetch_participant_from_session(resource_name)
    display_name = format_participant(participant)
    print(f"{display_name} left at {session.end_time.rfc3339()}")


def on_recording_ready(message: pubsub_v1.subscriber.message.Message):
    """Display information about a recorded meeting when artifact is ready."""
    payload = json.loads(message.data)
    resource_name = payload.get("recording").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    recording = client.get_recording(name=resource_name)
    print(f"Recording available at {recording.drive_destination.export_uri}")


def on_transcript_ready(message: pubsub_v1.subscriber.message.Message):
    """Display information about a meeting transcript when artifact is ready."""
    payload = json.loads(message.data)
    resource_name = payload.get("transcript").get("name")
    client = meet.ConferenceRecordsServiceClient(credentials=USER_CREDENTIALS)
    transcript = client.get_transcript(name=resource_name)
    print(f"Transcript available at {transcript.docs_destination.export_uri}")


def on_message(message: pubsub_v1.subscriber.message.Message) -> None:
    """Handles an incoming event from the Google Cloud Pub/Sub API."""
    event_type = message.attributes.get("ce-type")
    handler = {
        "google.workspace.meet.conference.v2.started": on_conference_started,
        "google.workspace.meet.conference.v2.ended": on_conference_ended,
        "google.workspace.meet.participant.v2.joined": on_participant_joined,
        "google.workspace.meet.participant.v2.left": on_participant_left,
        "google.workspace.meet.recording.v2.fileGenerated": on_recording_ready,
        "google.workspace.meet.transcript.v2.fileGenerated": on_transcript_ready,
    }.get(event_type)

    try:
        if handler is not None:
            handler(message)
        message.ack()
    except Exception as error:
        print("Unable to process event")
        print(error)


def listen_for_events(subscription_name: str = None):
    """Subscribe to events on the subscription."""
    subscriber = pubsub_v1.SubscriberClient()
    with subscriber:
        future = subscriber.subscribe(subscription_name, callback=on_message)
        print("Listening for events")
        try:
            future.result()
        except KeyboardInterrupt:
            future.cancel()
    print("Done")

কোডটি চূড়ান্ত করুন

স্পেস তৈরি করতে, ইভেন্টে সাবস্ক্রাইব করতে এবং লিসেন করতে মেথডগুলো কল করার জন্য main.py তে নিম্নলিখিত কোডটি যোগ করুন। TOPIC_NAME এবং SUBSCRIPTION_NAME কনস্ট্যান্টগুলো আপনার পূর্বে তৈরি করা টপিক এবং সাবস্ক্রিপশনের নাম দিয়ে আপডেট করুন।

  1. main.py তে কোডটি যোগ করুন:

    space = create_space()
    print(f"Join the meeting at {space.meeting_uri}")
    
    TOPIC_NAME = "projects/PROJECT_ID/topics/TOPIC_ID"
    SUBSCRIPTION_NAME = "projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID"
    
    subscription = subscribe_to_space(topic_name=TOPIC_NAME, space_name=space.name)
    if (subscription.status_code) == 200:
        listen_for_events(subscription_name=SUBSCRIPTION_NAME)
    else:
        print(f"Subscription to Meet events failed, response data: {subscription.content}")
    

    নিম্নলিখিতগুলি প্রতিস্থাপন করুন:

    • PROJECT_ID : আপনার অ্যাপের অনন্য ক্লাউড প্রজেক্ট আইডি, যেমন my-sample-project-191923

    • TOPIC_ID : আপনার ক্লাউড প্রজেক্টে তৈরি করা পাব/সাব টপিকের নাম।

    • SUBSCRIPTION_ID : আপনার সাবস্ক্রিপশনের নাম, যেমন workspace-events-sub

  2. প্রোগ্রামটি চালান:

    python3 main.py

আপনি যদি আগে প্রোগ্রামটি না চালিয়ে থাকেন, তবে এটি প্রথমবার অনুমোদনের জন্য অনুরোধ করবে। Meet REST API কল করার জন্য অ্যাপ্লিকেশনটিকে অ্যাক্সেস দিন। প্রোগ্রামটি সফলভাবে চলার পর, আপনি নিচের মতো একটি আউটপুট দেখতে পাবেন:

Join the meeting at https://meet.google.com/abc-mnop-xyz

সম্মেলনে যোগ দিন

অ্যাপ্লিকেশনটির জন্য ইভেন্ট তৈরি করতে, অ্যাপ্লিকেশনটিতে প্রদর্শিত URL ব্যবহার করে কনফারেন্সে যোগদান করুন। যোগদান করার পর, ইভেন্ট ট্রিগার করার জন্য আপনি এই পদক্ষেপগুলো চেষ্টা করতে পারেন:

  • মিটিং থেকে বেরিয়ে যান এবং আবার যোগ দিন।
  • অন্যদের আমন্ত্রণ জানান অথবা আপনার ফোন দিয়ে ডায়াল করে যোগ দিন।
  • রেকর্ডিং এবং প্রতিলিপি চালু করুন।

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

কাজ শেষ হলে প্রোগ্রামটি বন্ধ করতে ctrl-c ব্যবহার করুন।

ঐচ্ছিক: চেষ্টা করার জন্য অতিরিক্ত পদক্ষেপ

অ্যাপটি ইভেন্টগুলো সম্পর্কে প্রাথমিক বিবরণ লগ করে। Meet REST API সম্পর্কে আরও জানতে, এই অতিরিক্ত কাজগুলো করার জন্য অ্যাপ্লিকেশনটি পরিবর্তন করে দেখুন।

  • সাইন-ইন করা অংশগ্রহণকারীদের সম্পর্কে অতিরিক্ত তথ্য পেতে পিপল এপিআই (People API) ব্যবহার করুন।

    def subscribe_to_user(user_name: str = None, topic_name: str = None) -> requests_lib.Response:
        """Subscribe to events for a user."""
        session = requests.AuthorizedSession(USER_CREDENTIALS)
        body = {
            "targetResource": f"//cloudidentity.googleapis.com/users/{user_name}",
            "eventTypes": [
                "google.workspace.meet.conference.v2.started",
                "google.workspace.meet.conference.v2.ended",
                "google.workspace.meet.participant.v2.joined",
                "google.workspace.meet.participant.v2.left",
                "google.workspace.meet.recording.v2.fileGenerated",
                "google.workspace.meet.transcript.v2.fileGenerated",
            ],
            "payloadOptions": {
                "includeResource": False,
            },
            "notificationEndpoint": {"pubsubTopic": topic_name},
            "ttl": "86400s",
        }
        response = session.post(
            "https://workspaceevents.googleapis.com/v1/subscriptions", json=body
        )
        return response
    
    service = build("people", "v1", credentials=USER_CREDENTIALS)
    response = (
        service.people()
        .get(resourceName="people/me", personFields="names,emailAddresses")
        .execute()
    )
    resource_name = response.get("resourceName")
    if resource_name.startswith("people/"):
        resource_name = resource_name[len("people/") :]
    
    subscription = subscribe_to_user(topic_name=TOPIC_NAME, user_name=resource_name)
    

    উপরের ক্রেডেনশিয়াল নমুনাগুলিতে authorize মেথডের মধ্যে "https://www.googleapis.com/auth/userinfo.profile" যোগ করতে ভুলবেন না।

  • রেকর্ডিং এবং ট্রান্সক্রিপ্ট ডাউনলোড করতে গুগল ড্রাইভ এপিআই ব্যবহার করুন।

  • গুগল ড্রাইভ থেকে ট্রান্সক্রিপ্ট ডাউনলোড করার পরিবর্তে, Meet REST API-এর স্ট্রাকচার্ড ট্রান্সক্রিপ্ট মেথডগুলো ব্যবহার করে সেগুলো সংগ্রহ করুন।

  • জায়গা তৈরি করার পরিবর্তে জায়গা পাওয়া।

    def get_space(meeting_code: str) -> meet.Space:
        """Get a meeting space."""
        client = meet.SpacesServiceClient(credentials=USER_CREDENTIALS)
        return client.get_space(name="spaces/" + meeting_code)
    

    উপরের ক্রেডেনশিয়াল নমুনাগুলিতে authorize মেথডের মধ্যে "https://www.googleapis.com/auth/meetings.space.readonly" যোগ করতে ভুলবেন না।

ঐচ্ছিক: পরিষ্কার করা

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

সাবস্ক্রিপশনটি মুছে ফেলতে:

কনসোল

  1. Google API কনসোলে, > পাব/সাব > সাবস্ক্রিপশন- এ যান।

    সাবস্ক্রিপশন-এ যান

  2. সাবস্ক্রিপশনটি নির্বাচন করুন এবং অ্যাকশন- এ ক্লিক করুন।

  3. Click Delete . The Delete subscription window appears.

  4. ডিলিট-এ ক্লিক করুন।

gcloud CLI

  1. সাবস্ক্রিপশনটি মুছে ফেলুন:

    gcloud pubsub subscriptions delete SUBSCRIPTION_NAME

বিষয়টি মুছে ফেলতে:

কনসোল

  1. Google API কনসোলে, > পাব/সাব > টপিকস- এ যান।

    বিষয়গুলিতে যান

  2. বিষয়টি নির্বাচন করুন এবং পদক্ষেপগুলিতে ক্লিক করুন।

  3. ডিলিট-এ ক্লিক করুন। ডিলিট টপিক উইন্ডোটি প্রদর্শিত হবে।

  4. delete টাইপ করুন এবং তারপর Delete-এ ক্লিক করুন।

gcloud CLI

  1. বিষয়টি মুছে ফেলুন:

    gcloud pubsub topics delete TOPIC_NAME

প্রজেক্টটি ডিলিট করতে:

কনসোল

  1. Google API Console-এ, Manage resources পেজে যান। Menu > IAM & Admin > Manage Resources-এ করুন।

    রিসোর্স ম্যানেজারে যান

  2. প্রজেক্ট তালিকা থেকে আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং তারপর 'মুছে ফেলুন বোতামে ক্লিক করুন।
  3. ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন এবং তারপর প্রজেক্টটি মুছে ফেলার জন্য 'শাট ডাউন'-এ ক্লিক করুন।

gcloud CLI

  1. প্রজেক্ট ডিলিট করতে, gcloud projects delete কমান্ডটি ব্যবহার করুন:

    gcloud projects delete PROJECT_ID