الانتقال إلى المحتوى الرئيسي
واجهة المواعيد هي واجهة الجدولة بين الأنظمة في HueChat. يستطيع نظام ERP أو CRM أو موقع أو تطبيق أو منصة شريكة ضبط دليل الحجز، والبحث عن الأوقات المتاحة، وإنشاء مواعيد العملاء وإدارة دورتها كاملة. يُحصر كل طلب في الحساب الذي أصدر مفتاح API.

قبل البدء

أنشئ مفتاح API محدود النطاق من الحساب ← واجهة المطور بأقل الصلاحيات اللازمة:
استخدم معرّف الحساب الذي أصدر المفتاح. يُرفض مفتاح حساب آخر بالرمز 403، ولا تُحل معرّفات الموارد أو الخدمات أو المواعيد أو جهات الاتصال أو الصفقات بين الحسابات. كما تتحقق عمليات الإعداد من أن مالك المفتاح ما زال مديرًا.
يجب أن تكون ميزة المواعيد الأصلية مفعلة في الحساب. يعيد عدم توفر الميزة في الخطة الرمز 403 من دون تجاوز بقية فحوص الصلاحيات.

المصادقة واختبار طلب موعد

تستخدم لوحة الاختبار التفاعلية في صفحات الواجهة مصادقة Bearer نفسها الخاصة بواجهة HueChat. افتح عملية من عمليات المواعيد، ثم اختر Authorize أو انقر حقل Authorization والصق الرمز كاملًا. تضيف اللوحة البادئة Bearer تلقائيًا؛ لذلك لا تلصقها مرتين. استخدم رمزًا شخصيًا لاختبار سريع لمالك الحساب، أو مفتاح API محدود النطاق يبدأ بـhc_… للتكامل. يجب أن يخص المفتاح الحساب نفسه الموجود في accountId. ابدأ بطلب قراءة لا يغيّر البيانات:
تحتاج عملية استيراد المواعيد التاريخية كذلك إلى النطاق appointments:history:write. ويتطلب إرسال contact_id النطاق contacts:read، بينما يتطلب deal_id النطاق deals:write. ينفّذ زر Send طلبًا حقيقيًا على الحساب المحدد؛ استخدم external_id مقصودًا، ولا تستخدم مثال الاستيراد التاريخي لاختبار الاتصال فقط. إعادة الطلب بالمعرّف نفسه آمنة ولا تكرر السجل، لكن المعرّف الجديد ينشئ موعدًا فعليًا.

التغطية الكاملة للواجهة

يتضمن العقد العام 46 عملية. يُسمى نوع الموعد خدمة في حقول API، ويمكن أن يمثل المورد طبيبًا أو موظفًا أو غرفة أو فرعًا أو جهازًا أو أي سعة قابلة للحجز.

القراءة والبحث والحجز

الربط مع أنظمة المواعيد

تتطلب هذه العمليات مفتاح REST يحمل appointments:sync على حساب اعتمده فريق HueChat. تُحفظ الحجوزات كما هي في النظام المعتمد؛ راجع الربط مع أنظمة المواعيد لقواعد المطابقة والترتيب وتحويل FHIR. يعامل POST /appointments من مفتاح نظام مواعيد معتمد مثل PUT /appointments/external/{externalId}.

إعدادات المدير

تتطلب كل عملية في هذا الجدول appointments:settings وأن يكون مالك المفتاح مديرًا للحساب.

أتمتة تذكيرات واتساب

تحتاج قراءة القواعد والإيصالات إلى appointments:read. أما إنشاء القاعدة أو تحديثها أو تفعيلها أو تعطيلها فيحتاج إلى appointments:settings ومالك مفتاح مدير للحساب. جميع المسارات أعلاه تضاف إلى /api/v2/accounts/{accountId}.

