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

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

نظرة عامة

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

لاستخدام الإشعارات الفورية، عليك إجراء أمرَين:

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

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

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

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

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

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

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

تقديم طلبات مشاهدة

يرتبط كلّ مورد قابل للمشاهدة من واجهة برمجة التطبيقات في Admin 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", // Your channel ID.
  "type": "web_hook",
  "address": "https://mydomain.com/notifications", // Your receiving URL.
  ...
  "token": "target=myApp-myFilesChannelDest", // (Optional) Your channel token.
  "payload": true, // (Optional) Whether to include the payload (message body) in notifications.
  "expiration": 3600 // (Optional) Your requested channel expiration time.
}

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

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

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

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

راقِب جميع أنشطة "مستندات Google":

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 API إرسال إشعارات إلى عنوان HTTPS هذا إلا في حال توفُّر شهادة طبقة مقابس آمنة (SSL) صالحة على خادم الويب. تشتمل الشهادات غير الصالحة على:

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

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

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

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

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

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

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

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

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

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

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

مشاهدة الرد

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

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

{
  "kind": "api#channel",
  "id": "reportsApiId", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName", // Version-specific ID of the watched resource.
  "token": "target=myApp-myFilesChannelDest", // Present only if one was provided.
  "expiration": 3600, // Actual expiration time as Unix timestamp (in ms), if applicable.
}

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

يمكنك تمرير المعلومات المعروضة إلى عمليات أخرى في قناة الإشعارات، مثل إيقاف تلقّي الإشعارات.

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

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

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

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

في ما يلي تنسيق رسائل sync التي ترسلها Admin SDK API إلى عنوان 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

تحتوي رسائل المزامنة دائمًا على قيمة عنوان HTTP X-Goog-Message-Number، وهي 1. يحمل كل إشعار لاحق لهذه القناة رقم رسالة أكبر من الرقم السابق، ولكن لن تكون أرقام الرسائل متسلسلة.

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

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

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

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

وعندما يتغيّر مورد مراقب، يتلقّى تطبيقك رسالة إشعار توضّح هذا التغيير. تُرسِل واجهة برمجة التطبيقات Admin SDK API هذه الرسائل كطلبات POST بروتوكول HTTPS إلى عنوان 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 // Your receiving URL.
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 // Your receiving URL.
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 API مع التراجع الأسي. ويعدّ كل رمز آخر لحالة الإرجاع بمثابة خطأ في الرسالة.

فهم أحداث إشعارات واجهة برمجة التطبيقات Admin SDK API

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

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

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

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

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

تتطلّب هذه الطريقة تقديم السمتَين id وresourceId على الأقل للقناة، كما هو موضّح في المثال أدناه. يُرجى العِلم بأنّه إذا كانت واجهة برمجة التطبيقات Admin SDK API تحتوي على عدة أنواع من الموارد التي تتضمن طرق 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"
}