يوضّح هذا المستند كيفية استخدام الإشعارات الفورية التي تُعلم تطبيقك عند حدوث تغيير في أحد الموارد.
نظرة عامة
توفّر Google Calendar API إشعارات فورية تتيح لك تتبُّع التغييرات في الموارد. يمكنك استخدام هذه الميزة لتحسين أداء تطبيقك. تتيح لك هذه الميزة إلغاء التكاليف الإضافية المتعلقة بالشبكة والحوسبة، والتي تنطوي على استطلاع الموارد لتحديد ما إذا كانت قد تغيّرت. عندما يتغيّر أحد الموارد التي تتم مراقبتها، ترسل واجهة برمجة التطبيقات Google Calendar API إشعارًا إلى تطبيقك.
لاستخدام الإشعارات الفورية، يجب إجراء ما يلي:
اضبط عنوان URL للتلقّي أو جهاز استقبال الردّ التلقائي على الويب.
هذا هو خادم HTTPS يعالج رسائل الإشعارات الخاصة بواجهة برمجة التطبيقات التي يتم تفعيلها عند تغيير أحد الموارد.
إعداد قناة إشعارات لكل نقطة نهاية خاصة بمورد تريد مراقبتها
تحدّد القناة معلومات التوجيه لرسائل الإشعارات. كجزء من عملية إعداد القناة، يجب تحديد عنوان URL المحدّد الذي تريد تلقّي الإشعارات عليه. عندما يتغيّر مصدر قناة، يرسل Google Calendar API رسالة إشعار كطلب إلى عنوان URL هذا.
POST
في الوقت الحالي، تتيح Google Calendar API تلقّي إشعارات بشأن التغييرات التي تطرأ على موارد قائمة التحكم بالوصول (ACL) وCalendarList والأحداث والإعدادات.
إنشاء قنوات الإشعارات
لطلب إشعارات فورية، يجب إعداد قناة إشعارات لكل مورد تريد مراقبته. بعد إعداد قنوات الإشعارات، ستُعلم واجهة برمجة التطبيقات مع "تقويم Google" تطبيقك عند حدوث أي تغييرات في الموارد التي تتم مراقبتها.
تقديم طلبات بشأن الساعة
يتضمّن كل مورد قابل للمشاهدة في Google Calendar API طريقة watch مرتبطة به على معرف موارد منتظم (URI) بالشكل التالي:
https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch
لإعداد قناة إشعارات لتلقّي رسائل حول التغييرات التي تطرأ على مورد معيّن، أرسِل طلب POST إلى طريقة watch الخاصة بالمورد.
ترتبط كل قناة إشعارات بمستخدم معيّن ومورد معيّن (أو مجموعة من الموارد). لن ينجح طلب watch إلا إذا كان المستخدم الحالي يملك هذا المورد أو لديه إذن بالوصول إليه.
مثال
ابدأ في مراقبة التغييرات على مجموعة من الأحداث في تقويم معيّن:
POST https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events/watch
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json
{
"id": "01234567-89ab-cdef-0123456789ab",
"type": "web_hook",
"address": "https://mydomain.com/notifications",
...
"token": "target=myApp-myCalendarChannelDest",
"expiration": 1426325213000
}في نص الطلب، أدخِل معرّف قناتك id، وtype كـ web_hook، وعنوان URL الذي ستتلقّى فيه البيانات في address.
يمكنك أيضًا تقديم المعلومات الاختيارية التالية:
tokenلاستخدامه كرمز مميّز لقناتك- تمثّل
expirationوقت انتهاء صلاحية القناة المطلوب بالمللي ثانية.
الخصائص المطلوبة
مع كل طلب watch، يجب تقديم الحقول التالية:
-
سلسلة
idللسمة تحدّد بشكل فريد قناة الإشعارات الجديدة هذه ضمن مشروعك. ننصحك باستخدام معرّف فريد عالميًا (UUID) أو أي سلسلة فريدة مشابهة. الحد الأقصى للطول: 64 حرفًا.يتم إعادة عرض قيمة المعرّف التي تحدّدها في عنوان
X-Goog-Channel-IdHTTP لكل رسالة إشعار تتلقّاها لهذه القناة. -
سلسلة سمة
typeتم ضبطها على القيمةweb_hook -
سلسلة قيمة السمة
addressتم ضبطها على عنوان URL الذي يستمع إلى الإشعارات ويردّ عليها في قناة الإشعارات هذه. هذا هو عنوان URL الخاص بوظيفة رد الاتصال الخاصة بخطاف الويب، ويجب أن يستخدم بروتوكول HTTPS.يُرجى العِلم أنّ واجهة برمجة التطبيقات الخاصة بـ "تقويم Google" يمكنها إرسال الإشعارات إلى عنوان HTTPS هذا فقط إذا كانت هناك شهادة طبقة مقابس آمنة (SSL) صالحة مثبّتة على خادم الويب. تشتمل الشهادات غير الصالحة على:
- الشهادات الموقعة ذاتيًا.
- الشهادات الموقَّعة من مصدر غير موثوق به.
- الشهادات التي تم إبطالها.
- الشهادات التي يتضمّن موضوعها اسم مضيف لا يتطابق مع اسم المضيف المستهدف
السمات الاختيارية
يمكنك أيضًا تحديد هذه الحقول الاختيارية مع طلبك watch:
-
سمة
tokenتحدّد قيمة سلسلة نصية عشوائية لاستخدامها كرمز مميّز للقناة. يمكنك استخدام رموز مميّزة لقنوات الإشعارات لأغراض مختلفة. على سبيل المثال، يمكنك استخدام الرمز المميز للتحقّق من أنّ كل رسالة واردة مخصّصة لقناة أنشأها تطبيقك، وذلك لضمان عدم تزوير الإشعار، أو لتوجيه الرسالة إلى الوجهة الصحيحة داخل تطبيقك استنادًا إلى الغرض من هذه القناة. الحد الأقصى للطول: 256 حرفًا.يتم تضمين الرمز المميز في عنوان HTTP
X-Goog-Channel-Tokenفي كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة.في حال استخدام رموز مميّزة لقنوات الإشعارات، ننصحك بما يلي:
استخدِم تنسيق ترميز قابل للتوسيع، مثل مَعلمات طلب البحث في عنوان URL. مثلاً:
forwardTo=hr&createdBy=mobileيُرجى عدم تضمين بيانات حساسة، مثل رموز OAuth المميزة.
-
سلسلة خاصة بالسمة
expirationتم ضبطها على طابع زمني بتنسيق Unix (بالملّي ثانية) لتحديد تاريخ ووقت إيقاف واجهة برمجة التطبيقات الخاصة بتقويم Google لإرسال الرسائل إلى قناة الإشعارات هذه.إذا كانت القناة تتضمّن وقت انتهاء صلاحية، سيتم تضمينه كقيمة لعنوان HTTP
X-Goog-Channel-Expiration(بتنسيق قابل للقراءة) في كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة.
لمزيد من التفاصيل حول الطلب، يُرجى الرجوع إلى طريقة watch الخاصة بموارد قائمة التحكم بالوصول وCalendarList والأحداث والإعدادات في "مرجع واجهة برمجة التطبيقات".
مشاهدة الردّ
إذا نجح طلب watch في إنشاء قناة إشعارات، سيعرض رمز الحالة 200 OK HTTP.
يتضمّن نص رسالة استجابة المشاهدة معلومات عن قناة الإشعارات التي أنشأتها للتو، كما هو موضّح في المثال أدناه.
{
"kind": "api#channel",
"id": "01234567-89ab-cdef-0123456789ab",
"resourceId": "o3hgv1538sdjfh",
"resourceUri": "https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events",
"token": "target=myApp-myCalendarChannelDest",
"expiration": 1426325213000
}
يوفّر نص الاستجابة تفاصيل القناة، مثل:
-
kind: تحدّد هذه السمة أنّها مورد قناة لواجهة برمجة التطبيقات. id: المعرّف الذي حدّدته لهذه القناة.-
resourceId: معرّف المورد الذي تمّت مشاهدته. resourceUri: المعرّف الخاص بإصدار المورد الذي تمت مشاهدته.-
token: الرمز المميّز المقدَّم في نص الطلب -
expiration: وقت انتهاء صلاحية القناة كطابع زمني لحقبة Unix بالملي ثانية.
بالإضافة إلى السمات التي أرسلتها كجزء من طلبك، تتضمّن المعلومات التي تم إرجاعها أيضًا resourceId وresourceUri لتحديد المرجع الذي تتم مشاهدته على قناة الإشعارات هذه.
يمكنك تمرير المعلومات التي تم إرجاعها إلى عمليات أخرى خاصة بقنوات الإشعارات، مثلاً عندما تريد التوقّف عن تلقّي الإشعارات.
لمزيد من التفاصيل حول الردّ، يُرجى الرجوع إلى طريقة watch
للموارد Acl وCalendarList وEvents وSettings في "مرجع واجهة برمجة التطبيقات".
رسالة المزامنة
بعد إنشاء قناة إشعارات لمراقبة أحد الموارد، ترسل واجهة برمجة التطبيقات Google Calendar API رسالة sync للإشارة إلى أنّ الإشعارات ستبدأ. قيمة عنوان HTTP X-Goog-Resource-State لهذه الرسائل هي sync. بسبب مشاكل التوقيت في الشبكة، من المحتمل أن تتلقّى الرسالة sync حتى قبل تلقّي استجابة الطريقة watch.
يمكنك تجاهل الإشعار sync، ولكن يمكنك أيضًا استخدامه. على سبيل المثال، إذا قررت عدم الاحتفاظ بالقناة، يمكنك استخدام القيمتَين X-Goog-Channel-ID وX-Goog-Resource-ID في طلب التوقّف عن تلقّي الإشعارات. يمكنك أيضًا استخدام إشعار sync لإجراء بعض عمليات التهيئة استعدادًا للأحداث اللاحقة.
في ما يلي تنسيق رسائل sync التي ترسلها واجهة برمجة تطبيقات "تقويم Google" إلى عنوان URL المستلِم.
POST https://mydomain.com/notifications // Your receiving URL. X-Goog-Channel-ID: channel-ID-value X-Goog-Channel-Token: channel-token-value X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format. Present only if the channel expires. X-Goog-Resource-ID: identifier-for-the-watched-resource X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource X-Goog-Resource-State: sync X-Goog-Message-Number: 1
تحتوي رسائل المزامنة دائمًا على قيمة X-Goog-Message-Number في عنوان HTTP تساوي 1. يحتوي كل إشعار لاحق لهذه القناة على رقم رسالة أكبر من الرقم السابق، مع العلم أنّ أرقام الرسائل لن تكون متسلسلة.
تجديد قنوات الإشعارات
يمكن أن تتضمّن قناة الإشعارات وقت انتهاء صلاحية، مع قيمة يحدّدها طلبك أو أي حدود أو إعدادات تلقائية داخلية لواجهة برمجة التطبيقات Google Calendar API (يتم استخدام القيمة الأكثر تقييدًا). يتم تضمين وقت انتهاء صلاحية القناة، إذا كان لديها وقت انتهاء صلاحية، كـ طابع زمني بتوقيت يونكس (بالمللي ثانية) في المعلومات التي تعرضها الطريقة watch. بالإضافة إلى ذلك، يتم تضمين تاريخ ووقت انتهاء الصلاحية (بتنسيق قابل للقراءة) في كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة في عنوان X-Goog-Channel-Expiration HTTP.
لا تتوفّر حاليًا طريقة تلقائية لتجديد قناة إشعارات. عندما توشك صلاحية قناة على الانتهاء، عليك استبدالها بقناة جديدة من خلال استدعاء الطريقة watch. كما هو الحال دائمًا، يجب استخدام قيمة فريدة للسمة id الخاصة بالقناة الجديدة. يُرجى العِلم أنّه من المحتمل أن تتداخل الفترة الزمنية التي تكون فيها قناتا الإشعارات للمورد نفسه نشطتَين.
تلقّي إشعارات
عندما يتغيّر أي مصدر تمت مراقبته، يتلقّى تطبيقك رسالة إشعار تصف التغيير. ترسل واجهة برمجة التطبيقات Google Calendar API هذه الرسائل كطلبات HTTPS POST إلى عنوان URL الذي حدّدته كخاصية address لقناة الإشعارات هذه.
تفسير تنسيق رسالة الإشعار
تتضمّن جميع رسائل الإشعارات مجموعة من عناوين HTTP التي تتضمّن البادئات X-Goog-.
يمكن أن تتضمّن بعض أنواع الإشعارات أيضًا نص الرسالة.
العناوين
تتضمّن رسائل الإشعارات التي تنشرها واجهة برمجة التطبيقات "تقويم Google" إلى عنوان URL المستلِم عناوين HTTP التالية:
| العنوان | الوصف |
|---|---|
| الظهور دائمًا | |
|
تمثّل هذه السمة المعرّف الفريد العالمي (UUID) أو سلسلة فريدة أخرى قدّمتها لتحديد قناة الإشعارات هذه. |
|
عدد صحيح يحدّد هذه الرسالة لقناة الإشعارات هذه. تكون القيمة دائمًا 1 لرسائل sync. تزداد أرقام الرسائل مع كل رسالة لاحقة على القناة، ولكنّها ليست متسلسلة. |
|
قيمة مبهمة تحدّد المورد الذي تتم مراقبته. ويظلّ رقم التعريف هذا ثابتًا في جميع إصدارات واجهة برمجة التطبيقات. |
|
حالة المرجع الجديد التي شغّلت الإشعار
القيم المحتمَلة:
sync أو exists أو
not_exists
|
|
معرّف خاص بإصدار واجهة برمجة التطبيقات للمورد الذي تمت مشاهدته |
| موجودة أحيانًا | |
|
تاريخ ووقت انتهاء صلاحية قناة الإشعارات، ويتم التعبير عنهما بتنسيق قابل للقراءة. يظهر هذا الحقل فقط إذا تم تحديده. |
|
رمز مميّز لقناة الإشعارات تم ضبطه بواسطة تطبيقك، ويمكنك استخدامه للتحقّق من مصدر الإشعار. يجب أن يكون هذا الحقل متوفّرًا فقط إذا تم تحديد قيمة له. |
لا تتضمّن رسائل الإشعارات التي تنشرها واجهة برمجة التطبيقات Google Calendar API إلى عنوان URL المستلِم نص الرسالة. لا تحتوي هذه الرسائل على معلومات محدّدة حول المراجع المعدَّلة، وعليك إجراء طلب آخر من واجهة برمجة التطبيقات للاطّلاع على تفاصيل التغيير الكاملة.
أمثلة
رسالة الإشعار بشأن تغيير مجموعة الأحداث المعدَّلة:
POST https://mydomain.com/notifications // Your receiving URL. Content-Type: application/json; utf-8 Content-Length: 0 X-Goog-Channel-ID: 4ba78bf0-6a47-11e2-bcfd-0800200c9a66 X-Goog-Channel-Token: 398348u3tu83ut8uu38 X-Goog-Channel-Expiration: Tue, 19 Nov 2013 01:13:52 GMT X-Goog-Resource-ID: ret08u3rv24htgh289g X-Goog-Resource-URI: https://www.googleapis.com/calendar/v3/calendars/my_calendar@gmail.com/events X-Goog-Resource-State: exists X-Goog-Message-Number: 10
الرد على الإشعارات
للإشارة إلى النجاح، يمكنك عرض أي من رموز الحالة التالية:
200 أو 201 أو 202 أو 204 أو
102.
إذا كانت خدمتك تستخدم مكتبة برامج API للعملاء من Google وتعرض الرموز 500 أو 502 أو 503 أو 504، ستعيد واجهة برمجة التطبيقات Google Calendar API المحاولة باستخدام التراجع الأسي.
ويُعدّ أي رمز حالة مرتجع آخر بمثابة تعذُّر إرسال الرسالة.
فهم أحداث الإشعارات في Google Calendar API
يقدّم هذا القسم تفاصيل حول رسائل الإشعارات التي يمكنك تلقّيها عند استخدام الإشعارات الفورية مع واجهة برمجة التطبيقات Google Calendar API.
| يتم عرضها عند | ||
|---|---|---|
sync |
قوائم التحكم بالوصول وقوائم التقويم والأحداث والإعدادات | تم إنشاء قناة جديدة بنجاح. يمكنك توقُّع بدء تلقّي إشعارات بشأنها. |
exists |
قوائم التحكم بالوصول وقوائم التقويم والأحداث والإعدادات | حدث تغيير في أحد الموارد. تشمل التغييرات المحتملة إنشاء مورد جديد أو تعديل مورد حالي أو حذفه. |
إيقاف الإشعارات
تتحكّم السمة expiration في وقت توقّف الإشعارات تلقائيًا. يمكنك اختيار إيقاف تلقّي الإشعارات لقناة معيّنة قبل انتهاء صلاحيتها من خلال استدعاء الطريقة stop على معرّف الموارد الموحّد التالي:
https://www.googleapis.com/calendar/v3/channels/stop
تتطلّب هذه الطريقة توفير السمتَين id وresourceId على الأقل للقناة، كما هو موضّح في المثال أدناه. يُرجى العِلم أنّه إذا كان Google Calendar API يتضمّن عدة أنواع من الموارد التي تتضمّن طرق watch، سيكون هناك طريقة stop واحدة فقط.
يمكن فقط للمستخدمين الذين لديهم الإذن المناسب إيقاف قناة. وعلى وجه الخصوص:
- إذا تم إنشاء القناة من خلال حساب مستخدم عادي، يمكن للمستخدم نفسه فقط إيقاف القناة من العميل نفسه (كما هو محدّد من خلال معرّفات عملاء OAuth 2.0 من رموز المصادقة) الذي أنشأ القناة.
- إذا تم إنشاء القناة من خلال حساب خدمة، يمكن لأي مستخدم من العميل نفسه إيقاف القناة.
يوضّح نموذج الرمز البرمجي التالي كيفية إيقاف تلقّي الإشعارات:
POST https://www.googleapis.com/calendar/v3/channels/stop
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json
{
"id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66",
"resourceId": "ret08u3rv24htgh289g"
}