شرح عمليات القراءة واحدةً واحدة

  • GET /appointments: يعيد مواعيد النطاق مع الموارد والخدمات والإعدادات والقواعد والاستثناءات وروابط الخدمة بالموارد. النطاق الافتراضي 14 يومًا، ويمكن إرسال start وend بصيغة RFC3339 حتى 366 يومًا.
  • GET /appointments/{id}: يقبل public_id أو UUID، ويعيد الموعد وسجل تغير الحالة. لا تظهر الصفقة المرتبطة إلا مع deals:read.
  • GET /appointments/external/{externalId}: الأنسب للمطابقة بعد إعادة محاولة أو عندما لا يخزن النظام الخارجي معرّف HueChat.
  • GET /appointments/catalog: يعيد الخدمات النشطة فقط، ومدة كل خدمة وفواصلها والموارد المسموح لها تقديمها؛ وهو أفضل طلب لواجهة حجز خارجية.
  • GET /appointments/settings: يبين المنطقة الزمنية وفاصل الأوقات وأقل مهلة وأقصى مدة للحجز وسياسة التأكيد من دون تغييرها.
  • GET /appointments/resources وGET /appointments/resources/{resourceId}: يعيدان بيانات الأشخاص والغرف والفروع والأجهزة، بما في ذلك النوع والمنطقة الزمنية واللون والترتيب والحالة النشطة.
  • GET /appointments/services وGET /appointments/services/{serviceId}: يعيدان أنواع الموعد مع المدة وفواصل ما قبل/بعد الموعد والسعر والعملة والحالة.
  • GET /appointments/availability: يعيد قواعد الأسبوع كلها والاستثناءات التي تتقاطع مع start وend. المدة القصوى 366 يومًا. يتضمن الرد القواعد المعطلة والمقيدة بالتاريخ حتى يستطيع النظام الخارجي إعادة بناء سياسة الجدولة كاملة.
  • GET /appointments/slots: يتطلب date وخدمة بالمعرّف أو الاسم الدقيق، ويقبل موردًا اختياريًا وpreferred_time وlimit حتى 50. يعيد وقت البداية والنهاية بصيغة مطلقة ومحلية لكل مورد متاح. date تاريخ مدني حسب منطقة الحساب الزمنية، والمصفوفة الفارغة نتيجة ناجحة ليوم مغلق أو ممتلئ وليست خطأ API.
  • GET /appointments/reports: يعيد إجماليات الحالات والحجوزات المنشأة بالذكاء الاصطناعي وتوزيع النتائج حسب الخدمة. المدة الافتراضية شهر وأقصاها 366 يومًا.

شرح عمليات الكتابة واحدةً واحدة

  • POST /appointments/history: نقطة ترحيل مقيّدة للحسابات المعتمدة، ويجب أن يحمل مفتاح REST النطاق appointments:history:write. يقبل خدمة وموردًا نشطين أو مؤرشفين بالـUUID أو الاسم الدقيق، ويحفظ حدث الحالة الأول من دون فحص الأوقات الحية أو إرسال إشعار حجز أو تذكير. راجع استيراد المواعيد التاريخية.
  • POST /appointments: ينشئ حجزًا من external_id وبيانات العميل والخدمة والوقت. يقبل UUID أو اسم الخدمة الدقيق، وموردًا اختياريًا بالـUUID أو الاسم، وstarts_at أو date مع time. إعادة الطلب نفسه لا تنشئ نسخة ثانية.
  • PATCH /appointments/{id}: يحدّث بيانات العميل القابلة للتحرير، ويمكنه نقل موعد نشط في العملية نفسها. أرسل المورد والخدمة ووقت البداية وحقول العميل وversion الحالي.
  • PATCH /appointments/{id}/status: يغير الحالة مع reason اختياري ونسخة متوقعة. يحفظ التغيير وسجل الحالة في معاملة واحدة.
  • PATCH /appointments/{id}/schedule: ينقل موعدًا مبدئيًا أو محجوزًا أو مؤكدًا إلى مورد وخدمة ووقت متاح، ويرفض النسخة القديمة أو التعارض.

