RazGazRazGaz
עבריתEN

מסמך אינטגרציה למערכות קופה

RazGazממשק קליטת הזמנות

החוזה המלא לשליחת הזמנות משלוח ממערכת קופה אל RazGaz. קריאה אחת — אין דבר נוסף לממש.

גרסה 1.0 · 18.08.2026POSTapi.raz-gaz.com/ingestOrder
תוכן העניינים

1סקירה

מערכת הקופה שולחת ל‑RazGaz בקשת HTTP אחת לכל הזמנת משלוח. RazGaz מחשבת את מחיר המשלוח, משדרת אותו לשליחים באזור, ומנהלת את השליח משלב השיוך ועד מסירת ההזמנה ללקוח.

כתובת בסיסhttps://api.raz-gaz.com
הקריאההוספת הזמנה — POST /ingestOrder
תעבורהHTTPS בלבד. POST, ‏Content-Type: application/json, ‏UTF-8
הזדהותמפתח API לכל קופה
Idempotencyלפי מזהה ההזמנה שלכם

באינטגרציה הזו אין ערוץ חוזר לסטטוס. ‏RazGaz אינה קוראת חזרה למערכת הקופה, ואין נקודת קצה לתשאול (polling) על מצב המשלוח או על פרטי השליח. אם מערכת הקופה זקוקה לסטטוס המשלוח — יש לומר זאת לפני האינטגרציה: זה חוזה נפרד, לא פרמטר של זה.


2מה RazGaz מנפיקה לכם

שני דברים, שניהם מ‑RazGaz, לפני ההזמנה הראשונה:

מה זההיקף
מפתח APIמחרוזת סודית בפורמט rg_live_ ואחריה 48 תווים הקסדצימלייםמפתח אחד לכל התקנת קופה, לכל מספר של מסעדות שהיא שולחת בעבורן
קוד מסעדההקוד שמזהה סניף אחד בבקשות שלכם, נשלח בשדה externalIdקוד אחד לכל סניף. זה המזהה שלכם לסניף — ‏RazGaz רושמת אותו אצלה מול הסניף, כך שאין צורך לאמץ את המזהים שלנו

מפתח ה‑API מוצג פעם אחת בלבד, ברגע היצירה, ולא ניתן לשחזור לאחר מכן. יש לשמור אותו כסוד. כל מפתח ניתן לביטול על ידי RazGaz בכל עת, ומאותו רגע כל בקשה שמציגה אותו נדחית ב‑401.


3הזדהות

יש להציג את המפתח בכל בקשה, באחת משתי הדרכים:

שיטההיכן
כותרת (מועדף)x-api-key: <key>
פרמטר בשאילתה?apiKey=<key>

אם שניהם נשלחו, נעשה שימוש בכותרת. בקשה בלי מפתח, עם מפתח לא מוכר או עם מפתח מבוטל נענית ב‑401 ודבר אינו נרשם — לא נוצרת הזמנה, ו‑RazGaz אינה מקבלת התראה פנימית. ‏401 בסביבת ייצור פירושו שהאינטגרציה אינה מספקת דבר בשקט, ולכן יש להתייחס אליו ככשל מוחלט ולהסלים אותו, לא לחזור על הבקשה בלי סוף.


4הקריאה: הוספת הזמנה

POST /ingestOrder

4.1בקשה — שדות חובה

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

שדהטיפוסתיאור
orderIdמחרוזתהמזהה שלכם להזמנה. הופך לזהות ההזמנה בצד RazGaz והוא מפתח ה‑idempotency — ראו §6. חייב להיות ייחודי בכל ההזמנות שהתקנת הקופה הזו שולחת, ויציב בין ניסיונות שליחה חוזרים של אותה הזמנה
externalIdמחרוזתקוד המסעדה ש‑RazGaz הנפיקה לכם (§2), המזהה מאיזה סניף אוספים את ההזמנה
pickupLocationאובייקטנקודת האיסוף של השליח. ‏{ "latitude": number, "longitude": number }
deliveryLocationאובייקטנקודת המסירה. ‏{ "latitude": number, "longitude": number }

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

4.2בקשה — שדות אופציונליים

שדהטיפוסתיאור
estimatedReadyMinutesמספר שלםדקות מעכשיו ועד שהאוכל יהיה מוכן. דקות שלמות, גדול מ‑0 ולא יותר מ‑240. יש לשלוח בכל מקרה שבו הקופה יודעת את הזמן — ראו §7
deliveryAddressמחרוזתכתובת המסירה בשורה אחת קריאה. אינה משמשת לניווט — הקואורדינטות משמשות לכך — אבל זה מה שהשליח קורא, ולכן כאן המקום לפרטי הכניסה: קומה, דירה, כניסה
pickupAddressמחרוזתכתובת הסניף בשורה אחת קריאה
customerNameמחרוזתשם הלקוח, כפי שהשליח צריך לבקש אותו
customerPhoneמחרוזתמספר שניתן להתקשר אליו. השליח מתקשר בהגעה
notesמחרוזתטקסט חופשי שמוצג לשליח. הוראות מסירה, קוד שער, "להשאיר בדלת"
itemsמערךפריטי ההזמנה. כל פריט חייב להיות { "name": string, "qty": number }; ‏RazGaz שומרת את המערך כפי שנשלח וכל המסכים קוראים בדיוק את שני המפתחות האלה, כך שפריט שקורא לכמות שלו בשם אחר מ‑qty יוצג ריק. ניתן להשמיט את השדה כולו — שליחים אינם זקוקים לפירוט הפריטים כדי למסור
orderAmountמספרהסכום שהלקוח משלם על ההזמנה, בשקלים
paymentMethodמחרוזת"cash" כאשר על השליח לגבות תשלום מהלקוח. כל ערך אחר, וכן היעדר השדה, נרשמים כ‑"card" — כלומר השליח אינו גובה דבר
placedAtמספר | מחרוזתמתי הלקוח ביצע את ההזמנה: אלפיות שנייה מ‑epoch, או חותמת זמן בפורמט ISO-8601. אם השדה חסר או לא ניתן לפענוח, נרשם זמן הבקשה

