이 문서에서는 리소스가 변경될 때 애플리케이션에 알리는 푸시 알림을 사용하는 방법을 설명합니다.
개요
Admin SDK API는 리소스 변경사항을 감시할 수 있는 푸시 알림을 제공합니다. 이 기능을 사용하면 애플리케이션의 성능을 개선할 수 있습니다. 이를 통해 폴링 리소스와 관련된 추가 네트워크 및 컴퓨팅 비용을 제거하여 리소스가 변경되었는지 확인할 수 있습니다. 감시 리소스가 변경될 때마다 Admin SDK API에서 애플리케이션에 알립니다.
푸시 알림을 사용하려면 다음 두 가지 작업을 수행해야 합니다.
수신 URL 또는 'Webhook' 콜백 수신자를 설정합니다.
이는 리소스 변경 시 트리거되는 API 알림 메시지를 처리하는 HTTPS 서버입니다.
감시하려는 각 리소스 엔드포인트의 알림 채널을 설정합니다.
채널은 알림 메시지의 라우팅 정보를 지정합니다. 채널 설정의 일환으로 알림을 받을 특정 URL을 지정합니다. 채널의 리소스가 변경될 때마다 Admin SDK API가 알림 메시지를
POST
URL로 전송합니다.
현재 Admin SDK API는 활동 리소스 변경에 대한 알림을 지원합니다.
알림 채널 만들기
푸시 알림을 요청하려면 감시하려는 리소스마다 알림 채널을 설정해야 합니다. 알림 채널이 설정된 후 감시하는 리소스가 변경되면 Admin SDK API가 애플리케이션에 알립니다.
시계 요청
각 감시 가능 Admin SDK API 리소스에는 다음 형식의 URI에 연결된 watch
메서드가 있습니다.
https://www.googleapis.com/apiName/apiVersion/resourcePath/watch
특정 리소스의 변경사항에 대한 메시지에 대한 알림 채널을 설정하려면 리소스의 watch
메서드에 POST
요청을 보냅니다.
각 알림 채널은 특정 사용자 및 특정 리소스 (또는 리소스 집합)와 모두 연결됩니다. 현재 사용자 또는 서비스 계정이 이 리소스에 대한 액세스 권한을 소유하거나 가지고 있지 않으면 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자(영문 기준)입니다.설정한 ID 값이 이 채널에 대해 수신하는 모든 알림 메시지의
X-Goog-Channel-Id
HTTP 헤더에 다시 표시됩니다. -
type
속성 문자열이web_hook
값으로 설정되었습니다. -
이 알림 채널의 알림을 수신하고 응답하는 URL로 설정된
address
속성 문자열입니다. 웹훅 콜백 URL이며 HTTPS를 사용해야 합니다.웹 서버에 유효한 SSL 인증서가 설치된 경우에만 Admin SDK API에서 이 HTTPS 주소로 알림을 보낼 수 있습니다. 다음 인증서는 유효하지 않습니다.
- 자체 서명된 인증서
- 신뢰할 수 없는 출처에서 서명한 인증서
- 취소된 인증서
- 대상이 대상 호스트 이름과 일치하지 않는 인증서
선택 속성
watch
요청으로 이러한 선택 필드를 지정할 수도 있습니다.
-
채널 토큰으로 사용할 임의의 문자열 값을 지정하는
token
속성입니다. 알림 채널 토큰은 다양한 목적으로 사용할 수 있습니다. 예를 들어 토큰을 사용하여 각 수신 메시지가 애플리케이션에서 스푸핑하지 않도록 하기 위해 애플리케이션이 만든 채널용인지 확인하거나 이 채널의 용도에 따라 메시지를 애플리케이션 내의 올바른 대상으로 라우팅할 수 있습니다. 최대 길이: 256자(영문 기준)애플리케이션이 이 채널에서 수신하는 모든 알림 메시지의
X-Goog-Channel-Token
HTTP 헤더에 토큰이 포함됩니다.알림 채널 토큰을 사용하는 경우 다음 안내를 따르는 것이 좋습니다.
URL 쿼리 매개변수와 같은 확장 가능한 인코딩 형식을 사용합니다. 예:
forwardTo=hr&createdBy=mobile
OAuth 토큰과 같은 민감한 정보는 포함하지 마세요.
-
Admin SDK API에서 이 알림 채널의 메시지 전송을 중지할 날짜와 시간을 Unix 타임스탬프(밀리초)로 설정한
expiration
속성 문자열입니다.채널에 만료 시간이 있는 경우 애플리케이션이 채널과 관련하여 수신하는 모든 알림 메시지에
X-Goog-Channel-Expiration
HTTP 헤더 (이번에는 사람이 읽을 수 있는 형식)의 값으로 포함됩니다.
요청에 대한 자세한 내용은 API 참조의 활동 리소스에 대한 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
도 반환된 정보에 포함됩니다.
반환된 정보를 다른 알림 채널 작업에 전달할 수 있습니다(예: 알림 수신을 중지하려는 경우).
응답에 대한 자세한 내용은 API 참조의 활동 리소스에 관한 watch
메서드를 참고하세요.
메일 동기화
리소스를 보기 위해 새 알림 채널을 만든 후 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 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 타임스탬프 (ms)로 포함됩니다. 또한 만료 날짜와 시간은 애플리케이션이 이 채널을 위해 수신하는 모든 알림 메시지에 X-Goog-Channel-Expiration
HTTP 헤더에서 (사람이 읽을 수 있는 형식) 포함됩니다.
현재 알림 채널을 자동으로 갱신하는 방법은 없습니다. 채널 만료에 가까워지면 watch
메서드를 호출하여 새 채널을 만들어야 합니다. 항상 그렇듯이 새 채널의 id
속성에 고유한 값을 사용해야 합니다. 동일한 리소스의 두 알림 채널이 활성 상태일 때 '겹치는' 기간이 있을 수 있습니다.
알림 수신
감시하는 리소스가 변경될 때마다 애플리케이션에 변경사항을 설명하는 알림 메시지가 전송됩니다. Admin SDK API는 이러한 메시지를
이 알림 채널에 '"주소로 지정'한 URL에 HTTPS POST
요청으로 전송합니다.
알림 메시지 형식 이해하기
모든 알림 메시지에는 X-Goog-
접두어가 포함된 HTTP 헤더 집합이 포함됩니다.
일부 알림 유형에는 메시지 본문도 포함될 수 있습니다.
헤더
Admin SDK API에서 수신 URL에 게시하는 알림 메시지에는 다음과 같은 HTTP 헤더가 포함됩니다.
헤더 | 설명 |
---|---|
항상 표시 | |
|
이 알림 채널을 식별하기 위해 제공한 UUID 또는 기타 고유 문자열입니다. |
|
이 알림 채널의 메시지를 식별하는 정수입니다. sync 메시지의 값은 항상 1입니다. 메시지 번호는 채널에서 후속 메시지가 발생할 때마다 증가하지만 순차적은 아닙니다. |
|
감시하는 리소스를 식별하는 불투명한 값 이 ID는 API 버전 전체에서 안정적입니다. |
|
알림을 트리거한 새 리소스 상태
가능한 값은 sync 또는 이벤트 이름입니다.
|
|
감시 대상 리소스의 API 버전별 식별자입니다. |
간혹 발생함 | |
|
알림 채널 만료 날짜와 시간입니다. 사람이 읽을 수 있는 형식으로 표현됩니다. 정의된 경우에만 존재합니다. |
|
애플리케이션에서 설정하고 알림 소스를 확인하는 데 사용할 수 있는 알림 채널 토큰입니다. 정의된 경우에만 존재합니다. |
활동 알림 메시지의 요청 본문에는 다음 정보가 포함됩니다.
속성 | 설명 |
---|---|
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 |
보고서에 나열된 활동을 수행한 저자의 유형입니다. 이 API 버전에서 callerType 는 보고서에 나열된 작업을 수행한 USER 또는 OAuth 2LO 항목 요청입니다 . |
actor.email |
활동이 보고되는 사용자의 기본 이메일 주소입니다. |
actor.profileId |
사용자의 고유한 Google Workspace 프로필 ID입니다. |
ownerDomain |
관리 콘솔 또는 Docs 애플리케이션의 문서 소유자 도메인입니다. 보고서 이벤트의 영향을 받는 도메인입니다. |
ipAddress |
작업을 수행하는 사용자의 IP 주소입니다. Google Workspace에 로그인할 때 사용자의 인터넷 프로토콜 (IP) 주소로, 사용자의 실제 위치가 반영될 수도 있고 반영되지 않을 수도 있습니다. 예를 들어 IP 주소는 사용자의 프록시 서버 주소이거나 가상 사설망 (VPN) 주소일 수 있습니다. API는 IPv4 및 IPv6를 지원합니다. |
events[] |
보고서의 활동 이벤트 |
events[].type |
이벤트 유형입니다. 관리자가 변경하는 Google Workspace 서비스 또는 기능은 eventName 속성을 사용하여 이벤트를 식별하는 type 속성에서 식별됩니다. |
events[].name |
이벤트 이름입니다. API에서 보고된 활동의 특정 이름입니다. 각 eventName 는 API가 이벤트 유형으로 정리되는 특정 Google Workspace 서비스 또는 기능과 관련이 있습니다.
일반적인 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 API 클라이언트 라이브러리를 사용하고 500
, 502
, 503
또는 504
를 반환하면 Admin SDK API가 지수 백오프로 다시 시도합니다.
그 밖의 모든 반품 상태 코드는 메시지 실패로 간주됩니다.
Admin SDK API 알림 이벤트 이해
이 섹션에서는 Admin SDK API로 푸시 알림을 사용할 때 받을 수 있는 알림 메시지에 관해 자세히 설명합니다.
Reports API 푸시 알림에는 동기화 메시지와 이벤트 알림이라는 두 가지 유형의 메시지가 포함됩니다. 메시지 유형은 X-Goog-Resource-State
HTTP 헤더에 표시됩니다. 이벤트 알림에 사용할 수 있는 값은 activities.list
메서드와 동일합니다. 각 애플리케이션에는 고유한 이벤트가 있습니다.
알림 중지 중
만료 시간은 알림이 자동으로 중지되는 시간입니다. 다음 URI에서 stop
메서드를 호출하여 특정 채널이 만료되기 전에 알림 수신을 중지할 수 있습니다.
https://www.googleapis.com/admin/reports_v1/channels/stop
이 메서드를 사용하려면 최소한 아래 예와 같이 채널의 id
및 resourceId
속성을 제공해야 합니다. Admin SDK API에 watch
메서드가 있는 여러 유형의 리소스가 있더라도 stop
메서드는 하나뿐입니다.
적절한 권한이 있는 사용자만 채널을 중지할 수 있습니다. 구체적인 방법은 다음과 같습니다.
- 채널이 일반 사용자 계정으로 생성된 경우 같은 클라이언트의 같은 사용자 (인증 토큰의 OAuth 2.0 클라이언트 ID로 식별)만 채널을 중지할 수 있습니다.
- 서비스 계정으로 채널을 만든 경우 동일한 클라이언트의 모든 사용자가 채널을 중지할 수 있습니다.
POST https://www.googleapis.com/admin/reports_v1/channels/stop Authorization: Bearer {auth_token_for_current_user} Content-Type: application/json { "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66", "resourceId": "ret08u3rv24htgh289g" }