נסיעות על פי דרישה

במסמך הזה מתואר שירות הנסיעות על פי דרישה ב-Fleet Engine. ההנחה היא שקראתם את What is Fleet Engine? (מה זה Fleet Engine?) ואתם מודעים ליכולת השירות הספציפית של Fleet Engine שאתם צריכים.

כשקוראים את התיעוד הזה, חשוב לזכור את הנקודות הבאות:

  • אתם מקצים נסיעות לכלי רכב כדי ליצור מודל של הקשר בעולם האמיתי בין הנסיעה לבין הנהג שמשלים את הנסיעה. כדי להבין טוב יותר איך כלי רכב פועלים ב-Fleet Engine, קראו את המאמר מבוא לכלי רכב.
  • במסמך הזה גם מתוארים כמה אלמנטים ברכב שרלוונטיים רק לנסיעות על פי דרישה.
  • Fleet Engine לנסיעות על פי דרישה משתמש בשני משאבים: Trip ו-Vehicle. Fleet Engine מספק שירות gRPC וגם ממשקי REST:
    • TripService: gRPC ו-REST
    • VehicleService: gRPC ו-REST
    • כדי לשמור על פשטות, במדריך הזה נשתמש בדוגמאות של gRPC.

מהו נסיעה על פי דרישה?

ב-Fleet Engine, נסיעה מייצגת מסלול על פי דרישה שיכול להשיג מגוון יעדי תחבורה. לדוגמה:

  • אנשים: שינוע אדם אחד או יותר מנקודות איסוף אל נקודת ההורדה.
  • אוכל ומוצרים: אפשר לאסוף הזמנה אחת או יותר ממקום מסוים של העסק ולהשאיר את ההזמנות אצל נמען אחד או יותר במיקומים שבהם הוא נמצא.

רכיבים של נסיעה

באיורים הבאים מוצגים הרכיבים הבסיסיים של הנסיעה: מזהה הרכב שהוקצה, סטטוס הנסיעה ונקודות הדרך בנסיעה. הסוגים של ציוני הדרך משתנים בהתאם לשלבים במסלול: איסוף, ביניים והורדה. בכל נסיעה, חובה לבחור יעד ביניים או ציון דרך. בדוגמה שבתמונה, הרכב הגיע לנקודת האיסוף.

מודל נתונים לנסיעות

מכיוון שהקצה העורפי מקצה נסיעות לרכבים, עליו לדעת גם על נסיעות אחרות שמתוזמנות לרכב. לכן, בתרשימים הבאים אפשר לראות את מודל הנתונים של המשאב Trip לצד התרשים של משאב Vehicle שמשויך אליו. אתם יכולים לבדוק את שני התרשימים כדי לחקור את הקשרים בין שני המשאבים, חשוב לזכור את הדברים הבאים:

  • נסיעות מוקצות לרכב לפי תעודה מזהה.
  • הקשר בין הרכב לאביזר רכב הוא 'רבים לאחד'. כלומר, נסיעה מסוימת יכולה להיות הנסיעה היחידה שמתוזמנת עם הרכב, או שהיא אחת מהנסיעות ברכב.
  • אובייקטים של נסיעות מכילים שתי רשימות של ציוני דרך בנסיעה, אחת לנסיעה עצמה ואחת לרכב שהוקצה. הנושא הזה מוסבר בפירוט במסמך הזה.
  • לרכב על פי דרישה יש גם רשימה של ציוני דרך בנסיעה, שמתוארת בצורה מלאה יותר במסמך הזה.

מודל של נתוני נסיעה

מודל הנתונים של הרכב

סוגי נסיעות

כשהשירות יוצר נסיעה, הוא יכול להגדיר את השדה tripType כאחת מהאפשרויות הבאות: EXCLUSIVE או SHARED.

נסיעות בלעדיות

נסיעה בלעדית היא נסיעה שלא חופפת לנסיעות אחרות, ונסיעה שהרכב משלים לפני או אחרי נסיעות אחרות בלוח הזמנים שלו. כלומר, כשהמערכת מקצה נסיעות בלעדיות, היא יכולה להקצות אותן רק לרכב שרוצים להשלים בו-זמנית ולא בו-זמנית. לצורך המחשה, אפשר ליצור נסיעות בלעדיות עם כל אחד מהמאפיינים הבאים:

  • נסיעה עם איסוף בודד והורדה יחידה לרכב ללא נסיעות אחרות בלוח הזמנים.
  • נסיעה עם איסוף, ציון דרך בתהליך ביניים והורדה של רכב ללא נסיעה אחרת לפי לוח הזמנים שלה.
  • נסיעה עם איסוף והורדה מתווספת לסוף של נסיעה שכבר מתוכננת לרכב. במקרים כאלה, כל נסיעה היא בלעדית לשנייה, אבל הנסיעות מסודרות לצד השני. בנוסף, נסיעות כאלה יכולות לכלול יעדי ביניים, לפי הצורך.

