# বাস্তব সময়ে সাইকেল উপলব্ধতা: কীভাবে একটি অ্যাপে প্রদর্শন করবেন?

> ROOTE API দিয়ে সাইকেলের উপস্থিতি দেখান: টাইমস্ট্যাম্প, সতেজতা, অজানা মান, রিফ্রেশ এবং মেয়াদোত্তীর্ণ তথ্য আপনার অ্যাপে।

Source: https://www.roote.ai/bn/guides/bikel-uptodate-availability-app/
Language: bn
Author: ROOTE

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

ROOTE মোবিলিটি চুক্তি স্টেশন, পৃথক যানবাহন এবং তাদের অবস্থা আলাদা করে। ইন্টারফেসটি এই পার্থক্যগুলো অনুবাদ করতে হবে, অজানা মান, খালি স্টেশন এবং সাময়িকভাবে অনুপলব্ধ উৎসের মধ্যে বিভ্রান্তি না করে।

## একটি স্টেশন এবং পৃথক যানবাহন আলাদা করা

একটি স্টেশন সাইকেল এবং ফিরতি স্থান কাউন্টার দেখাতে পারে। একটি পৃথক যানবাহনের একটি উপলব্ধতার অবস্থা এবং অন্যান্য প্রাসঙ্গিক তথ্য থাকে। একটি স্টেশনকে সাইকেল হিসেব না করার চেষ্টা করুন বা একই স্টক প্রতিনিধিত্বকারী কাউন্টারগুলো যোগ করবেন না।

ROOTE মোবিলিটি DTO তে, availability.bikes এবং availability.docks অজানা থাকতে পারে। প্রপালশান বা ব্যাটারি ক্ষেত্রগুলি কেবল তখনই প্রদর্শন করা উচিত যখন সেগুলি থাকে এবং চুক্তি অনুযায়ী ব্যাখ্যা করা হয়।

