ইভেন্ট

ইভেন্টগুলো অ্যাসিঙ্ক্রোনাস এবং প্রতিটির জন্য একটি একক টপিকে Google Cloud Pub/Sub দ্বারা পরিচালিত হয়। Projectইভেন্টগুলো সমস্ত ডিভাইস এবং কাঠামোর জন্য আপডেট প্রদান করে এবং যতক্ষণ পর্যন্ত ব্যবহারকারী অ্যাক্সেস টোকেনটি প্রত্যাহার না করেন ও ইভেন্ট বার্তাগুলোর মেয়াদ শেষ না হয়, ততক্ষণ পর্যন্ত ইভেন্ট প্রাপ্তি নিশ্চিত থাকে।

ইভেন্টগুলি সক্ষম করুন

ইভেন্টগুলি SDM API-এর একটি ঐচ্ছিক বৈশিষ্ট্য। দেখুন ইভেন্টগুলি সক্ষম করুন আপনার জন্য কীভাবে সেগুলি সক্রিয় করবেন তা শিখতে Project.

গুগল ক্লাউড পাব/সাব

পাব/সাব কীভাবে কাজ করে সে সম্পর্কে আরও জানতে গুগল ক্লাউড পাব/সাব ডকুমেন্টেশন দেখুন। বিশেষ করে:

ইভেন্ট সাবস্ক্রিপশন

২০২৫ সালের জানুয়ারির আগে, যদি আপনার জন্য ইভেন্টগুলি সক্রিয় করা হয়ে থাকে Projectআপনাকে সেটির জন্য নির্দিষ্ট একটি বিষয় সরবরাহ করা হতো। Project পরিচয়পত্র, এই রূপে:

projects/gcp-project-name/subscriptions/topic-id
২০২৫ সালের জানুয়ারির পরে তৈরি করা প্রোজেক্টগুলোকে অবশ্যই তাদের পাব/সাব টপিকগুলো সেলফ-হোস্ট করতে হবে এবং আপনাকে আপনার নিজস্ব টপিক আইডি প্রদান করতে হবে। আরও তথ্যের জন্য ‘ক্রিয়েট এ টপিক’ দেখুন।

ইভেন্ট গ্রহণ করার জন্য, আপনার ব্যবহারের ক্ষেত্র অনুযায়ী সেই টপিকে একটি পুল বা পুশ সাবস্ক্রিপশন তৈরি করুন। SDM টপিকে একাধিক সাবস্ক্রিপশন সমর্থিত। আরও তথ্যের জন্য ‘সাবস্ক্রিপশন ব্যবস্থাপনা’ দেখুন।

ইভেন্ট শুরু করুন

পাব/সাব সাবস্ক্রিপশন তৈরি হয়ে গেলে প্রথমবারের মতো ইভেন্ট শুরু করতে, এককালীন ট্রিগার হিসেবে devices.list API কল করুন। এই কলের পর সমস্ত স্ট্রাকচার এবং ডিভাইসের জন্য ইভেন্ট প্রকাশিত হবে।

উদাহরণস্বরূপ, কুইক স্টার্ট গাইডের অথরাইজ পৃষ্ঠাটি দেখুন।

ঘটনার ক্রম

পাব/সাব ইভেন্টগুলোর ক্রমানুসারে ডেলিভারির নিশ্চয়তা দেয় না, এবং ইভেন্টগুলো প্রাপ্তির ক্রম সেগুলোর প্রকৃত সংঘটনের ক্রমের সাথে নাও মিলতে পারে। ইভেন্টের ক্রম মেলানোর জন্য timestamp ফিল্ডটি ব্যবহার করুন। ইভেন্টগুলো আলাদাভাবে অথবা একত্রিত হয়ে একটিমাত্র ইভেন্ট মেসেজ হিসেবেও আসতে পারে।

আরও তথ্যের জন্য, অর্ডারিং মেসেজ দেখুন।

ব্যবহারকারী আইডি