נסיעות משותפות

נסיעה משותפת היא נסיעה שיכולה לחפוף עם הזמנות אחרות של נסיעות. בסוגי הנסיעות האלה, המערכת יכולה להקצות אותם לנסיעות בו-זמנית עם יעדים מקושרים. לדוגמה, הנטישה של נסיעה אחת עשויה להתרחש אחרי האיסוף של נסיעה אחרת. בנוסף, בנסיעות משותפות אסור להשתמש בציוני דרך ביניים.

בדרך כלל משתמשים בנסיעה משותפת באחד מתרחישי המאגר המשותף שמתוארים בקטע תרחישי נסיעה.

ציוני דרך בנסיעה

במפות Google, ציון דרך הוא מקום לאורך מסלול, שבדרך כלל מוגדר על ידי קואורדינטה של קווי אורך ורוחב. בנסיעות על פי דרישה, ציון דרך מיוצג על ידי אובייקט TripWaypoint שמכיל מידע נוסף כמו:

  • מזהה הנסיעה
  • WaypointType – איסוף, ביניים או הורדה
  • פרטי הנתיב והמרחק בין נקודת הציון הקודמת בנסיעה
  • מצב התנועה בדרך שמובילה לנקודת הציון בנסיעה
  • זמן נסיעה וזמן הגעה משוער אל ציון הדרך

לעיון בהפניות:

סוגים של ציוני דרך בנסיעה

ציון הדרך בנסיעה מוגדר ביחס למחזור החיים הכללי של מסע הרכב:

  • ציון דרך לאיסוף – משמש לתחילת הנסיעה או לתחילת הנסיעה. למשל, כשנהג אוסף הזמנה ממסעדה למשלוח הבא, או כשנהג אוסף אדם כלשהו להורדה מאוחרת יותר.
  • ציון דרך ביניים – יעד ביניים שאפשר להשתמש בו למגוון מטרות, למשל כשנהג מוריד נוסע אחד מאותה קבוצת הזמנה, אבל הנסיעה עצמה לא הושלמה כי נשארים בה יותר נוסעים. ציון הדרך הזה הוא אופציונלי ואפשר להשתמש בו רק לנסיעות בלעדיות.
  • ציון דרך להורדה – משמש למיקום הסופי של הנסיעה, למשל כשהנוסע הנותר יוצא מהרכב.

רשימות של ציוני דרך בנסיעה

ישות Trip כוללת שתי רשימות של ציוני דרך, שכל אחת מהן היא שדה חוזר מסוג TripWaypoint. ברשימה אחת מתוארים השדות שנחוצים לנסיעה עצמה, וברשימה השנייה מפורטים כל נקודות הדרך שנותרו ברכב שמשויך לנסיעה. כך מקבלים תמונה מלאה של כל מרכיבי הדרך: הנסיעה והנסיעה כולה.

  • ציוני הדרך שנותרו לרכב – שדה בשם vehicle_waypoints. היא מכילה את כל ציוני הדרך שנותרו לכל הנסיעות שמוקצות לרכב.
  • נקודות ציון שנותרו לנסיעה – שדה בשם remaining_waypoints. היא מכילה ציוני דרך שהרכב צריך לנסוע ברצף לפני נקודת ההורדה הסופית של הנסיעה. התרחישים מפורטים בקטע תרחישי נסיעות.
    • בנסיעה ליעד אחד שהוקצתה לרכב ללא נסיעות אחרות לפי לוח הזמנים שלו, נכללים רק נקודת איסוף ונקודת הורדה, בהנחה שהרכב לא יצא מציון הדרך לאיסוף.
    • בכל תרחיש אחר של נסיעה שבו הרכב מתוזמן גם לנסיעות אחרות, נקודות הציון הנותרות בכל נסיעה במסלול הנסיעה יכללו את כל ציוני הדרך מנסיעות אחרות שהרכב צריך לעבור לפני ההגעה לנקודת הציון של ההורדה. לדוגמה, בנסיעה חזרה לאחור שבה הרכב נמצא בדרך למסירה בנסיעה א', נקודות הציון הנותרות בנסיעה ב' יכללו את נקודת הציון בנסיעה א'. Fleet Engine מחשב את המידע הזה באמצעות השדה vehicle_waypoints.

אפשר לעיין בחומר העזר בנושא הישות Trip: gRPC או REST.

