ইভেন্ট

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

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

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

Google Cloud Pub/Sub

Pub/Sub কীভাবে কাজ করে সে সম্পর্কে আরও জানতে Google Cloud Pub/Sub ডকুমেন্টেশন দেখুন। বিশেষ করে:

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

আপনার জন্য ইভেন্ট সক্রিয় করা হয় Project, আপনি যে নির্দিষ্ট একটি বিষয় প্রদান করা হবে Project আইডি, আকারে:

projects/sdm-prod/topics/enterprise-project-id

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

ইভেন্টগুলি শুরু করুন

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

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

ইভেন্ট অর্ডার

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

আরও তথ্যের জন্য, অর্ডার বার্তা দেখুন।

ইউজার আইডি

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

প্রতিটি API কলের HTTP প্রতিক্রিয়া শিরোনামে userID পাওয়া যায়।

সম্পর্কের ঘটনা

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

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

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

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

পেলোড

{
  "eventId" : "19acd7f4-38ce-4c70-b9af-1c6579bb8494",
  "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
উদাহরণ: "3143d6a4-d205-49eb-b6eb-95a9020b3b66"
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" : "7f985c81-619f-44eb-ba37-e138cd3f8ef2",
  "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" : "2177931c-833e-4758-8123-27d1106738b9",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "fKBZlxiPAw-5cUTM7wTUzSwxBi...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"eventThreadId" : "d67cd3f7-86a7-425e-8bb3-462f92ec9f59",
"eventThreadState" : "STARTED",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }

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

ক্ষেত্র

মাঠ বর্ণনা ডেটা টাইপ
eventId ইভেন্টের অনন্য শনাক্তকারী। string
উদাহরণ: "2177931c-833e-4758-8123-27d1106738b9"
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-এর সাথে ব্যবহারের জন্য অনুমোদিত হওয়া উচিত:

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

oauth2l

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 সুযোগ(গুলি) ব্যবহার করে 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 ত্রুটি কোড রেফারেন্স দেখুন।