الإشعارات الفورية

يوضّح هذا المستند كيفية استخدام الإشعارات الفورية التي تُعلم تطبيقك عند حدوث تغيير في أحد الموارد.

نظرة عامة

توفّر واجهة برمجة التطبيقات في Admin SDK إشعارات فورية تتيح لك تتبُّع التغييرات في الموارد. يمكنك استخدام هذه الميزة لتحسين أداء تطبيقك. تتيح لك هذه الميزة إلغاء التكاليف الإضافية المتعلقة بالشبكة والحوسبة، والتي تنطوي على استطلاع الموارد لتحديد ما إذا كانت قد تغيّرت. عندما يتغيّر أي مصدر تتم مراقبته، تُرسل واجهة برمجة التطبيقات في Admin SDK إشعارًا إلى تطبيقك.

لاستخدام الإشعارات الفورية، يجب إجراء ما يلي:

  • اضبط عنوان URL للتلقّي أو جهاز استقبال الردّ التلقائي على الويب.

    هذا هو خادم HTTPS يعالج رسائل الإشعارات الخاصة بواجهة برمجة التطبيقات التي يتم تفعيلها عند تغيير أحد الموارد.

  • إعداد قناة إشعارات لكل نقطة نهاية خاصة بمورد تريد مراقبتها

    تحدّد القناة معلومات التوجيه لرسائل الإشعارات. كجزء من عملية إعداد القناة، يجب تحديد عنوان URL المحدّد الذي تريد تلقّي الإشعارات عليه. عندما يتغيّر مصدر إحدى القنوات، ترسل واجهة برمجة التطبيقات Admin SDK رسالة إشعار كطلب إلى عنوان URL هذا.POST

تتيح واجهة برمجة التطبيقات Admin SDK حاليًا تلقّي إشعارات بشأن التغييرات التي تطرأ على مورد الأنشطة.

إنشاء قنوات الإشعارات

لطلب إشعارات فورية، يجب إعداد قناة إشعارات لكل مورد تريد مراقبته. بعد إعداد قنوات الإشعارات، تُعلم واجهة برمجة التطبيقات Admin SDK تطبيقك عند حدوث أي تغييرات في الموارد التي تتم مراقبتها.

تقديم طلبات بشأن الساعة

يتضمّن كل مصدر من مصادر واجهة برمجة التطبيقات في حزمة تطوير البرامج (SDK) للمشرف التي يمكن مراقبتها طريقة watch مرتبطة بعنوان URI بالتنسيق التالي:

https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch

لإعداد قناة إشعارات لتلقّي رسائل حول التغييرات التي تطرأ على مورد معيّن، أرسِل طلب POST إلى طريقة watch الخاصة بالمورد.

ترتبط كل قناة إشعارات بمستخدم معيّن ومورد معيّن (أو مجموعة من الموارد). لن ينجح طلب watch إلا إذا كان المستخدم الحالي أو حساب الخدمة يملك المورد أو لديه إذن بالوصول إليه.

أمثلة

تتّخذ جميع طلبات المشاهدة الخاصة بمورد "الأنشطة" الشكل العام التالي:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/userKey or all/applications/applicationName/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-myFilesChannelDest",
  "payload": true,
  "expiration": 3600
}

يحتوي نص الطلب على السمات التالية:

  • id: معرّف فريد عالمي (UUID) أو سلسلة فريدة مشابهة تحدّد هذه القناة.
  • type: تمثّل هذه السمة نوع آلية التسليم. يجب أن تكون قيمة هذا الحقل web_hook.
  • address: عنوان URL الذي يتم إرسال الإشعارات إليه.
  • token: سلسلة عشوائية يتم إرسالها إلى العنوان المستهدف مع كل إشعار، وذلك بغرض التأكّد من أنّ الإشعار وارد من مصدر موثوق به.
  • payload: علامة منطقية تشير إلى ما إذا كان يجب تضمين الحمولة في الإشعار.
  • expiration: مدة البقاء بالثواني لقناة الإشعارات