אפשרויות נסיעה

התרשימים הבאים ממחישים מגוון של תרחישי נסיעה נתמכים. בתרחישים האלה, רק הנסיעה המשותפת משותפת היא מסוג SHARED. כל השאר הם EXCLUSIVE. בתרשימים מוצגים גם סטטוס הנסיעה ונקודות הדרך הנותרות של הרכב שמבצע את הנסיעה, כפי שמתואר בהמשך המדריך.

נסיעה ליעד אחד

טיול ליעד אחד הוא נסיעה בEXCLUSIVE עם איסוף אחד ונקודת עצירה אחת. לדוגמה, נהג אוסף נוסע ממיקום אחד ומעביר אותו למיקום אחר, או נהג מאחזר הזמנה של משלוחי אוכל ממסעדה ומסיר אותה ללקוח.

נסיעות עם יעדים מרובים

נסיעה עם כמה יעדים היא נסיעה בEXCLUSIVE שכוללת יעד ביניים אחד או יותר בין נקודת האיסוף לנקודת ההורדה. לדוגמה, שלושה לקוחות שמשתתפים בנסיעות משותפות מזמינים נסיעה יחד מהטלפון של אדם אחד, אבל לכל אחד מהם יש יעדים נפרדים.

נסיעות הלוך ושוב

נסיעות הלוך ושוב הן נסיעות EXCLUSIVE שמכילות סדרה של נסיעות עצמאיות שמתרחשות בזו אחר זו. כל נסיעה בשרשרת יכולה להיות עם יעד אחד או עם כמה יעדים. בתרחיש הזה, נהג מתחייב לאסוף לקוח אחר לפני השלמת הנסיעה הנוכחית.

ניתן להקצות את הנסיעות האלה רק לרכבים שמאפשרים תזמון של חזרה אחורה. אפשר לעיין בחומר העזר בנושא Vehicle REST, gRPC.

טיולים מאורגנים משותפים

נסיעה משותפת לצורך איסוף נתונים שונה מסוגים אחרים של נסיעות. קודם כול, היא צריכה להיות נסיעה של SHARED, ולא נסיעה של EXCLUSIVE. כאן, הרכב מבצע את הנסיעות בו-זמנית, ולא ברצף, כמו נסיעות בלעדיות. נסיעה משותפת משתפת את המסע שלה עם נסיעות אחרות, אבל היא לא משתפת את פרטי המיקום של האיסוף ושל נקודת ההורדה בין הנסיעות. במקום זאת, כל נסיעה היא הזמנה בלעדית, כך שמשתמש הקצה שהזמין נסיעה אחת לא יכול לראות את פרטי האיסוף או היעד של נסיעה אחרת מלבד שלו. למשל:

  • שירות הסעות לנמל התעופה וממנו אוסף לקוחות שונים ומפקיד אותם בטרמינלים שונים של נמלי התעופה לאורך המסלול. יכול להיות שמשתמש 2 משתמש באפליקציה לצרכנים כדי לעקוב אחרי ההתקדמות בנסיעה, אבל באפליקציה שלו מוצג רק החלק שלו מהמסע, ולא המיקום שבו אדם 1 נוטש, או המיקום של נטישה למרות שחלקים מהמסלולים שלו חופפים.
  • נהג של משלוחי אוכל אוסף שלוש הזמנות של אוכל מאותה מסעדה כדי לשלוח אותו לבתים שונים של לקוחות. באמצעות האפליקציה לצרכנים, אדם 3 יכול לראות איפה ומתי האוכל שלו נאסף ולראות את מסלול הנהג, אבל לא יכול לראות נקודות הורדה של מזון באנשים 1 ו-2.

סטטוס הנסיעה ומחזור החיים שלה

בקטע הזה מתוארים סטטוס הנסיעה וההשפעה שלו על הרכב ותרחישים שונים שבהם אתם נתקלים במהלך ההקצאה והניהול של נסיעות על פי דרישה.

לרוב, הטיול מתקדם בכל המדינות, משלב היצירה ועד להשלמתו. באופן כללי, נסיעה יכולה להיות פעילה או לא פעילה, בהתאם לסטטוס שלה. סטטוס הנסיעה משפיע על מגוון תרחישים לדוגמה ב-Fleet Engine, וגם על היכולת לזהות את ההתקדמות ברכב לאורך הנסיעה. בשאר התרחישים במסמך הזה נפרט על התרחישים האלה.

בטבלה הבאה מפורטים סטטוס הנסיעות לפי סוגים פעילים ולא פעילים.