যদি আপনার বাস্তবায়ন কাঠামো বা ডিভাইসের পরিবর্তে ব্যবহারকারীদের কেন্দ্র করে হয়, তাহলে রিসোর্স এবং ইভেন্টের মধ্যে সম্পর্ক স্থাপন করতে ইভেন্ট পেলোড থেকে userID ফিল্ডটি ব্যবহার করুন। এই ফিল্ডটি একটি অস্পষ্ট আইডি যা একজন নির্দিষ্ট ব্যবহারকারীকে প্রতিনিধিত্ব করে।

প্রতিটি এপিআই কলের এইচটিটিপি রেসপন্স হেডারেও userID পাওয়া যায়।

সম্পর্কীয় ঘটনা

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

তিন ধরনের সম্পর্কীয় ঘটনা রয়েছে:

  • তৈরি করা হয়েছে
  • মুছে ফেলা হয়েছে
  • আপডেট করা হয়েছে

একটি রিলেশন ইভেন্টের পেলোড নিম্নরূপ:

পেলোড

{
  "eventId" : "760e9f33-5bd1-4d31-b72b-2838428eead8",
  "timestamp" : "2019-01-01T00:00:01Z",
  "relationUpdate" : {
    "type" : "CREATED",
    "subject" : "enterprises/project-id/structures/structure-id",
    "object" : "enterprises/project-id/devices/device-id"
  },
  "userId": "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi"
}

একটি রিলেশন ইভেন্টে, object হলো সেই রিসোর্স যা ইভেন্টটি ট্রিগার করে এবং subject হলো সেই রিসোর্স যার সাথে object এখন একটি সম্পর্ক তৈরি হয়েছে। উপরের উদাহরণে, একটি user এই নির্দিষ্ট ডিভাইসটিতে একজনকে অ্যাক্সেস দেওয়া হয়েছে developerএবং userতার অনুমোদিত ডিভাইসটি এখন তাদের অনুমোদিত কাঠামোর সাথে সম্পর্কিত, যা ইভেন্টটিকে ট্রিগার করে।

একটি subject কেবল একটি ঘর বা একটি কাঠামো হতে পারে। যদি a developer দেখার অনুমতি নেই userএর গঠনে, subject সর্বদা শূন্য থাকে।

ক্ষেত্র

মাঠ বর্ণনা ডেটা টাইপ
eventId ইভেন্টটির অনন্য শনাক্তকারী। string
উদাহরণ: "db670e69-715f-424e-bf22-866f747868f0"
timestamp যে সময়ে ঘটনাটি ঘটেছিল। string
উদাহরণ: "2019-01-01T00:00:01Z"
relationUpdate একটি অবজেক্ট যা সম্পর্ক হালনাগাদ সংক্রান্ত তথ্য বিশদভাবে বর্ণনা করে। object
userId একটি অনন্য, অস্পষ্ট শনাক্তকারী যা ব্যবহারকারীকে প্রতিনিধিত্ব করে। string
উদাহরণ: "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi"

বিভিন্ন ধরনের অনুষ্ঠান এবং সেগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য ইভেন্টস দেখুন।

উদাহরণ

প্রতিটি ধরনের রিলেশন ইভেন্টের জন্য ইভেন্ট পেলোড ভিন্ন হয়:

তৈরি করা হয়েছে

কাঠামো তৈরি করা হয়েছে

"relationUpdate" : {
  "type" : "CREATED",
  "subject" : "",
  "object" : "enterprises/project-id/structures/structure-id"
}

ডিভাইস তৈরি করা হয়েছে

"relationUpdate" : {
  "type" : "CREATED",
  "subject" : "enterprises/project-id/structures/structure-id",
  "object" : "enterprises/project-id/devices/device-id"
}

ডিভাইস তৈরি করা হয়েছে

"relationUpdate" : {
  "type" : "CREATED",
  "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id",
  "object" : "enterprises/project-id/devices/device-id"
}

আপডেট করা হয়েছে

ডিভাইসটি সরানো হয়েছে

"relationUpdate" : {
  "type" : "UPDATED",
  "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id",
  "object" : "enterprises/project-id/devices/device-id"
}

মুছে ফেলা হয়েছে

কাঠামো মুছে ফেলা হয়েছে

"relationUpdate" : {
  "type" : "DELETED",
  "subject" : "",
  "object" : "enterprises/project-id/structures/structure-id"
}