يمكنك استخدام المَعلمات userKey وapplicationName وeventName وfilters لتلقّي إشعارات بأحداث أو مستخدمين أو تطبيقات معيّنة فقط.

ملاحظة: تم حذف نص الطلب في الأمثلة التالية لتوضيحها.

مراقبة جميع أنشطة المشرف:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch

مراقبة جميع الأنشطة في المستندات:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch

مراقبة نشاط مشرف معيّن:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/liz@example.com/applications/admin/watch

ابحث عن حدث معيّن، مثل تغيير كلمة مرور مستخدم:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch?eventName=CHANGE_PASSWORD

مراقبة التغييرات في مستند معيّن:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch?eventName=EDIT&filters==doc_id=123456abcdef

الخصائص المطلوبة

مع كل طلب watch، يجب تقديم الحقول التالية:

  • سلسلة id للسمة تحدّد بشكل فريد قناة الإشعارات الجديدة هذه ضمن مشروعك. ننصحك باستخدام معرّف فريد عالميًا (UUID) أو أي سلسلة فريدة مشابهة. الحد الأقصى للطول: 64 حرفًا.

    يتم إعادة عرض قيمة المعرّف التي تحدّدها في عنوان X-Goog-Channel-Id HTTP لكل رسالة إشعار تتلقّاها لهذه القناة.

  • سلسلة سمة type تم ضبطها على القيمة web_hook

  • سلسلة قيمة السمة address تم ضبطها على عنوان URL الذي يستمع إلى الإشعارات ويردّ عليها في قناة الإشعارات هذه. هذا هو عنوان URL الخاص بوظيفة رد الاتصال الخاصة بخطاف الويب، ويجب أن يستخدم بروتوكول HTTPS.

    يُرجى العِلم أنّ واجهة برمجة التطبيقات Admin SDK يمكنها إرسال الإشعارات إلى عنوان HTTPS هذا فقط إذا كانت هناك شهادة SSL صالحة مثبَّتة على خادم الويب. تشتمل الشهادات غير الصالحة على:

    • الشهادات الموقعة ذاتيًا.
    • الشهادات الموقَّعة من مصدر غير موثوق به.
    • الشهادات التي تم إبطالها.
    • الشهادات التي يتضمّن موضوعها اسم مضيف لا يتطابق مع اسم المضيف المستهدف

السمات الاختيارية

يمكنك أيضًا تحديد هذه الحقول الاختيارية مع طلبك watch:

  • سمة token تحدّد قيمة سلسلة نصية عشوائية لاستخدامها كرمز مميّز للقناة. يمكنك استخدام رموز مميّزة لقنوات الإشعارات لأغراض مختلفة. على سبيل المثال، يمكنك استخدام الرمز المميز للتحقّق من أنّ كل رسالة واردة مخصّصة لقناة أنشأها تطبيقك، وذلك لضمان عدم تزوير الإشعار، أو لتوجيه الرسالة إلى الوجهة الصحيحة داخل تطبيقك استنادًا إلى الغرض من هذه القناة. الحد الأقصى للطول: 256 حرفًا.

    يتم تضمين الرمز المميز في عنوان HTTP X-Goog-Channel-Token في كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة.

    في حال استخدام رموز مميّزة لقنوات الإشعارات، ننصحك بما يلي:

    • استخدِم تنسيق ترميز قابل للتوسيع، مثل مَعلمات طلب البحث في عنوان URL. مثلاً: forwardTo=hr&createdBy=mobile

    • يُرجى عدم تضمين بيانات حساسة، مثل رموز OAuth المميزة.

  • سلسلة expiration تم ضبطها على طابع زمني بتنسيق Unix (بالمللي ثانية) للتاريخ والوقت اللذين تريد أن تتوقف فيهما واجهة برمجة التطبيقات Admin SDK API عن إرسال الرسائل لقناة الإشعارات هذه.

    إذا كانت القناة تتضمّن وقت انتهاء صلاحية، سيتم تضمينه كقيمة لعنوان HTTP ‏X-Goog-Channel-Expiration (بتنسيق قابل للقراءة) في كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة.

