ফ্লিট ইঞ্জিন অন-ডিমান্ড রাইডস এবং ডেলিভারি API আপনাকে আপনার ট্রিপ এবং অর্ডার অগ্রগতির অ্যাপ্লিকেশনগুলির জন্য ট্রিপ এবং গাড়ির অবস্থা পরিচালনা করতে দেয়। এটি ড্রাইভার SDK, উপভোক্তা SDK, এবং আপনার ব্যাকএন্ড পরিষেবার মধ্যে লেনদেন পরিচালনা করে -- যা gRPC বা REST কল করে ফ্লিট ইঞ্জিনের সাথে যোগাযোগ করতে পারে৷
পূর্বশর্ত
বিকাশের জন্য, নিশ্চিত করুন যে আপনি ক্লাউড SDK (gcloud) ইনস্টল করেছেন এবং আপনার প্রকল্পে প্রমাণীকৃত।
শেল
gcloud auth login
আপনার একটি সফল বার্তা দেখতে হবে যেমন:
You are now logged in as [my-user@example.com].
Your current project is [project-id]. You ...
অন-ডিমান্ড রাইডস এবং ডেলিভারি সলিউশন ফ্লিট ইঞ্জিন APIগুলি যথাযথভাবে কনফিগার করা হয়েছে কিনা তা পরীক্ষা করুন৷
শেল
gcloud --project=project-id services enable fleetengine.googleapis.com
এই কমান্ডের ফলে কোনো ত্রুটি দেখা দিলে, অ্যাক্সেস পেতে আপনার প্রজেক্ট অ্যাডমিনিস্ট্রেটর এবং আপনার Google সহায়তা প্রতিনিধির সাথে যোগাযোগ করুন।
লগিং
ফ্লিট ইঞ্জিন Google ক্লাউড প্ল্যাটফর্ম লগগুলিতে প্রাপ্ত API কলগুলি সম্পর্কে লগ বার্তা লিখতে পারে৷ লগগুলি কীভাবে পড়তে এবং বিশ্লেষণ করতে হয় তার একটি ওভারভিউয়ের জন্য ক্লাউড লগিং ডকুমেন্টেশন দেখুন।
10 ফেব্রুয়ারী, 2022 এর আগে তৈরি করা প্রকল্পগুলির জন্য লগিং ডিফল্টরূপে সক্ষম নাও হতে পারে৷ আরও বিশদ বিবরণের জন্য লগিং ডকুমেন্টেশন দেখুন৷
ক্লায়েন্ট লাইব্রেরি
আমরা বিভিন্ন সাধারণ প্রোগ্রামিং ভাষায় ক্লায়েন্ট লাইব্রেরি প্রকাশ করি। এই লাইব্রেরিগুলি কাঁচা REST বা gRPC-এর তুলনায় উন্নত বিকাশকারী অভিজ্ঞতা প্রদান করতে সাহায্য করবে। আপনার সার্ভার অ্যাপ্লিকেশনের জন্য ক্লায়েন্ট লাইব্রেরিগুলি কীভাবে পেতে হয় তার নির্দেশাবলীর জন্য, ক্লায়েন্ট লাইব্রেরি দেখুন।
এই ডকুমেন্টেশনের জাভা উদাহরণগুলি gRPC এর সাথে পরিচিতি অনুমান করে।
প্রমাণীকরণ এবং অনুমোদন
আপনি Google ক্লাউড কনসোলের মাধ্যমে ট্রিপ এবং অর্ডার অগ্রগতির দ্বারা প্রদত্ত ক্ষমতাগুলি কনফিগার করতে পারেন৷ এই API এবং SDKগুলির জন্য JSON ওয়েব টোকেনগুলির ব্যবহার প্রয়োজন যা ক্লাউড কনসোল থেকে তৈরি পরিষেবা অ্যাকাউন্টগুলি ব্যবহার করে স্বাক্ষর করা হয়েছে৷
ক্লাউড প্রকল্প সেটআপ
আপনার ক্লাউড প্রকল্প সেট আপ করতে, প্রথমে আপনার প্রকল্প তৈরি করুন এবং তারপর পরিষেবা অ্যাকাউন্ট তৈরি করুন৷
আপনার Google ক্লাউড প্রকল্প তৈরি করতে:
- Google ক্লাউড কনসোল ব্যবহার করে একটি Google ক্লাউড প্রকল্প তৈরি করুন।
- API এবং পরিষেবা ড্যাশবোর্ড ব্যবহার করে, স্থানীয় রাইডস এবং ডেলিভারি API সক্ষম করুন৷
পরিষেবা অ্যাকাউন্টগুলি এক বা একাধিক ভূমিকার সাথে যুক্ত। এগুলি JSON ওয়েব টোকেন তৈরি করতে ব্যবহৃত হয় যা ভূমিকাগুলির উপর নির্ভর করে বিভিন্ন সেটের অনুমতি দেয়। সাধারণত, অপব্যবহারের সম্ভাবনা কমাতে আপনি একাধিক পরিষেবা অ্যাকাউন্ট তৈরি করতে পারেন, প্রতিটিতে ন্যূনতম ভূমিকার প্রয়োজন।
ট্রিপ এবং অর্ডার অগ্রগতি নিম্নলিখিত ভূমিকা ব্যবহার করে:
ভূমিকা | বর্ণনা |
---|---|
ফ্লিট ইঞ্জিন গ্রাহক SDK ব্যবহারকারীroles/fleetengine.consumerSdkUser | যানবাহন অনুসন্ধান এবং যানবাহন এবং ভ্রমণ সম্পর্কে তথ্য পুনরুদ্ধার করার অনুমতি দেয়। এই ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট দ্বারা তৈরি টোকেনগুলি সাধারণত আপনার রাইড শেয়ারিং বা ডেলিভারি গ্রাহক অ্যাপ মোবাইল ডিভাইস থেকে ব্যবহার করা হয়। |
ফ্লিট ইঞ্জিন ড্রাইভার SDK ব্যবহারকারীroles/fleetengine.driverSdkUser | যানবাহনের অবস্থান এবং রুট আপডেট করার এবং যানবাহন এবং ট্রিপ সম্পর্কে তথ্য পুনরুদ্ধার করার অনুমতি দেয়। এই ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট দ্বারা তৈরি টোকেনগুলি সাধারণত আপনার রাইড শেয়ারিং বা ডেলিভারি ড্রাইভার অ্যাপ মোবাইল ডিভাইস থেকে ব্যবহার করা হয়। |
ফ্লিট ইঞ্জিন অন-ডিমান্ড অ্যাডমিনroles/fleetengine.ondemandAdmin | সমস্ত যানবাহন এবং ভ্রমণ সংস্থানগুলির জন্য পড়ার এবং লেখার অনুমতি দেয়। এই ভূমিকার অধ্যক্ষদের JWT ব্যবহার করার প্রয়োজন নেই এবং পরিবর্তে তাদের অ্যাপ্লিকেশন ডিফল্ট শংসাপত্র ব্যবহার করা উচিত। কাস্টম JWT দাবি উপেক্ষা করা হয়. এই ভূমিকা বিশ্বস্ত পরিবেশে সীমাবদ্ধ করা উচিত (গ্রাহক ব্যাকএন্ড)। |
roles/fleetengine.serviceSuperUser | সমস্ত যানবাহন এবং ট্রিপ API-কে অনুমতি দেয়। এই ভূমিকা সহ একটি পরিষেবা অ্যাকাউন্ট দ্বারা মিন্ট করা টোকেনগুলি সাধারণত আপনার ব্যাকএন্ড সার্ভার থেকে ব্যবহৃত হয়। এই ভূমিকা অবজ্ঞা করা হয়. পরিবর্তে roles/fleetengine.ondemandAdmin পছন্দ করুন। |
উদাহরণস্বরূপ, তিনটি ভূমিকার প্রতিটির জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন এবং তাদের নিজ নিজ ভূমিকা বরাদ্দ করুন৷
gcloud --project=project-id iam service-accounts create fleet-engine-consumer-sdk gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:fleet-engine-consumer-sdk@project-id.iam.gserviceaccount.com \ --role=roles/fleetengine.consumerSdkUser gcloud --project=project-id iam service-accounts create fleet-engine-driver-sdk gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:fleet-engine-driver-sdk@project-id.iam.gserviceaccount.com \ --role=roles/fleetengine.driverSdkUser gcloud --project=project-id iam service-accounts create fleet-engine-su gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:fleet-engine-su@project-id.iam.gserviceaccount.com \ --role=roles/fleetengine.serviceSuperUser
ড্রাইভার এবং কনজিউমার SDK এই স্ট্যান্ডার্ড ভূমিকাগুলির চারপাশে তৈরি করা হয়।
বিকল্পভাবে, কাস্টম রোল তৈরি করা সম্ভব যা অনুমতির একটি নির্বিচারে সেট একসাথে বান্ডিল করার অনুমতি দেয়। যখনই একটি প্রয়োজনীয় অনুমতি অনুপস্থিত থাকে তখনই ড্রাইভার এবং ভোক্তা SDK ত্রুটির বার্তাগুলি দেখাবে৷ ফলস্বরূপ, আমরা দৃঢ়ভাবে উপরে উপস্থাপিত ভূমিকাগুলির আদর্শ সেট ব্যবহার করার এবং কাস্টম ভূমিকাগুলি ব্যবহার না করার পরামর্শ দিই৷
সুবিধার জন্য, আপনার যদি অবিশ্বস্ত ক্লায়েন্টদের জন্য JWT টোকেন তৈরি করতে হয়, পরিষেবা অ্যাকাউন্ট টোকেন ক্রিয়েটর রোলে ব্যবহারকারীদের যোগ করার ফলে তারা gcloud কমান্ড লাইন টুলের সাহায্যে টোকেন তৈরি করতে দেয়।
gcloud projects add-iam-policy-binding project-id \
--member=user:my-user@example.com \
--role=roles/iam.serviceAccountTokenCreator
যেখানে my-user@example.com
হল gcloud ( gcloud auth list --format='value(account)'
) দিয়ে প্রমাণীকরণ করতে ব্যবহৃত ইমেল।
ফ্লিট ইঞ্জিন প্রমাণীকরণ লাইব্রেরি
ফ্লিট ইঞ্জিন ফ্লিট ইঞ্জিন API-এ অ্যাক্সেস সীমাবদ্ধ করতে JSON ওয়েব টোকেন (JWTs) ব্যবহার করে। Github-এ উপলব্ধ নতুন Fleet Engine Auth Library, Fleet Engine JWT-এর নির্মাণকে সহজ করে এবং নিরাপদে স্বাক্ষর করে।
লাইব্রেরি নিম্নলিখিত সুবিধা প্রদান করে:
- ফ্লিট ইঞ্জিন টোকেন তৈরির প্রক্রিয়া সহজ করে।
- শংসাপত্রের ফাইলগুলি ব্যবহার করা ছাড়া টোকেন স্বাক্ষর করার পদ্ধতি প্রদান করে (যেমন একটি পরিষেবা অ্যাকাউন্টের ছদ্মবেশীকরণ।)
- একটি gRPC স্টাব বা GAPIC ক্লায়েন্ট থেকে করা আউটবাউন্ড অনুরোধে স্বাক্ষরিত টোকেন সংযুক্ত করে।
অনুমোদনের জন্য একটি JSON ওয়েব টোকেন (JWT) তৈরি করা
Fleet Engine Auth Library ব্যবহার না করার সময়, JSON ওয়েব টোকেন (JWTs) সরাসরি আপনার কোডবেসের মধ্যে তৈরি করতে হবে। এর জন্য আপনাকে JWTs এবং ফ্লিট ইঞ্জিনের সাথে কীভাবে সম্পর্কযুক্ত তা সম্পর্কে গভীর ধারণা থাকতে হবে। এই কারণেই আমরা ফ্লিট ইঞ্জিন প্রমাণীকরণ লাইব্রেরির সুবিধা নেওয়ার সুপারিশ করছি।
ফ্লিট ইঞ্জিনের মধ্যে, JSON ওয়েব টোকেন (JWTs) স্বল্প-কালীন প্রমাণীকরণ প্রদান করে এবং নিশ্চিত করে যে ডিভাইসগুলি শুধুমাত্র যানবাহন, ট্রিপ বা কাজগুলি পরিবর্তন করতে পারে যার জন্য তারা অনুমোদিত। JWT-এ একটি শিরোনাম এবং একটি দাবি বিভাগ থাকে। হেডার বিভাগে তথ্য রয়েছে যেমন ব্যবহার করার জন্য ব্যক্তিগত কী (পরিষেবা অ্যাকাউন্ট থেকে প্রাপ্ত) এবং এনক্রিপশন অ্যালগরিদম। দাবি বিভাগে তথ্য রয়েছে যেমন টোকেনের তৈরির সময়, টোকেন থাকার সময়, এটি যে পরিষেবাগুলিতে অ্যাক্সেস দাবি করছে এবং অ্যাক্সেস ডাউন অ্যাক্সেসের জন্য অন্যান্য অনুমোদনের তথ্য; উদাহরণস্বরূপ, গাড়ির আইডি।
একটি JWT হেডার বিভাগে নিম্নলিখিত ক্ষেত্র রয়েছে:
মাঠ | বর্ণনা |
---|---|
alg | ব্যবহার করার জন্য অ্যালগরিদম। `RS256`। |
টাইপ | টোকেনের ধরন। `JWT`। |
বাচ্চা | আপনার পরিষেবা অ্যাকাউন্টের ব্যক্তিগত কী আইডি। আপনি আপনার পরিষেবা অ্যাকাউন্ট JSON ফাইলের `private_key_id` ক্ষেত্রে এই মানটি খুঁজে পেতে পারেন। সঠিক স্তরের অনুমতি সহ একটি পরিষেবা অ্যাকাউন্ট থেকে একটি কী ব্যবহার করা নিশ্চিত করুন৷ |
একটি JWT দাবি বিভাগে নিম্নলিখিত ক্ষেত্র রয়েছে:
মাঠ | বর্ণনা |
---|---|
iss | আপনার পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানা। |
উপ | আপনার পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানা। |
aud | আপনার পরিষেবা অ্যাকাউন্টের SERVICE_NAME, এই ক্ষেত্রে https://fleetengine.googleapis.com/ |
iat | টোকেন তৈরি করার সময় টাইমস্ট্যাম্প, 00:00:00 UTC, জানুয়ারী 1, 1970 থেকে অতিবাহিত সেকেন্ডের মধ্যে নির্দিষ্ট করা হয়েছে। স্কুয়ের জন্য 10 মিনিটের অনুমতি দিন। যদি টাইমস্ট্যাম্প অতীতে বা ভবিষ্যতে অনেক দূরে হয়, সার্ভার একটি ত্রুটি রিপোর্ট করতে পারে। |
exp | টোকেনের মেয়াদ শেষ হওয়ার সময় টাইমস্ট্যাম্প, 00:00:00 UTC, জানুয়ারী 1, 1970 থেকে অতিবাহিত সেকেন্ডের মধ্যে নির্দিষ্ট করা হয়। ভবিষ্যতে টাইমস্ট্যাম্প এক ঘণ্টার বেশি হলে অনুরোধ ব্যর্থ হয়। |
অনুমোদন | ব্যবহারের ক্ষেত্রের উপর নির্ভর করে, 'গাড়িবাহী' বা 'ট্রিপিড' থাকতে পারে। |
একটি JWT টোকেন তৈরি করা মানে এটি স্বাক্ষর করা। JWT তৈরি এবং স্বাক্ষর করার জন্য নির্দেশাবলী এবং কোড নমুনার জন্য, OAuth ছাড়া পরিষেবা অ্যাকাউন্ট অনুমোদন দেখুন। তারপর আপনি gRPC কল বা ফ্লিট ইঞ্জিন অ্যাক্সেস করতে ব্যবহৃত অন্যান্য পদ্ধতিতে একটি স্বাক্ষরিত টোকেন সংযুক্ত করতে পারেন।
JWT দাবি
JWT পেলোড তৈরি করার সময়, যে গাড়ির আইডি বা ট্রিপ আইডির জন্য কল করা হচ্ছে তার মূল্যের সাথে কী vehicleid
বা tripid
সেট করে অনুমোদন বিভাগে একটি অতিরিক্ত দাবি যোগ করুন।
ড্রাইভার SDK সর্বদা vehicleid
দাবি ব্যবহার করে, তা ভ্রমণে বা যানবাহনে পরিচালনা করা হোক না কেন। ফ্লিট ইঞ্জিন ব্যাকএন্ড নিশ্চিত করে যে পরিবর্তন করার আগে গাড়িটি অনুরোধ করা ট্রিপের সাথে যুক্ত।
ভোক্তা SDK সর্বদা tripid
দাবি ব্যবহার করে।
রাইডশেয়ার বা ডেলিভারি প্রদানকারীর উচিত সমস্ত যানবাহন এবং ট্রিপের সাথে মেলানোর জন্য "*" সহ vehicleid
বা tripid
ব্যবহার করা। মনে রাখবেন যে JWT উভয় টোকেন ধারণ করতে পারে, এমনকি প্রয়োজন না হলেও, যা টোকেন স্বাক্ষর বাস্তবায়নকে সহজ করতে পারে।
JWT ব্যবহারের ক্ষেত্রে
নিম্নলিখিত প্রদানকারী সার্ভারের জন্য একটি উদাহরণ টোকেন দেখায়:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_provider_service_account"
}
.
{
"iss": "provider@yourgcpproject.iam.gserviceaccount.com",
"sub": "provider@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"vehicleid": "*",
"tripid": "*"
}
}
নিম্নলিখিত উপভোক্তা অ্যাপের জন্য একটি উদাহরণ টোকেন দেখায়:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_consumer_service_account"
}
.
{
"iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
"sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"tripid": "trip_54321"
}
}
নিম্নলিখিতটি ড্রাইভার অ্যাপের জন্য একটি উদাহরণ টোকেন দেখায়:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_driver_service_account"
}
.
{
"iss": "driver@yourgcpproject.iam.gserviceaccount.com",
"sub": "driver@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"vehicleid": "driver_12345"
}
}
- শিরোনামে
kid
ক্ষেত্রের জন্য, আপনার পরিষেবা অ্যাকাউন্টের ব্যক্তিগত কী আইডি নির্দিষ্ট করুন। আপনি আপনার পরিষেবা অ্যাকাউন্ট JSON ফাইলেরprivate_key_id
ক্ষেত্রে এই মানটি খুঁজে পেতে পারেন। -
iss
এবংsub
ক্ষেত্রগুলির জন্য, আপনার পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানা উল্লেখ করুন। আপনি আপনার পরিষেবা অ্যাকাউন্ট JSON ফাইলেরclient_email
ক্ষেত্রে এই মানটি খুঁজে পেতে পারেন। -
aud
ফিল্ডের জন্য, https://SERVICE_NAME/ নির্দিষ্ট করুন। -
iat
ক্ষেত্রের জন্য, টোকেন তৈরি করার সময় টাইমস্ট্যাম্প ব্যবহার করুন, 00:00:00 UTC, জানুয়ারী 1, 1970 থেকে অতিবাহিত সেকেন্ড হিসাবে উল্লেখ করা হয়েছে। স্কুয়ের জন্য 10 মিনিটের অনুমতি দিন। যদি টাইমস্ট্যাম্প অতীতে বা ভবিষ্যতে অনেক দূরে হয়, সার্ভার একটি ত্রুটি রিপোর্ট করতে পারে। -
exp
ক্ষেত্রের জন্য, টোকেনের মেয়াদ শেষ হলে টাইমস্ট্যাম্প ব্যবহার করুন, 00:00:00 UTC, 1 জানুয়ারি, 1970 থেকে সেকেন্ড হিসাবে নির্দিষ্ট করা হয়েছে। সর্বাধিক অনুমোদিত মান হলiat
+ 3600।
একটি মোবাইল ডিভাইসে পাস করার জন্য JWT স্বাক্ষর করার সময়, ড্রাইভার বা গ্রাহক SDK ভূমিকার জন্য পরিষেবা অ্যাকাউন্টটি ব্যবহার করতে ভুলবেন না। অন্যথায়, মোবাইল ডিভাইসের অবস্থা পরিবর্তন করার ক্ষমতা থাকবে যা থাকা উচিত নয়।
একইভাবে, বিশেষ সুবিধাপ্রাপ্ত কলের জন্য ব্যবহার করার জন্য JWT-তে স্বাক্ষর করার সময়, সুপার ব্যবহারকারীর ভূমিকার সাথে পরিষেবা অ্যাকাউন্টটি ব্যবহার করা নিশ্চিত করুন। অন্যথায়, অপারেশন ব্যর্থ হবে।
পরীক্ষার জন্য একটি JWT তৈরি করা হচ্ছে
পরীক্ষার সময় টার্মিনাল থেকে টোকেন তৈরি করা সহায়ক হতে পারে।
এই পদক্ষেপগুলি অনুসরণ করার জন্য, আপনার ব্যবহারকারীর অ্যাকাউন্টে অবশ্যই পরিষেবা অ্যাকাউন্ট টোকেন নির্মাতার ভূমিকা থাকতে হবে:
gcloud projects add-iam-policy-binding project-id \
--member=user:my-user@example.com \
--role=roles/iam.serviceAccountTokenCreator
নিচের বিষয়বস্তু সহ unsigned_token.json
নামে একটি নতুন ফাইল তৈরি করুন। iat
বৈশিষ্ট্য হল যুগের পর সেকেন্ডের সংখ্যার বর্তমান সময়, যা আপনার টার্মিনালে date +%s
চালিয়ে পুনরুদ্ধার করা যেতে পারে। exp
বৈশিষ্ট্য হল যুগের পর সেকেন্ডের সংখ্যায় মেয়াদ শেষ হওয়ার সময়, যা iat
এ 3600 যোগ করে গণনা করা যেতে পারে। মেয়াদ শেষ হওয়ার সময় ভবিষ্যতে এক ঘণ্টার বেশি হতে পারে না।
{ "aud": "https://fleetengine.googleapis.com/", "iss": "super-user-service-account@project-id.iam.gserviceaccount.com", "sub": "super-user-service-account@project-id.iam.gserviceaccount.com", "iat": iat, "exp": exp, "authorization": { "vehicleid": "*", "tripid": "*" } }
তারপরে আপনার সুপার ব্যবহারকারী পরিষেবা অ্যাকাউন্টের পক্ষে টোকেন সাইন করতে নিম্নলিখিত gcloud কমান্ডটি চালান:
gcloud beta iam service-accounts sign-jwt --iam-account=super-user-service-account@project-id.iam.gserviceaccount.com unsigned_token.json signed_token.jwt
একটি স্বাক্ষরিত Base64-এনকোড করা JWT এখন signed_token.jwt
ফাইলের মধ্যে সংরক্ষণ করা উচিত। টোকেন পরবর্তী ঘন্টার জন্য বৈধ।
আপনি এখন List Vehicles REST এন্ডপয়েন্টের বিরুদ্ধে একটি curl
কমান্ড চালিয়ে টোকেন পরীক্ষা করতে পারেন:
curl -X GET "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles" -H "Authorization: Bearer $(cat signed_token.jwt)"
যানবাহন এবং তাদের জীবনচক্র
যানবাহন হল একটি চালক-যান জুটির প্রতিনিধিত্বকারী সত্তা। বর্তমানে, একজন ড্রাইভার এবং যানবাহন আলাদাভাবে ট্র্যাক করা যায় না। রাইডশেয়ার বা ডেলিভারি প্রদানকারী একটি প্রোভাইডার আইডি ব্যবহার করে একটি যানবাহন তৈরি করে (যা Google ক্লাউড প্রজেক্টের প্রোজেক্ট আইডির মতো হতে হবে যাতে ফ্লিট ইঞ্জিন API কল করার জন্য ব্যবহৃত পরিষেবা অ্যাকাউন্ট থাকে) এবং একটি রাইডশেয়ার বা ডেলিভারি প্রদানকারীর মালিকানাধীন যানবাহন আইডি। .
সাত দিন পর UpdateVehicle
এর মাধ্যমে আপডেট করা হয়নি এমন একটি যান স্বয়ংক্রিয়ভাবে মুছে ফেলা হবে, এবং তার নির্ধারিত ট্রিপগুলি, যদি থাকে, আনঅ্যাসাইনড হিসাবে চিহ্নিত করা হবে। ফ্লিট ইঞ্জিনে একটি গাড়ি উপলব্ধ রাখার প্রস্তাবিত পদ্ধতি হল নিয়মিত বিরতিতে এর অবস্থান আপডেট করা। Vehicle
সত্তার অন্যান্য ক্ষেত্রের আপডেটগুলিও এর আয়ু বাড়াবে, তবে শর্ত থাকে যে নতুন ক্ষেত্রের মান বিদ্যমান থেকে আলাদা।
দ্রষ্টব্য: Vehicle
সত্তার কিছু ক্ষেত্র যেমন device_settings
সম্পূর্ণরূপে ডিবাগ তথ্য যা ফ্লিট ইঞ্জিন দ্বারা স্থায়ী হয় না। তাদের আপডেট করা Vehicle
সত্তার আয়ু বাড়ায় না।
এটি ইতিমধ্যেই বিদ্যমান একটি প্রোভাইডার আইডি/যানবাহন আইডি জোড়া দিয়ে CreateVehicle
কল করা একটি ত্রুটি৷ ঘন ঘন আপডেট না হওয়া যানবাহনের ক্ষেত্রে দুটি উপায়ে মোকাবিলা করা যেতে পারে: একটি প্রত্যাশিত প্রোভাইডার আইডি/ভেহিক্যাল আইডি পেয়ারের সাথে CreateVehicle
ঘন ঘন কল করা এবং গাড়িটি আগে থেকেই বিদ্যমান থাকলে ত্রুটিটি বাতিল করা; অথবা, একটি UpdateVehicle
একটি NOT_FOUND
ত্রুটির সাথে ফিরে আসার পরে CreateVehicle
কল করা।
যানবাহনের অবস্থান আপডেট
ফ্লিট ইঞ্জিনের সাথে সেরা পারফরম্যান্সের জন্য, এটিকে গাড়ির অবস্থান আপডেটের একটি স্ট্রীম সরবরাহ করুন৷ এই আপডেটগুলি প্রদান করার জন্য নিম্নলিখিত উপায়গুলির মধ্যে একটি ব্যবহার করুন:
- ড্রাইভার SDK - Android , iOS - সহজ বিকল্পটি ব্যবহার করুন৷
- কাস্টম কোড ব্যবহার করুন -- যদি অবস্থানগুলি আপনার ব্যাকএন্ডের মাধ্যমে রিলে করা হয়, অথবা আপনি যদি Android বা iOS ছাড়া অন্য ডিভাইসগুলি ব্যবহার করেন তাহলে দরকারী৷
যানবাহনের প্রকার
যানবাহন সত্তাটিতে VehicleType
এর একটি প্রয়োজনীয় ক্ষেত্র রয়েছে, যেটিতে একটি Category
enum রয়েছে যা AUTO
, TAXI
, TRUCK
, TWO_WHEELER
, BICYCLE
, বা PEDESTRIAN
হিসাবে নির্দিষ্ট করা যেতে পারে। যানবাহনের ধরন SearchVehicles
এবং ListVehicles
একটি ফিল্টার মানদণ্ড হিসাবে কাজ করতে পারে৷
যদি বিভাগটি AUTO
, TWO_WHEELER
, BICYCLE
, বা PEDESTRIAN
সেট করা থাকে তবে যানবাহনের জন্য সমস্ত রাউটিং সংশ্লিষ্ট RouteTravelMode
ব্যবহার করবে৷ যদি বিভাগটি TAXI
বা TRUCK
তে সেট করা হয়, রাউটিংটি AUTO
মোডের মতোই বিবেচিত হয়৷
যানবাহনের বৈশিষ্ট্য
যানবাহন সত্তাটিতে VehicleAttribute
এর পুনরাবৃত্ত ক্ষেত্র রয়েছে। এই বৈশিষ্ট্যগুলি ফ্লিট ইঞ্জিন দ্বারা ব্যাখ্যা করা হয় না। SearchVehicles
API-এ একটি ক্ষেত্র অন্তর্ভুক্ত থাকে যাতে মিলিত Vehicles
নির্দিষ্ট মান সেট করা সমস্ত অন্তর্ভুক্ত বৈশিষ্ট্য থাকতে হবে।
মনে রাখবেন যে অ্যাট্রিবিউট ক্ষেত্রটি Vehicle
বার্তার অন্যান্য সমর্থিত ক্ষেত্রগুলির পাশাপাশি রয়েছে, যেমন vehicle_type
এবং supported_trip_types
।
যানবাহন বাকি পথ পয়েন্ট
যানবাহন সত্তায় TripWaypoint
( RPC | REST ) এর একটি পুনরাবৃত্ত ক্ষেত্র রয়েছে, যাকে বলা হয় waypoints
( RPC | REST )। এই ক্ষেত্রটি ভ্রমণের অবশিষ্ট ওয়েপয়েন্টগুলিকে অন্তর্ভুক্ত করে, যাতে গাড়িটি তাদের কাছে পৌঁছায়৷ ফ্লিট ইঞ্জিন এই ক্ষেত্রটি গণনা করে যেহেতু গাড়িতে ট্রিপগুলি বরাদ্দ করা হয় এবং ট্রিপগুলি তাদের অবস্থা পরিবর্তন করার সাথে সাথে এটি আপডেট করে৷ এই ওয়েপয়েন্টগুলি TripId
ক্ষেত্র এবং WaypointType
ক্ষেত্র দ্বারা চিহ্নিত করা যেতে পারে।
ম্যাচের জন্য গাড়ির যোগ্যতা প্রসারিত করা
সাধারণত, রাইডশেয়ার বা ডেলিভারি প্রদানকারীর পরিষেবাগুলি যানবাহনের সাথে ট্রিপের অনুরোধগুলি মেলানোর জন্য দায়ী৷ পরিষেবাটি গাড়ির বৈশিষ্ট্যগুলি ব্যবহার করে একটি গাড়িকে আরও বেশি সংখ্যক অনুসন্ধানে অন্তর্ভুক্ত করতে পারে। উদাহরণস্বরূপ, প্রদানকারী একটি গাড়ির দ্বারা প্রদত্ত সুবিধা বা ক্ষমতার স্তরের সাথে সম্পর্কিত বৈশিষ্ট্যগুলির একটি সেট প্রয়োগ করতে পারে৷ উদাহরণস্বরূপ, তিনটি স্তর বুলিয়ান মান সহ বৈশিষ্ট্যগুলির একটি সেট হতে পারে: is_bronze_level
, is_silver_level
, এবং is_gold_level
। একটি গাড়ি তিনটির জন্যই যোগ্য হতে পারে। যখন ফ্লিট ইঞ্জিন একটি ট্রিপের জন্য অনুরোধ পায় যার জন্য সিলভার লেভেল ক্ষমতার প্রয়োজন হয়, অনুসন্ধানে সেই যানটি অন্তর্ভুক্ত থাকে। এইভাবে গুণাবলী ব্যবহার করা যানবাহনগুলিকে অন্তর্ভুক্ত করে যা বিভিন্ন ধরনের ক্ষমতা প্রদান করে।
গাড়ির বৈশিষ্ট্যগুলি আপডেট করার দুটি উপায় রয়েছে। একটি হল UpdateVehicle
API। এই API ব্যবহার করার সময়, যানবাহন বৈশিষ্ট্যের সম্পূর্ণ সেট মান সেট করা হয়। শুধুমাত্র একটি বৈশিষ্ট্য আপডেট করা সম্ভব নয়। অন্য পদ্ধতিটি হল UpdateVehicleAttributes
API। এই পদ্ধতিটি আপডেট করার জন্য কেবলমাত্র বৈশিষ্ট্যগুলি লাগে। অনুরোধে অন্তর্ভুক্ত বৈশিষ্ট্যগুলি নতুন মান সেট করা হবে বা যোগ করা হবে; অনির্দিষ্ট গুণাবলী পরিবর্তন করা হবে না.
কিভাবে করতে হবে: একটি যানবাহন তৈরি করুন
বহরে ট্র্যাক করা প্রতিটি যানের জন্য একটি Vehicle
সত্তা তৈরি করতে হবে।
একটি যান তৈরি করতে CreateVehicleRequest
এর সাথে CreateVehicle
এন্ডপয়েন্ট ব্যবহার করুন।
Vehicle
provider_id
অবশ্যই Google ক্লাউড প্রজেক্টের প্রজেক্ট আইডি (যেমন আমার-অন-ডিমান্ড-প্রকল্প) হতে হবে যাতে পরিষেবা অ্যাকাউন্ট থাকে যা ফ্লিট ইঞ্জিনকে কল করার জন্য ব্যবহার করা হবে। মনে রাখবেন যে একাধিক পরিষেবা অ্যাকাউন্ট একই রাইডশেয়ার বা ডেলিভারি প্রদানকারীর জন্য ফ্লিট ইঞ্জিন অ্যাক্সেস করতে পারে, ফ্লিট ইঞ্জিন বর্তমানে একই Vehicles
অ্যাক্সেস করার একাধিক Google ক্লাউড প্রকল্পের পরিষেবা অ্যাকাউন্টগুলিকে সমর্থন করে না৷
Vehicle
OFFLINE
বা ONLINE
অবস্থায় তৈরি করা যেতে পারে। যদি ONLINE
তৈরি করা হয় তবে SearchVehicles
প্রশ্নের উত্তরে তা অবিলম্বে ফেরত দেওয়া হতে পারে।
CreateVehicle
কলে একটি প্রাথমিক last_location
অন্তর্ভুক্ত করা যেতে পারে। অনুমতি থাকা অবস্থায়, last_location
ছাড়া ONLINE
অবস্থায় একটি Vehicle
তৈরি করা উচিত নয়।
যানবাহনের ধরন ক্ষেত্রের বিশদ বিবরণের জন্য যানবাহনের প্রকার দেখুন।
বৈশিষ্ট্য ক্ষেত্রের বিশদ বিবরণের জন্য যানবাহনের বৈশিষ্ট্যগুলি দেখুন৷
CreateVehicle
থেকে প্রত্যাবর্তিত মানটি তৈরি করা Vehicle
সত্তা।
উদাহরণ
শেল
curl -X POST \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles?vehicleId=vid-8241890" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"vehicleState": "OFFLINE",
"supportedTripTypes": ["EXCLUSIVE"],
"maximumCapacity": 4,
"vehicleType": {"category": "AUTO"},
"attributes": [{"key": "on_trip", "value": "false"}]
}
EOM
providers.vehicles.create রেফারেন্স দেখুন।
জাভা
static final String PROJECT_ID = "project-id";
VehicleServiceBlockingStub vehicleService =
VehicleService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
Vehicle vehicle = Vehicle.newBuilder()
.setVehicleState(VehicleState.OFFLINE) // Initial state
.addSupportedTripTypes(TripType.EXCLUSIVE)
.setMaximumCapacity(4)
.setVehicleType(VehicleType.newBuilder().setCategory(VehicleType.Category.AUTO))
.addAttributes(VehicleAttribute.newBuilder()
.setKey("on_trip").setValue("false")) // Opaque to the Fleet Engine
// Add .setBackToBackEnabled(true) to make this vehicle eligible for trip
// matching while even if it is on a trip. By default this is disabled.
.build();
CreateVehicleRequest createVehicleRequest =
CreateVehicleRequest.newBuilder() // no need for the header
.setParent(parent)
.setVehicleId("vid-8241890") // Vehicle ID assigned by Rideshare or Delivery Provider
.setVehicle(vehicle) // Initial state
.build();
// In this case, the Vehicle is being created in the OFFLINE state and
// no initial position is being provided. When the Driver App checks
// in with the Rideshare or Delivery Provider, the state can be set to ONLINE and
// the Driver App will update the Vehicle Location.
try {
Vehicle createdVehicle =
vehicleService.createVehicle(createVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
// If no Exception, Vehicle created successfully.
Google ক্লাউড প্ল্যাটফর্ম যানবাহন তৈরির জন্য লগ
যখন CreateVehicle
এন্ডপয়েন্টে একটি কল আসে তখন ফ্লিট ইঞ্জিন API Google ক্লাউড প্ল্যাটফর্ম লগের মাধ্যমে একটি লগ এন্ট্রি লিখে। লগ এন্ট্রিতে CreateVehicle
অনুরোধের মান সম্পর্কে তথ্য অন্তর্ভুক্ত থাকে। কলটি সফল হলে, এতে ফেরত আসা Vehicle
তথ্যও অন্তর্ভুক্ত থাকবে।
শেল
gcloud --project=project-id logging read --freshness=1h '
jsonPayload.request.vehicleId="vid-8241890"
jsonPayload.@type="type.googleapis.com/maps.fleetengine.v1.CreateVehicleLog"
'
নিম্নলিখিত অনুরূপ একটি রেকর্ড মুদ্রণ করা উচিত:
---
insertId: c2cf4d3a180251c1bdb892137c14f022
jsonPayload:
'@type': type.googleapis.com/maps.fleetengine.v1.CreateVehicleLog
request:
vehicle:
attributes:
- key: on_trip
value: 'false'
maximumCapacity: 4
state: VEHICLE_STATE_OFFLINE
supportedTrips:
- EXCLUSIVE_TRIP
vehicleType:
vehicleCategory: AUTO
vehicleId: vid-8241890
response:
attributes:
- key: on_trip
value: 'false'
availableCapacity: 4
currentRouteSegmentHandle: AdSiwAwCO9gZ7Pw5UZZimOXOo41cJTjg/r3SuwVPQmuuaV0sU3+3UCY+z53Cl9i6mWHLoCKbBt9Vsj5PMRgOJ8zX
maximumCapacity: 4
name: providers/project-id/vehicles/vid-8241890
state: VEHICLE_STATE_OFFLINE
supportedTrips:
- EXCLUSIVE_TRIP
vehicleType:
vehicleCategory: AUTO
labels:
vehicle_id: vid-8241890
logName: projects/project-id/logs/fleetengine.googleapis.com%2Fcreate_vehicle
receiveTimestamp: '2021-09-22T03:25:16.361159871Z'
resource:
labels:
location: global
resource_container: projects/project-id
type: fleetengine.googleapis.com/Fleet
timestamp: '2021-09-22T03:25:15.724998Z'
যানবাহন তৈরির জন্য ক্লাউড পাব/সাব বিজ্ঞপ্তি
ফ্লিট ইঞ্জিন API ক্লাউড পাব/সাবের মাধ্যমে একটি বিজ্ঞপ্তি প্রকাশ করে যখন একটি নতুন গাড়ি তৈরি হয়। এই বিজ্ঞপ্তিগুলি পেতে, অনুগ্রহ করে এখানে নির্দেশাবলী অনুসরণ করুন।
কিভাবে করতে হবে: একটি যানবাহনের অবস্থান আপডেট করুন
গাড়ির অবস্থান আপডেট করার জন্য ড্রাইভার SDK ব্যবহার না করলে, আপনি গাড়ির অবস্থান সহ ফ্লিট ইঞ্জিনে সরাসরি কল করতে পারেন। যেকোনো সক্রিয় গাড়ির জন্য, ফ্লিট ইঞ্জিন প্রতি মিনিটে অন্তত একবার এবং প্রতি 5 সেকেন্ডে সর্বোচ্চ একবার একটি অবস্থান আপডেট আশা করে। এই আপডেটগুলির জন্য শুধুমাত্র ফ্লিট ইঞ্জিন ড্রাইভার SDK ব্যবহারকারীর বিশেষাধিকার প্রয়োজন৷
উদাহরণ
শেল
curl -X PUT \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=last_location" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
"supplementalLocationTime": "$(date -u --iso-8601=seconds)",
"supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
"supplementalLocationAccuracy": 15
}
EOM
providers.vehicles.update রেফারেন্স দেখুন।
জাভা
static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";
VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);
String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
.setLastLocation(VehicleLocation.newBuilder()
.setSupplementalLocation(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863))
.setSupplementalLocationTime(now())
.setSupplementalLocationSensor(LocationSensor.CUSTOMER_SUPPLIED_LOCATION)
.setSupplementalLocationAccuracy(DoubleValue.of(15.0))) // Optional)
.build();
UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
.setName(vehicleName)
.setVehicle(updatedVehicle)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("last_location"))
.build();
try {
Vehicle updatedVehicle =
vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
// Most implementations will call CreateVehicle in this case
break;
case PERMISSION_DENIED:
break;
}
return;
}
// If no Exception, Vehicle updated successfully.
কিভাবে: অন্যান্য যানবাহনের ক্ষেত্র আপডেট করুন
যানবাহনের অবস্থার অন্যান্য বৈশিষ্ট্যের আপডেটগুলি অবস্থান আপডেটের তুলনায় কম ঘন ঘন ঘটে। last_location
ব্যতীত অন্যান্য বৈশিষ্ট্যের আপডেটের জন্য Fleet Engine Super User-এর বিশেষাধিকার প্রয়োজন।
UpdateVehicleRequest
কোন ক্ষেত্রগুলিকে আপডেট করতে হবে তা নির্দেশ করার জন্য একটি update_mask
অন্তর্ভুক্ত রয়েছে। ক্ষেত্রের আচরণ ফিল্ড মাস্কগুলির জন্য প্রোটোবাফ ডকুমেন্টেশনের মতো।
যানবাহন বৈশিষ্ট্যগুলিতে উল্লিখিত হিসাবে, attributes
ক্ষেত্রটি আপডেট করার জন্য সমস্ত বৈশিষ্ট্যগুলি সংরক্ষণ করা প্রয়োজন। একটি UpdateVehicle
কলে শুধুমাত্র একটি কী-মানের জোড়ার মান আপডেট করা সম্ভব নয়। নির্দিষ্ট বৈশিষ্ট্যের মান আপডেট করতে, UpdateVehicleAttributes
API ব্যবহার করা যেতে পারে।
উদাহরণ
এই উদাহরণ back_to_back
সক্ষম করে।
শেল
curl -X PUT \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=vehicle_state,attributes,back_to_back_enabled" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"vehicleState": "ONLINE",
"attributes": [
{"key": "on_trip", "value": "true"},
{"key": "cash_only", "value": "false"}
],
"backToBackEnabled": true
}
EOM
providers.vehicles.update রেফারেন্স দেখুন।
জাভা
static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";
VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);
String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
.setVehicleState(VehicleState.ONLINE)
.addAllAttributes(ImmutableList.of(
VehicleAttribute.newBuilder().setKey("on_trip").setValue("true").build(),
VehicleAttribute.newBuilder().setKey("cash_only").setValue("false").build()))
.setBackToBackEnabled(true)
.build();
UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
.setName(vehicleName)
.setVehicle(updatedVehicle)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("vehicle_state")
.addPaths("attributes")
.addPaths("back_to_back_enabled"))
.build();
// Attributes and vehicle state are being updated, so both are
// included in the field mask. Note that of on_trip were
// not being updated, but rather cash_only was being changed,
// the desired value of "on_trip" would still need to be written
// as the attributes are completely replaced in an update operation.
try {
Vehicle updatedVehicle =
vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
// Most implementations will call CreateVehicle in this case
break;
case PERMISSION_DENIED:
break;
}
return;
}
// If no Exception, Vehicle updated successfully.
Google ক্লাউড প্ল্যাটফর্ম যানবাহন আপডেটের জন্য লগ করে
যখন UpdateVehicle
এন্ডপয়েন্টে একটি কল আসে তখন Fleet Engine API Google ক্লাউড প্ল্যাটফর্ম লগের মাধ্যমে একটি লগ এন্ট্রি লিখে। লগ এন্ট্রিতে UpdateVehicle
অনুরোধের মান সম্পর্কে তথ্য অন্তর্ভুক্ত থাকে। কলটি সফল হলে, এতে ফেরত আসা Vehicle
তথ্যও অন্তর্ভুক্ত থাকবে।
শেল
gcloud --project=project-id logging read --freshness=1h '
jsonPayload.request.vehicleId="vid-8241890"
jsonPayload.@type="type.googleapis.com/maps.fleetengine.v1.UpdateVehicleLog"
'
যানবাহন আপডেটের জন্য ক্লাউড পাব/সাব বিজ্ঞপ্তি
ফ্লিট ইঞ্জিন API ক্লাউড পাব/সাবের মাধ্যমে একটি বিজ্ঞপ্তি প্রকাশ করে যখন একটি বিদ্যমান গাড়ি আপডেট করা হয়। এই বিজ্ঞপ্তিগুলি পেতে, অনুগ্রহ করে এখানে নির্দেশাবলী অনুসরণ করুন।
কিভাবে: যানবাহন অনুসন্ধান করুন
ফ্লিট ইঞ্জিন যানবাহন অনুসন্ধান সমর্থন করে। SearchVehicles
API আপনাকে উপলব্ধ আশেপাশের ড্রাইভারদের খুঁজে পেতে দেয় যারা রাইড সার্ভিসিং বা ডেলিভারির অনুরোধের মতো একটি কাজের জন্য সবচেয়ে উপযুক্ত। SearchVehicles
API আপনার বহরে থাকা যানবাহনের বৈশিষ্ট্যগুলির সাথে টাস্ক অ্যাট্রিবিউটের সাথে মিলে যাওয়া ড্রাইভারগুলির একটি র্যাঙ্ক করা তালিকা প্রদান করে৷ আরও তথ্যের জন্য, কাছাকাছি ড্রাইভার খোঁজা দেখুন।
উদাহরণ
উপলব্ধ যানবাহন অনুসন্ধান করার সময়, ফ্লিট ইঞ্জিন ডিফল্টরূপে সক্রিয় ট্রিপে যানবাহনগুলিকে বাদ দেয়। রাইডশেয়ার বা ডেলিভারি প্রদানকারীর পরিষেবাগুলিকে তাদের অনুসন্ধানের অনুরোধে স্পষ্টভাবে অন্তর্ভুক্ত করতে হবে। গ্র্যান্ড ইন্দোনেশিয়া ইস্ট মল থেকে বালাই সিডাং জাকার্তা কনভেনশন সেন্টারে ভ্রমণের সাথে মিলে যাওয়া যানবাহনগুলির অনুসন্ধানে কীভাবে সেই যানগুলিকে অন্তর্ভুক্ত করতে হয় তা নিম্নলিখিত উদাহরণটি দেখায়৷
শেল
প্রথমে আমরা পূর্বের ধাপে তৈরি গাড়ির অবস্থান আপডেট করুন যাতে এটি যোগ্য হয়। বাস্তব জগতে, এটি গাড়ির একটি Android বা iOS ডিভাইসে চালিত ড্রাইভার SDK দ্বারা করা হবে৷
curl -X PUT \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=last_location,attributes" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"lastLocation": {
"updateTime": "$( date -u +"%Y-%m-%dT%H:%M:%SZ" )",
"location": {
"latitude": "-6.195139",
"longitude": "106.820826"
}
},
"attributes": [{"key": "on_trip", "value": "false"}]
}
EOM
অনুসন্ধান সঞ্চালন অন্তত যে যানবাহন ফলন করা উচিত.
curl -X POST \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles:search" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"pickupPoint": {
"point": {"latitude": "-6.195139", "longitude": "106.820826"}
},
"dropoffPoint": {
"point": {"latitude": "-6.1275", "longitude": "106.6537"}
},
"pickupRadiusMeters": 2000,
"count": 10,
"minimumCapacity": 2,
"tripTypes": ["EXCLUSIVE"],
"vehicleTypes": [{"category": "AUTO"}],
"filter": "attributes.on_trip=\"false\"",
"orderBy": "PICKUP_POINT_ETA",
"includeBackToBack": true
}
EOM
providers.vehicles.search রেফারেন্স দেখুন।
জাভা
static final String PROJECT_ID = "project-id";
VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
SearchVehiclesRequest searchVehiclesRequest = SearchVehiclesRequest.newBuilder()
.setParent(parent)
.setPickupPoint( // Grand Indonesia East Mall
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setDropoffPoint( // Balai Sidang Jakarta Convention Center
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.213796).setLongitude(106.807195)))
.setPickupRadiusMeters(2000)
.setCount(10)
.setMinimumCapacity(2)
.addTripTypes(TripType.EXCLUSIVE)
.addVehicleTypes(VehicleType.newBuilder().setCategory(VehicleType.Category.AUTO))
.setFilter("attributes.on_trip=\"false\"")
.setOrderBy(VehicleMatchOrder.PICKUP_POINT_ETA)
.setIncludeBackToBack(true) // Fleet Engine includes vehicles that are en route.
.build();
// Error handling
// If matches are returned and the authentication passed, the request completed
// successfully
try {
SearchVehiclesResponse searchVehiclesResponse =
vehicleService.searchVehicles(searchVehiclesRequest);
// Search results: Each vehicle match contains a vehicle entity and information
// about the distance and ETA to the pickup point and dropoff point.
List<VehicleMatch> vehicleMatches = searchVehiclesResponse.getMatchesList();
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
যানবাহন ফিল্টারিং প্রশ্ন
SearchVehicles
এবং ListVehicles
ফিল্টার ক্যোয়ারী ব্যবহার করে যানবাহনের বৈশিষ্ট্যগুলিতে ফিল্টারিং সমর্থন করে। ফিল্টার ক্যোয়ারী সিনট্যাক্সের জন্য, উদাহরণের জন্য AIP-160 দেখুন।
নোট করুন যে ফিল্টার প্রশ্নগুলি শুধুমাত্র গাড়ির বৈশিষ্ট্যগুলিতে ফিল্টারিং সমর্থন করে এবং অন্যান্য ক্ষেত্রের জন্য ব্যবহার করা যাবে না। ফিল্টার ক্যোয়ারী অন্যান্য সীমাবদ্ধতার সাথে একটি AND
ক্লজ হিসাবে কাজ করে, যেমন SearchVehiclesRequest
এ minimum_capacity
বা vehicle_types
।
কিভাবে: তালিকা যানবাহন
SearchVehicles
খুব দ্রুত র্যাঙ্ক করা ক্রমে অল্প সংখ্যক যানবাহন খুঁজে পাওয়ার জন্য অপ্টিমাইজ করা হয়েছে এবং প্রধানত কোনও কাজের জন্য সবচেয়ে উপযুক্ত আশেপাশের ড্রাইভারদের খুঁজে পেতে ব্যবহৃত হয়। যাইহোক, কখনও কখনও আপনি এমন সমস্ত যানবাহন খুঁজে পেতে চান যা কিছু মানদণ্ড পূরণ করে এমনকি যদি ফলাফলের মাধ্যমে পেজিং করা প্রয়োজন হয়। ListVehicles
যে ব্যবহারের ক্ষেত্রে ডিজাইন করা হয়েছে.
ListVehicles
API আপনাকে কিছু নির্দিষ্ট অনুরোধের বিকল্পগুলিকে সন্তুষ্ট করে এমন সমস্ত যানবাহন খুঁজে পেতে দেয়। ListVehicles
API প্রকল্পে যানবাহনের একটি পৃষ্ঠাযুক্ত তালিকা প্রদান করে যা কিছু প্রয়োজনীয়তার সাথে মেলে।
যানবাহনের বৈশিষ্ট্যগুলিতে ফিল্টার করতে, অনুগ্রহ করে যানবাহন ফিল্টারিং ক্যোয়ারী পড়ুন।
উদাহরণ
এই উদাহরণ filter
স্ট্রিং ব্যবহার করে vehicle_type
এবং বৈশিষ্ট্যের উপর ফিল্টারিং সঞ্চালন করে।
শেল
curl -X POST \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles:list" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"vehicleTypes": [{"category": "AUTO"}],
"filter": "attributes.on_trip=\"false\"",
}
EOM
providers.vehicles.list রেফারেন্স দেখুন।
জাভা
static final String PROJECT_ID = "project-id";
VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
ListVehiclesRequest listVehiclesRequest = ListVehiclesRequest.newBuilder()
.setParent(parent)
.addTripTypes(TripType.EXCLUSIVE)
.addVehicleTypes(VehicleType.newBuilder().setCategory(VehicleType.Category.AUTO))
.setFilter("attributes.on_trip=\"false\"")
.setIncludeBackToBack(true) // Fleet Engine includes vehicles that are en route.
.build();
// Error handling
// If matches are returned and the authentication passed, the request completed
// successfully
try {
ListVehiclesResponse listVehiclesResponse =
vehicleService.listVehicles(listVehiclesRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
ভ্রমণ এবং তাদের জীবনচক্র
ট্রিপ API এবং জীবনচক্র যানবাহন API এবং জীবনচক্রের অনুরূপ। রাইডশেয়ার প্রদানকারী ফ্লিট ইঞ্জিন ইন্টারফেস ব্যবহার করে ট্রিপ তৈরি করার জন্য দায়ী। ফ্লিট ইঞ্জিন একটি RPC পরিষেবা, TripService
এবং REST সংস্থান প্রদান করে, provider.trips
। এই ইন্টারফেসগুলি ট্রিপ সত্তা তৈরি, তথ্য অনুরোধ, অনুসন্ধান কার্যকারিতা এবং আপডেট করার ক্ষমতা সক্ষম করে।
একটি Trip
জীবনচক্রের মাধ্যমে তার অগ্রগতি ট্র্যাক করার জন্য একটি স্থিতি ক্ষেত্র রয়েছে। মানগুলি NEW
থেকে COMPLETE
প্লাস CANCELED
এবং UNKNOWN_TRIP_STATUS
চলে যায়৷ RPC এর জন্য trip_status
বা REST এর জন্য TripStatus পড়ুন।
-
NEW
-
ENROUTE_TO_PICKUP
-
ARRIVED_AT_PICKUP
-
ENROUTE_TO_INTERMEDIATE_DESTINATION
-
ARRIVED_AT_INTERMEDIATE_DESTINATION
-
ENROUTE_TO_DROPOFF
-
COMPLETE
আপনার পরিষেবা এই স্ট্যাটাসগুলির যেকোনো একটি থেকে CANCELED
ট্রিপ আপডেট করতে পারে। যখন আপনার পরিষেবা একটি ট্রিপ তৈরি করে, তখন ইঞ্জিনটি NEW
হিসাবে স্থিতি সেট করে। একটি vehicle_id
ঐচ্ছিক। যানবাহনের মতো, পরিষেবাগুলি আপডেট ছাড়াই সাত দিন পরে স্বয়ংক্রিয়ভাবে আনঅ্যাসাইন করা ট্রিপগুলি মুছে দেয়। আপনার পরিষেবা যদি আগে থেকেই বিদ্যমান আইডি দিয়ে একটি ট্রিপ তৈরি করার চেষ্টা করে, তাহলে একটি ত্রুটি ফেরত দেওয়া হয়। একটি ট্রিপ 'সক্রিয়' বলে বিবেচিত হয় যদি এটি COMPLETE
বা CANCELED
ছাড়া অন্য কোনো অবস্থায় থাকে। যানবাহন সত্তা এবং SearchTripsRequest
active_trips
ক্ষেত্রে এই পার্থক্যটি গুরুত্বপূর্ণ।
আপনার পরিষেবা শুধুমাত্র যখন ট্রিপ সক্রিয় থাকে তখনই ট্রিপের জন্য নির্ধারিত vehicle_id
পরিবর্তন করতে পারে। উদাহরণ স্বরূপ, আপনি এটি করবেন যখন একজন চালক রুটে চলাকালীন একটি ট্রিপ বাতিল করেন এবং ট্রিপটি অন্য যানবাহনে পুনরায় নিয়োগ করা হয়।
ব্যাক-টু-ব্যাক ট্রিপ সমর্থন বাস্তবায়ন করার সময় স্ট্যাটাস গুরুত্বপূর্ণ। এই সমর্থনটি প্রদানকারীকে একটি যানবাহনে একটি নতুন ট্রিপ বরাদ্দ করতে সক্ষম করে যখন সেই যানটি একটি সক্রিয় ট্রিপে থাকে। ব্যাক-টু-ব্যাক ট্রিপ তৈরির কোডটি একক ট্রিপের মতোই এবং একই গাড়ির আইডি ব্যবহার করে। ফ্লিট ইঞ্জিন গাড়ির ওয়েপয়েন্টগুলিতে নতুন ভ্রমণের উত্স এবং গন্তব্য যোগ করে। ব্যাক-টু-ব্যাক ট্রিপ সম্পর্কে আরও তথ্যের জন্য, মাল্টি-ওয়েপয়েন্ট ট্রিপ তৈরি করুন দেখুন।
ট্রিপ বাকি পথপয়েন্ট
ট্রিপ এন্টিটিতে TripWaypoint
( RPC | REST ) এর একটি পুনরাবৃত্ত ক্ষেত্র রয়েছে, যাকে বলা হয় remainingWaypoints
( RPC | REST )। এই ক্ষেত্রটিতে সমস্ত ওয়েপয়েন্ট অন্তর্ভুক্ত রয়েছে যা এই ট্রিপের চূড়ান্ত ড্রপ অফ পয়েন্টের আগে গাড়িটিকে ক্রমানুসারে ভ্রমণ করতে হবে। এটি যানবাহনের অবশিষ্ট ওয়েপয়েন্ট থেকে গণনা করে। ব্যাক-টু-ব্যাক এবং কারপুল ব্যবহারের ক্ষেত্রে, এই তালিকায় অন্যান্য ট্রিপের ওয়েপয়েন্ট রয়েছে যা এই ট্রিপের আগে অতিক্রম করা হবে, কিন্তু এই ট্রিপের পরে যেকোনও ওয়েপয়েন্ট বাদ দেওয়া হয়। তালিকার ওয়েপয়েন্টটি এর TripId
এবং WaypointType
দ্বারা চিহ্নিত করা যেতে পারে।
ট্রিপ স্ট্যাটাস এবং যানবাহন অবশিষ্ট ওয়েপয়েন্টের মধ্যে সম্পর্ক
যখন ফ্লিট ইঞ্জিন ট্রিপ স্ট্যাটাস পরিবর্তনের অনুরোধ পাবে তখন গাড়ির অবশিষ্ট ওয়েপয়েন্ট ( RPC | REST ) আপডেট করা হবে। tripStatus
( RPC | REST ) অন্য স্ট্যাটাস থেকে ENROUTE_TO_XXX এ পরিবর্তিত হলে গাড়ির অবশিষ্ট ওয়েপয়েন্ট তালিকা থেকে আগের ওয়েপয়েন্টটি সরিয়ে দেওয়া হবে। অর্থাৎ, যখন ট্রিপ স্ট্যাটাস ENROUTE_TO_PICKUP থেকে ARRIVED_AT_PICKUP এ পরিবর্তিত হয়, তখনও ট্রিপের পিকআপ পয়েন্টটি যানবাহনের অবশিষ্ট ওয়েপয়েন্ট তালিকায় থাকবে, কিন্তু যখন ট্রিপ স্ট্যাটাসকে ENROUTE_TO_INTERMEDIATE_DESTINATION বা ENROUTE_TO_DROPFF থেকে সরিয়ে দেওয়া হয়, তখন গাড়ির পিকআপ পয়েন্ট রয়ে যাবে।
এটি ARRIVED_AT_INTERMEDIATE_DESTINATION এবং ENROUTE_TO_INTERMDEDIATE_DESTINATION-এর জন্য একই। যখন ARRIVED_AT_INTERMEDIATE_DESTINATION, তখন গাড়ির অবশিষ্ট ওয়েপয়েন্ট তালিকা থেকে বর্তমান মধ্যবর্তী গন্তব্যটি সরানো হবে না যতক্ষণ না গাড়িটি পরবর্তী ওয়েপয়েন্টে যাওয়ার কথা জানায়।
যখন ট্রিপ স্ট্যাটাস COMPLETED
এ পরিবর্তিত হয়, তখন এই ট্রিপের কোনো ওয়েপয়েন্ট গাড়ির অবশিষ্ট ওয়েপয়েন্ট তালিকায় থাকবে না।
কিভাবে করবেন: একটি ট্রিপ তৈরি করুন
প্রতিটি ট্রিপের অনুরোধ ট্র্যাক করা এবং বহরের যানবাহনের সাথে মিলে যাওয়ার জন্য একটি Trip
সত্তা তৈরি করতে হবে। একটি ট্রিপ তৈরি করতে CreateTripRequest
সহ CreateTrip
এন্ডপয়েন্ট ব্যবহার করুন।
একটি ট্রিপ তৈরি করতে নিম্নলিখিত বৈশিষ্ট্যগুলি প্রয়োজন:
-
parent
- একটি স্ট্রিং যা Google ক্লাউড প্রকল্প তৈরি করার সময় তৈরি করা প্রোভাইডার আইডি অন্তর্ভুক্ত করে। -
trip_id
- রাইডশেয়ার প্রদানকারী দ্বারা তৈরি একটি স্ট্রিং। -
trip
- ট্রিপ বর্ণনা করে বেসিক মেটাডেটা সহ ধারক।-
trip_type
- এনাম প্রতিনিধিত্ব করে যে ট্রিপে একই গাড়িতে ভিন্ন উৎস এবং গন্তব্যের অন্য রাইডার থাকতে পারে (SHARED
) বা শুধুমাত্র একক পক্ষ (EXCLUSIVE
)। -
pickup_point
- টার্মিনাল অবস্থান যা ভ্রমণের মূল বিন্দুকে প্রতিনিধিত্ব করে। RPC রেফারেন্স বা REST রেফারেন্স দেখুন
-
যখন আপনি একটি ট্রিপ তৈরি করেন, আপনি number_of_passengers
, dropoff_point
এবং vehicle_id
প্রদান করতে পারেন। যদিও এই ক্ষেত্রগুলির প্রয়োজন নেই, আপনি যদি সেগুলি প্রদান করেন তবে সেগুলি ধরে রাখা হয়৷ অন্য সব ট্রিপ ক্ষেত্র উপেক্ষা করা হয়. উদাহরণ স্বরূপ, সমস্ত ট্রিপ NEW
trip_status
দিয়ে শুরু হয় এমনকি আপনি যদি তৈরির অনুরোধে CANCELED
trip_status
পাস করেন।
উদাহরণ
নিম্নলিখিত উদাহরণ গ্র্যান্ড ইন্দোনেশিয়া ইস্ট মলে একটি ট্রিপ তৈরি করে। ট্রিপ দুই যাত্রীর জন্য এবং একচেটিয়া। Trip
provider_id
অবশ্যই প্রজেক্ট আইডির মতোই হতে হবে। উদাহরণে, রাইডশেয়ার প্রদানকারী গুগল ক্লাউড প্রজেক্ট, project-id তৈরি করেছে। এই প্রকল্পে ফ্লিট ইঞ্জিন কল করার জন্য ব্যবহৃত পরিষেবা অ্যাকাউন্ট থাকতে হবে। ট্রিপের অবস্থা NEW
।
পরে, পরিষেবাটি একটি গাড়িতে ভ্রমণের সাথে মিলে যাওয়ার পরে, পরিষেবাটি UpdateTrip
কল করতে পারে এবং গাড়ির জন্য ট্রিপ বরাদ্দ করা হলে vehicle_id
পরিবর্তন করতে পারে৷
শেল
curl -X POST \
"https://fleetengine.googleapis.com/v1/providers/project-id/trips?tripId=tid-1f97" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"tripType": "EXCLUSIVE",
"numberOfPassengers": 2,
"pickupPoint": {
"point": {"latitude": "-6.195139", "longitude": "106.820826"}
},
"dropoffPoint": {
"point": {"latitude": "-6.1275", "longitude": "106.6537"}
}
}
EOM
providers.trips.create রেফারেন্স দেখুন।
জাভা
static final String PROJECT_ID = "project-id";
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
Trip trip = Trip.newBuilder()
.setTripType(TripType.EXCLUSIVE) // Use TripType.SHARED for carpooling
.setPickupPoint( // Grand Indonesia East Mall
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
// Provide the number of passengers if available.
.setNumberOfPassengers(2)
// Provide the drop-off point if available.
.setDropoffPoint(
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.1275).setLongitude(106.6537)))
.build();
CreateTripRequest createTripRequest =
CreateTripRequest.newBuilder() // no need for the header
.setParent(parent)
.setTripId("tid-1f97") // Trip ID assigned by the Provider
.setTrip(trip) // Initial state
.build();
// Error handling
// If Fleet Engine does not have trip with that id and the credentials of the
// requestor pass, the service creates the trip successfully.
try {
Trip createdTrip =
tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
Google ক্লাউড প্ল্যাটফর্ম ট্রিপ তৈরির জন্য লগ করে
যখন CreateTrip
এন্ডপয়েন্টে একটি কল আসে তখন ফ্লিট ইঞ্জিন API Google ক্লাউড প্ল্যাটফর্ম লগ ব্যবহার করে একটি লগ এন্ট্রি লিখে। লগ এন্ট্রিতে CreateTrip
অনুরোধের মান সম্পর্কে তথ্য অন্তর্ভুক্ত থাকে। কলটি সফল হলে, এতে ফেরত আসা Trip
তথ্যও অন্তর্ভুক্ত থাকবে।
কিভাবে করবেন: একটি ট্রিপ আপডেট করুন
ট্রিপ সত্তায় এমন ক্ষেত্র রয়েছে যা পরিষেবা দ্বারা ট্র্যাকিং সক্ষম করে এবং ড্রাইভার SDK এবং গ্রাহক SDK-এর দ্বারা ট্রিপের অগ্রগতি রিপোর্ট করার জন্য। বৈশিষ্ট্য আপডেট করতে, UpdateTripRequest
বার্তা ব্যবহার করুন। এটি অনুরোধের field_mask
অনুযায়ী ট্রিপ ক্ষেত্র আপডেট করে। UpdateTripRequest পড়ুন।
রাইডশেয়ার প্রদানকারী নিম্নলিখিত বৈশিষ্ট্যগুলি আপডেট করার জন্য দায়ী:
- ট্রিপ স্ট্যাটাস।
- যানবাহন আইডি। হয় সৃষ্টির সময়, নয়তো গাড়ির সাথে মিলে যাওয়ার পর।
- পিকআপ, ড্রপঅফ বা ওয়েপয়েন্টে পরিবর্তন।
ড্রাইভার SDK বা Consumer SDK-এর মাধ্যমে জার্নি শেয়ারিং বৈশিষ্ট্য ব্যবহার করার সময় ফ্লিট ইঞ্জিন স্বয়ংক্রিয়ভাবে নিম্নলিখিত ক্ষেত্রগুলি আপডেট করে:
- রুট
- ETA
- বাকি দূরত্ব
- গাড়ির অবস্থান
- বাকি পথপয়েন্ট
RPC-এ Trip
অথবা REST-এ Resource.Trip
পড়ুন।
Google ক্লাউড প্ল্যাটফর্ম ট্রিপ আপডেটের জন্য লগ করে
যখন UpdateTrip
এন্ডপয়েন্টে একটি কল আসে তখন Fleet Engine API Google ক্লাউড প্ল্যাটফর্ম লগ ব্যবহার করে একটি লগ এন্ট্রি লিখে। লগ এন্ট্রিতে UpdateTrip
অনুরোধের মান সম্পর্কে তথ্য অন্তর্ভুক্ত থাকে। কলটি সফল হলে, এতে ফেরত আসা Trip
তথ্যও অন্তর্ভুক্ত থাকবে।
কিভাবে করতে হবে: অনুসন্ধান ট্রিপ
ফ্লিট ইঞ্জিন ভ্রমণের জন্য অনুসন্ধান সমর্থন করে। পূর্বে উল্লেখ করা হয়েছে, সাত দিন পর একটি ট্রিপ স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়, তাই SearchTrips
সমস্ত ট্রিপের সম্পূর্ণ ইতিহাস প্রকাশ করে না।
যদিও SearchTrips
একটি নমনীয় API, নীচের তালিকাটি দুটি ব্যবহারের ক্ষেত্রে বিবেচনা করে।
একটি যানবাহনের সক্রিয় ট্রিপ নির্ধারণ - প্রদানকারী একটি যানবাহনের বর্তমানে সক্রিয় ট্রিপ নির্ধারণ করতে পারে।
SearchTripsRequest
এর মধ্যে,vehicle_id
বিবেচনাধীন গাড়িতে সেট করা আছে এবংactive_trips_only
true
সেট করা উচিত।প্রদানকারী এবং ফ্লিট ইঞ্জিনের অবস্থার সমন্বয় করা -- প্রদানকারী তাদের ট্রিপ অবস্থা এবং ফ্লিট ইঞ্জিনের মিল নিশ্চিত করতে
SearchTrips
ব্যবহার করতে পারে। এটি TripStatus এর জন্য বিশেষভাবে গুরুত্বপূর্ণ। যদি একটি যানবাহনের জন্য নির্ধারিত ট্রিপের অবস্থা সঠিকভাবেCOMPLETE
বাCANCELED
না করা হয়, তাহলে যানটিSearchVehicles
দ্বারা অন্তর্ভুক্ত করা হয় না।
এইভাবে SearchTrips
ব্যবহার করতে, vehicle_id
খালি ছেড়ে দিন, active_trips_only
true
সেট করুন এবং minimum_staleness
বেশিরভাগ ট্রিপের সময়কালের চেয়ে বেশি সময়ে সেট করুন। উদাহরণস্বরূপ, আপনি এক ঘন্টা ব্যবহার করতে পারেন। ফলাফলের মধ্যে এমন ট্রিপগুলি অন্তর্ভুক্ত রয়েছে যা সম্পূর্ণ নয় বা বাতিল করা হয়নি এবং এক ঘণ্টার মধ্যে আপডেট করা হয়নি৷ ফ্লিট ইঞ্জিনে তাদের স্থিতি সঠিকভাবে আপডেট করা হয়েছে তা নিশ্চিত করতে প্রদানকারীর এই ট্রিপগুলি পরীক্ষা করা উচিত।
সমস্যা সমাধান
একটি DEADLINE_EXCEEDED
ত্রুটির ক্ষেত্রে, ফ্লিট ইঞ্জিনের অবস্থা অজানা। প্রদানকারীর আবার CreateTrip
কল করা উচিত, যা হয় একটি 201 (তৈরি করা) বা 409 (সংঘর্ষ) প্রদান করে। পরবর্তী ক্ষেত্রে, পূর্ববর্তী অনুরোধটি DEADLINE_EXCEEDED
এর আগে সফল হয়েছিল। ট্রিপ ত্রুটিগুলি পরিচালনার বিষয়ে আরও তথ্যের জন্য উপভোক্তা API নির্দেশিকা দেখুন: Android বা iOS ।
কারপুল রাইড সমর্থন
আপনি TripType.SHARED
সমর্থন করে এমন একটি গাড়িতে একাধিক SHARED
ট্রিপ বরাদ্দ করতে পারেন। আপনি যখন একটি শেয়ার্ড ট্রিপের জন্য (একটি CreateTrip
বা UpdateTrip
অনুরোধে) vehicle_id
বরাদ্দ করেন তখন আপনাকে Trip.vehicle_waypoints
এর মাধ্যমে এই শেয়ার্ড রাইডে যানবাহনের জন্য নির্ধারিত সমস্ত ট্রিপের জন্য সমস্ত আনপাসড ওয়েপয়েন্টের ক্রম উল্লেখ করতে হবে। RPC-এর জন্য vehicle_waypoints
অথবা REST-এর জন্য vehicleWaypoints
পড়ুন।
একাধিক গন্তব্য সমর্থন
একটি মধ্যবর্তী গন্তব্য চিহ্নিত করুন
ফিল্ড intermediateDestinations
এবং ফিল্ড intermediateDestinationIndex
ইন ট্রিপ ( RPC | REST ) গন্তব্য নির্দেশ করতে ব্যবহার করা হয়।
মধ্যবর্তী গন্তব্য আপডেট করুন
আপনি UpdateTrip
এর মাধ্যমে মধ্যবর্তী গন্তব্যগুলি আপডেট করতে পারেন। মধ্যবর্তী গন্তব্যগুলি আপডেট করার সময়, আপনাকে অবশ্যই মধ্যবর্তী গন্তব্যগুলির একটি সম্পূর্ণ তালিকা প্রদান করতে হবে, যেগুলি পরিদর্শন করা হয়েছে, শুধুমাত্র নতুন যোগ করা বা পরিবর্তিত হতে হবে এমন নয়৷ যখন intermediateDestinationIndex
নতুন যুক্ত/পরিবর্তিত মধ্যবর্তী গন্তব্যের অবস্থানের পরে একটি সূচকের দিকে নির্দেশ করে, তখন নতুন/আপডেট করা মধ্যবর্তী গন্তব্যটি যানবাহনের waypoints
বা ট্রিপের remainingWaypoints
যোগ করা হবে না। কারণ হল intermediateDestinationIndex
পূর্ববর্তী যেকোনো মধ্যবর্তী গন্তব্যকে ইতিমধ্যেই পরিদর্শন করা হয়েছে বলে ধরা হয়।
ট্রিপ স্ট্যাটাস পরিবর্তন
( আরপিসি | আরইএসটি ) -এ ক্ষেত্রের intermediateDestinationsVersion
একটি মধ্যবর্তী গন্তব্য পাস হয়েছে তা নির্দেশ করতে ফ্লিট ইঞ্জিনে প্রেরিত ট্রিপ স্ট্যাটাস আপডেট অনুরোধে প্রয়োজনীয়। লক্ষ্যযুক্ত মধ্যবর্তী গন্তব্য ক্ষেত্রটি intermediateDestinationIndex
মাধ্যমে নির্দিষ্ট করা হয়। যখন tripStatus
( আরপিসি | রেস্ট ) enroute_to_intermediate_destination হয়, তখন [0..n-1] এর মধ্যে একটি সংখ্যা নির্দেশ করে যে কোন মধ্যবর্তী গন্তব্যটি যানটি পাশের পাশটি অতিক্রম করবে। tripStatus
যখন আগত_এটি_ইন্টারমিডিয়েট_ডেস্টিনেশন হয়, তখন [0..N-1] এর মধ্যে একটি সংখ্যা নির্দেশ করে যে যানবাহনটি কোন মধ্যবর্তী গন্তব্যে রয়েছে।
উদাহরণ
নিম্নলিখিত কোড উদাহরণটি দেখায় যে কীভাবে কোনও ট্রিপের স্থিতি তার প্রথম মধ্যবর্তী গন্তব্যে উত্সাহিত করার জন্য আপডেট করবেন, ধরে নিই যে আপনি একটি মাল্টি-ডেস্টিনেশন ট্রিপ তৈরি করেছেন এবং ট্রিপটি তার পিকআপ পয়েন্টটি পেরিয়ে গেছে।
জাভা
static final String PROJECT_ID = "project-id";
static final String TRIP_ID = "multi-destination-trip-A";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
Trip trip = …; // Fetch trip object from FleetEngine or your storage.
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// Trip settings to update.
Trip trip = Trip.newBuilder()
// Trip status cannot go back to a previous status once it is passed
.setTripStatus(TripStatus.ENROUTE_TO_INTERMEDIATE_DESTINATION)
// Enrouting to the first intermediate destination.
.setIntermediateDestinationIndex(0)
// intermediate_destinations_version MUST be provided to ensure you
// have the same picture on intermediate destinations list as FleetEngine has.
.setIntermediateDestinationsVersion(
trip.getIntermediateDestinationsVersion())
.build();
// Trip update request
UpdateTripRequest updateTripRequest =
UpdateTripRequest.newBuilder()
.setName(tripName)
.setTrip(trip)
.setUpdateMask(
FieldMask.newBuilder()
.addPaths("trip_status")
.addPaths("intermediate_destination_index")
// intermediate_destinations_version must not be in the
// update mask.
.build())
.build();
// Error handling
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // Trip does not exist.
break;
case FAILED_PRECONDITION: // The given trip status is invalid, or the
// intermediate_destinations_version
// doesn’t match FleetEngine’s.
break;
case PERMISSION_DENIED:
break;
}
return;
}
কীভাবে: ফ্লিট ইঞ্জিন এপিআই থেকে বিজ্ঞপ্তি বার্তাগুলিতে সাবস্ক্রাইব করুন
ফ্লিট ইঞ্জিন এপিআই গ্রাহক গুগল ক্লাউড প্রকল্প দ্বারা নির্মিত বিষয়টিতে বিজ্ঞপ্তিগুলি প্রকাশ করতে গুগল ক্লাউড পাব/সাব ব্যবহার করে। আপনার গুগল ক্লাউড প্রকল্পে ফ্লিট ইঞ্জিনের জন্য ডিফল্টরূপে পাব/সাব সক্ষম করা নেই। দয়া করে একটি সমর্থন কেস ফাইল করুন বা পাব/সাব সক্ষম করতে আপনার গ্রাহক ইঞ্জিনিয়ারের সাথে যোগাযোগ করুন।
আপনার ক্লাউড প্রকল্পে একটি বিষয় তৈরি করতে, এই নির্দেশাবলী অনুসরণ করুন। টপিক আইডি অবশ্যই 'ফ্লিট_জাইন_নোটাইফিকেশনস' হতে হবে।
বিষয়টি একই ক্লাউড প্রকল্পে তৈরি করতে হবে যা ফ্লিট ইঞ্জিন এপিআইকে কল করছে।
বিষয়টি তৈরি হয়ে গেলে, আপনাকে এই বিষয়টিতে প্রকাশের জন্য ফ্লিট ইঞ্জিন এপিআই অনুমতি দিতে হবে। এটি করার জন্য, আপনি সবেমাত্র তৈরি করা বিষয়টিতে ক্লিক করুন এবং একটি নতুন অনুমতি যুক্ত করুন। অনুমতি সম্পাদকটি খুলতে আপনাকে শো তথ্য প্যানেলে ক্লিক করতে হতে পারে। প্রিন্সিপালটি geo-fleet-engine@system.gserviceaccount.com
হতে হবে এবং ভূমিকাটি Pub/Sub publisher
হওয়া উচিত।
বিজ্ঞপ্তিগুলিতে সাবস্ক্রাইব করতে আপনার ক্লাউড প্রকল্পটি সেটআপ করার জন্য, এই নির্দেশাবলী অনুসরণ করুন
ফ্লিট ইঞ্জিন এপিআই প্রতিটি প্রজ্ঞাপন দুটি পৃথক ডেটা ফর্ম্যাট, protobuf
এবং json
প্রকাশ করবে। প্রতিটি বিজ্ঞপ্তির জন্য ডেটা ফর্ম্যাটটি Pubsubmessage বৈশিষ্ট্যগুলিতে data_format
হিসাবে কী এবং protobuf
বা json
হিসাবে মান হিসাবে চিহ্নিত করা হয়।
বিজ্ঞপ্তি স্কিমা:
প্রোটোবাফ
// A batch of notifications that is published by the Fleet Engine service using
// Cloud Pub/Sub in a single PubsubMessage.
message BatchNotification {
// Required. At least one notification must exist.
// List of notifications containing information related to changes in
// Fleet Engine data.
repeated Notification notifications = 1;
}
// A notification related to changes in Fleet Engine data.
// The data provides additional information specific to the type of the
// notification.
message Notification {
// Required. At least one type must exist.
// Type of notification.
oneof type {
// Notification related to changes in vehicle data.
VehicleNotification vehicle_notification = 1;
}
}
// Notification sent when a new vehicle was created.
message CreateVehicleNotification {
// Required.
// Vehicle must contain all fields that were set when it was created.
Vehicle vehicle = 1;
}
// Notification sent when an existing vehicle is updated.
message UpdateVehicleNotification {
// Required.
// Vehicle must only contain name and fields that are present in the
// field_mask field below.
Vehicle vehicle = 1;
// Required.
// Contains vehicle field paths that were specifically requested
// by the Provider.
google.protobuf.FieldMask field_mask = 2;
}
// Notification related to changes in vehicle data.
message VehicleNotification {
// Required. At least one type must be set.
// Type of notification.
oneof type {
// Notification sent when a new vehicle was created.
CreateVehicleNotification create_notification = 1;
// Notification sent when an existing vehicle is updated.
UpdateVehicleNotification update_notification = 2;
}
}
JSON
BatchNotification: {
"description": "A batch of notifications that is published by the Fleet Engine service using Cloud Pub/Sub in a single PubsubMessage.",
"type": "object",
"required": ["notifications"],
"properties": {
"notifications": {
"description": "At least one notification must exist. List of notifications containing information related to changes in Fleet Engine data.",
"type": "Notification[]"
}
}
}
Notification: {
"description": "A notification related to changes in Fleet Engine data. The data provides additional information specific to the type of the notification.",
"type": "object",
"properties": {
"vehicleNotification": {
"description": "Notification related to changes in vehicle data.",
"type": "VehicleNotification"
}
}
}
VehicleNotification: {
"description": "Notification related to changes in vehicle data.",
"type": "object",
"properties": {
"createNotification": {
"description": "Notification sent when a new vehicle was created.",
"type": "CreateVehicleNotification"
},
"updateNotification": {
"description": "Notification sent when an existing vehicle is updated.",
"type": "UpdateVehicleNotification"
}
}
}
CreateVehicleNotification: {
"description": "Notification sent when a new vehicle was created.",
"type": "object",
"required": ["vehicle"],
"properties": {
"vehicle": {
"description": "Vehicle must contain all fields that were set when it was created.",
"type": "Vehicle"
}
}
}
UpdateVehicleNotification: {
"description": "Notification sent when an existing vehicle is updated.",
"type": "object",
"required": ["vehicle", "fieldMask"],
"properties": {
"vehicle": {
"description": "Vehicle must only contain name and fields that are present in the fieldMask field below.",
"type": "Vehicle"
},
"fieldMask": {
"description": "Contains vehicle field paths that were specifically requested by the Provider.",
"type": "FieldMask"
}
}
}