شرح عمليات الإعداد واحدةً واحدة

  • PUT /appointments/settings: يحفظ الوضع والمنطقة الزمنية وفاصل الأوقات ومهل الحجز والإلغاء وبداية الأسبوع والعرض وسياسة التأكيد كإعداد متماسك.
  • POST /appointments/resources: ينشئ سعة قابلة للحجز باسم ونوع، مع وصف ومنطقة زمنية ولون وترتيب اختياري.
  • PUT /appointments/resources/{resourceId}: يغير الحقول المرسلة فقط، ويمكنه تفعيل المورد أو تعطيله.
  • DELETE /appointments/resources/{resourceId}: أرشفة آمنة؛ تختفي السعة من الحجوزات الجديدة لكن لا يحذف تاريخها.
  • POST /appointments/resources/{resourceId}/restore: يعيد المورد المؤرشف ليصبح متاحًا للإعداد والحجز.
  • POST /appointments/services: ينشئ نوع الموعد باسمه ومدته بين 5 و1440 دقيقة وفواصله وسعره وعملته.
  • PUT /appointments/services/{serviceId}: يغير الحقول المرسلة فقط، بما فيها المدة والسعر والترتيب والحالة النشطة.
  • DELETE /appointments/services/{serviceId}: يؤرشف النوع مع إبقاء المواعيد السابقة قابلة للقراءة.
  • POST /appointments/services/{serviceId}/restore: يعيد نوع الموعد المؤرشف.
  • PUT /appointments/services/{serviceId}/resources: يستبدل جميع تعيينات الخدمة بقائمة UUID المرسلة؛ القائمة الفارغة تعني كل الموارد النشطة.
  • POST /appointments/availability/rules: يستبدل قاعدة مورد/يوم واحدة. يستخدم day_of_week القيم 0–6 والدقائق منذ منتصف الليل. الحقلان effective_from وeffective_to تاريخان مدنيان اختياريان وشاملان حسب منطقة الحساب الزمنية، وis_active:false يبقي المورد مغلقًا صراحةً.
  • POST /appointments/availability/rules/bulk: يتحقق من جميع القواعد أولًا ثم يحفظها معًا، ولذلك لا يترك جدولًا نصف محدث. يستبدل فقط أزواج المورد/اليوم المرسلة ولا يحذف الأيام غير المرسلة.
  • POST /appointments/availability/exceptions: ينشئ فترة open أو closed؛ يجب أن تكون أوقاتها RFC3339 مع فرق UTC صريح. حذف resource_id يجعلها عامة لكل الموارد. يضيف open فترة محددة، بينما يزيل closed أي وقت متداخل.
  • DELETE /appointments/availability/exceptions/{exceptionId}: يحذف الاستثناء المحدد داخل الحساب ولا يمس سجل المواعيد.

عمليات التذكير

  • GET /appointments/reminders: يعيد التوقيت ونطاق الطبيب/المورد وصندوق واتساب والقالب المعتمد والربط بالمتغيرات وحالة التفعيل، ولا ينشئ قاعدة.
  • POST /appointments/reminders: يتحقق أن المورد والصندوق وقالب UTILITY المعتمد كلها للحساب نفسه. استخدم is_active:false للحفظ والمراجعة من دون إرسال.
  • PUT /appointments/reminders/{reminderId}: يستبدل القاعدة كاملة. عند تفعيلها أو تغيير توقيتها أو موردها أو صندوقها أو قالبها أو ربطها، يبدأ حد تفعيل جديد ولا تُرسل تذكيرات كان موعدها قبل هذا الحد.
  • DELETE /appointments/reminders/{reminderId}: تعطيل يحافظ على سجل التسليم بدل حذف الدليل التاريخي.
  • GET /appointments/reminder-deliveries: يرشح اختياريًا بـUUID الموعد أو معرّف جهة الاتصال وبحد من 1 إلى 100. تعني sent أن واتساب قبل الطلب، وskipped أن شرط أمان منع الإرسال، وfailed رفضًا مؤكدًا، وuncertain أن النتيجة لا يمكن إثباتها ولذلك لا يعاد الإرسال تلقائيًا.

ضبط نموذج الجدولة

1. حفظ إعدادات الحساب

تُستخدم منطقة IANA الزمنية عند إرسال date وtime محليين.

2. إنشاء مورد ونوع موعد

الخدمة هي نوع الموعد الذي يختاره العميل:
عيّن الخدمة لموارد مختارة. جسم الطلب مصفوفة UUID، والمصفوفة الفارغة تعني أن كل مورد نشط مؤهل:

3. ضبط ساعات الأسبوع والاستثناءات

