بناء محرك حجز مطاعم مخصص بدون رسوم OpenTable
محرك حجز مطعم مخصص بدون رسوم OpenTable
لقد شاهدت أصحاب المطاعم يحسبون الأرقام على فواتير OpenTable الخاصة بهم ويتألمون جسديًا. بار مشغول يقدم 1000 وجبة شهريًا يخسر 18000 دولار+ سنويًا فقط حتى يتمكن الضيوف من النقر على زر "احجز". هذا راتب طاهي خط. هذا تجديد الفناء. هذه أموال تخرج من الباب كل شهر واحد إلى منصة تستخدم أيضًا بيانات عملائك لتسويق مطاعم أخرى لـ ضيوفك.
والخبر السار؟ بناء محرك حجز مخصص لم يعد المشروع الضخم الذي كان قبل خمس سنوات. تعني أطر العمل الويب الحديثة وقواعد البيانات المستضافة وحفنة من التكاملات الذكية أنه يمكنك الحصول على نظام حجز جاهز للإنتاج يعمل على نطاقك الخاص مقابل جزء بسيط مما تدفعه لـ OpenTable سنويًا. لقد ساعدت في بناء عدة منها لعملاء المطاعم والحانات، وسأرشدك بالضبط إلى كيفية عمل ذلك.

جدول المحتويات
- التكلفة الحقيقية لـ OpenTable في 2025
- البدائل الجاهزة التي تستحق النظر أولاً
- متى يكون البناء المخصص منطقيًا
- معمارية محرك حجز المطعم
- بناء أداة الواجهة الأمامية
- الخادم الخلفي: محرك التوفر وحل التضاربات
- إدارة الطاولات وخطط الأرضية
- الإخطارات والتذكيرات وتقليل عدم الحضور
- الودائع والسياسات الضريبية
- تكامل Google Reserve
- النشر والاستضافة والتكاليف الجارية
- مقارنة التكاليف الحقيقية: مخصص مقابل OpenTable مقابل البدائل
- الأسئلة الشائعة
التكلفة الحقيقية لـ OpenTable في 2025
دعنا نضع أرقامًا فعلية على الطاولة (التورية مقصودة). يعمل تسعير OpenTable في 2025 على النحو التالي:
- رسوم الإعداد: 1200 دولار+
- الاشتراك الشهري: 249 دولار/شهر
- رسوم لكل وجبة: 1.00 دولار للحجوزات التي تم إجراؤها من خلال موقعك الخاص، 2.50 دولار للحجوزات التي تم إجراؤها من خلال شبكة OpenTable
- التكلفة السنوية للمطعم بمتوسط 1000 وجبة/شهر: تقريبًا 15000-18000 دولار/سنة
نموذج الرسوم لكل وجبة هو القاتل. كلما كنت أكثر انشغالاً، كلما دفعت أكثر. إنها ضريبة على نجاحك الخاص. وإليك الجزء الذي يؤلم حقًا: OpenTable تمتلك بيانات العلاقة مع العملاء. سيستخدمون سجل تناول الطعام لضيوفك لاقتراح منافسين. أنت في الأساس تدفع وسيطًا لبناء قاعدة بيانات يستخدمونها ضدك.
بالنسبة لبار أو مطعم موقع واحد، فإن 18 ألف دولار/سنة أمر قاسٍ. لمجموعة متعددة المواقع؟ اضرب وفقًا لذلك.
البدائل الجاهزة التي تستحق النظر أولاً
قبل أن تلتزم ببناء مخصص، كن صادقًا حول ما إذا كانت منصة موجودة تحل مشكلتك. تحول السوق بشكل كبير نحو نماذج الرسوم الثابتة والمجانية. إليك ما يبدو عليه المشهد في 2025:
| المنصة | الطبقة المجانية | التسعير المدفوع | رسوم لكل وجبة | تكامل Google | القيد الرئيسي |
|---|---|---|---|---|---|
| Resos | 25 حجز/شهر | 24 دولار/شهر (ثابت) | لا شيء | نعم | الطبقة المجانية صغيرة جدًا |
| GloriaFood | حجوزات غير محدودة | مجاني أساسي + إضافات | لا شيء | محدود | تخصيص بسيط |
| Tablesit | 500 حجز/شهر | غير منشور | لا شيء | نعم | بدون SMS على الطبقة المجانية |
| Anolla | ميزات أساسية | إضافات معيارية | لا شيء | نعم | الطبقة المجانية تفتقد الوحدات الرئيسية |
| Sagenda | مجاني تماما | N/A | لا شيء | لا | لا توجد إدارة طاولة حقيقية |
| Tableo | 100 وجبة | ~75 دولار/شهر | لا شيء | نعم (Reserve) | ميزات مجانية محدودة |
| Tablein | N/A | شهري ثابت | لا شيء | نعم | موجه للأماكن الأصغر |
| Eveve | N/A | 150-300 دولار/شهر | لا شيء | نعم | يختلف السعر حسب الموقع |
إذا كنت بارًا صغيرًا تقدم أقل من 500 حجز شهريًا، فإن Tablesit أو Resos قد يكونان بالفعل كل ما تحتاجه. GloriaFood قوية إذا كنت تريد أيضًا طلب الطعام عبر الإنترنت مدمجًا. أصبحت هذه الأدوات جيدة بشكل مفاجئ.
لكنهم يشتركون جميعًا في قيود مشتركة: أنت لا تزال على منصة شخص آخر، وخيارات التخصيص محدودة، ولا يمكنك الاندماج بعمق مع مكدس التكنولوجيا الحالي لديك، ولا تمتلك البنية الأساسية. بالنسبة للعديد من المطاعم، هذا على ما يرام. بالنسبة للآخرين، فهو ليس كذلك.