ডিভাইস মুছে ফেলা হয়েছে

"relationUpdate" : {
  "type" : "DELETED",
  "subject" : "enterprises/project-id/structures/structure-id",
  "object" : "enterprises/project-id/devices/device-id"
}

ডিভাইস মুছে ফেলা হয়েছে

"relationUpdate" : {
  "type" : "DELETED",
  "subject" : "enterprises/project-id/structures/structure-id/rooms/room-id",
  "object" : "enterprises/project-id/devices/device-id"
}

নিম্নলিখিত ক্ষেত্রে রিলেশন ইভেন্ট পাঠানো হয় না:

  • একটি রুম মুছে ফেলা হয়েছে

সম্পদ ইভেন্ট

একটি রিসোর্স ইভেন্ট কোনো একটি রিসোর্সের নির্দিষ্ট আপডেটকে বোঝায়। এটি কোনো ট্রেইট ফিল্ডের মানের পরিবর্তনের প্রতিক্রিয়া হতে পারে, যেমন থার্মোস্ট্যাটের মোড পরিবর্তন করা। এটি এমন একটি ডিভাইস অ্যাকশনও বোঝাতে পারে যা কোনো ট্রেইট ফিল্ড পরিবর্তন করে না, যেমন ডিভাইসের কোনো বাটন চাপা।

ট্রেইট ফিল্ডের মানের পরিবর্তনের প্রতিক্রিয়ায় তৈরি হওয়া একটি ইভেন্টে একটি traits অবজেক্ট থাকে, যা একটি ডিভাইস GET কলের অনুরূপ:

পেলোড

{
  "eventId" : "f13cac95-701c-4fbf-91bc-8ff8f4596a72",
  "timestamp" : "2019-01-01T00:00:01Z",
  "resourceUpdate" : {
    "name" : "enterprises/project-id/devices/device-id",
    "traits" : {
      "sdm.devices.traits.ThermostatMode" : {
        "mode" : "COOL"
      }
    }
  },
  "userId": "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
  "resourceGroup" : [
    "enterprises/project-id/devices/device-id"
  ]
}

যেকোনো ট্রেইট ফিল্ড পরিবর্তন রিসোর্স ইভেন্টের পেলোড ফরম্যাট বোঝার জন্য স্বতন্ত্র ট্রেইট ডকুমেন্টেশন ব্যবহার করুন।

ডিভাইসের এমন কোনো কার্যকলাপের প্রতিক্রিয়ায় তৈরি হওয়া ইভেন্ট, যা কোনো ট্রেইট ফিল্ড পরিবর্তন করে না, তারও একটি পেলোড থাকে যাতে একটি resourceUpdate অবজেক্ট থাকে, কিন্তু সেখানে traits অবজেক্টের পরিবর্তে একটি events অবজেক্ট থাকে:

পেলোড

{
  "eventId" : "84d28687-643f-4e2e-b08b-9368ecbcce6d",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "s-3zwJEgvNjFyKIFI8Av4eNfBX...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"eventThreadId" : "d67cd3f7-86a7-425e-8bb3-462f92ec9f59",
"eventThreadState" : "STARTED",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }

এই ধরনের রিসোর্স ইভেন্টগুলো নির্দিষ্ট ট্রেইটে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, মোশন ইভেন্টটি সংজ্ঞায়িত করা হয় ক্যামেরামোশন ট্রেইট। এই ধরনের রিসোর্স ইভেন্টগুলোর পেলোড ফরম্যাট বোঝার জন্য প্রতিটি ট্রেইটের ডকুমেন্টেশন দেখুন।

ক্ষেত্র