[ROOTE OpenAPI চুক্তি](https://api.roote.ai/openapi.json)

## সতেজতা এবং সময়মুদ্রণ পড়া

| ক্ষেত্র | ব্যাখ্যা |
| --- | --- |
| freshness.state | ঘোষিত অবস্থা: fresh, stale, unknown অথবা static |
| freshness.source_updated_at | উৎসের আপডেট তারিখ, যদি জানা থাকে |
| freshness.received_at | চুক্তি দ্বারা নির্দেশিত গ্রহণের তারিখ |
| freshness.expires_at | বৈধতার মেয়াদ শেষ হওয়ার তারিখ, যদি জানা থাকে |
| availability.bikes | পরিচিত পরিমাণ বা অজানা মান |
| pickup.enabled এবং pickup.state | স্টেশনে সাইকেল গ্রহণের তথ্য |

আপনার কল সময় স্বয়ংক্রিয়ভাবে পর্যবেক্ষণের সময় নয়। ১০ টায় প্রাপ্ত ফলাফল ৯:৪৫ টায় আপডেট উৎস থাকতে পারে। কেবল আপনার ইন্টারফেসের গ্রহণ সময় থেকে 'এখন আপডেট হয়েছে' দেখাবেন না।

## বিভিন্ন প্রদর্শন অবস্থা পরিকল্পনা করুন

| প্রাপ্ত তথ্য | প্রদর্শনের জন্য পরিকল্পনা |
| --- | --- |
| পরিচিত পরিমাণ এবং সতেজ তথ্য | পর্যবেক্ষিত পরিমাণ ও সময় সম্পর্কিত ইঙ্গিত |
| পরিমাণ শূন্য | কোন সাইকেল পর্যবেক্ষিত হয়নি, তার সময় প্রসঙ্গ সহ |
| পরিমাণ null | অপরিচিত উপলব্ধতা |
| stale অবস্থা বা মেয়াদোত্তীর্ণ | পুরানো তথ্য; নবায়নের প্রস্তাব দিন |
| pickup.enabled=false | গ্রহণ অনুপলব্ধ যদিও কাউন্টার ধনাত্মক |
| অন্বেষণ ত্রুটি | অস্থায়ীভাবে উপলব্ধতা অনুপলব্ধ, শূন্য এ রূপান্তর না করে |

unknown বা static অবস্থা সতেজ হিসেবে গণ্য করবেন না। স্টেশনের তথ্য স্থির হতে পারে যখন কাউন্টার দ্রুত পরিবর্তিত হয়। প্রতিক্রিয়ায় প্রয়োজনীয় সতর্কতা ও অধিকার বজায় রাখুন।

## প্রদর্শনের আগে স্বাভাবিকীকরণের একটি উদাহরণ

নিম্নলিখিত ফাংশন ROOTE স্কিমার বিপরীতে ইতিমধ্যেই যাচাই করা স্টেশন থেকে প্রদর্শন অবস্থা তৈরি করে। এটি একটি সম্পূর্ণ প্রতিক্রিয়া যাচাইকরণকারী নয়। দৃশ্যমান লেবেল আপনার ইন্টারফেসের অনুবাদ কী থেকে আসা উচিত।

```
function availabilityView(station, now = Date.now()) {
  const freshness = station.freshness;
  const expiresAt = freshness.expires_at
    ? Date.parse(freshness.expires_at) : null;
  const expired = expiresAt !== null &&
    Number.isFinite(expiresAt) && expiresAt <= now;
  if (station.pickup.enabled === false ||
      station.pickup.state === 'unavailable_now') {
    return { state: 'pickup_unavailable', count: null };
  }
  if (expired || freshness.state === 'stale') {
    return { state: 'stale', count: null };
  }
  const count = station.availability.bikes;
  if (freshness.state !== 'fresh' || count === null ||
      !Number.isFinite(count) || count < 0) {
    return { state: 'unknown', count: null };
  }
  return {
    state: count === 0 ? 'empty' : 'observed', count,
    sourceUpdatedAt: freshness.source_updated_at,
    receivedAt: freshness.received_at,
    pickupState: station.pickup.state
  };
}
```

observed অবস্থায়ও pickupState=unknown কে নিশ্চিত গ্রহণে রূপান্তর করবেন না। কাউন্টার হলো একটি পর্যবেক্ষণ। আপনার পণ্য যদি ব্যবহারকারীকে স্টেশন বেছে নিতে সাহায্য করে, তবে গ্রহণ প্রসঙ্গ দেখান।

## অপ্রয়োজনীয়ভাবে পুনরায় কল না করে রিফ্রেশ করুন

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

একটি স্থানীয় ক্যাশ বিলম্ব উৎসের সতেজতা প্রমাণ করে না। একটি ত্রুটির পরে আপনি শেষ তারিখযুক্ত পর্যবেক্ষণ ধরে রাখতে পারেন যদি আপনার ইন্টারফেস স্পষ্টভাবে একটি পুরানো হিসাবে প্রদর্শন করে। প্রথম সফল পুনরুদ্ধারে যদি উৎস এখনো stale থাকে, এই পার্থক্য মুছবেন না।

## GBFS এর সাথে সম্পর্ক বোঝা

GBFS ভাগ করা মোবিলিটি সেবা এবং প্রকাশিত তাদের অবস্থার বর্ণনা দেয়। সরাসরি সংযুক্তি ফাইল, সংস্করণ এবং ফিডের সময়মুদ্রণগুলি ব্যাখ্যা করা উচিত। একটি স্বীকৃত API সাহায্যে, API চুক্তি ব্যবহার করুন; GBFS এর একটি ক্ষেত্র যোগ করবেন না যা তার প্রতিক্রিয়ায় নেই।

[GTFS, GTFS Realtime এবং GBFS এর মধ্যে নির্বাচন](https://www.roote.ai/bn/guides/gtfs-gtfs-rt-ebgbs-er-faraka-ki/)

## পাঠককে বিভ্রান্ত করার পরিস্থিতি পরীক্ষা করা

একটি আসল শূন্য, একটি অজানা মান, মেয়াদোত্তীর্ণ, গ্রহণ নিষ্ক্রিয় এবং একটি বৈধ ফলাফলের পরে ত্রুটি পরীক্ষা করুন। প্রদর্শনের সময়সীমাও যাচাই করুন। একটি ধনাত্মক কাউন্টার কখনও 'সাইকেল সংরক্ষিত' দিবে না এবং অনুপলব্ধতা কখনও কাল্পনিক শূন্য তৈরি করবে না।

[শূন্য উত্তর ও ত্রুটি পরিচালনা](https://www.roote.ai/bn/guides/%E0%A6%95%E0%A7%8B%E0%A6%A8-%E0%A6%AB%E0%A6%B2%E0%A6%BE%E0%A6%AB%E0%A6%B2-%E0%A6%AC%E0%A6%BE-%E0%A6%8F%E0%A6%AA%E0%A6%BF%E0%A6%86%E0%A6%87-%E0%A6%A4%E0%A7%8D%E0%A6%B0%E0%A7%81%E0%A6%9F%E0%A6%BF-%E0%A6%95%E0%A6%BF%E0%A6%AD%E0%A6%BE%E0%A6%AC%E0%A7%87-%E0%A6%AD%E0%A7%87%E0%A6%A6-%E0%A6%95%E0%A6%B0%E0%A6%BE-%E0%A6%AF%E0%A6%BE%E0%A6%AF%E0%A6%BC/)

[একটি AI সহকারী এ নিয়ম প্রয়োগ](https://www.roote.ai/bn/guides/kibhabe-ek-sahayok-tayari-kora-jeta-ek-address-er-ird-girdhe-mobility-khuje-pabe/)

[সাইকেল খুঁজে পাওয়ার জন্য ব্যবহারকারী গাইড](https://www.roote.ai/bn/guides/kibhabe-apnar-kache-swagoto-doler-saathe-ek-ti-bike-khubje-pawa-jay/)

## প্রায়শই জিজ্ঞাসিত প্রশ্ন

### একটি ধনাত্মক পরিমাণ কি আমার আগমনে সাইকেল নিশ্চয়তা দেয়?

না। এটি একটি পর্যবেক্ষণ বর্ণনা করে, যা অনুসন্ধান এবং আপনার আগমনের মধ্যে পরিবর্তিত হতে পারে।

### null কে শূন্য দ্বারা প্রতিস্থাপন করা যাবে?

না। null মানে অজানা; শূন্য হলো পরিচিত পরিমাণ এবং অন্য অর্থ বহন করে।

### প্রতিনিয়ত কয়েক সেকেন্ড পর রিফ্রেশ করা উচিত?

বৈধতা নির্দেশনা, সেবার সীমা ও আপনার ইন্টারফেসের চাহিদা অনুসারে ব্যবহার করুন। আকস্মিক ফ্রিকোয়েন্সি উৎসকে আরো সতেজ করে না।