يستخدم day_of_week القيمة 0 للأحد حتى 6 للسبت. تُقاس البداية والنهاية بالدقائق منذ منتصف الليل؛ 600 تعني 10:00 و1320 تعني 22:00. حدود التاريخ شاملة حسب منطقة الحساب الزمنية وليست لحظات UTC.

أولوية التوفر والساعات الافتراضية

يقيّم HueChat توفر كل مورد ولكل تاريخ محلي بالترتيب التالي:
  1. المورد الذي لم تُنشأ له أي قاعدة أسبوعية يحصل مبدئيًا على 08:00–18:00 فقط لتسهيل بدء استخدام المورد الجديد.
  2. بعد وجود أي قاعدة للمورد يتوقف هذا السلوك الافتراضي. لا تفتح الوقت إلا قاعدة مفعلة تطابق يوم الأسبوع وتقع داخل حدود التاريخ الشاملة. القاعدة المعطلة أو اليوم غير المرسل أو التاريخ خارج النطاق يعني أن المورد مغلق.
  3. استثناء open المطابق يضيف فترته الدقيقة حتى لو كانت القاعدة الأسبوعية معطلة أو خارج نطاقها. واستثناء closed يزيل أي وقت متداخل وتكون له الأولوية.
  4. يجب أن تقع مدة الخدمة وهوامشها بالكامل داخل فترة مفتوحة، ثم تُطبق مهلة الحجز والحد الأقصى المسبق والحجوزات الموجودة.
تستخدم واجهات عرض الأوقات والإنشاء وإعادة الجدولة المحرك نفسه، لذلك لا يمكن تجاوز التوفر بإرسال طلب إنشاء مباشر. للتكامل من دولة أخرى، اضبط الحساب بمنطقة IANA مثل Asia/Dubai أو Europe/London أو America/New_York. أرسل حدود الأسبوع بصيغة YYYY-MM-DD، وأرسل أوقات المواعيد والاستثناءات بصيغة RFC3339 مع فرق زمني صريح. يخزن نظام HIS الطابع الزمني المطلق ويعرض local_date وlocal_time وtimezone المعادة. يرفض HueChat الوقت المحلي غير الموجود أثناء الانتقال للتوقيت الصيفي. وعند تكرار ساعة محلية، استخدم قيمة starts_at الدقيقة المعادة من واجهة الأوقات حتى يكون فرق UTC المقصود واضحًا بلا التباس. استخدم الاستثناء لعطلة أو فتح خاص أو إغلاق مؤقت، واحذف resource_id لتطبيقه على كل الموارد:

إيجاد وقت بالاسم والنوع والتاريخ

يمكن استخدام UUID كمرجع ثابت أو الاسم الدقيق لتدفق سهل للبشر. لا ترسل الشكلين للمنتقي نفسه.
يُبحث service_name وresource_name كاسمين دقيقين ونشطين داخل الحساب. استخدم service_id وresource_id عندما يمكن أن تتغير الأسماء. المورد اختياري؛ حذف منتقي المورد يعيد أوقات كل الموارد المؤهلة.

إنشاء موعد بالعميل والتاريخ والوقت والنوع

يتطلب الإنشاء بمفتاح API قيمة external_id ثابتة في النظام المتصل. طولها 1–128 محرف ASCII، تبدأ بحرف لاتيني أو رقم، ثم تستخدم الأحرف والأرقام و. و_ و: و- فقط.
يمكن بدلًا من ذلك إرسال service_id وresource_id اختياري وstarts_at بصيغة RFC3339. إذا حُذف المورد يختار HueChat موردًا مؤهلًا ومتاحًا. مدة الخدمة وفواصلها هي المرجع؛ ends_at اختياري ويُستخدم للتحقق ولا يغير مدة الخدمة. contact_id اختياري ويتطلب contacts:read ويجب أن ينتمي للحساب. ويمكن إرسال اسم العميل وهاتفه وبريده مباشرة من دون إنشاء جهة اتصال. استخدم واجهة جهات الاتصال وCustomer CDP عندما يحتاج النظام الخارجي إلى حفظ ملف العميل الموحد. deal_id اختياري ويتطلب deals:write، ويجب أن تكون الصفقة في الحساب وأن يسمح فرعها بالخدمة والمورد. لا تظهر بيانات الصفقة إلا مع deals:read.

استيراد المواعيد التاريخية

