プッシュ通知

このドキュメントでは、プッシュ通知を使用して、 アプリケーションを変更する必要はありません。

概要

Admin SDK API のプッシュ通知を使用して、 おすすめします。この機能を使用すると、キャンペーンの 説明します。リソースが変更済みかどうかを判断するためにリソースをポーリングすることによってネットワークとコンピューティングのコストが増加することを避けることができます。監視対象のリソースが変更されるたびに、Admin SDK API は 説明します。

プッシュ通知を使用するには、次の 2 つのことを行う必要があります。

  • 受信 URL(「Webhook」コールバック レシーバー)を設定します。

    この 通知メッセージを処理する HTTPS サーバーです。 トリガーされます。

  • 必要なリソース エンドポイントごとに(通知チャンネル)を設定する 。

    チャンネルは、通知メッセージのルーティング情報を指定します。チャネル設定の一環として、そのチャネルの URL を を選択します。チャンネルのリソースが変更されると、Admin SDK API は通知メッセージを POST リクエストとして、その URL に送信します。

現在、Admin SDK API は Activities リソースに対する変更の通知をサポートしています。

通知チャンネルを作成する

プッシュ通知をリクエストするには、通知チャンネルを設定する必要があります リソースごとに最大 100 個の IP アドレスが必要です。通知チャンネルを設定した後 Admin SDK API は、監視対象のリソースが検出されたときに できます。

監視リクエストを送信する

監視可能な Admin SDK API のリソースには、次の形式の URI に関連付けられた watch メソッドがあります。

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

特定のリソースに対する変更に関するメッセージの通知チャンネルを設定するには、そのリソースの watch メソッドに POST リクエストを送信します。

各通知チャンネルは特定のユーザーとユーザーの両方に 特定のリソース(またはリソースセット)へのアクセスを制御します。watch リクエスト ログインするには、現在のユーザーが またはサービス アカウント このリソースへのアクセス権を持ちます。

Activities リソースに対するすべての監視リクエストの一般的な形式は次のとおりです。

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

userKeyapplicationNameeventNamefilters パラメータを使用すると、特定のイベント、ユーザー、アプリの通知のみを受け取ることができます。

注: 次の例では、わかりやすくするためにリクエスト本文を省略しています。

すべての管理アクティビティに注意してください。

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(Universally Unique Identifier)または同様の一意の文字列を使用することをおすすめします。最大 64 文字を設定できます。

    設定した ID 値は、このチャンネルで受信するすべての通知メッセージの X-Goog-Channel-Id HTTP ヘッダーにそのまま使用されます。

  • web_hook に設定された type プロパティ文字列。

  • この通知チャンネルの通知をリッスンして応答する URL に設定された address プロパティ文字列。これは、 HTTPS を使用する必要があります。

    Admin SDK API がこの HTTPS アドレスに通知を送信できるのは、ウェブサーバーに有効な SSL 証明書がインストールされている場合にのみです。次のような証明書は無効です。

    • 自己署名証明書。
    • 信頼できない提供元によって署名された証明書。
    • 失効した証明書。
    • サブジェクトがターゲット ホスト名と一致しない証明書。

省略可能なプロパティ

watch リクエストでは、以下のフィールドを指定することもできます。

  • チャンネル トークンとして使用する任意の文字列値を指定する token プロパティ。通知チャンネルを使用すると、 使用できます。たとえば、 認証トークンを使用して、各受信メッセージが 作成され、通知が送信されていないことを または、メールを内部の正しい宛先に このチャネルの目的に応じてアプリケーションを設計します。最大 256 文字を設定できます。

    トークンは すべての通知の X-Goog-Channel-Token HTTP ヘッダー アプリケーションがこのチャンネル用に受信するメッセージです。

    通知チャンネル トークンを使用するにあたっては、次のことをおすすめします。

    • URL クエリ パラメータなどの拡張可能なエンコード形式を使用します例: forwardTo=hr&createdBy=mobile

    • OAuth トークンなどの機密データは含めないでください。

  • 設定された expiration プロパティ文字列。 Unix タイムスタンプ (ミリ秒単位)です。 この通知チャンネルへのメッセージの送信を停止します。

    チャンネルに有効期限が設定されている場合、このチャンネルでアプリケーションが受け取るすべての通知メッセージの X-Goog-Channel-Expiration HTTP ヘッダーの値(人が読める形式の有効期限)として含まれます。

