ربط نظامك بالويب هوك
إن كانت الحجوزات موجودة أصلاً في نظام تتحكم به — نظام إدارة وحدات، أو مدير قنوات، أو خلفية داخلية — فهذا أسرع المسارات، والوحيد اللحظي في الاتجاهين. أنت ترسل حدثاً موقّعاً؛ فيحتسبه سويتي على باقة المضيف أو محفظته، وينشئ التنظيف، ويرسل منظّفاً.
ما تحتاجه
- حساب مشغّل (
/partner). - شخص يستطيع إضافة ويب هوك صادر في نظامك.
- معرّفات وحداتك أنت، وربط كل واحد بمضيف ووحدة في سويتي.
الخطوة ١ — أنشئ نقطة الربط
التكاملات ← نقاط الربط ← إنشاء. تُعرض عليك قيمتان، مرة واحدة:
- رابط الاستقبال —
https://suitiee.com/webhooks/receive/{partnerSlug}/{webhookId} - مفتاح التوقيع

الخطوة ٢ — اربط وحداتك
سجّل سطراً لكل مضيف تحت العملاء ← عملاء الشريك، بمعرّفك أنت له، واربط معرّفات
وحداتك بوحدات سويتي. يجب أن يؤدي unit_id الوارد إلى مضيف ووحدة، وإلا قُبل الحدث ثم فشل
بذلك السبب على سطره.
الخطوة ٣ — وقّع الطلب
كل طلب يحمل HMAC-SHA256 على الجسم الخام، بمفتاح التوقيع:
X-Suitiee-Signature: sha256=<hex hmac_sha256(rawBody, secret)>
$body = json_encode($payload, JSON_UNESCAPED_UNICODE);
$signature = 'sha256=' . hash_hmac('sha256', $body, $webhookSecret);
const body = JSON.stringify(payload);
const signature = 'sha256=' + crypto.createHmac('sha256', secret).update(body).digest('hex');
وقّع البايتات نفسها التي ترسلها. إعادة التسلسل بعد التوقيع — ترتيب مفاتيح مختلف، أو مسافات مختلفة، أو ترميز يونيكود مختلف — تنتج توقيعاً لن يطابق.
يجب أن يحمل الجسم أيضاً timestamp بصيغة ISO 8601 في المستوى الأعلى، وأن يكون ضمن خمس
دقائق من ساعتنا في أي من الاتجاهين. هذا ما يمنع إعادة تشغيل طلب مُلتقَط.
إن كنت ترسل من عناوين ثابتة، أضفها إلى قائمة السماح على نقطة الربط؛ ويُرفض عندها ما عداها.
الخطوة ٤ — أرسل الحدث
POST https://suitiee.com/webhooks/receive/{partnerSlug}/{webhookId}
{
"event_id": "res_9f8c12",
"event_type": "checkout",
"timestamp": "2026-09-04T14:00:00Z",
"unit_id": "APT-204",
"checkout_datetime": "2026-09-04T11:00:00Z",
"next_checkin_datetime": "2026-09-04T16:00:00Z",
"guest_name": "سارة علي",
"notes": "مغادرة متأخرة معتمدة؛ مناشف إضافية."
}
| الحقل | مطلوب | ماذا يفعل |
|---|---|---|
event_type |
نعم | اسم حدثك. يُربط بإجراء تنظيف عبر ربط الأحداث على نقطة الربط، أو إجرائها الافتراضي |
unit_id |
نعم | معرّفك للوحدة. يجب أن يؤدي إلى مضيف ووحدة |
checkout_datetime |
نعم | متى غادر الضيف. يثبّت نافذة التنظيف |
timestamp |
نعم | متى أرسلت. داخل نافذة إعادة التشغيل |
event_id |
يُنصح به بشدة | مفتاح منع التكرار — انظر أدناه |
next_checkin_datetime |
لا | الوصول التالي إن عُرف. يُجدول التنظيف لينتهي قبله. وبدونه تكون النافذة خمس ساعات |
cleaning_window_minutes |
لا | طول نافذة صريح |
guest_name وguest_email وguest_phone وguest_language |
لا | تُسجَّل على الحجز. انظر الملاحظة أدناه |
notes |
لا | نص حر يصل إلى المنظّف |
أرسل دائماً event_id ثابتاً. تُطوى التكرارات عليه، فإعادة الإرسال بعد انقطاع تنشئ
تنظيفاً واحداً لا اثنين. وبدونه يُشتقّ معرّف من نوع الحدث ورقم الحجز، وإلا فمن بصمة الجسم.
الخطوة ٥ — اقرأ الجواب
200 {"status":"received"} تعني أن الحدث خُزّن ووُضع في الطابور. لا تعني أن التنظيف
أُنشئ بعد — فذلك يحدث لاحقاً، وتظهر النتيجة على سطر الحدث تحت التكاملات ← أحداث الربط،
وعبر GET /partner/webhooks/events.