الاستيراد التاريخي منفصل عمدًا عن الحجز الحي ومقيّد بالحسابات المعتمدة. يجب أن يستخدم الطلب مفتاح REST يحمل النطاق appointments:history:write. هذا عقد HueChat محايد تجاه المورّد. تتوافق أسماء دورة الحالة مع موارد Appointment في HL7 FHIR R4، لكن المسار ليس خادم FHIR أو SMART-on-FHIR كاملًا. يمكن إضافة موصلات EHR/HIS معتمدة خاصة بالمورّد لاحقًا من دون تغيير هذا العقد العام.
external_id وstatus إلزاميان. اختر خدمة واحدة وموردًا واحدًا باستخدام service_id وresource_id أو الاسمين الدقيقين service_name وresource_name؛ ويمكن للاستيراد التاريخي الرجوع إلى عناصر الدليل المؤرشفة. أرسل starts_at بصيغة RFC3339 أو date مع time. عند حذف ends_at تُستخدم مدة الخدمة الحالية. يجب ألا تسبق البداية 1900-01-01 وألا تتجاوز الوقت الحالي بأكثر من خمس دقائق. ويجب أن يكون الموعد المكتمل قد انتهى فعلًا. الحالات الأصلية هي tentative وbooked وconfirmed وcompleted وcancelled وno_show. وتُقبل مرادفات FHIR R4 التالية: تُرفض entered-in-error بدل إنشاء موعد مضلل. ويُحفظ اسم الحالة الأصلي وsource_system الاختياري ووقت الحالة وعلامة مرادف FHIR ضمن مصدر الاستيراد. ولا يصح cancellation_reason إلا مع الموعد الملغي. تعيد المحاولة المطابقة بالـexternal_id نفسه الرمز 200 والترويسة X-Idempotent-Replayed: true، بينما يعيد الاستيراد الأول 201. ويعيد استخدام المعرّف مع محتوى مختلف 409. كما يعيد تداخل مورد في حالة حجز نشطة 409 حفاظًا على سلامة جدول الحساب. استخدم GET /appointments/external/{externalId} للمطابقة بعد نتيجة شبكة غير مؤكدة. يتطلب إرسال contact_id أيضًا contacts:read، ويتطلب إرسال deal_id أيضًا deals:write. يُحل المعرّفان داخل حساب المفتاح فقط. تُحفظ بيانات الموعد وحدث الحالة الأول معًا؛ ولا تنشئ العملية تذكيرات سابقة ولا ترسل رسالة واتساب ولا تغير سلوك /appointments الحي.

إعادة المحاولة من دون حجز مكرر

بعد انقطاع الشبكة، أرسل الطلب نفسه مع external_id نفسه. يعيد HueChat الموعد الموجود والترويسة:
يصلح ذلك أيضًا رابط صفقة اختياري تعطل بعد إنشاء الموعد. يعيد استخدام المعرّف مع بيانات مختلفة 409 Conflict ولا يغير الموعد الأول. يمكن إعادة 503 مؤقتة بالطلب نفسه، وتظهر Retry-After: 0 عندما يبقى ربط الصفقة فقط. تُرفض الحقول المجهولة وأكثر من قيمة JSON والجسم الأكبر من 1 MiB. تتضمن 429 الترويسة Retry-After: 60 وترويسات X-RateLimit-*.

التحديث وتغيير الوقت والإكمال

تتضمن الاستجابات public_id وUUID وversion. استخدم أي معرّف وأرسل أحدث نسخة مع كل تغيير؛ تعيد النسخة القديمة 409.
حالات الإنشاء هي tentative وbooked وconfirmed. وتقبل التغييرات اللاحقة أيضًا completed وcancelled وno_show. يُحفظ تغيير الحالة وسجله معًا.
تحتفظ المواعيد المكتملة والملغاة وعدم الحضور بجدولها الأصلي.

ضبط تذكيرات مواعيد واتساب

تختار كل قاعدة قالب UTILITY معتمدًا من صندوق واتساب ورقم إرسال محددين، وتطبق على جميع الموارد أو على طبيب/مورد واحد. يمكن الإرسال قبل الموعد بعدد دقائق ثابت، أو في ساعة محلية محددة من اليوم السابق.
أنشئ القاعدة وراجعها أولًا مع is_active:false. تغييرها إلى true هو الإجراء الصريح الذي يسمح بالرسائل المستقبلية. نشر API واختيار القالب وقراءة الإيصالات لا يفعّل القاعدة.

