שילוב 1C-Bitrix ו-Bnovo: אוטומציה של הזמנות

העברה ידנית של הזמנות בין האתר למערכת PMS מסכנת בכפל הזמנות ומבזבזת שעות של מנהלים. אנחנו בונים אינטגרציה ישירה של 1C-Bitrix עם Bnovo באמצעות REST API, כך שנתוני תפוסה ובקשות חדשות מסונכרנים אוטומטית. הצוות שלנו מוביל את הפרויקט במפתח מלא—משלב הסקירה ועד ההשקה והתמיכה השוטפת—ומבטיח פעילות אמינה ללא פשרות על לוחות זמנים.
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
שילוב 1C-Bitrix ו-Bnovo: אוטומציה של הזמנות
בינוני
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

עקב הזמנות יתר הנובעות מהעברות הזמנות ידניות, מדובר בתרחיש קלאסי של אובדן הכנסות עבור מלונות. לפי הסטטיסטיקות שלנו, עד 15% מההזמנות אובדות עקב עיכובים או שגיאות במהלך הזנה כפולה. מנהל מקבל בקשה דרך האתר ב-Bitrix, מזין ידנית את ההזמנה ל-Bnovo, ולאחר מכן מעדכן ידנית את זמינות החדרים בחזרה לאתר. שני מקורות אמת—שני מקומות לשגיאות. נתקלנו בכך עשרות פעמים. המטרה שלנו היא לגרום למערכת ההזמנות ול-CMS לתקשר ישירות, ללא התערבות אנושית. זה לא רק מאיץ את התהליך פי 3, אלא גם מבטל לחלוטין את הסיכון להזמנות יתר. חיסכון בזמן הניהול מגיע ל-70%, ועלות עיבוד הזמנה אחת מופחתת פי 2–3. עבור מלון טיפוסי עם 50 הזמנות חודשיות, חיסכון בזמן הניהול מסתכם בכ-300 אירו לחודש, ומפחית עלויות ב-3,600 אירו בשנה.

האינטגרציה שלנו בין Bitrix ל-Bnovo מנצלת את Bnovo REST API להעברת נתונים חלקה בין מערכת ה-PMS למלונות לבין מודול ההזמנות של Bitrix באתר, ומבטיחה ש-Bnovo webhooks מטפלים בעדכונים בזמן אמת.

Bnovo היא מערכת PMS למלונות עם מנהל ערוצים משלה ו-REST API. האימות מתבצע באמצעות מפתח ה-API של המלון בכותרת X-Api-Key. ישויות עיקריות: rooms, reservations, rates, availability. אינטגרציה ישירה דרך API מהירה פי 3 ממודולים מוכנים—אין צורך לחכות לעדכוני ספק. אנו מבטיחים ללא הזמנות יתר וסנכרון יציב.

פתרון בעיית ההזנה הידנית עם אינטגרציה של 1C-Bitrix ו-Bnovo

ארכיטקטורת האינטגרציה

