ইভেন্টগুলি অ্যাসিঙ্ক্রোনাস এবং Google ক্লাউড পাব/সাব দ্বারা পরিচালিত হয়, প্রতি একক বিষয়ে Project. ইভেন্টগুলি সমস্ত ডিভাইস এবং কাঠামোর জন্য আপডেট সরবরাহ করে এবং ইভেন্টগুলির প্রাপ্তি নিশ্চিত করা হয় যতক্ষণ না ব্যবহারকারীর দ্বারা অ্যাক্সেস টোকেন প্রত্যাহার করা হয় এবং ইভেন্ট বার্তাগুলির মেয়াদ শেষ না হয়৷
ইভেন্টগুলি সক্ষম করুন
ইভেন্ট হল SDM API-এর একটি ঐচ্ছিক বৈশিষ্ট্য। দেখুন ইভেন্টগুলি সক্ষম করুন আপনার জন্য তাদের সক্ষম কিভাবে শিখতে Project.
Google Cloud Pub/Sub
Pub/Sub কীভাবে কাজ করে সে সম্পর্কে আরও জানতে Google Cloud Pub/Sub ডকুমেন্টেশন দেখুন। বিশেষ করে:
- Pub/Sub-এর বেসিকগুলি জানুন তাদের How-to গাইডের মাধ্যমে।
- প্রমাণীকরণ কিভাবে কাজ করে তা বুঝুন।
- একটি প্রদত্ত ক্লায়েন্ট লাইব্রেরি চয়ন করুন বা আপনার নিজের লিখুন এবং REST/HTTP বা gRPC API পৃষ্ঠ ব্যবহার করুন৷
ইভেন্ট সাবস্ক্রিপশন
জানুয়ারী 2025 এর আগে, যদি আপনার জন্য ইভেন্টগুলি সক্ষম করা হয় Project, আপনি যে নির্দিষ্ট একটি বিষয় প্রদান করা হবে Project আইডি, আকারে:
projects/gcp-project-name /subscriptions/topic-id
ইভেন্টগুলি পেতে, আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে সেই বিষয়ে একটি টান বা পুশ সাবস্ক্রিপশন তৈরি করুন। SDM বিষয়ের একাধিক সদস্যতা সমর্থিত। আরও তথ্যের জন্য সদস্যতা পরিচালনা দেখুন।
ইভেন্টগুলি শুরু করুন
একবার পাব/সাবস্ক্রিপশন তৈরি হয়ে গেলে প্রথমবারের মতো ইভেন্টগুলি শুরু করতে, একবারের ট্রিগার হিসাবে একটি devices.list
API কল করুন৷ এই কলের পরে সমস্ত কাঠামো এবং ডিভাইসের ইভেন্টগুলি প্রকাশিত হবে৷
উদাহরণের জন্য, কুইক স্টার্ট গাইডে অনুমোদন পৃষ্ঠাটি দেখুন।
ইভেন্ট অর্ডার
পাব/সাব ইভেন্টের অর্ডার করা ডেলিভারির গ্যারান্টি দেয় না, এবং ইভেন্টের প্রাপ্তির ক্রম ঘটনাগুলি আসলে ঘটেছিল এমন ক্রম অনুসারে নাও হতে পারে। ইভেন্ট অর্ডারের পুনর্মিলনে সহায়তা করতে timestamp
ক্ষেত্রটি ব্যবহার করুন। ইভেন্টগুলি পৃথকভাবে বা একটি একক ইভেন্ট বার্তায় মিলিত হতে পারে।
আরও তথ্যের জন্য, অর্ডার বার্তা দেখুন।
ইউজার আইডি
যদি আপনার বাস্তবায়ন ব্যবহারকারীদের উপর ভিত্তি করে (কাঠামো বা ডিভাইসের পরিবর্তে), সংস্থান এবং ইভেন্টগুলিকে সম্পর্কযুক্ত করতে ইভেন্ট পেলোড থেকে userID
ক্ষেত্রটি ব্যবহার করুন। এই ক্ষেত্রটি একটি অস্পষ্ট ID যা একটি নির্দিষ্ট ব্যবহারকারীর প্রতিনিধিত্ব করে।
প্রতিটি API কলের HTTP প্রতিক্রিয়া শিরোনামে userID
পাওয়া যায়।
সম্পর্কের ঘটনা
রিলেশন ইভেন্টগুলি একটি রিসোর্সের জন্য একটি রিলেশনাল আপডেট উপস্থাপন করে। উদাহরণস্বরূপ, যখন একটি ডিভাইস একটি কাঠামোতে যোগ করা হয়, বা যখন একটি কাঠামো থেকে একটি ডিভাইস মুছে ফেলা হয়।
তিন ধরণের সম্পর্কের ঘটনা রয়েছে:
- তৈরি করা হয়েছে
- মুছে ফেলা হয়েছে
- আপডেট করা হয়েছে
একটি সম্পর্ক ইভেন্টের জন্য পেলোড নিম্নরূপ:
{ "eventId" : "741ee8ac-4c40-4c26-9687-be7128564023", "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 এই নির্দিষ্ট ডিভাইসে অ্যাক্সেস মঞ্জুর করেছে a developer, এবং userএর অনুমোদিত ডিভাইস এখন তাদের অনুমোদিত কাঠামোর সাথে সম্পর্কিত, যা ইভেন্টটিকে ট্রিগার করে।
একটি subject
শুধুমাত্র একটি রুম বা একটি কাঠামো হতে পারে। যদি a developer দেখার অনুমতি নেই userএর গঠন, subject
সবসময় খালি।
ক্ষেত্র
মাঠ | বর্ণনা | ডেটা টাইপ |
---|---|---|
eventId | ইভেন্টের অনন্য শনাক্তকারী। | string উদাহরণ: "b60fcbf7-72ea-46f5-9e6c-af8dd4434424" |
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" : "4a31d9fa-69fa-4f13-bd27-7e48282b0de1", "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" : "d279ebca-94b8-4106-8ef8-04f05b66c8bd",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id /devices/device-id ", "events" : { "sdm.devices.events.CameraMotion.Motion
" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "R_mGbnLEd2A3n4Oc-voeqi5GJ5...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"eventThreadId" : "d67cd3f7-86a7-425e-8bb3-462f92ec9f59",
"eventThreadState" : "STARTED",
"resourceGroup" : [ "enterprises/project-id /devices/device-id " ] }
এই ধরনের সংস্থান ইভেন্টগুলি নির্দিষ্ট বৈশিষ্ট্যে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, মোশন ইভেন্টটি সংজ্ঞায়িত করা হয়েছে ক্যামেরা মোশন বৈশিষ্ট্য এই ধরনের রিসোর্স ইভেন্টের জন্য পেলোড ফর্ম্যাট বুঝতে প্রতিটি বৈশিষ্ট্যের ডকুমেন্টেশন দেখুন।
ক্ষেত্র
মাঠ | বর্ণনা | ডেটা টাইপ |
---|---|---|
eventId | ইভেন্টের অনন্য শনাক্তকারী। | string উদাহরণ: "d279ebca-94b8-4106-8ef8-04f05b66c8bd" |
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 |
বিভিন্ন ধরণের ইভেন্ট এবং তারা কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য ইভেন্টগুলি দেখুন।
আপডেটযোগ্য বিজ্ঞপ্তি
রিসোর্স ইভেন্টের উপর ভিত্তি করে বিজ্ঞপ্তিগুলি একটি অ্যাপে প্রয়োগ করা যেতে পারে, যেমন Android বা iOS এর জন্য। প্রেরিত বিজ্ঞপ্তির সংখ্যা কমাতে, আপডেটযোগ্য বিজ্ঞপ্তি নামে একটি বৈশিষ্ট্য প্রয়োগ করা যেতে পারে, যেখানে বিদ্যমান বিজ্ঞপ্তিগুলি একই ইভেন্ট থ্রেডের পরবর্তী ইভেন্টগুলির উপর ভিত্তি করে নতুন তথ্যের সাথে আপডেট করা হয়। আপডেটযোগ্য বিজ্ঞপ্তিগুলির জন্য ইভেন্ট বৈশিষ্ট্য সমর্থন নির্বাচন করুন এবং ডকুমেন্টেশনে আপডেটযোগ্য হিসাবে ট্যাগ করা হয়েছে। এই ইভেন্টগুলির পেলোডগুলিতে eventThreadId
নামে একটি অতিরিক্ত ক্ষেত্র রয়েছে৷ ব্যবহারকারীর জন্য প্রকাশিত একটি বিদ্যমান বিজ্ঞপ্তি আপডেট করার উদ্দেশ্যে পৃথক ইভেন্টগুলিকে একসাথে লিঙ্ক করতে এই ক্ষেত্রটি ব্যবহার করুন৷
একটি ইভেন্ট থ্রেড একটি ইভেন্ট সেশনের মতো নয়। ইভেন্ট থ্রেড একই থ্রেডে পূর্ববর্তী ইভেন্টের জন্য একটি আপডেট স্থিতি সনাক্ত করে। ইভেন্ট সেশনটি একে অপরের সাথে সম্পর্কিত পৃথক ইভেন্টগুলি সনাক্ত করে এবং একটি প্রদত্ত ইভেন্ট সেশনের জন্য একাধিক ইভেন্ট থ্রেড থাকতে পারে।
বিজ্ঞপ্তির উদ্দেশ্যে, বিভিন্ন ধরণের ইভেন্টকে বিভিন্ন থ্রেডে গোষ্ঠীভুক্ত করা হয়।
এই থ্রেড গ্রুপিং এবং টাইমিং লজিক Google দ্বারা পরিচালিত হয় এবং যে কোনো সময় পরিবর্তন হতে পারে। ক developer SDM API দ্বারা প্রদত্ত ইভেন্ট থ্রেড এবং সেশনের উপর ভিত্তি করে বিজ্ঞপ্তি আপডেট করা উচিত।
থ্রেড অবস্থা
আপডেটযোগ্য বিজ্ঞপ্তিগুলিকে সমর্থন করে এমন ইভেন্টগুলিতে একটি eventThreadState
ক্ষেত্র থাকে যা সেই সময়ে ইভেন্ট থ্রেডের অবস্থা নির্দেশ করে। এই ক্ষেত্রের নিম্নলিখিত মান আছে:
- শুরু হয়েছে - একটি ইভেন্ট থ্রেডের প্রথম ইভেন্ট।
- আপডেট করা হয়েছে - একটি চলমান ইভেন্ট থ্রেডে একটি ইভেন্ট। একটি একক থ্রেডে এই অবস্থার সাথে শূন্য বা তার বেশি ইভেন্ট হতে পারে।
- শেষ - একটি ইভেন্ট থ্রেডের শেষ ইভেন্ট, যা থ্রেডের প্রকারের উপর নির্ভর করে শেষ আপডেট হওয়া ইভেন্টের নকল হতে পারে।
এই ক্ষেত্রটি একটি ইভেন্ট থ্রেডের অগ্রগতি এবং কখন এটি শেষ হয়েছে তা ট্র্যাক করতে ব্যবহার করা যেতে পারে।
ইভেন্ট ফিল্টারিং
কিছু ক্ষেত্রে, একটি ডিভাইস দ্বারা শনাক্ত হওয়া ইভেন্টগুলিকে SDM পাব/সাব বিষয়ে প্রকাশ করা থেকে ফিল্টার করা হতে পারে। এই আচরণকে ইভেন্ট ফিল্টারিং বলা হয়। ইভেন্ট ফিল্টারিংয়ের উদ্দেশ্য হল অল্প সময়ের মধ্যে অনেক অনুরূপ ইভেন্ট বার্তা প্রকাশ করা এড়ানো।
উদাহরণস্বরূপ, একটি প্রাথমিক মোশন ইভেন্টের জন্য একটি SDM বিষয়ে একটি বার্তা প্রকাশিত হতে পারে৷ এর পরে মোশনের জন্য অন্যান্য বার্তাগুলি প্রকাশ করা থেকে ফিল্টার করা হবে যতক্ষণ না একটি নির্দিষ্ট সময় অতিবাহিত হয়৷ একবার সেই সময়কাল অতিবাহিত হয়ে গেলে, সেই ইভেন্ট প্রকারের জন্য একটি ইভেন্ট বার্তা আবার প্রকাশিত হতে পারে।
Google Home অ্যাপে (GHA), ফিল্টার করা ইভেন্টগুলি এখনও দেখানো হবে userএর ঘটনা ইতিহাস। যাইহোক, এই ধরনের ইভেন্টগুলি একটি অ্যাপ বিজ্ঞপ্তি তৈরি করে না (এমনকি যদি সেই বিজ্ঞপ্তি প্রকারটি সক্ষম করা থাকে)।
প্রতিটি ধরনের ইভেন্টের নিজস্ব ইভেন্ট ফিল্টারিং লজিক থাকে, যা Google দ্বারা সংজ্ঞায়িত এবং যেকোনো সময় পরিবর্তন হতে পারে। এই ইভেন্ট ফিল্টারিং লজিক ইভেন্ট থ্রেড এবং সেশন লজিক থেকে স্বাধীন।
পরিষেবা অ্যাকাউন্ট
SDM API সদস্যতা এবং ইভেন্ট বার্তা পরিচালনার জন্য পরিষেবা অ্যাকাউন্টগুলি সুপারিশ করা হয়৷ একটি পরিষেবা অ্যাকাউন্ট একটি অ্যাপ্লিকেশন বা ভার্চুয়াল মেশিন দ্বারা ব্যবহৃত হয়, কোনও ব্যক্তি নয়, এবং এর নিজস্ব অনন্য অ্যাকাউন্ট কী রয়েছে৷
Pub/Sub API-এর জন্য পরিষেবা অ্যাকাউন্ট অনুমোদন Two-legged OAuth (2LO) ব্যবহার করে।
2LO অনুমোদন প্রবাহে:
- দ developer একটি পরিষেবা কী ব্যবহার করে একটি অ্যাক্সেস টোকেন অনুরোধ করে।
- দ developer API-তে কলের সাথে অ্যাক্সেস টোকেন ব্যবহার করে।
Google 2LO এবং কিভাবে সেট আপ করা যায় সে সম্পর্কে আরও জানতে, সার্ভার থেকে সার্ভার অ্যাপ্লিকেশনের জন্য OAuth 2.0 ব্যবহার করা দেখুন।
অনুমোদন
পরিষেবা অ্যাকাউন্ট পাব/সাব API-এর সাথে ব্যবহারের জন্য অনুমোদিত হওয়া উচিত:
- Google ক্লাউডে ক্লাউড পাব/সাব API সক্ষম করুন ৷
- একটি পরিষেবা অ্যাকাউন্ট তৈরি করাতে বর্ণিত হিসাবে একটি পরিষেবা অ্যাকাউন্ট এবং পরিষেবা অ্যাকাউন্ট কী তৈরি করুন৷ আমরা এটি শুধুমাত্র পাব/সাবস্ক্রাইবার ভূমিকা দেওয়ার পরামর্শ দিই। Pub/Sub API ব্যবহার করা মেশিনে পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করা নিশ্চিত করুন।
- পূর্ববর্তী ধাপে পৃষ্ঠায় নির্দেশাবলী অনুসরণ করে আপনার অ্যাপ্লিকেশন কোডে আপনার প্রমাণীকরণের প্রমাণপত্র (পরিষেবা অ্যাকাউন্ট কী) প্রদান করুন, অথবা আপনি যদি দ্রুত API অ্যাক্সেস পরীক্ষা করতে চান তাহলে
oauth2l
ব্যবহার করে ম্যানুয়ালি একটি অ্যাক্সেস টোকেন পান। - বার্তাগুলি টানতে এবং স্বীকার করতে Pub/Sub
project.subscriptions
API-এর সাথে পরিষেবা অ্যাকাউন্টের শংসাপত্র বা অ্যাক্সেস টোকেন ব্যবহার করুন।
oauth2l
Google oauth2l
হল Go-তে লেখা OAuth-এর জন্য একটি কমান্ড লাইন টুল। Go ব্যবহার করে Mac বা Linux-এর জন্য এটি ইনস্টল করুন।
- আপনার সিস্টেমে Go না থাকলে, প্রথমে এটি ডাউনলোড করুন এবং ইনস্টল করুন ।
- একবার Go ইনস্টল হয়ে গেলে,
oauth2l
ইনস্টল করুন এবং আপনারPATH
এনভায়রনমেন্ট ভেরিয়েবলে এর অবস্থান যোগ করুন:go install github.com/google/oauth2l@latest
export PATH=$PATH:~/go/bin
- উপযুক্ত OAuth সুযোগ(গুলি) ব্যবহার করে API-এর জন্য একটি অ্যাক্সেস টোকেন পেতে
oauth2l
ব্যবহার করুন: উদাহরণস্বরূপ, যদি আপনার পরিষেবা কী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 দেখুন।
Google API ক্লায়েন্ট লাইব্রেরি
Google API-এর জন্য বেশ কিছু ক্লায়েন্ট লাইব্রেরি উপলব্ধ রয়েছে যা OAuth 2.0 ব্যবহার করে। আপনার পছন্দের ভাষা সম্পর্কে আরও তথ্যের জন্য Google API ক্লায়েন্ট লাইব্রেরি দেখুন।
সঙ্গে এই লাইব্রেরি ব্যবহার করার সময় Pub/Sub API, নিম্নলিখিত স্কোপ স্ট্রিং(গুলি) ব্যবহার করুন:
https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
ত্রুটি
নিম্নলিখিত ত্রুটি কোড(গুলি) এই নির্দেশিকা সম্পর্কিত ফেরত দেওয়া হতে পারে:
ত্রুটি বার্তা | আরপিসি | সমস্যা সমাধান |
---|---|---|
ক্যামেরা ছবি ডাউনলোডের জন্য আর উপলব্ধ নেই৷ | DEADLINE_EXCEEDED | ইভেন্ট প্রকাশিত হওয়ার 30 সেকেন্ড পরে ইভেন্ট চিত্রের মেয়াদ শেষ হয়ে যায়। মেয়াদ শেষ হওয়ার আগে ছবিটি ডাউনলোড করতে ভুলবেন না। |
ইভেন্ট আইডি ক্যামেরার অন্তর্গত নয়। | FAILED_PRECONDITION | ক্যামেরা ইভেন্ট দ্বারা ফেরত সঠিক eventID ব্যবহার করুন। |
API ত্রুটি কোডের সম্পূর্ণ তালিকার জন্য API ত্রুটি কোড রেফারেন্স দেখুন।
,ইভেন্টগুলি অ্যাসিঙ্ক্রোনাস এবং Google ক্লাউড পাব/সাব দ্বারা পরিচালিত হয়, প্রতি একক বিষয়ে Project. ইভেন্টগুলি সমস্ত ডিভাইস এবং কাঠামোর জন্য আপডেট সরবরাহ করে এবং ইভেন্টগুলির প্রাপ্তি নিশ্চিত করা হয় যতক্ষণ না ব্যবহারকারীর দ্বারা অ্যাক্সেস টোকেন প্রত্যাহার করা হয় এবং ইভেন্ট বার্তাগুলির মেয়াদ শেষ না হয়৷
ইভেন্টগুলি সক্ষম করুন
ইভেন্ট হল SDM API-এর একটি ঐচ্ছিক বৈশিষ্ট্য। দেখুন ইভেন্টগুলি সক্ষম করুন আপনার জন্য তাদের সক্ষম কিভাবে শিখতে Project.
Google Cloud Pub/Sub
Pub/Sub কীভাবে কাজ করে সে সম্পর্কে আরও জানতে Google Cloud Pub/Sub ডকুমেন্টেশন দেখুন। বিশেষ করে:
- Pub/Sub-এর বেসিকগুলি জানুন তাদের How-to গাইডের মাধ্যমে।
- প্রমাণীকরণ কিভাবে কাজ করে তা বুঝুন।
- একটি প্রদত্ত ক্লায়েন্ট লাইব্রেরি চয়ন করুন বা আপনার নিজের লিখুন এবং REST/HTTP বা gRPC API পৃষ্ঠ ব্যবহার করুন৷
ইভেন্ট সাবস্ক্রিপশন
জানুয়ারী 2025 এর আগে, যদি আপনার জন্য ইভেন্টগুলি সক্ষম করা হয় Project, আপনি যে নির্দিষ্ট একটি বিষয় প্রদান করা হবে Project আইডি, আকারে:
projects/gcp-project-name /subscriptions/topic-id
ইভেন্টগুলি পেতে, আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে সেই বিষয়ে একটি টান বা পুশ সাবস্ক্রিপশন তৈরি করুন। SDM বিষয়ের একাধিক সদস্যতা সমর্থিত। আরও তথ্যের জন্য সদস্যতা পরিচালনা দেখুন।
ইভেন্টগুলি শুরু করুন
একবার পাব/সাবস্ক্রিপশন তৈরি হয়ে গেলে প্রথমবারের মতো ইভেন্টগুলি শুরু করতে, একবারের ট্রিগার হিসাবে একটি devices.list
API কল করুন৷ এই কলের পরে সমস্ত কাঠামো এবং ডিভাইসের ইভেন্টগুলি প্রকাশিত হবে৷
উদাহরণের জন্য, কুইক স্টার্ট গাইডে অনুমোদন পৃষ্ঠাটি দেখুন।
ইভেন্ট অর্ডার
পাব/সাব ইভেন্টের অর্ডার করা ডেলিভারির গ্যারান্টি দেয় না, এবং ইভেন্টের প্রাপ্তির ক্রম ঘটনাগুলি আসলে ঘটেছিল এমন ক্রম অনুসারে নাও হতে পারে। ইভেন্ট অর্ডারের পুনর্মিলনে সহায়তা করতে timestamp
ক্ষেত্রটি ব্যবহার করুন। ইভেন্টগুলি পৃথকভাবে বা একটি একক ইভেন্ট বার্তায় মিলিত হতে পারে।
আরও তথ্যের জন্য, অর্ডার বার্তা দেখুন।
ইউজার আইডি
যদি আপনার বাস্তবায়ন ব্যবহারকারীদের উপর ভিত্তি করে (কাঠামো বা ডিভাইসের পরিবর্তে), সংস্থান এবং ইভেন্টগুলিকে সম্পর্কযুক্ত করতে ইভেন্ট পেলোড থেকে userID
ক্ষেত্রটি ব্যবহার করুন। এই ক্ষেত্রটি একটি অস্পষ্ট ID যা একটি নির্দিষ্ট ব্যবহারকারীর প্রতিনিধিত্ব করে।
প্রতিটি API কলের HTTP প্রতিক্রিয়া শিরোনামে userID
পাওয়া যায়।
সম্পর্কের ঘটনা
রিলেশন ইভেন্টগুলি একটি রিসোর্সের জন্য একটি রিলেশনাল আপডেট উপস্থাপন করে। উদাহরণস্বরূপ, যখন একটি ডিভাইস একটি কাঠামোতে যোগ করা হয়, বা যখন একটি কাঠামো থেকে একটি ডিভাইস মুছে ফেলা হয়।
তিন ধরণের সম্পর্কের ঘটনা রয়েছে:
- তৈরি করা হয়েছে
- মুছে ফেলা হয়েছে
- আপডেট করা হয়েছে
একটি সম্পর্ক ইভেন্টের জন্য পেলোড নিম্নরূপ:
{ "eventId" : "741ee8ac-4c40-4c26-9687-be7128564023", "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 এই নির্দিষ্ট ডিভাইসে অ্যাক্সেস মঞ্জুর করেছে a developer, এবং userএর অনুমোদিত ডিভাইস এখন তাদের অনুমোদিত কাঠামোর সাথে সম্পর্কিত, যা ইভেন্টটিকে ট্রিগার করে।
একটি subject
শুধুমাত্র একটি রুম বা একটি কাঠামো হতে পারে। যদি a developer দেখার অনুমতি নেই userএর গঠন, subject
সবসময় খালি।
ক্ষেত্র
মাঠ | বর্ণনা | ডেটা টাইপ |
---|---|---|
eventId | ইভেন্টের অনন্য শনাক্তকারী। | string উদাহরণ: "b60fcbf7-72ea-46f5-9e6c-af8dd4434424" |
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" : "4a31d9fa-69fa-4f13-bd27-7e48282b0de1", "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" : "d279ebca-94b8-4106-8ef8-04f05b66c8bd",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id /devices/device-id ", "events" : { "sdm.devices.events.CameraMotion.Motion
" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "R_mGbnLEd2A3n4Oc-voeqi5GJ5...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"eventThreadId" : "d67cd3f7-86a7-425e-8bb3-462f92ec9f59",
"eventThreadState" : "STARTED",
"resourceGroup" : [ "enterprises/project-id /devices/device-id " ] }
এই ধরনের সংস্থান ইভেন্টগুলি নির্দিষ্ট বৈশিষ্ট্যে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, মোশন ইভেন্টটি সংজ্ঞায়িত করা হয়েছে ক্যামেরা মোশন বৈশিষ্ট্য এই ধরনের রিসোর্স ইভেন্টের জন্য পেলোড ফর্ম্যাট বুঝতে প্রতিটি বৈশিষ্ট্যের ডকুমেন্টেশন দেখুন।
ক্ষেত্র
মাঠ | বর্ণনা | ডেটা টাইপ |
---|---|---|
eventId | ইভেন্টের অনন্য শনাক্তকারী। | string উদাহরণ: "d279ebca-94b8-4106-8ef8-04f05b66c8bd" |
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 |
বিভিন্ন ধরণের ইভেন্ট এবং তারা কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য ইভেন্টগুলি দেখুন।
আপডেটযোগ্য বিজ্ঞপ্তি
রিসোর্স ইভেন্টের উপর ভিত্তি করে বিজ্ঞপ্তিগুলি একটি অ্যাপে প্রয়োগ করা যেতে পারে, যেমন Android বা iOS এর জন্য। প্রেরিত বিজ্ঞপ্তির সংখ্যা কমাতে, আপডেটযোগ্য বিজ্ঞপ্তি নামে একটি বৈশিষ্ট্য প্রয়োগ করা যেতে পারে, যেখানে বিদ্যমান বিজ্ঞপ্তিগুলি একই ইভেন্ট থ্রেডের পরবর্তী ইভেন্টগুলির উপর ভিত্তি করে নতুন তথ্যের সাথে আপডেট করা হয়। আপডেটযোগ্য বিজ্ঞপ্তিগুলির জন্য ইভেন্ট বৈশিষ্ট্য সমর্থন নির্বাচন করুন এবং ডকুমেন্টেশনে আপডেটযোগ্য হিসাবে ট্যাগ করা হয়েছে। এই ইভেন্টগুলির পেলোডগুলিতে eventThreadId
নামে একটি অতিরিক্ত ক্ষেত্র রয়েছে৷ ব্যবহারকারীর জন্য প্রকাশিত একটি বিদ্যমান বিজ্ঞপ্তি আপডেট করার উদ্দেশ্যে পৃথক ইভেন্টগুলিকে একসাথে লিঙ্ক করতে এই ক্ষেত্রটি ব্যবহার করুন৷
একটি ইভেন্ট থ্রেড একটি ইভেন্ট সেশনের মতো নয়। ইভেন্ট থ্রেড একই থ্রেডে পূর্ববর্তী ইভেন্টের জন্য একটি আপডেট স্থিতি সনাক্ত করে। ইভেন্ট সেশনটি একে অপরের সাথে সম্পর্কিত পৃথক ইভেন্টগুলি সনাক্ত করে এবং একটি প্রদত্ত ইভেন্ট সেশনের জন্য একাধিক ইভেন্ট থ্রেড থাকতে পারে।
বিজ্ঞপ্তির উদ্দেশ্যে, বিভিন্ন ধরণের ইভেন্টকে বিভিন্ন থ্রেডে গোষ্ঠীভুক্ত করা হয়।
এই থ্রেড গ্রুপিং এবং টাইমিং লজিক Google দ্বারা পরিচালিত হয় এবং যে কোনো সময় পরিবর্তন হতে পারে। ক developer SDM API দ্বারা প্রদত্ত ইভেন্ট থ্রেড এবং সেশনের উপর ভিত্তি করে বিজ্ঞপ্তি আপডেট করা উচিত।
থ্রেড অবস্থা
আপডেটযোগ্য বিজ্ঞপ্তিগুলিকে সমর্থন করে এমন ইভেন্টগুলিতে একটি eventThreadState
ক্ষেত্র থাকে যা সেই সময়ে ইভেন্ট থ্রেডের অবস্থা নির্দেশ করে। এই ক্ষেত্রের নিম্নলিখিত মান আছে:
- শুরু হয়েছে - একটি ইভেন্ট থ্রেডের প্রথম ইভেন্ট।
- আপডেট করা হয়েছে - একটি চলমান ইভেন্ট থ্রেডে একটি ইভেন্ট। একটি একক থ্রেডে এই অবস্থার সাথে শূন্য বা তার বেশি ইভেন্ট হতে পারে।
- শেষ - একটি ইভেন্ট থ্রেডের শেষ ইভেন্ট, যা থ্রেডের প্রকারের উপর নির্ভর করে শেষ আপডেট হওয়া ইভেন্টের নকল হতে পারে।
এই ক্ষেত্রটি একটি ইভেন্ট থ্রেডের অগ্রগতি এবং কখন এটি শেষ হয়েছে তা ট্র্যাক করতে ব্যবহার করা যেতে পারে।
ইভেন্ট ফিল্টারিং
কিছু ক্ষেত্রে, একটি ডিভাইস দ্বারা শনাক্ত হওয়া ইভেন্টগুলিকে SDM পাব/সাব বিষয়ে প্রকাশ করা থেকে ফিল্টার করা হতে পারে। এই আচরণকে ইভেন্ট ফিল্টারিং বলা হয়। ইভেন্ট ফিল্টারিংয়ের উদ্দেশ্য হল অল্প সময়ের মধ্যে অনেক অনুরূপ ইভেন্ট বার্তা প্রকাশ করা এড়ানো।
উদাহরণস্বরূপ, একটি প্রাথমিক মোশন ইভেন্টের জন্য একটি SDM বিষয়ে একটি বার্তা প্রকাশিত হতে পারে৷ এর পরে মোশনের জন্য অন্যান্য বার্তাগুলি প্রকাশ করা থেকে ফিল্টার করা হবে যতক্ষণ না একটি নির্দিষ্ট সময় অতিবাহিত হয়৷ একবার সেই সময়কাল অতিবাহিত হয়ে গেলে, সেই ইভেন্ট প্রকারের জন্য একটি ইভেন্ট বার্তা আবার প্রকাশিত হতে পারে।
Google Home অ্যাপে (GHA), ফিল্টার করা ইভেন্টগুলি এখনও দেখানো হবে userএর ঘটনা ইতিহাস। যাইহোক, এই ধরনের ইভেন্টগুলি একটি অ্যাপ বিজ্ঞপ্তি তৈরি করে না (এমনকি যদি সেই বিজ্ঞপ্তি প্রকারটি সক্ষম করা থাকে)।
প্রতিটি ধরনের ইভেন্টের নিজস্ব ইভেন্ট ফিল্টারিং লজিক থাকে, যা Google দ্বারা সংজ্ঞায়িত এবং যেকোনো সময় পরিবর্তন হতে পারে। এই ইভেন্ট ফিল্টারিং লজিক ইভেন্ট থ্রেড এবং সেশন লজিক থেকে স্বাধীন।
পরিষেবা অ্যাকাউন্ট
SDM API সদস্যতা এবং ইভেন্ট বার্তা পরিচালনার জন্য পরিষেবা অ্যাকাউন্টগুলি সুপারিশ করা হয়৷ একটি পরিষেবা অ্যাকাউন্ট একটি অ্যাপ্লিকেশন বা ভার্চুয়াল মেশিন দ্বারা ব্যবহৃত হয়, কোনও ব্যক্তি নয়, এবং এর নিজস্ব অনন্য অ্যাকাউন্ট কী রয়েছে৷
Pub/Sub API-এর জন্য পরিষেবা অ্যাকাউন্ট অনুমোদন Two-legged OAuth (2LO) ব্যবহার করে।
2LO অনুমোদন প্রবাহে:
- দ developer একটি পরিষেবা কী ব্যবহার করে একটি অ্যাক্সেস টোকেন অনুরোধ করে।
- দ developer API-তে কলের সাথে অ্যাক্সেস টোকেন ব্যবহার করে।
Google 2LO এবং কিভাবে সেট আপ করা যায় সে সম্পর্কে আরও জানতে, সার্ভার থেকে সার্ভার অ্যাপ্লিকেশনের জন্য OAuth 2.0 ব্যবহার করা দেখুন।
অনুমোদন
পরিষেবা অ্যাকাউন্ট পাব/সাব API-এর সাথে ব্যবহারের জন্য অনুমোদিত হওয়া উচিত:
- Google ক্লাউডে ক্লাউড পাব/সাব API সক্ষম করুন ৷
- একটি পরিষেবা অ্যাকাউন্ট তৈরি করাতে বর্ণিত হিসাবে একটি পরিষেবা অ্যাকাউন্ট এবং পরিষেবা অ্যাকাউন্ট কী তৈরি করুন৷ আমরা এটি শুধুমাত্র পাব/সাবস্ক্রাইবার ভূমিকা দেওয়ার পরামর্শ দিই। Pub/Sub API ব্যবহার করা মেশিনে পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করা নিশ্চিত করুন।
- পূর্ববর্তী ধাপে পৃষ্ঠায় নির্দেশাবলী অনুসরণ করে আপনার অ্যাপ্লিকেশন কোডে আপনার প্রমাণীকরণের প্রমাণপত্র (পরিষেবা অ্যাকাউন্ট কী) প্রদান করুন, অথবা আপনি যদি দ্রুত API অ্যাক্সেস পরীক্ষা করতে চান তাহলে
oauth2l
ব্যবহার করে ম্যানুয়ালি একটি অ্যাক্সেস টোকেন পান। - বার্তাগুলি টানতে এবং স্বীকার করতে Pub/Sub
project.subscriptions
API-এর সাথে পরিষেবা অ্যাকাউন্টের শংসাপত্র বা অ্যাক্সেস টোকেন ব্যবহার করুন।
oauth2l
Google oauth2l
হল Go-তে লেখা OAuth-এর জন্য একটি কমান্ড লাইন টুল। Go ব্যবহার করে Mac বা Linux-এর জন্য এটি ইনস্টল করুন।
- আপনার সিস্টেমে Go না থাকলে, প্রথমে এটি ডাউনলোড করুন এবং ইনস্টল করুন ।
- একবার Go ইনস্টল হয়ে গেলে,
oauth2l
ইনস্টল করুন এবং আপনারPATH
এনভায়রনমেন্ট ভেরিয়েবলে এর অবস্থান যোগ করুন:go install github.com/google/oauth2l@latest
export PATH=$PATH:~/go/bin
- উপযুক্ত OAuth সুযোগ(গুলি) ব্যবহার করে API-এর জন্য একটি অ্যাক্সেস টোকেন পেতে
oauth2l
ব্যবহার করুন: উদাহরণস্বরূপ, যদি আপনার পরিষেবা কী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 দেখুন।
Google API ক্লায়েন্ট লাইব্রেরি
Google API-এর জন্য বেশ কিছু ক্লায়েন্ট লাইব্রেরি উপলব্ধ রয়েছে যা OAuth 2.0 ব্যবহার করে। আপনার পছন্দের ভাষা সম্পর্কে আরও তথ্যের জন্য Google API ক্লায়েন্ট লাইব্রেরি দেখুন।
সঙ্গে এই লাইব্রেরি ব্যবহার করার সময় Pub/Sub API, নিম্নলিখিত স্কোপ স্ট্রিং(গুলি) ব্যবহার করুন:
https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
ত্রুটি
নিম্নলিখিত ত্রুটি কোড(গুলি) এই নির্দেশিকা সম্পর্কিত ফেরত দেওয়া হতে পারে:
ত্রুটি বার্তা | আরপিসি | সমস্যা সমাধান |
---|---|---|
ক্যামেরা ছবি ডাউনলোডের জন্য আর উপলব্ধ নেই৷ | DEADLINE_EXCEEDED | ইভেন্ট প্রকাশিত হওয়ার 30 সেকেন্ড পরে ইভেন্ট চিত্রের মেয়াদ শেষ হয়ে যায়। মেয়াদ শেষ হওয়ার আগে ছবিটি ডাউনলোড করতে ভুলবেন না। |
ইভেন্ট আইডি ক্যামেরার অন্তর্গত নয়। | FAILED_PRECONDITION | ক্যামেরা ইভেন্ট দ্বারা ফেরত সঠিক eventID ব্যবহার করুন। |
API ত্রুটি কোডের সম্পূর্ণ তালিকার জন্য API ত্রুটি কোড রেফারেন্স দেখুন।
,ইভেন্টগুলি অ্যাসিঙ্ক্রোনাস এবং Google ক্লাউড পাব/সাব দ্বারা পরিচালিত হয়, প্রতি একক বিষয়ে Project. ইভেন্টগুলি সমস্ত ডিভাইস এবং কাঠামোর জন্য আপডেট সরবরাহ করে এবং ইভেন্টগুলির প্রাপ্তি নিশ্চিত করা হয় যতক্ষণ না ব্যবহারকারীর দ্বারা অ্যাক্সেস টোকেন প্রত্যাহার করা হয় এবং ইভেন্ট বার্তাগুলির মেয়াদ শেষ না হয়৷
ইভেন্টগুলি সক্ষম করুন
ইভেন্ট হল SDM API-এর একটি ঐচ্ছিক বৈশিষ্ট্য। দেখুন ইভেন্টগুলি সক্ষম করুন আপনার জন্য তাদের সক্ষম কিভাবে শিখতে Project.
Google Cloud Pub/Sub
Pub/Sub কীভাবে কাজ করে সে সম্পর্কে আরও জানতে Google Cloud Pub/Sub ডকুমেন্টেশন দেখুন। বিশেষ করে:
- Pub/Sub-এর বেসিকগুলি জানুন তাদের How-to গাইডের মাধ্যমে।
- প্রমাণীকরণ কিভাবে কাজ করে তা বুঝুন।
- একটি প্রদত্ত ক্লায়েন্ট লাইব্রেরি চয়ন করুন বা আপনার নিজের লিখুন এবং REST/HTTP বা gRPC API পৃষ্ঠ ব্যবহার করুন৷
ইভেন্ট সাবস্ক্রিপশন
জানুয়ারী 2025 এর আগে, যদি আপনার জন্য ইভেন্টগুলি সক্ষম করা হয় Project, আপনি যে নির্দিষ্ট একটি বিষয় প্রদান করা হবে Project আইডি, আকারে:
projects/gcp-project-name /subscriptions/topic-id
ইভেন্টগুলি পেতে, আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে সেই বিষয়ে একটি টান বা পুশ সাবস্ক্রিপশন তৈরি করুন। SDM বিষয়ের একাধিক সদস্যতা সমর্থিত। আরও তথ্যের জন্য সদস্যতা পরিচালনা দেখুন।
ইভেন্টগুলি শুরু করুন
একবার পাব/সাবস্ক্রিপশন তৈরি হয়ে গেলে প্রথমবারের মতো ইভেন্টগুলি শুরু করতে, একবারের ট্রিগার হিসাবে একটি devices.list
API কল করুন৷ এই কলের পরে সমস্ত কাঠামো এবং ডিভাইসের ইভেন্টগুলি প্রকাশিত হবে৷
উদাহরণের জন্য, কুইক স্টার্ট গাইডে অনুমোদন পৃষ্ঠাটি দেখুন।
ইভেন্ট অর্ডার
পাব/সাব ইভেন্টের অর্ডার করা ডেলিভারির গ্যারান্টি দেয় না, এবং ইভেন্টের প্রাপ্তির ক্রম ঘটনাগুলি আসলে ঘটেছিল এমন ক্রম অনুসারে নাও হতে পারে। ইভেন্ট অর্ডারের পুনর্মিলনে সহায়তা করতে timestamp
ক্ষেত্রটি ব্যবহার করুন। ইভেন্টগুলি পৃথকভাবে বা একটি একক ইভেন্ট বার্তায় মিলিত হতে পারে।
আরও তথ্যের জন্য, অর্ডার বার্তা দেখুন।
ইউজার আইডি
যদি আপনার বাস্তবায়ন ব্যবহারকারীদের উপর ভিত্তি করে (কাঠামো বা ডিভাইসের পরিবর্তে), সংস্থান এবং ইভেন্টগুলিকে সম্পর্কযুক্ত করতে ইভেন্ট পেলোড থেকে userID
ক্ষেত্রটি ব্যবহার করুন। এই ক্ষেত্রটি একটি অস্পষ্ট ID যা একটি নির্দিষ্ট ব্যবহারকারীর প্রতিনিধিত্ব করে।
প্রতিটি API কলের HTTP প্রতিক্রিয়া শিরোনামে userID
পাওয়া যায়।
সম্পর্কের ঘটনা
রিলেশন ইভেন্টগুলি একটি রিসোর্সের জন্য একটি রিলেশনাল আপডেট উপস্থাপন করে। উদাহরণস্বরূপ, যখন একটি ডিভাইস একটি কাঠামোতে যোগ করা হয়, বা যখন একটি কাঠামো থেকে একটি ডিভাইস মুছে ফেলা হয়।
তিন ধরণের সম্পর্কের ঘটনা রয়েছে:
- তৈরি করা হয়েছে
- মুছে ফেলা হয়েছে
- আপডেট করা হয়েছে
একটি সম্পর্ক ইভেন্টের জন্য পেলোড নিম্নরূপ:
{ "eventId" : "741ee8ac-4c40-4c26-9687-be7128564023", "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 এই নির্দিষ্ট ডিভাইসে অ্যাক্সেস মঞ্জুর করেছে a developer, এবং userএর অনুমোদিত ডিভাইস এখন তাদের অনুমোদিত কাঠামোর সাথে সম্পর্কিত, যা ইভেন্টটিকে ট্রিগার করে।
একটি subject
শুধুমাত্র একটি রুম বা একটি কাঠামো হতে পারে। যদি a developer দেখার অনুমতি নেই userএর গঠন, subject
সবসময় খালি।
ক্ষেত্র
মাঠ | বর্ণনা | ডেটা টাইপ |
---|---|---|
eventId | ইভেন্টের অনন্য শনাক্তকারী। | string উদাহরণ: "b60fcbf7-72ea-46f5-9e6c-af8dd4434424" |
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" : "4a31d9fa-69fa-4f13-bd27-7e48282b0de1", "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" : "d279ebca-94b8-4106-8ef8-04f05b66c8bd",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id /devices/device-id ", "events" : { "sdm.devices.events.CameraMotion.Motion
" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "R_mGbnLEd2A3n4Oc-voeqi5GJ5...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"eventThreadId" : "d67cd3f7-86a7-425e-8bb3-462f92ec9f59",
"eventThreadState" : "STARTED",
"resourceGroup" : [ "enterprises/project-id /devices/device-id " ] }
এই ধরনের সংস্থান ইভেন্টগুলি নির্দিষ্ট বৈশিষ্ট্যে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, মোশন ইভেন্টটি সংজ্ঞায়িত করা হয়েছে ক্যামেরা মোশন বৈশিষ্ট্য এই ধরনের রিসোর্স ইভেন্টের জন্য পেলোড ফর্ম্যাট বুঝতে প্রতিটি বৈশিষ্ট্যের ডকুমেন্টেশন দেখুন।
ক্ষেত্র
মাঠ | বর্ণনা | ডেটা টাইপ |
---|---|---|
eventId | ইভেন্টের অনন্য শনাক্তকারী। | string উদাহরণ: "d279ebca-94b8-4106-8ef8-04f05b66c8bd" |
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 |
বিভিন্ন ধরণের ইভেন্ট এবং তারা কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য ইভেন্টগুলি দেখুন।
আপডেটযোগ্য বিজ্ঞপ্তি
রিসোর্স ইভেন্টের উপর ভিত্তি করে বিজ্ঞপ্তিগুলি একটি অ্যাপে প্রয়োগ করা যেতে পারে, যেমন Android বা iOS এর জন্য। প্রেরিত বিজ্ঞপ্তির সংখ্যা কমাতে, আপডেটযোগ্য বিজ্ঞপ্তি নামে একটি বৈশিষ্ট্য প্রয়োগ করা যেতে পারে, যেখানে বিদ্যমান বিজ্ঞপ্তিগুলি একই ইভেন্ট থ্রেডের পরবর্তী ইভেন্টগুলির উপর ভিত্তি করে নতুন তথ্যের সাথে আপডেট করা হয়। আপডেটযোগ্য বিজ্ঞপ্তিগুলির জন্য ইভেন্ট বৈশিষ্ট্য সমর্থন নির্বাচন করুন এবং ডকুমেন্টেশনে আপডেটযোগ্য হিসাবে ট্যাগ করা হয়েছে। এই ইভেন্টগুলির পেলোডগুলিতে eventThreadId
নামে একটি অতিরিক্ত ক্ষেত্র রয়েছে৷ ব্যবহারকারীর জন্য প্রকাশিত একটি বিদ্যমান বিজ্ঞপ্তি আপডেট করার উদ্দেশ্যে পৃথক ইভেন্টগুলিকে একসাথে লিঙ্ক করতে এই ক্ষেত্রটি ব্যবহার করুন৷
একটি ইভেন্ট থ্রেড একটি ইভেন্ট সেশনের মতো নয়। ইভেন্ট থ্রেড একই থ্রেডে পূর্ববর্তী ইভেন্টের জন্য একটি আপডেট স্থিতি সনাক্ত করে। ইভেন্ট সেশনটি একে অপরের সাথে সম্পর্কিত পৃথক ইভেন্টগুলি সনাক্ত করে এবং একটি প্রদত্ত ইভেন্ট সেশনের জন্য একাধিক ইভেন্ট থ্রেড থাকতে পারে।
বিজ্ঞপ্তির উদ্দেশ্যে, বিভিন্ন ধরণের ইভেন্টকে বিভিন্ন থ্রেডে গোষ্ঠীভুক্ত করা হয়।
এই থ্রেড গ্রুপিং এবং টাইমিং লজিক Google দ্বারা পরিচালিত হয় এবং যে কোনো সময় পরিবর্তন হতে পারে। ক developer SDM API দ্বারা প্রদত্ত ইভেন্ট থ্রেড এবং সেশনের উপর ভিত্তি করে বিজ্ঞপ্তি আপডেট করা উচিত।
থ্রেড অবস্থা
আপডেটযোগ্য বিজ্ঞপ্তিগুলিকে সমর্থন করে এমন ইভেন্টগুলিতে একটি eventThreadState
ক্ষেত্র থাকে যা সেই সময়ে ইভেন্ট থ্রেডের অবস্থা নির্দেশ করে। এই ক্ষেত্রের নিম্নলিখিত মান আছে:
- শুরু হয়েছে - একটি ইভেন্ট থ্রেডের প্রথম ইভেন্ট।
- আপডেট করা হয়েছে - একটি চলমান ইভেন্ট থ্রেডে একটি ইভেন্ট। একটি একক থ্রেডে এই অবস্থার সাথে শূন্য বা তার বেশি ইভেন্ট হতে পারে।
- শেষ - একটি ইভেন্ট থ্রেডের শেষ ইভেন্ট, যা থ্রেডের প্রকারের উপর নির্ভর করে শেষ আপডেট হওয়া ইভেন্টের নকল হতে পারে।
এই ক্ষেত্রটি একটি ইভেন্ট থ্রেডের অগ্রগতি এবং কখন এটি শেষ হয়েছে তা ট্র্যাক করতে ব্যবহার করা যেতে পারে।
ইভেন্ট ফিল্টারিং
কিছু ক্ষেত্রে, একটি ডিভাইস দ্বারা শনাক্ত হওয়া ইভেন্টগুলিকে SDM পাব/সাব বিষয়ে প্রকাশ করা থেকে ফিল্টার করা হতে পারে। এই আচরণকে ইভেন্ট ফিল্টারিং বলা হয়। ইভেন্ট ফিল্টারিংয়ের উদ্দেশ্য হল অল্প সময়ের মধ্যে অনেক অনুরূপ ইভেন্ট বার্তা প্রকাশ করা এড়ানো।
উদাহরণস্বরূপ, একটি প্রাথমিক মোশন ইভেন্টের জন্য একটি SDM বিষয়ে একটি বার্তা প্রকাশিত হতে পারে৷ এর পরে মোশনের জন্য অন্যান্য বার্তাগুলি প্রকাশ করা থেকে ফিল্টার করা হবে যতক্ষণ না একটি নির্দিষ্ট সময় অতিবাহিত হয়৷ একবার সেই সময়কাল অতিবাহিত হয়ে গেলে, সেই ইভেন্ট প্রকারের জন্য একটি ইভেন্ট বার্তা আবার প্রকাশিত হতে পারে।
Google Home অ্যাপে (GHA), ফিল্টার করা ইভেন্টগুলি এখনও দেখানো হবে userএর ঘটনা ইতিহাস। যাইহোক, এই ধরনের ইভেন্টগুলি একটি অ্যাপ বিজ্ঞপ্তি তৈরি করে না (এমনকি যদি সেই বিজ্ঞপ্তি প্রকারটি সক্ষম করা থাকে)।
প্রতিটি ধরনের ইভেন্টের নিজস্ব ইভেন্ট ফিল্টারিং লজিক থাকে, যা Google দ্বারা সংজ্ঞায়িত এবং যেকোনো সময় পরিবর্তন হতে পারে। এই ইভেন্ট ফিল্টারিং লজিক ইভেন্ট থ্রেড এবং সেশন লজিক থেকে স্বাধীন।
পরিষেবা অ্যাকাউন্ট
SDM API সদস্যতা এবং ইভেন্ট বার্তা পরিচালনার জন্য পরিষেবা অ্যাকাউন্টগুলি সুপারিশ করা হয়৷ একটি পরিষেবা অ্যাকাউন্ট একটি অ্যাপ্লিকেশন বা ভার্চুয়াল মেশিন দ্বারা ব্যবহৃত হয়, কোনও ব্যক্তি নয়, এবং এর নিজস্ব অনন্য অ্যাকাউন্ট কী রয়েছে৷
Pub/Sub API-এর জন্য পরিষেবা অ্যাকাউন্ট অনুমোদন Two-legged OAuth (2LO) ব্যবহার করে।
2LO অনুমোদন প্রবাহে:
- দ developer একটি পরিষেবা কী ব্যবহার করে একটি অ্যাক্সেস টোকেন অনুরোধ করে।
- দ developer API-তে কলের সাথে অ্যাক্সেস টোকেন ব্যবহার করে।
Google 2LO এবং কিভাবে সেট আপ করা যায় সে সম্পর্কে আরও জানতে, সার্ভার থেকে সার্ভার অ্যাপ্লিকেশনের জন্য OAuth 2.0 ব্যবহার করা দেখুন।
অনুমোদন
পরিষেবা অ্যাকাউন্ট পাব/সাব API-এর সাথে ব্যবহারের জন্য অনুমোদিত হওয়া উচিত:
- Google ক্লাউডে ক্লাউড পাব/সাব API সক্ষম করুন ৷
- একটি পরিষেবা অ্যাকাউন্ট তৈরি করাতে বর্ণিত হিসাবে একটি পরিষেবা অ্যাকাউন্ট এবং পরিষেবা অ্যাকাউন্ট কী তৈরি করুন৷ আমরা এটি শুধুমাত্র পাব/সাবস্ক্রাইবার ভূমিকা দেওয়ার পরামর্শ দিই। Pub/Sub API ব্যবহার করা মেশিনে পরিষেবা অ্যাকাউন্ট কী ডাউনলোড করা নিশ্চিত করুন।
- পূর্ববর্তী ধাপে পৃষ্ঠায় নির্দেশাবলী অনুসরণ করে আপনার অ্যাপ্লিকেশন কোডে আপনার প্রমাণীকরণের প্রমাণপত্র (পরিষেবা অ্যাকাউন্ট কী) প্রদান করুন, অথবা আপনি যদি দ্রুত API অ্যাক্সেস পরীক্ষা করতে চান তাহলে
oauth2l
ব্যবহার করে ম্যানুয়ালি একটি অ্যাক্সেস টোকেন পান। - বার্তাগুলি টানতে এবং স্বীকার করতে Pub/Sub
project.subscriptions
API-এর সাথে পরিষেবা অ্যাকাউন্টের শংসাপত্র বা অ্যাক্সেস টোকেন ব্যবহার করুন।
oauth2l
Google oauth2l
হল Go-তে লেখা OAuth-এর জন্য একটি কমান্ড লাইন টুল। Go ব্যবহার করে Mac বা Linux-এর জন্য এটি ইনস্টল করুন।
- আপনার সিস্টেমে Go না থাকলে, প্রথমে এটি ডাউনলোড করুন এবং ইনস্টল করুন ।
- একবার Go ইনস্টল হয়ে গেলে,
oauth2l
ইনস্টল করুন এবং আপনারPATH
এনভায়রনমেন্ট ভেরিয়েবলে এর অবস্থান যোগ করুন:go install github.com/google/oauth2l@latest
export PATH=$PATH:~/go/bin
- উপযুক্ত OAuth সুযোগ(গুলি) ব্যবহার করে API-এর জন্য একটি অ্যাক্সেস টোকেন পেতে
oauth2l
ব্যবহার করুন: উদাহরণস্বরূপ, যদি আপনার পরিষেবা কী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 দেখুন।
Google API ক্লায়েন্ট লাইব্রেরি
Google API-এর জন্য বেশ কিছু ক্লায়েন্ট লাইব্রেরি উপলব্ধ রয়েছে যা OAuth 2.0 ব্যবহার করে। আপনার পছন্দের ভাষা সম্পর্কে আরও তথ্যের জন্য Google API ক্লায়েন্ট লাইব্রেরি দেখুন।
সঙ্গে এই লাইব্রেরি ব্যবহার করার সময় Pub/Sub API, নিম্নলিখিত স্কোপ স্ট্রিং(গুলি) ব্যবহার করুন:
https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
ত্রুটি
নিম্নলিখিত ত্রুটি কোড(গুলি) এই নির্দেশিকা সম্পর্কিত ফেরত দেওয়া হতে পারে:
ত্রুটি বার্তা | আরপিসি | সমস্যা সমাধান |
---|---|---|
ক্যামেরা ছবি ডাউনলোডের জন্য আর উপলব্ধ নেই৷ | DEADLINE_EXCEEDED | ইভেন্ট প্রকাশিত হওয়ার 30 সেকেন্ড পরে ইভেন্ট চিত্রের মেয়াদ শেষ হয়ে যায়। মেয়াদ শেষ হওয়ার আগে ছবিটি ডাউনলোড করতে ভুলবেন না। |
ইভেন্ট আইডি ক্যামেরার অন্তর্গত নয়। | FAILED_PRECONDITION | ক্যামেরা ইভেন্ট দ্বারা ফেরত সঠিক eventID ব্যবহার করুন। |
API ত্রুটি কোডের সম্পূর্ণ তালিকার জন্য API ত্রুটি কোড রেফারেন্স দেখুন।
,ইভেন্টগুলি অ্যাসিঙ্ক্রোনাস এবং Google ক্লাউড পাব/সাব দ্বারা পরিচালিত হয়, প্রতি একক বিষয়ে Project. ইভেন্টগুলি সমস্ত ডিভাইস এবং কাঠামোর জন্য আপডেট সরবরাহ করে এবং ইভেন্টগুলির প্রাপ্তি নিশ্চিত করা হয় যতক্ষণ না ব্যবহারকারীর দ্বারা অ্যাক্সেস টোকেন প্রত্যাহার করা হয় এবং ইভেন্ট বার্তাগুলির মেয়াদ শেষ না হয়৷
ইভেন্টগুলি সক্ষম করুন
ইভেন্টগুলি এসডিএম এপিআইয়ের একটি al চ্ছিক বৈশিষ্ট্য। দেখুন ইভেন্টগুলি সক্ষম করুন আপনার জন্য কীভাবে তাদের সক্ষম করতে হয় তা শিখতে Project.
Google Cloud Pub/Sub
পাব/সাব কীভাবে কাজ করে সে সম্পর্কে আরও জানতে গুগল ক্লাউড পাব/সাব ডকুমেন্টেশন দেখুন। বিশেষ করে:
- কীভাবে তাদের গাইড সহ পাব/সাব এর বেসিকগুলি শিখুন।
- প্রমাণীকরণ কীভাবে কাজ করে তা বুঝতে।
- একটি সরবরাহিত ক্লায়েন্ট লাইব্রেরি চয়ন করুন বা আপনার নিজের লিখুন এবং বাকি/এইচটিটিপি বা জিআরপিসি এপিআই পৃষ্ঠগুলি ব্যবহার করুন।
ইভেন্ট সাবস্ক্রিপশন
2025 সালের জানুয়ারির আগে, যদি আপনার জন্য ইভেন্টগুলি সক্ষম করা হয় Project, আপনি এটির জন্য নির্দিষ্ট একটি বিষয় সরবরাহ করা হত Project আইডি, আকারে:
projects/gcp-project-name /subscriptions/topic-id
ইভেন্টগুলি পেতে, আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে একটি পুল তৈরি করুন বা সেই বিষয়টিতে সাবস্ক্রিপশনটি চাপুন । এসডিএম বিষয়ের একাধিক সাবস্ক্রিপশন সমর্থিত। আরও তথ্যের জন্য সাবস্ক্রিপশন পরিচালনা করা দেখুন।
ইভেন্ট শুরু করুন
প্রথমবারের মতো ইভেন্টগুলি শুরু করার জন্য একবার পাব/সাব সাবস্ক্রিপশন তৈরি হয়ে গেলে, একটি devices.list
তৈরি করুন L সমস্ত কাঠামো এবং ডিভাইসের ইভেন্টগুলি এই কলের পরে প্রকাশ করবে।
উদাহরণস্বরূপ, দ্রুত প্রারম্ভিক গাইডে অনুমোদিত পৃষ্ঠাটি দেখুন।
ইভেন্ট অর্ডার
পাব/সাব ইভেন্টগুলি সরবরাহের আদেশের গ্যারান্টি দেয় না, এবং ইভেন্টগুলির রসিদ ক্রমটি ইভেন্টগুলি আসলে যে ক্রমটি ঘটেছিল তার সাথে সামঞ্জস্য করতে পারে না। ইভেন্ট ক্রমের পুনর্মিলনে সহায়তা করতে timestamp
ক্ষেত্রটি ব্যবহার করুন। ইভেন্টগুলি স্বতন্ত্রভাবে আগমন করতে পারে বা একটি একক ইভেন্ট বার্তায় একত্রিত হতে পারে।
আরও তথ্যের জন্য, বার্তাগুলি অর্ডার দেখুন।
ইউজার আইডি
যদি আপনার বাস্তবায়ন ব্যবহারকারীদের (কাঠামো বা ডিভাইসের পরিবর্তে) ভিত্তিক হয় তবে সংস্থান এবং ইভেন্টগুলির সাথে সম্পর্কিত করতে ইভেন্ট পে -লোড থেকে userID
ক্ষেত্রটি ব্যবহার করুন। এই ক্ষেত্রটি একটি নির্দিষ্ট ব্যবহারকারীর প্রতিনিধিত্বকারী একটি অবহেলিত আইডি।
userID
প্রতিটি এপিআই কলের এইচটিটিপি প্রতিক্রিয়া শিরোনামেও উপলব্ধ।
সম্পর্কের ঘটনা
সম্পর্কের ইভেন্টগুলি একটি সংস্থার জন্য একটি সম্পর্কযুক্ত আপডেটের প্রতিনিধিত্ব করে। উদাহরণস্বরূপ, যখন কোনও ডিভাইস কোনও কাঠামোতে যুক্ত করা হয়, বা যখন কোনও ডিভাইস কোনও কাঠামো থেকে মুছে ফেলা হয়।
তিন ধরণের সম্পর্কের ঘটনা রয়েছে:
- তৈরি করা হয়েছে
- মুছে ফেলা হয়েছে
- আপডেট করা হয়েছে
একটি সম্পর্ক ইভেন্টের জন্য পে -লোড নিম্নরূপ:
{ "eventId" : "741ee8ac-4c40-4c26-9687-be7128564023", "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 উদাহরণ: "B60FCBF7-72EA-46F5-9E6C-AF8DD4434424" |
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
অবজেক্ট রয়েছে, একটি ডিভাইস কল কলের অনুরূপ:
{ "eventId" : "4a31d9fa-69fa-4f13-bd27-7e48282b0de1", "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" : "d279ebca-94b8-4106-8ef8-04f05b66c8bd",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id /devices/device-id ", "events" : { "sdm.devices.events.CameraMotion.Motion
" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "R_mGbnLEd2A3n4Oc-voeqi5GJ5...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"eventThreadId" : "d67cd3f7-86a7-425e-8bb3-462f92ec9f59",
"eventThreadState" : "STARTED",
"resourceGroup" : [ "enterprises/project-id /devices/device-id " ] }
এই ধরণের সংস্থান ইভেন্টগুলি নির্দিষ্ট বৈশিষ্ট্যে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, মোশন ইভেন্টটি সংজ্ঞায়িত করা হয় ক্যামেরামোশন বৈশিষ্ট্য এই ধরণের সংস্থান ইভেন্টগুলির জন্য পে -লোড ফর্ম্যাটটি বুঝতে প্রতিটি বৈশিষ্ট্যের ডকুমেন্টেশন দেখুন।
ক্ষেত্র
মাঠ | বর্ণনা | ডেটা টাইপ |
---|---|---|
eventId | ইভেন্টের অনন্য শনাক্তকারী। | string উদাহরণ: "D279EBCA-94B8-4106-8EF8-04F05B66C8BD" |
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 |
বিভিন্ন ধরণের ইভেন্ট এবং তারা কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য ইভেন্টগুলি দেখুন।
আপডেটযোগ্য বিজ্ঞপ্তি
রিসোর্স ইভেন্টগুলির উপর ভিত্তি করে বিজ্ঞপ্তিগুলি একটি অ্যাপ্লিকেশন যেমন অ্যান্ড্রয়েড বা আইওএসের জন্য প্রয়োগ করা যেতে পারে। প্রেরিত বিজ্ঞপ্তির সংখ্যা হ্রাস করার জন্য, আপডেটযোগ্য বিজ্ঞপ্তি নামে একটি বৈশিষ্ট্য প্রয়োগ করা যেতে পারে, যেখানে একই ইভেন্টের থ্রেডে পরবর্তী ইভেন্টগুলির উপর ভিত্তি করে বিদ্যমান বিজ্ঞপ্তিগুলি নতুন তথ্যের সাথে আপডেট করা হয়। আপডেটযোগ্য বিজ্ঞপ্তিগুলির জন্য ইভেন্টগুলি বৈশিষ্ট্য সমর্থন নির্বাচন করুন এবং ডকুমেন্টেশনে আপডেটযোগ্য হিসাবে ট্যাগ করা হয়। এই ইভেন্টগুলিতে তাদের পে -লোডগুলিতে eventThreadId
নামে একটি অতিরিক্ত ক্ষেত্র রয়েছে। কোনও বিদ্যমান বিজ্ঞপ্তি আপডেট করার উদ্দেশ্যে পৃথক ইভেন্টগুলিকে একত্রে সংযুক্ত করতে এই ক্ষেত্রটি ব্যবহার করুন যা কোনও ব্যবহারকারীর জন্য প্রকাশিত হয়েছে।
একটি ইভেন্ট থ্রেড ইভেন্ট সেশনের মতো নয়। ইভেন্ট থ্রেড একই থ্রেডে পূর্ববর্তী ইভেন্টের জন্য একটি আপডেট স্থিতি সনাক্ত করে। ইভেন্ট সেশনটি একে অপরের সাথে সম্পর্কিত পৃথক ইভেন্টগুলি সনাক্ত করে এবং প্রদত্ত ইভেন্ট সেশনের জন্য একাধিক ইভেন্টের থ্রেড থাকতে পারে।
বিজ্ঞপ্তি উদ্দেশ্যে, বিভিন্ন ধরণের ইভেন্টগুলি বিভিন্ন থ্রেডে বিভক্ত করা হয়।
এই থ্রেড গ্রুপিং এবং টাইমিং লজিক গুগল দ্বারা পরিচালিত হয় এবং যে কোনও সময় পরিবর্তনের সাপেক্ষে। ক developer এসডিএম এপিআই দ্বারা সরবরাহিত ইভেন্ট থ্রেড এবং সেশনের উপর ভিত্তি করে বিজ্ঞপ্তিগুলি আপডেট করা উচিত।
থ্রেড স্টেট
ইভেন্টগুলি যা আপডেটযোগ্য বিজ্ঞপ্তিগুলিকে সমর্থন করে এমন একটি eventThreadState
ক্ষেত্রও রয়েছে যা সেই সময়ে ইভেন্টের থ্রেডের অবস্থা নির্দেশ করে। এই ক্ষেত্রটির নিম্নলিখিত মান রয়েছে:
- শুরু - একটি ইভেন্ট থ্রেডে প্রথম ইভেন্ট।
- আপডেট হয়েছে - চলমান ইভেন্টের থ্রেডে একটি ইভেন্ট। একক থ্রেডে এই রাজ্যের সাথে শূন্য বা আরও বেশি ইভেন্ট থাকতে পারে।
- শেষ - একটি ইভেন্ট থ্রেডে শেষ ইভেন্ট, যা থ্রেডের ধরণের উপর নির্ভর করে সর্বশেষ আপডেট হওয়া ইভেন্টের সদৃশ হতে পারে।
এই ক্ষেত্রটি কোনও ইভেন্টের থ্রেডের অগ্রগতি ট্র্যাক করতে এবং এটি শেষ হয়ে গেলে ব্যবহার করা যেতে পারে।
ইভেন্ট ফিল্টারিং
কিছু ক্ষেত্রে, কোনও ডিভাইস দ্বারা সনাক্ত হওয়া ইভেন্টগুলি কোনও এসডিএম পাব/সাব টপিক পর্যন্ত প্রকাশ করা থেকে ফিল্টার করা যেতে পারে। এই আচরণটিকে ইভেন্ট ফিল্টারিং বলা হয়। ইভেন্ট ফিল্টারিংয়ের উদ্দেশ্য হ'ল অল্প সময়ের মধ্যে অনেকগুলি অনুরূপ ইভেন্ট বার্তা প্রকাশ করা এড়ানো।
উদাহরণস্বরূপ, একটি বার্তা প্রাথমিক গতি ইভেন্টের জন্য একটি এসডিএম বিষয়টিতে প্রকাশিত হতে পারে। এর পরে গতির জন্য অন্যান্য বার্তাগুলি প্রকাশনা থেকে সময় নির্ধারণের সময়কাল পর্যন্ত ফিল্টার করা হবে। একবার সেই সময়টি কেটে গেলে, ইভেন্টের ধরণের জন্য একটি ইভেন্ট বার্তা আবার প্রকাশিত হতে পারে।
গুগল হোম অ্যাপে (জিএইচএ), ফিল্টার করা ইভেন্টগুলি এখনও প্রদর্শিত হবে userইভেন্টের ইতিহাস। তবে, এই জাতীয় ইভেন্টগুলি কোনও অ্যাপ্লিকেশন বিজ্ঞপ্তি উত্পন্ন করে না (এমনকি যদি সেই বিজ্ঞপ্তির ধরণটি সক্ষম থাকে)।
প্রতিটি ধরণের ইভেন্টের নিজস্ব ইভেন্ট ফিল্টারিং লজিক থাকে, যা গুগল দ্বারা সংজ্ঞায়িত করা হয় এবং যে কোনও সময় পরিবর্তনের সাপেক্ষে। এই ইভেন্ট ফিল্টারিং লজিক ইভেন্ট থ্রেড এবং সেশন লজিক থেকে পৃথক।
পরিষেবা অ্যাকাউন্ট
এসডিএম এপিআই সাবস্ক্রিপশন এবং ইভেন্ট বার্তাগুলি পরিচালনা করার জন্য পরিষেবা অ্যাকাউন্টগুলি সুপারিশ করা হয়। কোনও পরিষেবা অ্যাকাউন্ট কোনও অ্যাপ্লিকেশন বা ভার্চুয়াল মেশিন দ্বারা ব্যবহৃত হয়, কোনও ব্যক্তি নয় এবং এর নিজস্ব অনন্য অ্যাকাউন্ট কী রয়েছে।
পাব/সাব এপিআইয়ের জন্য পরিষেবা অ্যাকাউন্ট অনুমোদনের জন্য দ্বি-পায়ের ওএউথ (2 এলও) ব্যবহার করে।
2lo অনুমোদনের প্রবাহে:
- দ developer একটি পরিষেবা কী ব্যবহার করে একটি অ্যাক্সেস টোকেন অনুরোধ করে।
- দ developer এপিআইতে কল সহ অ্যাক্সেস টোকেন ব্যবহার করে।
গুগল 2 এলও এবং কীভাবে সেট আপ করা যায় সে সম্পর্কে আরও জানতে, সার্ভার থেকে সার্ভার অ্যাপ্লিকেশনগুলির জন্য OAuth 2.0 ব্যবহার করে দেখুন।
অনুমোদন
পরিষেবা অ্যাকাউন্টটি পাব/সাব এপিআইয়ের সাথে ব্যবহারের জন্য অনুমোদিত হওয়া উচিত:
- গুগল ক্লাউডে ক্লাউড পাব/সাব এপিআই সক্ষম করুন ।
- পরিষেবা অ্যাকাউন্ট তৈরিতে বর্ণিত হিসাবে একটি পরিষেবা অ্যাকাউন্ট এবং পরিষেবা অ্যাকাউন্ট কী তৈরি করুন। আমরা এটিকে কেবল পাব/সাব গ্রাহক ভূমিকা দেওয়ার পরামর্শ দিই। মেশিনে পরিষেবা অ্যাকাউন্ট কীটি ডাউনলোড করার বিষয়টি নিশ্চিত করুন যা পাব/সাব এপিআই ব্যবহার করবে।
- পূর্ববর্তী পদক্ষেপের পৃষ্ঠায় নির্দেশাবলী অনুসরণ করে আপনার অ্যাপ্লিকেশন কোডটিতে আপনার প্রমাণীকরণের শংসাপত্রগুলি (পরিষেবা অ্যাকাউন্ট কী) সরবরাহ করুন, বা যদি আপনি দ্রুত এপিআই অ্যাক্সেস পরীক্ষা করতে চান তবে
oauth2l
ব্যবহার করে ম্যানুয়ালি একটি অ্যাক্সেস পান। - পরিষেবা অ্যাকাউন্টের শংসাপত্রগুলি বা পাব/সাব
project.subscriptions
সাথে অ্যাক্সেস টোকেন ব্যবহার করুন ub বার্তাগুলি টানতে এবং স্বীকার করতে এপিআই এপিআই ।
oauth2l
গুগল oauth2l
গো এ রচিত OAuth জন্য একটি কমান্ড লাইন সরঞ্জাম। গো ব্যবহার করে ম্যাক বা লিনাক্সের জন্য এটি ইনস্টল করুন।
- আপনি যদি আপনার সিস্টেমে না যান তবে প্রথমে এটি ডাউনলোড করুন এবং ইনস্টল করুন ।
- একবার গো ইনস্টল হয়ে গেলে,
oauth2l
ইনস্টল করুন এবং আপনারPATH
পরিবেশের পরিবর্তনশীলটিতে এর অবস্থান যুক্ত করুন:go install github.com/google/oauth2l@latest
export PATH=$PATH:~/go/bin
- উপযুক্ত ওআউথ স্কোপ (গুলি) ব্যবহার করে এপিআইয়ের জন্য অ্যাক্সেস টোকেন পেতে
oauth2l
ব্যবহার করুন: উদাহরণস্বরূপ, যদি আপনার পরিষেবা কীটি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 দেখুন।
Google API ক্লায়েন্ট লাইব্রেরি
গুগল এপিআইগুলির জন্য বেশ কয়েকটি ক্লায়েন্ট লাইব্রেরি উপলব্ধ রয়েছে যা OAuth 2.0 ব্যবহার করে। আপনার পছন্দের ভাষা সম্পর্কে আরও তথ্যের জন্য গুগল এপিআই ক্লায়েন্ট লাইব্রেরিগুলি দেখুন।
এই লাইব্রেরিগুলি ব্যবহার করার সময় Pub/Sub API, নিম্নলিখিত স্কোপ স্ট্রিং (গুলি) ব্যবহার করুন:
https://www.googleapis.com/auth/pubsub https://www.googleapis.com/auth/cloud-platform
ত্রুটি
নিম্নলিখিত ত্রুটি কোড (গুলি) এই গাইডের সাথে সম্পর্কিত হতে পারে:
ত্রুটি বার্তা | আরপিসি | সমস্যা সমাধান |
---|---|---|
ক্যামেরার চিত্র আর ডাউনলোডের জন্য উপলভ্য নয়। | DEADLINE_EXCEEDED | ইভেন্ট প্রকাশের 30 সেকেন্ড পরে ইভেন্টের চিত্রগুলি শেষ হয়। মেয়াদ শেষ হওয়ার আগে চিত্রটি ডাউনলোড করার বিষয়টি নিশ্চিত করুন। |
ইভেন্ট আইডি ক্যামেরার অন্তর্ভুক্ত নয়। | FAILED_PRECONDITION | ক্যামেরা ইভেন্ট দ্বারা ফিরে আসা সঠিক eventID ব্যবহার করুন। |
API ত্রুটি কোডের সম্পূর্ণ তালিকার জন্য API ত্রুটি কোড রেফারেন্স দেখুন।