মাঠ বর্ণনা ডেটা টাইপ
eventId ইভেন্টটির অনন্য শনাক্তকারী। string
উদাহরণ: "84d28687-643f-4e2e-b08b-9368ecbcce6d"
timestamp যে সময়ে ঘটনাটি ঘটেছিল। string
উদাহরণ: "2019-01-01T00:00:01Z"
resourceUpdate এমন একটি অবজেক্ট যা রিসোর্স আপডেট সম্পর্কিত তথ্য বিশদভাবে বর্ণনা করে। object
userId একটি অনন্য, অস্পষ্ট শনাক্তকারী যা ব্যবহারকারীকে প্রতিনিধিত্ব করে। string
উদাহরণ: "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi"
eventThreadId ইভেন্ট থ্রেডের অনন্য শনাক্তকারী। string
উদাহরণ: "d67cd3f7-86a7-425e-8bb3-462f92ec9f59"
eventThreadState ইভেন্ট থ্রেডের অবস্থা। string
মান: 'শুরু হয়েছে', 'আপডেট করা হয়েছে', 'শেষ হয়েছে'
resourceGroup এমন একটি অবজেক্ট যা সেইসব রিসোর্সকে নির্দেশ করে যেগুলোতে এই ইভেন্টের অনুরূপ আপডেট থাকতে পারে। ইভেন্টটির নিজস্ব রিসোর্স ( resourceUpdate অবজেক্ট থেকে) সর্বদা এই অবজেক্টে উপস্থিত থাকবে। object

বিভিন্ন ধরনের অনুষ্ঠান এবং সেগুলি কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য ইভেন্টস দেখুন।

আপডেটযোগ্য বিজ্ঞপ্তি

অ্যান্ড্রয়েড বা আইওএস-এর মতো অ্যাপে রিসোর্স ইভেন্টের উপর ভিত্তি করে নোটিফিকেশন প্রয়োগ করা যেতে পারে। পাঠানো নোটিফিকেশনের সংখ্যা কমাতে, আপডেটেবল নোটিফিকেশন নামক একটি ফিচার প্রয়োগ করা যেতে পারে, যেখানে একই ইভেন্ট থ্রেডের পরবর্তী ইভেন্টগুলোর উপর ভিত্তি করে বিদ্যমান নোটিফিকেশনগুলো নতুন তথ্য দিয়ে আপডেট করা হয়।

নির্বাচিত ইভেন্টগুলিতে আপডেটযোগ্য নোটিফিকেশনের সুবিধা রয়েছে এবং ডকুমেন্টেশনে সেগুলিকে 'আপডেটযোগ্য' (Updateable) হিসেবে ট্যাগ করা থাকে। এই ইভেন্টগুলির পেলোডে eventThreadId নামে একটি অতিরিক্ত ফিল্ড থাকে। কোনো ব্যবহারকারীর জন্য প্রদর্শিত একটি বিদ্যমান নোটিফিকেশন আপডেট করার উদ্দেশ্যে, স্বতন্ত্র ইভেন্টগুলিকে একসাথে লিঙ্ক করতে এই ফিল্ডটি ব্যবহার করুন।

ইভেন্ট থ্রেড এবং ইভেন্ট সেশন এক জিনিস নয়। ইভেন্ট থ্রেড একই থ্রেডের পূর্ববর্তী কোনো ইভেন্টের হালনাগাদ অবস্থা শনাক্ত করে। ইভেন্ট সেশন পরস্পরের সাথে সম্পর্কিত পৃথক পৃথক ইভেন্ট শনাক্ত করে এবং একটি নির্দিষ্ট ইভেন্ট সেশনের জন্য একাধিক ইভেন্ট থ্রেড থাকতে পারে।

বিজ্ঞপ্তির উদ্দেশ্যে, বিভিন্ন ধরনের ইভেন্টকে বিভিন্ন থ্রেডে ভাগ করা হয়।

এই থ্রেড গ্রুপিং এবং টাইমিং লজিক গুগল দ্বারা পরিচালিত হয় এবং এটি যেকোনো সময় পরিবর্তন সাপেক্ষ। developer SDM API দ্বারা প্রদত্ত ইভেন্ট থ্রেড এবং সেশনের উপর ভিত্তি করে নোটিফিকেশন আপডেট করা উচিত।