متى يكون البناء المخصص منطقيًا
يكون نظام الحجز المخصص منطقيًا عندما:
- أنت مجموعة متعددة المواقع وتحتاج إلى إدارة مركزية مع منطق خاص بالموقع
- لديك موقع ويب موجود مبني على مكدس حديث (Next.js، Astro، إلخ) وتريد أن تشعر تجربة الحجز بأنها أصلية، وليست مثل iframe مضمن من 2014
- تحتاج إلى منطق أعمال مخصص -- قواعد حجز مختلفة للبار مقابل غرفة الطعام، توفر مبنية على الأحداث، القوائم الموسمية المرتبطة بفتحات الحجز
- تريد امتلاك بيانات الضيوف بالكامل، بدون وصول جهة خارجية إلى قاعدة بيانات عملائك
- أنت تنفق 10000+ دولار/سنة على OpenTable ويؤتي البناء المخصص ثماره في 12-18 شهرًا
- تريد التكامل مع أدوات POS أو CRM أو التسويق الحالية التي لا تدعمها المنصات الجاهزة
إذا كانت ثلاثة أو أكثر من تلك تنطبق، استمر في القراءة. نبني هذه الأنواع من الأنظمة بانتظام كجزء من عملنا في تطوير CMS بدون رأس، وحديث العائد على الاستثمار دائمًا مباشر.
معمارية محرك حجز المطعم
إليك معمارية عالية المستوى التي أوصي بها لمحرك حجز مخصص حديث:
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Frontend Widget │────▶│ API Layer │────▶│ Database │
│ (React/Astro) │ │ (Node/Express) │ │ (PostgreSQL) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │ │
│ ├──▶ Twilio (SMS) │
│ ├──▶ SendGrid (Email) │
│ ├──▶ Stripe (Deposits) │
│ ├──▶ Google Calendar │
│ └──▶ POS Integration │
│ │
┌─────────────────┐ ┌─────────────────┐
│ Admin Dashboard │──────────────────────────────▶│ Same API/DB │
│ (Staff portal) │ │ │
└─────────────────┘ └─────────────────┘
أداة الواجهة الأمامية تعيش على موقع المطعم الخاص بك. يتعامل واجهة برمجة التطبيقات مع جميع المنطق التجاري -- فحوصات التوفر وحل التضارب وتحفيز الإخطارات. PostgreSQL يخزن كل شيء: الحجوزات وخطط الأرضية وملفات العملاء والتفضيلات. تعالج الخدمات الخارجية الأشياء التي لا تريد بناءها من الصفر.
بناء أداة الواجهة الأمامية
أداة الحجز هي ما يتفاعل معه ضيوفك. يجب أن تكون سريعة ومحسنة للهاتف المحمول (أكثر من 70٪ من حجوزات المطاعم تتم على الهواتف) وبسيطة جدًا.
إليك مكون React مبسط لنموذج الحجز الأساسي:
import { useState } from 'react';
export function BookingWidget({ restaurantId }: { restaurantId: string }) {
const [date, setDate] = useState('');
const [time, setTime] = useState('');
const [partySize, setPartySize] = useState(2);
const [availableSlots, setAvailableSlots] = useState([]);
async function checkAvailability() {
const res = await fetch(`/api/availability`, {
method: 'POST',
body: JSON.stringify({ restaurantId, date, partySize }),
});
const data = await res.json();
setAvailableSlots(data.slots);
}
async function confirmBooking() {
const res = await fetch(`/api/reservations`, {
method: 'POST',
body: JSON.stringify({
restaurantId, date, time, partySize,
// guest details collected in a previous step
}),
});
// Handle confirmation, redirect to success page
}
return (
<div className="booking-widget">
<input type="date" onChange={(e) => setDate(e.target.value)} />
<select onChange={(e) => setPartySize(Number(e.target.value))}>
{[1,2,3,4,5,6,7,8].map(n => (
<option key={n} value={n}>{n} {n === 1 ? 'guest' : 'guests'}</option>
))}
</select>
<button onClick={checkAvailability}>Check Availability</button>
{availableSlots.map(slot => (
<button key={slot.time} onClick={() => { setTime(slot.time); confirmBooking(); }}>
{slot.time}
</button>
))}
</div>
);
}
هذا مبسط بوضوح -- ستريد تحقق صحة النموذج المناسب وحالات التحميل ومعالجة الأخطاء وتدفق متعدد الخطوات يجمع اسم الضيف والبريد الإلكتروني والهاتف والطلبات الخاصة. لكن التفاعل الأساسي واضح: اختر تاريخًا واختر حجم الحفلة واطلع على الأوقات المتاحة واحجز واحدة.
بالنسبة للمطاعم التي تعمل على Next.js (التي نبنيها على نطاق واسع -- انظر قدرات تطويرنا Next.js)، تصبح الأداة مكون خادم يمكنه جلب بيانات التوفر مسبقًا. بالنسبة للمواقع الثابتة المبنية بـ Astro، ستستخدم جزيرة جانب العميل للنموذج التفاعلي للحجز مع الاحتفاظ ببقية الصفحة التي تم إنشاؤها بشكل ثابت للحصول على أقصى أداء.
الخادم الخلفي: محرك التوفر وحل التضاربات
هنا حيث تعيش التعقيد الحقيقي. يحتاج محرك التوفر إلى الإجابة على سؤال واحد بسرعة ودقة: "بالنظر إلى هذا التاريخ والوقت وحجم الحفلة، أي الطاولات متاحة؟"
إليك مخطط قاعدة البيانات الأساسي:
CREATE TABLE tables (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
restaurant_id UUID REFERENCES restaurants(id),
label VARCHAR(50), -- "Table 1", "Bar Seat 3"
zone VARCHAR(50), -- "patio", "bar", "main_dining"
min_capacity INT NOT NULL,
max_capacity INT NOT NULL,
is_active BOOLEAN DEFAULT true,
position_x FLOAT, -- for floor plan rendering
position_y FLOAT
);
CREATE TABLE reservations (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
restaurant_id UUID REFERENCES restaurants(id),
table_id UUID REFERENCES tables(id),
guest_name VARCHAR(255) NOT NULL,
guest_email VARCHAR(255),
guest_phone VARCHAR(50),
party_size INT NOT NULL,
date DATE NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL, -- calculated from dining duration
status VARCHAR(20) DEFAULT 'confirmed', -- confirmed, seated, completed, cancelled, no_show
notes TEXT,
deposit_amount DECIMAL(10,2) DEFAULT 0,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE booking_rules (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
restaurant_id UUID REFERENCES restaurants(id),
zone VARCHAR(50),
day_of_week INT, -- 0=Sunday, 6=Saturday
first_slot TIME,
last_slot TIME,
slot_interval_minutes INT DEFAULT 15,
dining_duration_minutes INT DEFAULT 90,
buffer_minutes INT DEFAULT 15,
max_covers_per_slot INT
);
يحتاج استعلام فحص التوفر إلى العثور على الجداول التي:
- تناسب حجم الحفلة
- لا تحتوي على حجوزات بالفعل خلال نافذة الوقت المطلوب (بما في ذلك المخزن المؤقت)
- في منطقة نشطة في ذلك اليوم/الوقت
SELECT t.id, t.label, t.zone
FROM tables t
WHERE t.restaurant_id = $1
AND t.is_active = true
AND t.min_capacity <= $2 -- party size
AND t.max_capacity >= $2
AND t.id NOT IN (
SELECT r.table_id FROM reservations r
WHERE r.date = $3
AND r.status NOT IN ('cancelled', 'no_show')
AND r.start_time < ($4::TIME + ($5 || ' minutes')::INTERVAL) -- requested end
AND r.end_time > ($4::TIME - ($6 || ' minutes')::INTERVAL) -- buffer before
)
ORDER BY t.max_capacity ASC; -- prefer smallest suitable table
آخر ORDER BY مهم -- تريد دائمًا تعيين أصغر طاولة تناسب الحفلة. جلوس زوجين على طاولة بـ 6 مقاعد خلال خدمة العشاء يوم الجمعة هو طريقة رائعة لخسارة الأموال.
الوقت المخزن مؤقتًا بين الحجوزات حرج. عادة ما أوصي بـ 15 دقيقة للأماكن غير الرسمية و 30 دقيقة للمطاعم الراقية. يأخذ في الاعتبار إزالة الطاولة وإعادة تعيينها والحفلة التي لا مفر منها التي تتوقف عند الحلوى.
إدارة الطاولات وخطط الأرضية
يجب أن يرى الموظفون الأرضية في لمحة. يجب أن يعرض لوحة معلومات المسؤول خريطة أرضية تفاعلية باستخدام SVG أو HTML Canvas. كل طاولة عبارة عن عنصر قابل للسحب موضع على صورة خلفية لخطة الأرضية الفعلية.
بالنسبة لواجهة الإدارة، عادة ما أبني هذا كتطبيق Next.js منفصل (أو مسار محمي ضمن الموقع الرئيسي) مع وصول قائم على الأدوار. يرى المضيف حجوزات الليلة ويمكنه السحب والإفلات لإعادة تعيين الطاولات. يرى المدير التحليلات والتكوين.
تخزين مواضع الطاولة كأعداد عشرية position_x و position_y في قاعدة البيانات يعني أن خطة الأرضية قابلة للتخصيص بالكامل. استورد صورة لتخطيط مطعمك الفعلي، ضع الطاولات فوقها، وستحصل على أداة إدارة بصرية تعكس مساحتك المادية.
الإخطارات والتذكيرات وتقليل عدم الحضور
الإخطارات الآلية ليست اختيارية -- إنها كيفية تقليل عدم الحضور بمقدار 20-30٪. إليك تدفق الإخطارات:
- تأكيد فوري -- بريد إلكتروني + SMS فور إجراء الحجز
- تذكير 24 ساعة -- SMS يطلب من الضيف تأكيد أو إلغاء
- تذكير قبل ساعتين -- اختياري، يعمل بشكل جيد لخدمة العشاء
- المتابعة بعد الزيارة -- بريد إلكتروني يشكرهم ويطلب مراجعة ويدعوهم للعودة
Twilio يتعامل مع SMS بسعر تقريبي 0.0079 دولار لكل رسالة في الولايات المتحدة. تغطي الطبقة المجانية من SendGrid 100 بريد إلكتروني/يوم، وهي كافية لمعظم المطاعم الموقع الواحد. حتى في الحجم الكبير، تبحث عن 20-50 دولار/شهر لكلا الخدمتين مجتمعة.
إليك نمط وظيفة cron بسيط لنظام التذكيرات:
// Run every hour via cron
async function sendReminders() {
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
const upcomingReservations = await db.query(
`SELECT r.*, g.phone, g.email
FROM reservations r
WHERE r.date = $1
AND r.status = 'confirmed'
AND r.reminder_sent = false`,
[tomorrow.toISOString().split('T')[0]]
);
for (const res of upcomingReservations.rows) {
await twilioClient.messages.create({
body: `Reminder: Your reservation at ${RESTAURANT_NAME} tomorrow at ${res.start_time} for ${res.party_size}. Reply C to confirm or X to cancel.`,
to: res.phone,
from: TWILIO_NUMBER,
});
await db.query(
'UPDATE reservations SET reminder_sent = true WHERE id = $1',
[res.id]
);
}
}
الودائع والسياسات الضريبية
بالنسبة للفتحات المطلوبة بشدة (عشاء يوم الجمعة/السبت والإفطار والعطلات الرسمية)، يقلل جمع وديعة في وقت الحجز من عدم الحضور بشكل كبير. Stripe يجعل هذا تافهًا.
هياكل الودائع النموذجية التي رأيتها تعمل بشكل جيد:
- 10-25 دولار لكل شخص لحجوزات العشاء القياسية
- الدفع الكامل للأحداث الخاصة والقوائم المتذوقة أو prix fixe
- بدون وديعة للفتحات خارج أوقات الذروة (تريد احتكاكًا صفريًا لغداء يوم الثلاثاء)
تُطبق الوديعة على الفاتورة أو تُصادر إذا لم يحضر الضيف أو ألغى ضمن نافذة (عادة 24-48 ساعة). API payment intents من Stripe يتعامل مع تدفق الانتظار والالتقاط بنظافة.
تكامل Google Reserve
إليك ميزة يفقدها معظم البناء المخصص، وهي مسألة كبيرة. يتيح Google Reserve للضيوف الحجز مباشرة من بحث Google وخرائط Google. عندما يبحث شخص ما عن "مطعم إيطالي بالقرب مني" ويرى قائمتك، يمكنه الحجز دون أن يزور موقعك الإلكتروني أبدًا.
يتطلب التكامل مع Google Reserve أن تصبح شريكًا معتمدًا للحجز أو تستخدم منصة معتمدة بالفعل (Resos و Tableo والآخرون يمتلكون هذا). بالنسبة للبناء المخصص بالكامل، ستحتاج إلى تطبيق مواصفات API Google Reserve، والتي تتضمن عرض بيانات التوفر الخاصة بك بصيغة محددة يمكن لأنظمة Google استهلاكها.
هذا هو أحد المجالات حيث قرار البناء مقابل الشراء يصبح حقيقيًا. إذا كان حركة مرور Google Reserve مهمة لمطعمك (وبالنسبة لمعظم المطاعم الحضرية، فهي بالفعل)، فقد يكون الشراكة مع منصة لديها بالفعل هذا التكامل أكثر منطقية من بناءها بنفسك. لا تزال بإمكانك بناء أداة مخصصة لموقعك الخاص بينما تستخدم Resos أو ما شابه ذلك خصيصًا لقناة Google.
النشر والاستضافة والتكاليف الجارية
بالنسبة لمحرك حجز قائم على Next.js، Vercel هو خيار الاستضافة الواضح -- تتعامل الطبقة المجانية مع معظم حركة المطعم الموقع الواحد بسهولة. بالنسبة لقاعدة البيانات، تقدم Supabase أو Neon.tech طبقات PostgreSQL مجانية سخية. مع التوسع أو الحاجة إلى موثوقية أعلى، تبحث عن:
- Vercel Pro: 20 دولار/شهر
- Supabase Pro: 25 دولار/شهر
- Twilio SMS: ~20-40 دولار/شهر (حسب الحجم)
- SendGrid: مجاني لمعظم الأحجام
- Stripe: 2.9% + 0.30 دولار لكل معاملة إيداع (لا رسم شهري)
- النطاق/SSL: لديك هذا بالفعل
إجمالي تكلفة الاستضافة الشهرية: 65-85 دولار/شهر. قارن ذلك برسوم OpenTable البالغة 249 دولار/شهر قبل رسوم لكل وجبة.
مقارنة التكاليف الحقيقية: مخصص مقابل OpenTable مقابل البدائل
دعنا نشغل الأرقام لمطعم يقدم 1000 وجبة شهريًا:
| الحل | تكلفة السنة الأولى | تكلفة السنة الثانية | إجمالي 3 سنوات | هل تمتلك البيانات؟ |
|---|---|---|---|---|
| OpenTable | 18000 دولار+ (الإعداد + الشهري + لكل وجبة) | 15000 دولار+ | 48000 دولار+ | لا |
| Resos Paid | 288 دولار | 288 دولار | 864 دولار | جزئيًا |
| Tableo Paid | ~900 دولار | ~900 دولار | 2700 دولار | جزئيًا |
| Custom Build | 8000-20000 دولار (تطوير) + 800 دولار (استضافة) | 800 دولار (استضافة) | 9600-21600 دولار | نعم، 100٪ |
| Tablesit Free | 0 دولار | 0 دولار | 0 دولار | جزئيًا |
بناء مخصص بالطرف الأعلى (تكلفة تطوير 20 ألف دولار) يحقق التعادل مقابل OpenTable في 13-16 شهرًا. بالطرف السفلي (8000 دولار)، أنت حتى بحلول الشهر السادس. بعد ذلك، الادخار النقي -- 15000+ دولار في السنة يبقى في عملك.
تختلف تكلفة التطوير بناءً على التعقيد. يجلس أداة حجز أساسية مع تأكيدات البريد الإلكتروني ولوحة إدارة بسيطة في الطرف السفلي. يدفع نظام مميز تمام الميزات مع إدارة خطة الأرضية وجمع الودائع وتكامل POS ودعم متعدد المواقع والتحليلات نحو الطرف الأعلى.
إذا كنت فضولاً بشأن تكلفة البناء المخصص لحالتك المحددة، فإن صفحة التسعير لدينا لديها نقطة انطلاق، أو يمكنك الاتصال مباشرة وسنحدد النطاق بشكل صحيح.
الأسئلة الشائعة
كم من الوقت يستغرق بناء نظام حجز مطعم مخصص؟ بالنسبة لمنتج قابل للحياة الأساسي -- أداة حجز ورسائل تأكيد بريد إلكتروني ولوحة إدارة أساسية -- توقع 4-6 أسابيع من وقت التطوير. يستغرق النظام المميز تمامًا مع إدارة خطة الأرضية وتذكيرات SMS وجمع الودائع وتكامل POS عادةً 8-12 أسبوعًا. شحنا MVP في أقل من 3 أسابيع عندما يكون النطاق ضيقًا والمطعم يعرف بالضبط ما يحتاج.
هل يمكنني ترحيل بيانات حجز OpenTable الموجودة إلى نظام مخصص؟ نعم، لكنها تتطلب بعض العمل. يتيح لك OpenTable تصدير بيانات الضيوف (الاسم والبريد الإلكتروني والهاتف وسجل الزيارات) كملفات CSV. ستريد استيراد هذا في النظام الجديد قبل التوصل مباشرة حتى لا تفقد سجل الضيوف. بعض المنصات البديلة مثل Tablesit و Resos تدعم أيضًا استيراد البيانات. الشيء الحرج هو أن تفعل هذا قبل أن تلغي OpenTable، وليس بعد.
هل سأفقد الحجوزات من Google إذا غادرت OpenTable؟ ليس بالضرورة. يعمل Google Reserve مع شركاء حجز متعددين، وليس فقط OpenTable. تحتوي منصات مثل Resos و Tableo على تكامل Google Reserve مدمج. إذا كنت تبني مخصصًا تمامًا، يمكنك لا تزال الظهور في نتائج بحث Google مع زر "احجز" من خلال تطبيق API Google Reserve أو استخدام نهج هجين -- أداة مخصصة على موقعك والمنصة التابعة لجهة خارجية لقناة Google.
كيف أتعامل مع عدم الحضور باستخدام نظام حجز مخصص؟ ثلاث استراتيجيات مثبتة: تذكيرات SMS آلية قبل 24 ساعة (تقلل عدم الحضور بمقدار 20-30٪)، وتتطلب ودائع بطاقة ائتمان للفتحات المطلوبة بشدة، والحفاظ على نظام تتبع عدم الحضور الذي يضع علامة على المخالفات المتكررة. يمكن لنظام مخصص تطبيق الثلاثة. بعض المطاعم تستخدم أيضًا ميزة قائمة الانتظار التي تملأ تلقائيًا الفتحات الملغاة.
هل يستحق البناء المخصص لمطعم واحد صغير؟ صريح؟ ربما لا، إلا إذا كان لديك متطلبات محددة جدًا. بالنسبة لموقع واحد يقدم أقل من 500 وجبة شهريًا، ستخدم الطبقة المجانية من Tablesit (500 حجز/شهر) أو Resos بـ 24 دولار/شهر احتياجاتك بشكل جيد. يبدأ عائد الاستثمار من البناء المخصص حقًا عندما تنفق 10000+ دولار/سنة على رسوم OpenTable، أو تقوم بتشغيل مواقع متعددة، أو تحتاج إلى التكامل مع الأنظمة التي لا تدعمها المنصات الجاهزة.
ما مكدس التكنولوجيا الذي يجب أن أستخدمه لمحرك حجز مطعم؟ أوصي بـ Next.js لكل من أداة الحجز ولوحة معلومات الإدارة، و PostgreSQL لقاعدة البيانات (بيانات الحجز علائقية جدًا) و Vercel للاستضافة. بالنسبة لنهج أخف وزنًا، يعمل Astro مع جزر React بشكل جميل لأداة الحجز المواجهة للضيوف -- صفحات ثابتة سريعة مع نماذج حجز تفاعلية. يتعامل Node.js مع Express بشكل جيد مع طبقة واجهة برمجة التطبيقات. هذا هو المكدس الذي نستخدمه عادةً لمشاريع عملائنا Next.js و Astro.
كيف أتعامل مع تعيين الطاولة للعملاء بدون حجز إلى جانب الحجوزات عبر الإنترنت؟ تحتاج لوحة معلومات الإدارة إلى عرض فوري للأرضية. عند وصول عميل بدون حجز، يفحص المضيف لوحة المعلومات ويرى أي طاولات مجانية (مع الأخذ في الاعتبار الحجوزات القادمة وأوقات المخزن المؤقت) ويعين واحدة يدويًا. يجب على النظام منع حجز تلك الطاولة عبر الإنترنت لمدة الطعام المناسبة. هذا هو في الأساس نفس التدفق الذي يستخدمه OpenTable -- أنت تقوم بتشغيله على النظام الخاص بك.
هل يمكن لنظام حجز مخصص أن يتكامل مع نقطة البيع الخاصة بي؟ نعم، لكنها تعتمد على نقطة البيع الخاصة بك. تحتوي الأنظمة مثل Toast و Square و Clover و Lightspeed على APIs تسمح ببيانات الحجز بالتدفق إلى نقطة البيع (بحيث يعرف السيرفر اسم الضيف وحجم الحفلة وأي ملاحظات قبل وصولهم). يمكن لعمليات التكامل المتقدمة سحب بيانات الفحص مرة أخرى إلى نظام الحجز للتحليلات -- متوسط الإنفاق لكل وجبة والعناصر الشهيرة حسب الفترة الزمنية وما إلى ذلك. عادة ما يكون تكامل POS هو الجزء الأكثر استهلاكا للوقت من البناء المخصص لأن كل API للنقاط هي مختلفة.