| الحالة | ما تعنيه |
|---|---|
200 received |
قُبل ووُضع في الطابور |
200 duplicate |
رأينا event_id هذا؛ ولم تُعد المعالجة |
401 |
التوقيع ناقص أو خاطئ، أو الطابع الزمني ناقص أو قديم |
403 |
نقطة الربط موقوفة، أو العنوان غير مسموح به |
404 |
المعرّف أو رقم نقطة الربط خاطئ، أو الحساب غير نشط |
429 |
تجاوزت ١٠٠ طلب في الدقيقة. تراجع وأعد المحاولة |
كل ما يُكتشف بعد القبول لا يُفشل نداء HTTP. المحفظة الفارغة أو الوحدة غير المرتبطة
نتائج تشغيلية لا أخطاء نقل. يُجاب النداء بـ received، ويقول سطر الحدث failed مع السبب.
ولا يعود 4xx إلا لمشكلات التوقيع والطابع الزمني ونقطة الربط.
بيانات الضيف اختيارية وتبقى اختيارية
أرسلها على حدث الحجز، أو على حدث المغادرة، أو لا ترسلها أبداً. الحدث الذي يحذفها يترك ما لدينا كما هو بدل أن يمسحه؛ والحدث الذي يتضمّنها يحدّثه، وهكذا يصلنا بريد مصحّح.
بريد الضيف وجواله بيانات شخصية بموجب نظام حماية البيانات الشخصية. تُخزَّن على الحجز، وتُعرض للمشغّل والمضيف اللذين يملكانه، وتُبعَد عن كل عمود قائمة، ولا تُكتب في أي سطر سجل. أرسلها فقط إن كان أساسك النظامي لمشاركتها يسمح — وكل شيء آخر يعمل تماماً بدونها.
نداءات الرجوع إليك
اضبط رابط الرجوع ومفتاح الرجوع تحت الإعدادات، فيرسل سويتي إليك تحديثاً موقّعاً حين يُنشأ تنظيف أو تتغير حالته أو يكتمل، وكذلك لزيارات الصيانة.
X-Suitiee-Callback-Signature: sha256=<hmac_sha256(body, callbackSecret)>
أجب بـ 2xx. وما ليس 2xx أو ما ينقطع يُعاد ثلاث مرات — بعد ٣٠ ثانية ودقيقتين وعشر دقائق
— ثم يُسجَّل فشلاً نهائياً.
حين يحدث خطأ
| ما تراه | ما يعنيه | ما تفعله |
|---|---|---|
401 Invalid webhook signature |
البايتات الموقّعة ليست المرسلة | وقّع الجسم المتسلسل حرفياً وأرسل النص نفسه |
401 …outside acceptable window |
انحرفت ساعتك، أو أُرسل الحدث متأخراً بعد الطابور | أرسل الطابع لحظة الإطلاق بتوقيت UTC؛ وراجع مزامنة الساعة |
200 duplicate لحدث ثانٍ حقيقي |
حدثان يتشاركان event_id، أو لم ترسل واحداً فتصادمت البصمة |
أرسل event_id مميزاً وثابتاً لكل حدث |
| سطر الحدث يقول فشل — الوحدة غير مرتبطة | unit_id لم يطابق أي وحدة |
اربطه تحت عملاء الشريك وأعد معالجة السطر |
| سطر الحدث يقول فشل — الرصيد غير كافٍ | لم تغطِ محفظة المضيف وباقاته التنظيف | اشحن، ثم أعد معالجة السطر |
| قُبل ولا يصل نداء رجوع | لا رابط رجوع مضبوط، أو أجاب رابطك بغير 2xx ثلاث مرات | راجع الإعدادات؛ الإعادات ٣٠ ثانية / دقيقتان / ١٠ دقائق |
| لا يُحتسب شيء ولا يظهر منظّف | الحساب ما زال في الوضع التجريبي | انظر الوضع التجريبي |