リクエストの詳細については、watch メソッドをご覧ください。 API リファレンスの Activities リソースをご覧ください。

スマートウォッチのレスポンス

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

返される情報には、リクエストの一部として送信したプロパティに加えて、この通知チャンネルで監視されているリソースを識別するための resourceIdresourceUri も含まれています。

返された情報は、通知の受信を停止するときなど、他の通知チャンネル操作に渡すことができます。

レスポンスの詳細については、watch を参照してください。 API リファレンスの Activities リソースのメソッドをご覧ください。

メッセージを同期

リソースを監視する通知チャンネルを作成すると、Admin SDK API は通知が開始されていることを示す sync メッセージを送信します。X-Goog-Resource-State HTTP これらのメッセージのヘッダー値は sync です。ネットワークのタイミングの問題により、watch メソッドのレスポンスを受け取る前に、sync メッセージを受信することがあります。

sync の通知は無視してもかまいませんが、 使用しています。たとえば、特定のメッセージを保持せずに 作成するには、X-Goog-Channel-ID と 呼び出し内の X-Goog-Resource-ID の値 通知の受信を停止します。また、 初期化を行うための sync 通知 できます。

Admin SDK API が受信 URL に送信する sync メッセージの形式を以下に示します。

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 になります。このチャンネルの後続の通知には、前の通知よりも大きなメッセージ番号が付与されます(ただし連続にはなりません)。

通知チャンネルを更新する

通知チャンネルには、有効期限とその値 リクエストまたは Admin SDK API の内部制限によって決定されます またはデフォルト(より制限の厳しい値が使用されます)チャンネルの有効期限(設定されている場合)は、watch メソッドによって返される情報に Unix タイムスタンプ(ミリ秒単位)で含まれています。また、このチャンネルでアプリケーションが受信するすべての通知メッセージの X-Goog-Channel-Expiration HTTP ヘッダーにも、人が読める形式で有効期限の日時が含まれています。

現時点では、通知チャンネルを自動的に更新する方法はありません。チャンネルの有効期限が近づいたら、watch メソッドを呼び出して新しいチャンネルに置き換える必要があります。通常どおり、新しいチャンネルの id プロパティには一意の値を使用する必要があります。なお、 「重なり」であると言えます。2 つの通知チャンネルが通知される期間を 同じリソースがアクティブになります。

通知を受け取る

監視対象のリソースが変更されると、アプリケーションは 変更を説明する通知メッセージが送信されます。Admin SDK API は、この通知チャンネルの address プロパティとして指定された URL に、HTTPS POST リクエストとして、これらのメッセージを送信します。

通知メッセージの形式を解釈する

すべての通知メッセージには、X-Goog- 接頭辞を持つ一連の HTTP ヘッダーが含まれます。 通知の種類によっては、 あります。

ヘッダー

Admin SDK API によって受信側に送信された通知メッセージ URL には次の HTTP ヘッダーを含めます。

ヘッダー 説明
常に表示
X-Goog-Channel-ID この ID を識別するために指定した UUID またはその他の一意の文字列 通知チャンネル。
X-Goog-Message-Number この通知チャンネルでこのメッセージを識別する整数。sync メッセージの場合、値は常に 1 です。チャンネルの後続のメッセージごとにメッセージ番号が増加しますが、連続ではありません。
X-Goog-Resource-ID 監視対象のリソースを識別する不透明値。この ID は API バージョン間で安定している。
X-Goog-Resource-State 通知をトリガーした新しいリソースの状態。 有効な値は、sync またはイベント名です。
X-Goog-Resource-URI 監視対象リソースの API バージョン固有の識別子。
ときどき存在する
X-Goog-Channel-Expiration 通知チャンネルの有効期限の日時(人が読める形式)。定義されている場合のみ存在します。
X-Goog-Channel-Token アプリケーションによって設定され、通知元の確認に使用できる通知チャンネル トークン。次の場合にのみ表示 定義します。

アクティビティの通知メッセージのリクエスト本文には、次の情報が含まれます。

