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

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

نظرة عامة

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

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

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

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

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

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

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

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

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

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

يرتبط كل مورد واجهة برمجة تطبيقات لـ 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/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 حرفًا.

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

  • سلسلة خاصية 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 التي ترسلها واجهة برمجة تطبيقات 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

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

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

يمكن أن تتضمّن قناة الإشعارات وقت انتهاء صلاحية يتضمّن قيمة يتم تحديدها إما من خلال طلبك أو من خلال أي حدود داخلية لواجهة برمجة التطبيقات Admin SDK API أو افتراضية (يتم استخدام القيمة الأكثر تقييدًا). انتهاء صلاحية القناة يتم تضمين الوقت، إذا كان متوفرًا، باعتباره طابع زمني لنظام التشغيل Unix. (بالمللي ثانية) في المعلومات التي تم عرضها باستخدام طريقة 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 المعرّف الفريد العالمي أو سلسلة فريدة أخرى قدّمتها لتحديد ذلك .
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 نطاق وحدة تحكم المشرف أو مالك المستند في تطبيق "المستندات". هذا هو النطاق المتأثر بحدث التقرير.
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 على نوعَين من الرسائل: مزامنة الرسائل والإشعارات المتعلّقة بالأحداث. تتم الإشارة إلى نوع الرسالة في عنوان HTTP X-Goog-Resource-State. القيم المحتملة لإشعارات الأحداث هي نفسها القيم المتاحة لطريقة activities.list. لكل تطبيق أحداث فريدة:

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

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

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"
}