قبل البدء
أنشئ مفتاح API محدود النطاق من الحساب ← واجهة المطور بأقل الصلاحيات اللازمة:
يجب أن تكون ميزة المواعيد الأصلية مفعلة في الحساب. يعيد عدم توفر الميزة في
الخطة الرمز
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. إنشاء مورد ونوع موعد
3. ضبط ساعات الأسبوع والاستثناءات
يستخدمday_of_week القيمة 0 للأحد حتى 6 للسبت. تُقاس البداية والنهاية
بالدقائق منذ منتصف الليل؛ 600 تعني 10:00 و1320 تعني 22:00. حدود التاريخ
شاملة حسب منطقة الحساب الزمنية وليست لحظات UTC.
أولوية التوفر والساعات الافتراضية
يقيّم HueChat توفر كل مورد ولكل تاريخ محلي بالترتيب التالي:- المورد الذي لم تُنشأ له أي قاعدة أسبوعية يحصل مبدئيًا على 08:00–18:00 فقط لتسهيل بدء استخدام المورد الجديد.
- بعد وجود أي قاعدة للمورد يتوقف هذا السلوك الافتراضي. لا تفتح الوقت إلا قاعدة مفعلة تطابق يوم الأسبوع وتقع داخل حدود التاريخ الشاملة. القاعدة المعطلة أو اليوم غير المرسل أو التاريخ خارج النطاق يعني أن المورد مغلق.
- استثناء
openالمطابق يضيف فترته الدقيقة حتى لو كانت القاعدة الأسبوعية معطلة أو خارج نطاقها. واستثناءclosedيزيل أي وقت متداخل وتكون له الأولوية. - يجب أن تقع مدة الخدمة وهوامشها بالكامل داخل فترة مفتوحة، ثم تُطبق مهلة الحجز والحد الأقصى المسبق والحجوزات الموجودة.
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 معتمدًا من صندوق واتساب ورقم إرسال محددين،
وتطبق على جميع الموارد أو على طبيب/مورد واحد. يمكن الإرسال قبل الموعد بعدد
دقائق ثابت، أو في ساعة محلية محددة من اليوم السابق.
مثال قبل الموعد بـ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 حتى لا تصل رسالة قديمة بعد انقطاع طويل.
السجل والتقارير
يعيدGET /appointments/{id} الموعد مع سجل الحالة الزمني. ويعيد
GET /appointments/reports?start=…&end=… إجماليات كل حالة ونتائج كل خدمة.
تستخدم مدد العرض والتوفر والتقرير RFC3339، ويجب أن تكون النهاية بعد البداية
وألا تتجاوز 366 يومًا.
الأمان والحدود المقصودة
- يحتفظ HueChat بالمفتاح كتجزئة أحادية الاتجاه فقط.
- تُفحص ملكية الحساب والنطاق والانتهاء وقائمة IP الاختيارية والإلغاء وحد المعدل مع كل طلب.
- تُحل الأسماء والمعرّفات داخل الحساب فقط؛ يفشل الاسم الدقيق المكرر أو المفقود بدل اختيار سجل غير مقصود.
- لا تمنح نطاقات المواعيد صلاحيات ضمنية لجهات الاتصال أو الصفقات أو وكلاء AI.
- الأرشفة والاستعادة عمليتا إدارة عامتان لأنهما تحتفظان بالتاريخ. الحذف الدائم للموارد والخدمات ليس ضمن عقد التكامل الموثق.
- يبقى ربط المورد بوكيل AI تدفق إدارة للذكاء الاصطناعي، وليس عملية تكامل مواعيد.