لمزيد من التفاصيل حول الطلب، يُرجى الرجوع إلى طريقة watch الخاصة بمورد الأنشطة في الدليل المرجعي لواجهة برمجة التطبيقات.

مشاهدة الردّ

إذا نجح طلب watch في إنشاء قناة إشعارات، سيعرض رمز الحالة 200 OK HTTP.

يتضمّن نص رسالة استجابة المشاهدة معلومات عن قناة الإشعارات التي أنشأتها للتو، كما هو موضّح في المثال أدناه.

{
  "kind": "api#channel",
  "id": "reportsApiId",
  "resourceId": "o3hgv1538sdjfh",
  "resourceUri": "https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName",
  "token": "target=myApp-myFilesChannelDest",
  "expiration": 3600
}

بالإضافة إلى السمات التي أرسلتها كجزء من طلبك، تتضمّن المعلومات التي تم إرجاعها أيضًا resourceId وresourceUri لتحديد المرجع الذي تتم مشاهدته على قناة الإشعارات هذه.

يمكنك تمرير المعلومات التي تم إرجاعها إلى عمليات أخرى خاصة بقنوات الإشعارات، مثلاً عندما تريد التوقّف عن تلقّي الإشعارات.

لمزيد من التفاصيل حول الردّ، يُرجى الرجوع إلى طريقة watch الخاصة بمورد الأنشطة في "مرجع واجهة برمجة التطبيقات".

رسالة المزامنة

بعد إنشاء قناة إشعارات لمراقبة أحد الموارد، ترسل واجهة برمجة التطبيقات Admin SDK رسالة sync للإشارة إلى أنّ الإشعارات بدأت. قيمة عنوان HTTP X-Goog-Resource-State لهذه الرسائل هي sync. بسبب مشاكل التوقيت في الشبكة، من المحتمل أن تتلقّى الرسالة sync حتى قبل تلقّي استجابة الطريقة watch.

يمكنك تجاهل الإشعار sync، ولكن يمكنك أيضًا استخدامه. على سبيل المثال، إذا قررت عدم الاحتفاظ بالقناة، يمكنك استخدام القيمتَين X-Goog-Channel-ID وX-Goog-Resource-ID في طلب التوقّف عن تلقّي الإشعارات. يمكنك أيضًا استخدام إشعار sync لإجراء بعض عمليات التهيئة استعدادًا للأحداث اللاحقة.

في ما يلي تنسيق رسائل sync التي ترسلها واجهة برمجة التطبيقات في Admin SDK إلى عنوان 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. يحتوي كل إشعار لاحق لهذه القناة على رقم رسالة أكبر من الرقم السابق، مع العلم أنّ أرقام الرسائل لن تكون متسلسلة.

تجديد قنوات الإشعارات

يمكن أن تتضمّن قناة الإشعارات وقت انتهاء صلاحية، مع قيمة يتم تحديدها إما من خلال طلبك أو من خلال أي حدود داخلية لواجهة برمجة التطبيقات في حزمة SDK للمشرف أو الإعدادات التلقائية (يتم استخدام القيمة الأكثر تقييدًا). يتم تضمين وقت انتهاء صلاحية القناة، إذا كان لديها وقت انتهاء صلاحية، كـ طابع زمني بتوقيت يونكس (بالمللي ثانية) في المعلومات التي تعرضها الطريقة watch. بالإضافة إلى ذلك، يتم تضمين تاريخ ووقت انتهاء الصلاحية (بتنسيق قابل للقراءة) في كل رسالة إشعار يتلقّاها تطبيقك لهذه القناة في عنوان X-Goog-Channel-Expiration HTTP.