مثال قبل الموعد بـ24 ساعة

ترتيب bindings يطابق ترتيب متغيرات نص القالب المرقمة. المصادر المدعومة هي اسم العميل الأول أو الكامل، هاتفه وبريده، مرجع الموعد وتاريخه ووقته ووقت البداية الكامل، اسم الخدمة، اسم المورد، أو نص ثابت literal. إذا كانت قيمة مطلوبة مفقودة، يسجل HueChat الحالة skipped ولا يرسل شيئًا. يدعم التذكير الحالي متغيرات النص المرقمة وترويسة نصية ثابتة وأزرارًا ثابتة. تُرفض ترويسات الوسائط أو الترويسات الديناميكية وروابط الأزرار الديناميكية وقوالب إذن الاتصال.

الإرسال في اليوم السابق

استخدم timing_type:"previous_day" وsend_minute كعدد الدقائق بعد منتصف الليل المحلي. القيمة 540 تعني 09:00. حذف resource_id أو إرساله فارغًا يجعل القاعدة لجميع الموارد النشطة. يستخدم HueChat منطقة IANA الخاصة بالمورد، ثم منطقة الحساب عند غيابها. لذلك تعمل القاعدة في الدول المختلفة ومع تغير التوقيت الصيفي. أرسل أوقات المواعيد كـRFC3339 مع فرق زمني صريح، ولا تثبت +03:00 لدولة تتغير فيها الساعة.

ضمانات التسليم والإيصالات

ينشئ HueChat إيصالًا دائمًا واحدًا لكل قاعدة وموعد ووقت إرسال. لا يكرر تعديل ملاحظة أو حقل غير زمني الرسالة، بينما تؤهل إعادة الجدولة لوقت جديد. قبل الإرسال يعاد فحص حالة الموعد ونسخته وتفعيل القاعدة واعتماد Meta وتوفر الصندوق وموافقة رسائل الخدمة وحظر/إلغاء اشتراك الرقم. تُسجل مهلة مزود الخدمة بعد محاولة الإرسال كـuncertain ولا تعاد تلقائيًا. أما فحوص ما قبل المزود المؤقتة فتعاد بعدد محدود. إذا تأخر التذكير أكثر من 30 دقيقة، يسجل skipped حتى لا تصل رسالة قديمة بعد انقطاع طويل.
تحتفظ الإيصالات باسم القاعدة والقالب المستخدمين وقت المحاولة حتى بعد تعديل القاعدة، وتظهر أيضًا داخل الموعد وفي سجل العميل في Customer CDP.

السجل والتقارير

يعيد GET /appointments/{id} الموعد مع سجل الحالة الزمني. ويعيد GET /appointments/reports?start=…&end=… إجماليات كل حالة ونتائج كل خدمة. تستخدم مدد العرض والتوفر والتقرير RFC3339، ويجب أن تكون النهاية بعد البداية وألا تتجاوز 366 يومًا.

الأمان والحدود المقصودة

  • يحتفظ HueChat بالمفتاح كتجزئة أحادية الاتجاه فقط.
  • تُفحص ملكية الحساب والنطاق والانتهاء وقائمة IP الاختيارية والإلغاء وحد المعدل مع كل طلب.
  • تُحل الأسماء والمعرّفات داخل الحساب فقط؛ يفشل الاسم الدقيق المكرر أو المفقود بدل اختيار سجل غير مقصود.
  • لا تمنح نطاقات المواعيد صلاحيات ضمنية لجهات الاتصال أو الصفقات أو وكلاء AI.
  • الأرشفة والاستعادة عمليتا إدارة عامتان لأنهما تحتفظان بالتاريخ. الحذف الدائم للموارد والخدمات ليس ضمن عقد التكامل الموثق.
  • يبقى ربط المورد بوكيل AI تدفق إدارة للذكاء الاصطناعي، وليس عملية تكامل مواعيد.
راجع مرجع API التفاعلي لكل حقل طلب ومخطط استجابة وحالة خطأ.