থ্রেড অবস্থা

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

  • STARTED — একটি ইভেন্ট থ্রেডের প্রথম ইভেন্ট।
  • হালনাগাদকৃত — একটি চলমান ইভেন্ট থ্রেডের অন্তর্ভুক্ত একটি ইভেন্ট। একটিমাত্র থ্রেডে এই অবস্থায় শূন্য বা তার বেশি সংখ্যক ইভেন্ট থাকতে পারে।
  • ENDED — একটি ইভেন্ট থ্রেডের সর্বশেষ ইভেন্ট, যা থ্রেডের ধরনের উপর নির্ভর করে সর্বশেষ UPDATED ইভেন্টের একটি প্রতিলিপি হতে পারে।

এই ফিল্ডটি কোনো ইভেন্ট থ্রেডের অগ্রগতি এবং তার সমাপ্তি ট্র্যাক করতে ব্যবহার করা যেতে পারে।

ইভেন্ট ফিল্টারিং

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

উদাহরণস্বরূপ, একটি প্রাথমিক মোশন ইভেন্টের জন্য একটি মেসেজ কোনো SDM টপিকে প্রকাশিত হতে পারে। এরপরের মোশন সম্পর্কিত অন্যান্য মেসেজগুলো একটি নির্দিষ্ট সময় অতিবাহিত না হওয়া পর্যন্ত প্রকাশ হওয়া থেকে ফিল্টার হয়ে থাকবে। সেই সময় অতিবাহিত হয়ে গেলে, সেই ইভেন্ট টাইপের জন্য একটি ইভেন্ট মেসেজ পুনরায় প্রকাশিত হতে পারে।

গুগল হোম অ্যাপে (GHA), ফিল্টার করা ইভেন্টগুলিও দেখা যাবে। userএর ইভেন্ট হিস্ট্রি। তবে, এই ধরনের ইভেন্টগুলো কোনো অ্যাপ নোটিফিকেশন তৈরি করে না (এমনকি যদি সেই নোটিফিকেশন টাইপটি সক্রিয় করা থাকে)।

প্রতিটি ইভেন্টের নিজস্ব ইভেন্ট ফিল্টারিং লজিক রয়েছে, যা গুগল দ্বারা নির্ধারিত এবং যেকোনো সময় পরিবর্তন সাপেক্ষ। এই ইভেন্ট ফিল্টারিং লজিকটি ইভেন্ট থ্রেড এবং সেশন লজিক থেকে স্বাধীন।

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

SDM API সাবস্ক্রিপশন এবং ইভেন্ট মেসেজ পরিচালনার জন্য সার্ভিস অ্যাকাউন্ট ব্যবহার করার পরামর্শ দেওয়া হয়। সার্ভিস অ্যাকাউন্ট কোনো ব্যক্তি নয়, বরং একটি অ্যাপ্লিকেশন বা ভার্চুয়াল মেশিন ব্যবহার করে এবং এর নিজস্ব একটি অনন্য অ্যাকাউন্ট কী থাকে।

পাব/সাব এপিআই-এর জন্য সার্ভিস অ্যাকাউন্ট অনুমোদনে টু-লেগড ওঅথ (2LO) ব্যবহৃত হয়।

2LO অনুমোদন প্রবাহে:

  • দ্য developer একটি সার্ভিস কী ব্যবহার করে অ্যাক্সেস টোকেনের জন্য অনুরোধ করে।
  • দ্য developer এপিআই-তে কল করার সময় অ্যাক্সেস টোকেন ব্যবহার করে।

Google 2LO সম্পর্কে আরও জানতে এবং এটি কীভাবে সেট আপ করতে হয় তা জানতে, “সার্ভার টু সার্ভার অ্যাপ্লিকেশনের জন্য OAuth 2.0 ব্যবহার” দেখুন।

অনুমোদন