لا تتوفّر حاليًا طريقة تلقائية لتجديد قناة إشعارات. عندما توشك صلاحية قناة على الانتهاء، عليك استبدالها بقناة جديدة من خلال استدعاء الطريقة watch. كما هو الحال دائمًا، يجب استخدام قيمة فريدة للسمة id الخاصة بالقناة الجديدة. يُرجى العِلم أنّه من المحتمل أن تتداخل الفترة الزمنية التي تكون فيها قناتا الإشعارات للمورد نفسه نشطتَين.

تلقّي إشعارات

عندما يتغيّر أي مصدر تمت مراقبته، يتلقّى تطبيقك رسالة إشعار تصف التغيير. ترسل واجهة برمجة التطبيقات Admin SDK هذه الرسائل كطلبات HTTPS POST إلى عنوان URL الذي حدّدته كخاصية address لقناة الإشعارات هذه.

تفسير تنسيق رسالة الإشعار

تتضمّن جميع رسائل الإشعارات مجموعة من عناوين HTTP التي تتضمّن البادئات X-Goog-. يمكن أن تتضمّن بعض أنواع الإشعارات أيضًا نص الرسالة.

العناوين

تتضمّن رسائل الإشعارات التي تنشرها Admin SDK API إلى عنوان URL المستلِم عناوين HTTP التالية:

العنوان الوصف
الظهور دائمًا
X-Goog-Channel-ID تمثّل هذه السمة المعرّف الفريد العالمي (UUID) أو سلسلة فريدة أخرى قدّمتها لتحديد قناة الإشعارات هذه.
X-Goog-Message-Number عدد صحيح يحدّد هذه الرسالة لقناة الإشعارات هذه. تكون القيمة دائمًا 1 لرسائل sync. تزداد أرقام الرسائل مع كل رسالة لاحقة على القناة، ولكنّها ليست متسلسلة.
X-Goog-Resource-ID قيمة مبهمة تحدّد المورد الذي تتم مراقبته. ويظلّ رقم التعريف هذا ثابتًا في جميع إصدارات واجهة برمجة التطبيقات.
X-Goog-Resource-State حالة المرجع الجديد التي شغّلت الإشعار القيم المحتملة: sync أو اسم حدث
X-Goog-Resource-URI معرّف خاص بإصدار واجهة برمجة التطبيقات للمورد الذي تمت مشاهدته
موجودة أحيانًا
X-Goog-Channel-Expiration تاريخ ووقت انتهاء صلاحية قناة الإشعارات، ويتم التعبير عنهما بتنسيق قابل للقراءة. يظهر هذا الحقل فقط إذا تم تحديده.
X-Goog-Channel-Token رمز مميّز لقناة الإشعارات تم ضبطه بواسطة تطبيقك، ويمكنك استخدامه للتحقّق من مصدر الإشعار. يجب أن يكون هذا الحقل متوفّرًا فقط إذا تم تحديد قيمة له.

تحتوي رسائل الإشعارات الخاصة بالأنشطة على المعلومات التالية في نص الطلب:

الموقع الوصف
kind تحدّد هذه السمة أنّ العنصر هو مورد "نشاط". القيمة: السلسلة الثابتة "admin#reports#activity".
id المعرّف الفريد لسجلّ النشاط.
id.time وقت حدوث النشاط تكون القيمة بتنسيق التاريخ والوقت ISO 8601. الوقت هو التاريخ الكامل مع الساعات والدقائق والثواني بالتنسيق YYYY-MM-DDThh:mm:ssTZD. على سبيل المثال، ‎2010-04-05T17:30:04+01:00.
id.uniqueQualifier مميّز فريد إذا كانت أحداث متعدّدة تحمل الوقت نفسه.
id.applicationName اسم التطبيق الذي ينتمي إليه الحدث. تشمل القيم المحتمَلة ما يلي:
id.customerId المعرّف الفريد لحساب Google Workspace
actor المستخدم الذي ينفّذ الإجراء.
actor.callerType نوع المؤلف الذي نفّذ النشاط المُدرَج في التقرير في هذا الإصدار من واجهة برمجة التطبيقات، يكون callerType هو USER أو طلب كيان OAuth 2LO الذي نفّذ الإجراء المُدرَج في التقرير .
actor.email عنوان البريد الإلكتروني الأساسي للمستخدم الذي يتم تسجيل أنشطته.
actor.profileId المعرّف الفريد لملف المستخدم على Google Workspace.
ownerDomain نطاق "وحدة تحكّم المشرف" أو مالك مستند تطبيق "مستندات Google" هذا هو النطاق المتأثّر بحدث التقرير.
ipAddress عنوان IP للمستخدم الذي ينفّذ الإجراء. هذا هو عنوان بروتوكول الإنترنت (IP) للمستخدم عند تسجيل الدخول إلى Google Workspace، وقد يعكس الموقع الجغرافي للمستخدم أو لا يعكسه. على سبيل المثال، يمكن أن يكون عنوان IP هو عنوان خادم وكيل المستخدم أو عنوان شبكة افتراضية خاصة (VPN). تتيح واجهة برمجة التطبيقات IPv4 وIPv6.
events[] أحداث النشاط في التقرير
events[].type نوع الحدث يتم تحديد خدمة Google Workspace أو ميزتها التي يغيّرها المشرف في السمة type التي تحدّد حدثًا باستخدام السمة eventName.
events[].name اسم الحدث هذا هو الاسم المحدّد للنشاط الذي تعرضه واجهة برمجة التطبيقات. ويرتبط كل eventName بخدمة أو ميزة معيّنة في Google Workspace، وتنظّم واجهة برمجة التطبيقات هذه الخدمات والميزات في أنواع من الأحداث.
بالنسبة إلى مَعلمات طلب eventName بشكل عام:
  • في حال عدم توفير eventName، يعرض التقرير جميع الحالات المحتملة لـ eventName.
  • عند طلب eventName، يعرض ردّ واجهة برمجة التطبيقات جميع الأنشطة التي تحتوي على هذا eventName. من المحتمل أن تتضمّن الأنشطة التي يتم عرضها خصائص eventName أخرى بالإضافة إلى تلك المطلوبة.
events[].parameters[] أزواج قيم المَعلمات لمختلف التطبيقات
events[].parameters[].name اسم المَعلمة.
events[].parameters[].value قيمة السلسلة للمَعلمة.
events[].parameters[].intValue قيمة العدد الصحيح للمَعلمة
events[].parameters[].boolValue القيمة المنطقية للمَعلمة

أمثلة

تتّخذ رسائل الإشعارات الخاصة بأحداث مورد النشاط الشكل العام التالي:

POST https://mydomain.com/notifications
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: reportsApiId
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT
X-Goog-Resource-ID:  ret08u3rv24htgh289g
X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName
X-Goog-Resource-State:  eventName
X-Goog-Message-Number: 10

{
  "kind": "admin#reports#activity",
  "id": {
    "time": datetime,
    "uniqueQualifier": long,
    "applicationName": string,
    "customerId": string
  },
  "actor": {
    "callerType": string,
    "email": string,
    "profileId": long
  },
  "ownerDomain": string,
  "ipAddress": string,
  "events": [
    {
      "type": string,
      "name": string,
      "parameters": [
        {
          "name": string,
          "value": string,
          "intValue": long,
          "boolValue": boolean
        }
      ]
    }
  ]
}

في ما يلي مثال على حدث نشاط مشرف:

POST https://mydomain.com/notifications
Content-Type: application/json; utf-8
Content-Length: 596
X-Goog-Channel-ID: reportsApiId
X-Goog-Channel-Token: 245t1234tt83trrt333
X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT
X-Goog-Resource-ID:  ret987df98743md8g
X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin?alt=json
X-Goog-Resource-State:  CREATE_USER
X-Goog-Message-Number: 23

{
  "kind": "admin#reports#activity",
  "id": {
    "time": "2013-09-10T18:23:35.808Z",
    "uniqueQualifier": "-0987654321",
    "applicationName": "admin",
    "customerId": "ABCD012345"
  },
  "actor": {
    "callerType": "USER",
    "email": "admin@example.com",
    "profileId": "0123456789987654321"
  },
  "ownerDomain": "apps-reporting.example.com",
  "ipAddress": "192.0.2.0",
  "events": [
    {
      "type": "USER_SETTINGS",
      "name": "CREATE_USER",
      "parameters": [
        {
          "name": "USER_EMAIL",
          "value": "liz@example.com"
        }
      ]
    }
  ]
}

الرد على الإشعارات

للإشارة إلى النجاح، يمكنك عرض أي من رموز الحالة التالية: 200 أو 201 أو 202 أو 204 أو 102.

إذا كانت خدمتك تستخدم مكتبة برامج العميل لواجهة برمجة التطبيقات من Google وتعرض الرموز 500 أو 502 أو 503 أو 504، فإنّ واجهة برمجة التطبيقات Admin SDK تعيد المحاولة باستخدام التراجع الأسي. ويُعدّ أي رمز حالة مرتجع آخر بمثابة تعذُّر إرسال الرسالة.

التعرّف على أحداث الإشعارات في Admin SDK API

يقدّم هذا القسم تفاصيل حول رسائل الإشعارات التي يمكنك تلقّيها عند استخدام الإشعارات الفورية مع Admin SDK API.

تحتوي الإشعارات الفورية لواجهة برمجة التطبيقات Reports API على نوعَين من الرسائل: رسائل المزامنة وإشعارات الأحداث. يتم تحديد نوع الرسالة في عنوان X-Goog-Resource-State HTTP. تتشابه القيم المحتملة لإشعارات الأحداث مع القيم المحتملة للطريقة activities.list. يحتوي كل تطبيق على أحداث فريدة:

إيقاف الإشعارات

تتحكّم السمة expiration في وقت توقّف الإشعارات تلقائيًا. يمكنك اختيار إيقاف تلقّي الإشعارات لقناة معيّنة قبل انتهاء صلاحيتها من خلال استدعاء الطريقة stop على معرّف الموارد الموحّد التالي:

https://www.googleapis.com/admin/reports_v1/channels/stop

تتطلّب هذه الطريقة توفير السمتَين id وresourceId على الأقل للقناة، كما هو موضّح في المثال أدناه. يُرجى العِلم أنّه إذا كانت واجهة برمجة التطبيقات Admin SDK تتضمّن عدة أنواع من الموارد التي تتضمّن طرق watch، لن يكون هناك سوى طريقة stop واحدة.

يمكن فقط للمستخدمين الذين لديهم الإذن المناسب إيقاف قناة. وعلى وجه الخصوص:

  • إذا تم إنشاء القناة من خلال حساب مستخدم عادي، يمكن للمستخدم نفسه فقط إيقاف القناة من العميل نفسه (كما هو محدّد من خلال معرّفات عملاء OAuth 2.0 من رموز المصادقة) الذي أنشأ القناة.
  • إذا تم إنشاء القناة من خلال حساب خدمة، يمكن لأي مستخدم من العميل نفسه إيقاف القناة.

يوضّح نموذج الرمز البرمجي التالي كيفية إيقاف تلقّي الإشعارات:

POST https://www.googleapis.com/admin/reports_v1/channels/stop
  
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json

{
  "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66",
  "resourceId": "ret08u3rv24htgh289g"
}