4.3שדות שמורים — אין לשלוח

נקודת הקצה מקבלת עוד כמה שדות ששייכים לתפעול הפנימי של RazGaz. שליחתם ממערכת קופה אינה נתמכת: הם משנים את שכר השליח ואת אופן השידור של המשלוח, ו‑RazGaz אינה מאמתת אותם מול המשלוח עצמו.

estimatedPayout, broadcastRadius, platformOrderRef, regionId, restaurantId.

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

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

4.4תשובה

HTTPמשמעות
201ההזמנה נוצרה
200הזמנה עם אותו orderId כבר הייתה קיימת ועודכנה — ראו §6

שניהם מחזירים את אותו גוף תשובה:

שדהטיפוסתיאור
successבוליאניtrue
orderIdמחרוזתה‑orderId שנשלח, בהחזרה
createdבוליאניtrue ב‑201, ‏false ב‑200

כל 2xx הוא קבלה. ‏created: false היא תשובה תקינה ומוצלחת, לא שגיאת כפילות.

4.5שגיאות

HTTPגוףסיבהמה לעשות
400{ "error": "<reason>" }חסר שדה חובה מ‑§4.1; קואורדינטה שאינה מספר; ‏estimatedReadyMinutes שאינו מספר חיובי, או גדול מ‑240לתקן את המבנה. שליחה חוזרת ללא שינוי לא תצליח. ‏RazGaz מקבלת התראה פנימית על כל 400
401{ "error": "Invalid API key" }אין מפתח, מפתח לא מוכר, או מפתח מבוטללעצור ולהסלים. אין התראה פנימית, כך ש‑RazGaz לא תבחין בזה במקומכם
405{ "error": "<reason>" }הבקשה לא הייתה POSTלתקן את המתודה
500{ "error": "<reason>" }תקלה בצד RazGazלשלוח שוב. ‏RazGaz מקבלת התראה פנימית על כל 500

פסק זמן (timeout) ללא תשובה אינו נבדל מ‑500 ויש לטפל בו באותו אופן: שליחה חוזרת. שליחה חוזרת בטוחה תמיד — ראו §6.


5זיהוי המסעדה

יש לשלוח externalId בכל הזמנה. ‏RazGaz מחזיקה את הקוד שלכם לכל סניף מול אותו סניף, בהצמדה למפתח ה‑API שלכם, ולכן:

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

אם מפתח ה‑API מתחלף אי פעם, יש לרשום מחדש את קודי הסניפים מול המפתח החדש לפני שמתחילים להשתמש בו. יש לתאם החלפת מפתח עם RazGaz ולא להחליף באופן חד‑צדדי.


6Idempotency ושליחות חוזרות

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

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

מכאן, מבחינת מערכת הקופה:

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

ביטול אינו חלק מהאינטגרציה הזו. לביטול הזמנה שכבר נשלחה — יש לפנות ל‑RazGaz.


7זמן הכנה

estimatedReadyMinutes אומר ל‑RazGaz מתי האוכל יהיה מוכן, והוא השדה האופציונלי המועיל ביותר: הוא מה שמאפשר לתזמן את הגעת השליח למטבח במקום לשלוח אותו לעמוד בדלפק.

בהיעדרו, RazGaz נסמכת על מה שהיא יודעת על הסניף:

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

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


8לפני עלייה לאוויר

  1. ‏RazGaz הנפיקה את מפתח ה‑API וקוד מסעדה אחד לכל סניף.
  2. הקואורדינטות של כל סניף נכונות במערכת הקופה, וכל הזמנה נושאת אותן כמספרים.
  3. נשלחה הזמנה אמיתית אחת מכל סניף, ואומת — מול RazGaz — שהיא הגיעה משויכת למסעדה הנכונה. ‏§5 מסביר מדוע תשובת ה‑HTTP לבדה אינה מאמתת זאת.
  4. estimatedReadyMinutes נשלח, אם מערכת הקופה מסוגלת להפיק אותו.
  5. מיושמות שליחות חוזרות על 500 ועל timeout; ‏400 ו‑401 אינם נשלחים שוב באופן עיוור אלא מוצגים למי שיכול לטפל בהם.