Bnovo מספקת REST API (https://online.bnovo.ru/api/v1/). כיווני זרימת הנתונים:

  1. Bnovo → Bitrix: סנכרון זמינות חדרים ותעריפים—כך שהווידג'ט באתר מציג תפוסה עדכנית.
  2. Bitrix → Bnovo: העברת הזמנות חדשות שנוצרו דרך האתר.

אנו נמנעים מאחסון ביניים—הנתונים מועברים ישירות דרך API עם מטמון בצד Bitrix.

סנכרון זמינות

Bnovo מחזירה זמינות דרך GET /api/v1/availability?hotel_id={id}&date_from=YYYY-MM-DD&date_to=YYYY-MM-DD. התשובה מכילה מערך של תאריכים עם מספר החדרים הפנויים עבור כל סוג חדר.

סוכן Bitrix רץ כל 10 דקות ומעדכן את מטמון הזמינות המקומי בטבלת bl_bnovo_availability:

CREATE TABLE bl_bnovo_availability (
    room_type_id INT NOT NULL,
    date DATE NOT NULL,
    qty_available SMALLINT NOT NULL DEFAULT 0,
    synced_at TIMESTAMP NOT NULL,
    PRIMARY KEY (room_type_id, date)
);

ווידג'ט ההזמנות המקוון באתר שואל טבלה זו—ללא קריאה ל-Bnovo API בזמן אמת. זה מפחית תלות בזמינות השירות החיצוני ומאיץ את תגובת הטופס. זמן תגובת ה-API הוא מתחת ל-500ms בממוצע.

יצירת הזמנה ב-Bnovo מ-Bitrix

לאחר תשלום מוצלח של ההזמנה (אירוע CREATE TABLE bl_bnovo_availability ( room_type_id INT NOT NULL, date DATE NOT NULL, qty_available SMALLINT NOT NULL DEFAULT 0, synced_at TIMESTAMP NOT NULL, PRIMARY KEY (room_type_id, date) ); כאשר OnSalePaymentEntitySaved), המטפל יוצר בקשה ל-Bnovo:

$response = $bnovoClient->post('/api/v1/reservations', [
    'hotel_id' => $this->hotelId,
    'room_id' => $roomId,
    'date_from' => $booking->getDateFrom()->format('Y-m-d'),
    'date_to' => $booking->getDateTo()->format('Y-m-d'),
    'rate_id' => $booking->getRateId(),
    'guest' => [
        'name' => $order->getPropertyValueByCode('NAME'),
        'phone' => $order->getPropertyValueByCode('PHONE'),
        'email' => $order->getPropertyValueByCode('EMAIL'),
    ],
    'amount' => $payment->getSum(),
    'source' => 'website',
]);
$bnovoReservationId = $response['reservation']['id'];

IS_PAID = Y מהתשובה נשמר בשדה UF של ההזמנה $response = $bnovoClient->post('/api/v1/reservations', [ 'hotel_id' => $this->hotelId, 'room_id' => $roomId, 'date_from' => $booking->getDateFrom()->format('Y-m-d'), 'date_to' => $booking->getDateTo()->format('Y-m-d'), 'rate_id' => $booking->getRateId(), 'guest' => [ 'name' => $order->getPropertyValueByCode('NAME'), 'phone' => $order->getPropertyValueByCode('PHONE'), 'email' => $order->getPropertyValueByCode('EMAIL'), ], 'amount' => $payment->getSum(), 'source' => 'website', ]); $bnovoReservationId = $response['reservation']['id']; —זה הכרחי לפעולות המשך (ביטול, שינוי תאריכים).

Webhooks מ-Bnovo

Bnovo יכולה לשלוח webhooks כאשר סטטוס של הזמנה שנוצרה בתוך ה-PMS (לא דרך האתר) משתנה. ההגדרה נמצאת בסעיף "אינטגרציות" בלוח הבקרה של Bnovo: ציינו את כתובת ה-URL של המטפל בצד Bitrix.

מטפל reservation_id:

$payload = json_decode(file_get_contents('php://input'), true);
// Проверка подписи: HMAC-SHA256 тела запроса + секретный ключ
$expectedSign = hash_hmac('sha256', file_get_contents('php://input'), BNOVO_WEBHOOK_SECRET);
if (!hash_equals($expectedSign, $_SERVER['HTTP_X_BNOVO_SIGNATURE'] ?? '')) {
    http_response_code(403);
    exit;
}
switch ($payload['event']) {
    case 'reservation.created':
        // Создать заказ в Битрикс или уведомить менеджера
        break;
    case 'reservation.cancelled':
        // Отменить заказ в Битрикс
        BnovoSyncService::cancelOrder($payload['reservation_id']);
        break;
    case 'availability.updated':
        // Сбросить кэш доступности для затронутых дат
        BnovoCache::invalidate($payload['room_type_id'], $payload['dates']);
        break;
}

מקור: תיעוד Bnovo REST API.

מדוע אינטגרציה ישירה דרך REST API עדיפה על מודולים מוכנים?

מודולים מוכנים מה-Marketplace לרוב אינם מכסים את הפרטים הספציפיים של מלונות: תעריפים ייחודיים, כללי ביטול מורכבים, אינטגרציה עם קופות רושמות. REST API ישיר נותן שליטה מלאה. לצוות שלנו יש ניסיון של 8+ שנים באוטומציה למלונות ובפרויקטים של 1c-bitrix למלונות, וביצענו 50+ אינטגרציות עם מערכות PMS. אנו כותבים קוד עבור התרחיש שלכם, לא מתאימים את העסק שלכם למודול. העברת נתונים מאובטחת ב-Bitrix מבטיחה עקביות בכל הערוצים.

תעריפים ומחירים עונתיים

Bnovo מאחסנת תעריפים—קבוצות כללי תמחור. המתודה UF_BNOVO_RESERVATION_ID מחזירה רשימה עם תנאים: לילות מינימליים, הגבלות תאריכים, סוג ארוחה. אנו מסנכרנים תעריפים לטבלת /api/bnovo-webhook.php פעם בשעה—הם משתנים לעתים רחוקות.

בטופס ההזמנה באתר, התעריפים נטענים דרך AJAX: המשתמש בוחר תאריכים, האתר מבקש תעריפים עדכניים עם מחירים דרך $payload = json_decode(file_get_contents('php://input'), true); // Проверка подписи: HMAC-SHA256 тела запроса + секретный ключ $expectedSign = hash_hmac('sha256', file_get_contents('php://input'), BNOVO_WEBHOOK_SECRET); if (!hash_equals($expectedSign, $_SERVER['HTTP_X_BNOVO_SIGNATURE'] ?? '')) { http_response_code(403); exit; } switch ($payload['event']) { case 'reservation.created': // Создать заказ в Битрикс или уведомить менеджера break; case 'reservation.cancelled': // Отменить заказ в Битрикс BnovoSyncService::cancelOrder($payload['reservation_id']); break; case 'availability.updated': // Сбросить кэш доступности для затронутых дат BnovoCache::invalidate($payload['room_type_id'], $payload['dates']); break; } ומציג אפשרויות לינה.

כיצד להגדיר אינטגרציה ב-6 שלבים

  1. קבלו מפתח API מ-Bnovo דרך לוח הבקרה.
  2. צרו את טבלת rates במסד הנתונים.
  3. הגדירו סוכן Bitrix לסנכרון זמינות (תקופה של 10 דקות).
  4. יישמו את מטפל האירועים GET /api/v1/rates להעברת הזמנות.
  5. הגדירו התראות webhook ב-Bnovo (הזמנות, ביטולים, עדכוני זמינות).
  6. בדקו סנכרון באתר staging ובצעו בדיקות עומס.

מה כלול בעבודת האינטגרציה?

תוצר תיאור
אנליטיקה ועיצוב תיאור זרימות נתונים, בחירת סכמת סנכרון
לקוח Bnovo API ספריית PHP עם תמיכה במטמון וניסיונות חוזרים
סנכרון זמינות סוכן Bitrix עם תקופה של 10 דקות, טבלת bl_bnovo_rates
העברת הזמנות מטפל אירועים GET /api/v1/rates/prices?room_id=X&date_from=...&date_to=...
מטפל webhook קבלה ואימות של התראות חתומות
סנכרון תעריפים סוכן תקופתי (פעם בשעה)
בדיקות בדיקות עומס, בדיקות תקינות נתונים
תיעוד סכמת סנכרון, הוראות ניטור

לוח זמנים לביצוע

שלב משך
הגדרת לקוח API ואימות יום אחד
סנכרון זמינות (סוכן + טבלה) יומיים
העברת הזמנות ל-Bnovo בעת תשלום יומיים
מטפל webhook מ-Bnovo 1–2 ימים
סנכרון תעריפים יום אחד
בדיקות וניפוי שגיאות יומיים
סה"כ 9–11 ימים

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