プロパティ 説明
kind これを Activity リソースとして識別します。値: 固定文字列 "admin#reports#activity"。
id アクティビティ レコードの一意の識別子。
id.time アクティビティの発生時刻。値は ISO 8601 の日時形式です。時刻は、YYYY-MM-DDThh:mm:ssTZD の形式で、完全な日付と時、分、秒を指定します。例: 2010-04-05T17:30:04+01:00
id.uniqueQualifier 複数のイベントの時間が同じ場合の一意の修飾子。
id.applicationName イベントが属するアプリケーション名。有効な値は次のとおりです。 <ph type="x-smartling-placeholder">
id.customerId Google Workspace アカウントの一意の識別子。
actor 操作を行ったユーザー。
actor.callerType レポートに記載されているアクティビティを行った作成者のタイプ。このバージョンの API では、callerType は、レポートに記載されているアクションを実行した USER または OAuth 2LO エンティティ リクエストです。
actor.email アクティビティが報告されるユーザーのメインのメールアドレス。
actor.profileId ユーザーの一意の Google Workspace プロフィール ID。
ownerDomain 管理コンソールまたはドキュメント アプリケーションのドキュメント所有者のドメイン。レポートのイベントの影響を受けるドメインです。
ipAddress 操作を行ったユーザーの IP アドレス。これは、Google Workspace にログインしたときユーザーのインターネット プロトコル(IP)アドレスです。ユーザーの物理的な場所を反映している場合もあれば、そうでない場合もあります。たとえば、ユーザーのプロキシ サーバーのアドレスや、バーチャル プライベート ネットワーク(VPN)のアドレスを IP アドレスとして使用できます。API は IPv4IPv6 をサポートしています。
events[] レポートのアクティビティ イベント。
events[].type イベントの種類。管理者によって変更される Google Workspace のサービスまたは機能は、eventName プロパティを使用してイベントを識別する type プロパティで識別されます。
events[].name イベントの名前。これは、API によって報告されるアクティビティの特定の名前です。各 eventName は特定の Google Workspace サービスまたは機能に関連付けられており、API によってイベントの種類別に整理されます。
eventName リクエスト パラメータ全般:
  • eventName が指定されていない場合、レポートは eventName のすべてのインスタンスを返します。
  • eventName をリクエストすると、API のレスポンスはその eventName を含むすべてのアクティビティを返します。返されるアクティビティには、リクエストしたプロパティに加えて、他の eventName プロパティが存在する可能性があります。
events[].parameters[] さまざまなアプリケーションのパラメータ値のペア。
events[].parameters[].name パラメータの名前。
events[].parameters[].value パラメータの文字列値。
events[].parameters[].intValue パラメータの整数値。
events[].parameters[].boolValue パラメータのブール値。

Activity リソース イベントの通知メッセージの一般的な形式は次のとおりです。

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

お知らせに対応する

成功を示すために、次のいずれかのステータス コードが返されます。 200201202204、または 102

サービスが Google の API クライアント ライブラリを使用していて、500502503、または 504 を返した場合、Admin SDK API は指数バックオフで再試行します。 それ以外の戻りステータス コードは、すべてメッセージ失敗とみなされます。

Admin SDK API の通知イベントについて

このセクションでは、Admin SDK API でプッシュ通知を使用する際に受け取る通知メッセージについて詳しく説明します。

Reports API のプッシュ通知には、同期メッセージとイベント通知の 2 種類のメッセージが含まれます。メッセージ タイプは X-Goog-Resource-State HTTP ヘッダーに示されます。イベント通知に指定できる値は、activities.list メソッドの場合と同じです。アプリケーションごとに固有のイベントがあります。

通知を停止する

expiration プロパティは、通知を自動的に停止するタイミングを制御します。Google Chat では 通知を受け取らないように設定することもできます。 次の URL にある stop メソッドを呼び出して期限切れにします。 次の URI を使用します。

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

この方法では、少なくともチャンネルの id プロパティと resourceId プロパティ。次のサンプルをご覧ください。 見てみましょう。Admin SDK API に watch メソッドを持つ複数のタイプのリソースがある場合でも、stop メソッドは 1 つのみです。

チャンネルの停止は適切な権限を持つユーザーのみが行えます。具体的には、次のとおりです。

  • 通常のユーザー アカウントによってチャンネルが作成された場合、チャンネルを停止できるのは、同じクライアント(認証トークンの OAuth 2.0 クライアント ID で識別)の同じユーザーのみです。
  • サービス アカウントによってチャンネルが作成された場合、同じクライアントのすべてのユーザーがそのチャンネルを停止できます。

次のコードサンプルは、通知の受信を停止する方法を示しています。

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