সার্ভিস অ্যাকাউন্টটি পাব/সাব এপিআই (Pub/Sub API) ব্যবহারের জন্য অনুমোদিত হতে হবে:

  1. গুগল ক্লাউডে ক্লাউড পাব/সাব এপিআই সক্রিয় করুন
  2. "একটি সার্ভিস অ্যাকাউন্ট তৈরি করা" অংশে বর্ণিত পদ্ধতি অনুসারে একটি সার্ভিস অ্যাকাউন্ট এবং সার্ভিস অ্যাকাউন্ট কী তৈরি করুন। আমরা এটিকে শুধুমাত্র পাব/সাব সাবস্ক্রাইবার রোল দেওয়ার পরামর্শ দিই। যে মেশিনটি পাব/সাব এপিআই ব্যবহার করবে, সেখানে সার্ভিস অ্যাকাউন্ট কী-টি ডাউনলোড করে নিতে ভুলবেন না।
  3. পূর্ববর্তী ধাপের পৃষ্ঠার নির্দেশাবলী অনুসরণ করে আপনার অ্যাপ্লিকেশন কোডে আপনার প্রমাণীকরণ ক্রেডেনশিয়াল (সার্ভিস অ্যাকাউন্ট কী) প্রদান করুন, অথবা আপনি যদি দ্রুত API অ্যাক্সেস পরীক্ষা করতে চান, তাহলে oauth2l ব্যবহার করে ম্যানুয়ালি একটি অ্যাক্সেস টোকেন সংগ্রহ করুন।
  4. মেসেজ পুল করতে এবং তার প্রাপ্তিস্বীকার করতে Pub/Sub project.subscriptions API-এর সাথে সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল অথবা অ্যাক্সেস টোকেন ব্যবহার করুন।

ওঅথ২এল

Google oauth2l হলো Go-তে লেখা OAuth-এর একটি কমান্ড লাইন টুল। Go ব্যবহার করে এটি Mac বা Linux-এর জন্য ইনস্টল করুন।

  1. আপনার সিস্টেমে Go না থাকলে, প্রথমে এটি ডাউনলোড ও ইনস্টল করুন
  2. Go ইনস্টল হয়ে গেলে, oauth2l ইনস্টল করুন এবং আপনার PATH এনভায়রনমেন্ট ভেরিয়েবলে এর অবস্থান যোগ করুন:
    go install github.com/google/oauth2l@latest
    export PATH=$PATH:~/go/bin
  3. উপযুক্ত OAuth স্কোপ(গুলি) ব্যবহার করে oauth2l মাধ্যমে API-এর জন্য একটি অ্যাক্সেস টোকেন পান:
    oauth2l fetch --credentials path-to-service-key.json --scope https://www.googleapis.com/auth/pubsub
    https://www.googleapis.com/auth/cloud-platform
    উদাহরণস্বরূপ, যদি আপনার সার্ভিস কী ~/myServiceKey-eb0a5f900ee3.json এ অবস্থিত থাকে:
    oauth2l fetch --credentials ~/myServiceKey-eb0a5f900ee3.json --scope https://www.googleapis.com/auth/pubsub
    https://www.googleapis.com/auth/cloud-platform
    ya29.c.Elo4BmHXK5...

আরও ব্যবহার তথ্যের জন্য oauth2l README দেখুন।

গুগল এপিআই ক্লায়েন্ট লাইব্রেরি

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

এই লাইব্রেরিগুলি ব্যবহার করার সময় Pub/Sub APIনিম্নলিখিত স্কোপ স্ট্রিং(গুলি) ব্যবহার করুন:

https://www.googleapis.com/auth/pubsub
https://www.googleapis.com/auth/cloud-platform

ত্রুটি

এই নির্দেশিকার সাথে সম্পর্কিত নিম্নলিখিত ত্রুটি কোড(গুলি) প্রদর্শিত হতে পারে:

ত্রুটি বার্তা আরপিসি সমস্যা সমাধান
ক্যামেরার ছবি এখন আর ডাউনলোড করা যাচ্ছে না। DEADLINE_EXCEEDED ইভেন্টটি প্রকাশিত হওয়ার ৩০ সেকেন্ড পর ইভেন্টের ছবিগুলোর মেয়াদ শেষ হয়ে যায়। মেয়াদ শেষ হওয়ার আগেই ছবিটি ডাউনলোড করে নিন।
ইভেন্ট আইডিটি ক্যামেরার নয়। FAILED_PRECONDITION ক্যামেরা ইভেন্ট থেকে প্রাপ্ত সঠিক eventID ব্যবহার করুন।

এপিআই ত্রুটি কোডগুলির সম্পূর্ণ তালিকার জন্য এপিআই ত্রুটি কোড রেফারেন্স দেখুন।