סטטוסים פעילים של נסיעות סטטוסים של נסיעות לא פעילות
NEW
UNKNOWN_TRIP_STATUS
ENROUTE_TO_PICKUP
ARRIVED_AT_PICKUP
ENROUTE_TO_INTERMEDIATE_DESTINATION
ARRIVED_AT_INTERMEDIATE_DESTINATION
ENROUTE_TO_DROPOFF
COMPLETE
CANCELED

סטטוס נסיעה וציוני הדרך שנותרו בכלי רכב

כשמקצים נסיעות נוספות לרכב שכבר מבצע את הנסיעה, חשוב להבין את הקשר בין נקודות הדרך שנותרו ברכב ואיך סטטוס הנסיעה משפיע על שאר נקודות הדרך.

לדוגמה, אפשר להקצות בקשה חדשה לשיתוף נסיעה לרכב שתומך בנסיעות בלעדיות בלבד ונמצא באמצע נסיעה. במקרה כזה, תעצב את הנסיעה כנסיעה לאחור. כשמקצים נסיעה כזו, המערכת צריכה לוודא שנקודות הדרך בנסיעה החדשה מופיעות אחרי נקודות הדרך בנסיעה הנוכחית.

במהלך הנסיעה ברכב, Fleet Engine מסיר נקודת ציון קודמת בנסיעה מרשימת נקודות הדרך שנותרו ברכב רק כשהרכב מדווח שהוא בדרך ליעד הבא או שהוא הסתיים. כלומר, כל אחת מהאפשרויות הבאות:

  • ENROUTE_TO_INTERMEDIATE_DESTINATION
  • ENROUTE_TO_DROPOFF
  • הושלמו

כשסטטוס הנסיעה משתנה ל-COMPLETED, Fleet Engine מסיר את ציון הדרך הסופי של הנסיעה מרשימת ציון הדרך שנותרה ברכב.

לעומת זאת, בדרך כלל שינויים בסטטוסים שמציינים הגעה לנקודת ציון לא משפיעים על רשימת ציוני הדרך שנותרו ברכב:

  • ARRIVED_AT_PICKUP
  • ARRIVED_AT_INTERMEDIATE_DESTINATION
  • ARRIVED_AT_DROPOFF

כדי להמחיש זאת בעזרת דוגמה של נסיעה לפי דרישה: נניח שהנהג אוסף לקוח מהבית שלו, מוביל אותו למקום שבו הוא ממתין להשלמת משימה ולאחר מכן מוביל את הלקוח בחזרה למקום המגורים שלו. בנסיעה הראשונית, היא כוללת שלושה ציוני דרך: PICKUP, INTERMEDIATE ו-DROPOFF. הטבלה הבאה ממחישה את התוצאות של שאילתה לגבי ציוני הדרך שנותרו במצבים שונים בתהליך:

סטטוס הנסיעה ציוני דרך שנותרו
ARRIVED_AT_PICKUP PICKUP
INTERMEDIATE
DROPOFF
ENROUTE_TO_INTERMEDIATE_DESTINATION PICKUP
INTERMEDIATE
DROPOFF
ARRIVED_AT_INTERMEDIATE_DESTINATION PICKUP
INTERMEDIATE
DROPOFF
ENROUTE_TO_DROPOFF PICKUP
INTERMEDIATE
DROPOFF
ARRIVED_AT_DROPOFF PICKUP
INTERMEDIATE
DROPOFF
COMPLETE PICKUP
INTERMEDIATE
DROPOFF

דרישות סטטוס לנסיעות שהוקצו מחדש או בוטלו

לפני שאפשר לבצע אחת מהפעולות הבאות, צריך להגדיר את סטטוס הנסיעה ל-NEW או ל-CANCELED.

  • כשמשנים את הקצאות הרכבים בנסיעה. לדוגמה, אם נהג דוחה נסיעה ברכב אחר והוא צריך להקצות אותה לרכב אחר.
  • כשמוחקים הקצאת רכב לנסיעה. לדוגמה, אם נהג/ת מבטל נסיעה במסלול ורוצים לנקות את הקצאת הרכב, הסטטוס צריך להיות NEW או CANCELED.

תוצאות חיפוש על סמך סטטוס הנסיעה

כשמשתמשים בשירות SearchTrips לרכב מסוים, הוא מחזיר את רשימת הנסיעות הפעילות ב-SearchTripsResponse. הנסיעות הפעילות מופיעות גם בשדה active_trips של הישות Vehicle. פרטים נוספים מופיעים במאמרי העזרה SearchTripsResponse: gRPC או REST.

לכן, כל הנסיעות בסטטוס 'פעיל' מופיעות בשדה active_trips, אבל נסיעות שהושלמו או בוטלו לא יופיעו.

מה השלב הבא