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

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

نظرة عامة

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

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

  • إعداد عنوان URL للاستلام أو "الردّ التلقائي على الويب" مستلم معاودة الاتصال.

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

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

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

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

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

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

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

يرتبط كل مورد واجهة برمجة تطبيقات لـ Admin SDK API 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

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

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

راقِب نشاط المشرف الخاص بمستخدم معيّن:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/[email protected]/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 حرفًا.

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

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

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

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

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

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

لمزيد من التفاصيل حول الطلب، يُرجى الرجوع إلى طريقة 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 أو افتراضية (يتم استخدام القيمة الأكثر تقييدًا). إذا كانت القناة تملك وقت انتهاء صلاحية، يتم تضمينه في المعلومات التي تعرضها طريقة watch بالتنسيق الطابع الزمني لنظام التشغيل يونكس (بالأجزاء من الثانية). بالإضافة إلى ذلك، يتم تضمين تاريخ ووقت انتهاء الصلاحية (بتنسيق يسهل قراءته) في كل رسالة إشعار يتلقّاها طلبك لهذه القناة في عنوان HTTP يتضمّن X-Goog-Channel-Expiration

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

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

عندما يتغيّر أحد الموارد التي يتم تتبُّعها، يتلقّى تطبيقك رسالة إشعار توضّح التغيير. ترسل واجهة برمجة تطبيقات 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 // 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": "[email protected]",
    "profileId": "0123456789987654321"
  },
  "ownerDomain": "apps-reporting.example.com",
  "ipAddress": "192.0.2.0",
  "events": [
    {
      "type": "USER_SETTINGS",
      "name": "CREATE_USER",
      "parameters": [
        {
          "name": "USER_EMAIL",
          "value": "[email protected]"
        }
      ]
    }
  ]
}

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

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

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

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

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

تحتوي الإشعارات الفورية في Reports API على نوعَين من الرسائل: رسائل المزامنة وإشعارات الأحداث. تتم الإشارة إلى نوع الرسالة في عنوان HTTP X-Goog-Resource-State. القيم المحتملة لإشعارات الأحداث هي نفسها القيم المُستخدَمة في طريقة 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"
}