В этом руководстве объясняется, как настроить и использовать учётную запись службы для доступа к API Google Chat из приложения Chat. Сначала вы узнаете, как создать учётную запись службы. Затем будет показано, как написать скрипт, который использует учётную запись службы для аутентификации в API Chat и публикации сообщения в чат-группе.
При аутентификации с помощью учётной записи сервиса для получения данных о пространстве чата или выполнения действий в нём приложения чата должны быть участниками этого пространства. Например, чтобы составить список участников пространства или создать сообщение в нём, приложение чата само должно быть его участником. Исключением является случай, когда приложение чата создаёт пространство с аутентификацией приложения. В этом случае приложение создаёт пространство и автоматически становится его участником.
Методы API Google Chat, поддерживающие авторизацию приложений с областями авторизации, имена которых начинаются https://www.googleapis.com/auth/chat.app.*
, требуют однократного одобрения администратора . Методы API Google Chat, поддерживающие авторизацию приложений с областью авторизации https://www.googleapis.com/auth/chat.bot
не требуют дополнительного одобрения.
Если вашему приложению Chat требуется доступ к данным пользователя или выполнение действий от его имени, пройдите аутентификацию как пользователь . Если вы являетесь администратором домена, вы можете предоставить общедоменное делегирование полномочий, чтобы разрешить учётной записи службы приложения Chat доступ к данным вашего пользователя без необходимости получения согласия каждого пользователя. Подробнее см. в статье «Аутентификация и авторизация с использованием общедоменного делегирования» .
Дополнительную информацию о том, когда приложениям Chat требуется аутентификация и какой тип аутентификации следует использовать, см. в разделе Типы требуемой аутентификации в обзоре аутентификации и авторизации API Chat.
Предпосылки
Ява
- JDK 1.7 или выше
- Инструмент управления пакетами Maven
- Инициализированный проект Maven. Чтобы инициализировать новый проект, выполните следующую команду в командной строке:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
- Приложение Google Chat, которое получает и реагирует на события взаимодействия . Чтобы создать интерактивное приложение Chat с использованием HTTP-сервиса, выполните это краткое руководство .
- Добавьте приложение Chat в чат-группу. Чтобы добавить приложение Chat, см. статью Тестирование интерактивных функций для приложений Google Chat .
Питон
- Python 3.6 или выше
- Инструмент управления пакетами pip
- Приложение Google Chat, которое получает и реагирует на события взаимодействия . Чтобы создать интерактивное приложение Chat с использованием HTTP-сервиса, выполните это краткое руководство .
- Добавьте приложение Chat в чат-группу. Чтобы добавить приложение Chat, см. статью Тестирование интерактивных функций для приложений Google Chat .
Node.js
- Node.js 14 или выше
- Инструмент управления пакетами npm
- Инициализированный проект Node.js. Чтобы инициализировать новый проект, создайте и перейдите в новую папку, а затем выполните следующую команду в интерфейсе командной строки:
npm init
- Приложение Google Chat, которое получает и реагирует на события взаимодействия . Чтобы создать интерактивное приложение Chat с использованием HTTP-сервиса, выполните это краткое руководство .
- Добавьте приложение Chat в чат-группу. Чтобы добавить приложение Chat, см. статью Тестирование интерактивных функций для приложений Google Chat .
Скрипт приложений
- Приложение Google Chat, которое получает и реагирует на события взаимодействия . Чтобы создать интерактивное приложение Chat в Apps Script, выполните это краткое руководство .
- Добавьте приложение Chat в чат-группу. Чтобы добавить приложение Chat, см. статью Тестирование интерактивных функций для приложений Google Chat .
Шаг 1: Создайте учетную запись службы в консоли Google Cloud
Создайте учетную запись службы, которую ваше приложение чата сможет использовать для доступа к API Google.
Создать учетную запись службы
Чтобы создать учетную запись службы, выполните следующие действия:
Консоль Google Cloud
- В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .
- Нажмите Создать учетную запись службы .
- Заполните данные учетной записи службы, затем нажмите «Создать» и продолжите .
- Необязательно: назначьте роли своему сервисному аккаунту, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Подробнее см. в разделе Предоставление, изменение и отзыв доступа к ресурсам .
- Нажмите «Продолжить» .
- Необязательно: введите пользователей или группы, которые смогут управлять этой учётной записью службы и выполнять с ней действия. Подробнее см. в разделе Управление олицетворением учётной записи службы .
- Нажмите «Готово» . Запишите адрес электронной почты для учётной записи сервиса.
gcloud CLI
- Создайте учетную запись службы:
gcloud iam service-accounts create
SERVICE_ACCOUNT_NAME
\ --display-name="SERVICE_ACCOUNT_NAME
" - Необязательно: назначьте роли своему сервисному аккаунту, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Подробнее см. в разделе Предоставление, изменение и отзыв доступа к ресурсам .
Учётная запись сервиса появится на странице учётной записи сервиса. Затем создайте для неё закрытый ключ.
Создать закрытый ключ
Чтобы создать и загрузить закрытый ключ для учетной записи службы, выполните следующие действия:
- В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .
- Выберите свою учетную запись службы.
- Нажмите Ключи > Добавить ключ > Создать новый ключ .
- Выберите JSON , затем нажмите Создать .
Ваша новая пара открытого и закрытого ключей будет сгенерирована и загружена на ваш компьютер в виде нового файла. Сохраните загруженный JSON-файл как
credentials.json
в вашем рабочем каталоге. Этот файл — единственная копия данного ключа. Сведения о безопасном хранении ключа см. в разделе Управление ключами учётной записи службы . - Нажмите «Закрыть» .
Дополнительную информацию об учетных записях служб см. в разделе «Учетные записи служб» в документации Google Cloud IAM.
Затем создайте для этой учетной записи службы клиент OAuth, совместимый с Google Workspace Marketplace.
Получите одобрение администратора
Для использования области авторизации https://www.googleapis.com/auth/chat.bot
одобрение администратора не требуется. Перейдите к шагу 2: Установка клиентской библиотеки Google и других зависимостей . В примере в этом руководстве используется область авторизации https://www.googleapis.com/auth/chat.bot
, поэтому, если вы следуете примеру, перейдите к шагу 2.
Чтобы использовать область авторизации, начинающуюся с https://www.googleapis.com/auth/chat.app.*
, ваше приложение Chat должно получить однократное одобрение администратора .
Чтобы получить одобрение администратора, вам необходимо подготовить учетную запись службы приложения Chat, указав следующую информацию:
- Клиент OAuth, совместимый с Google Workspace Marketplace.
- Конфигурация приложения в Google Workspace Marketplace SDK.
Создайте клиент OAuth, совместимый с Google Workspace Marketplace
Чтобы создать клиент OAuth, совместимый с Google Workspace Marketplace, выполните следующие действия:
В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .
Щелкните учетную запись службы, которую вы создали для своего приложения Chat.
Нажмите Дополнительные настройки .
Нажмите «Создать клиент OAuth, совместимый с Google Workspace Marketplace» .
Нажмите «Продолжить» .
Появится подтверждающее сообщение о том, что создан клиент OAuth, совместимый с Google Workspace Marketplace.
Настройте приложение чата в Google Workspace Marketplace SDK
Чтобы настроить приложение Chat в Google Workspace Marketplace SDK, выполните следующие действия:
В консоли Google Cloud включите Google Workspace Marketplace SDK.
В консоли Google Cloud перейдите API и службы > Включенные API и службы > Google Workspace Marketplace SDK > Конфигурация приложения .
>Заполните страницу конфигурации приложения. Настройка приложения Chat зависит от вашей целевой аудитории и других факторов. За информацией о заполнении страницы конфигурации приложения обратитесь к разделу «Настройка приложения в Google Workspace Marketplace SDK» . Для целей данного руководства введите следующую информацию:
- В разделе Видимость приложения выберите Частное .
- В разделе «Параметры установки» выберите «Индивидуальная установка + установка администратора» .
- В разделе Интеграция приложений выберите Приложение чата .
В разделе OAuth scopes введите все области аутентификации, которые использует ваше приложение Chat.
В разделе «Информация о разработчике» введите имя разработчика , URL-адрес веб-сайта разработчика и адрес электронной почты разработчика .
Нажмите Сохранить черновик .
Получите одобрение администратора
Теперь, когда ваша учетная запись службы настроена на получение одобрения администратора, получите его у администратора Google Workspace, который может предоставить одобрение, выполнив шаги, описанные в разделе Настройка авторизации для приложений чата .
Шаг 2: Установка клиентской библиотеки Google и других зависимостей
Установите клиентскую библиотеку Google и другие зависимости, необходимые для проекта.
Ява
Чтобы добавить клиентские библиотеки Google и другие необходимые зависимости в ваш проект Maven, отредактируйте файл pom.xml
в каталоге вашего проекта и добавьте следующие зависимости:
<dependencies>
<!-- ... existing dependencies ... -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-chat</artifactId>
<version>v1-rev20230905-2.0.0</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Питон
Если вы еще не установили клиентские библиотеки Google для Python, выполните следующую команду в интерфейсе командной строки:
pip3 install --upgrade google-api-python-client google-auth
Node.js
Чтобы добавить клиентские библиотеки Google в ваш проект Node.js, перейдите в каталог вашего проекта и выполните следующую команду в интерфейсе командной строки:
npm install "@googleapis/chat"
Скрипт приложений
В этом примере используется библиотека OAuth2 for Apps Script для генерации JWT-токена для аутентификации учётной записи сервиса. Чтобы добавить библиотеку в проект Apps Script:
- Слева нажмите Редактор .
- Слева, рядом с пунктом Библиотеки , нажмите библиотеку .
- Введите идентификатор скрипта
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
. - Нажмите «Поиск» , затем нажмите « Добавить» .
В этом примере используется служба Advanced Chat для вызова API Google Chat. Чтобы включить службу для вашего проекта Apps Script:
- Слева нажмите Редактор .
- Слева, рядом с пунктом Услуги , нажмите услугу .
- Выберите API чата Google .
- В поле Версия выберите v1 .
- Нажмите «Добавить» .
Вы можете использовать любой язык, поддерживаемый нашими клиентскими библиотеками .
Шаг 3: Напишите скрипт, который использует учетную запись службы для аутентификации с помощью Chat API.
Следующий код выполняет аутентификацию в API чата с использованием учетной записи службы, а затем публикует сообщение в пространстве чата:
Ява
- В каталоге вашего проекта откройте файл
src/main/java/com/google/chat/app/authsample/App.java
. Замените содержимое
App.java
следующим кодом:package com.google.chat.app.authsample; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.json.gson.GsonFactory; import com.google.api.services.chat.v1.HangoutsChat; import com.google.api.services.chat.v1.model.Message; import com.google.auth.http.HttpCredentialsAdapter; import com.google.auth.oauth2.GoogleCredentials; /** * Authenticates with Chat API using service account credentials, * then creates a Chat message. */ public class App { // Specify required scopes. private static final String CHAT_SCOPE = "https://www.googleapis.com/auth/chat.bot"; // Specify service account details. private static final String PRIVATE_KEY_RESOURCE_URI = "/credentials.json"; public static void main( String[] args ) { try { // Run app. Message response = App.createChatMessage(); // Print details about the created message. System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } private static Message createChatMessage() throws Exception { // Build the Chat API client and authenticate with the service account. GoogleCredentials credentials = GoogleCredentials.fromStream( App.class.getResourceAsStream(PRIVATE_KEY_RESOURCE_URI)) .createScoped(CHAT_SCOPE); HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials); HangoutsChat chatService = new HangoutsChat.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), requestInitializer) .setApplicationName("auth-sample-app") .build(); // The space to create the message in. // // Replace SPACE_NAME with a space name. // Obtain the space name from the spaces resource of Chat API, // or from a space's URL. String spaceName = "spaces/SPACE_NAME"; // Create a Chat message. Message message = new Message().setText("Hello, world!"); return chatService.spaces().messages().create(spaceName, message).execute(); } }
В коде замените
SPACE_NAME
на имя пространства, которое можно получить из методаspaces.list
в Chat API или из URL-адреса пространства.Создайте новый подкаталог с именем
resources
в каталоге вашего проекта.Убедитесь, что файл закрытого ключа для вашей учетной записи службы называется
credentials.json
, и скопируйте его в подкаталогresources
.Чтобы настроить Maven для включения файла закрытого ключа в пакет проекта, отредактируйте файл
pom.xml
в каталоге вашего проекта и добавьте следующую конфигурацию в раздел<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Чтобы настроить Maven для включения зависимостей в пакет проекта и выполнения основного класса вашего приложения, отредактируйте файл
pom.xml
в каталоге вашего проекта и добавьте следующую конфигурацию в раздел<plugins>
:<plugins> <!-- ... existing configurations ... --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.google.chat.app.authsample.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins>
Питон
- В рабочем каталоге создайте файл с именем
chat_app_auth.py
. Включите следующий код в
chat_app_auth.py
:from apiclient.discovery import build from google.oauth2 import service_account # Specify required scopes. SCOPES = ['https://www.googleapis.com/auth/chat.bot'] # Specify service account details. creds = service_account.Credentials.from_service_account_file( 'credentials.json', scopes=SCOPES) # Build the URI and authenticate with the service account. chat = build('chat', 'v1', credentials=creds) # Create a Chat message. result = chat.spaces().messages().create( # The space to create the message in. # # Replace SPACE_NAME with a space name. # Obtain the space name from the spaces resource of Chat API, # or from a space's URL. parent='spaces/SPACE_NAME', # The message to create. body={'text': 'Hello, world!'} ).execute() # Prints details about the created message. print(result)
В коде замените
SPACE_NAME
на имя пространства, которое можно получить из методаspaces.list
в Chat API или из URL пространства. Убедитесь, что файл закрытого ключа для вашей учётной записи сервиса называетсяcredentials.json
.
Node.js
- В каталоге вашего проекта создайте файл с именем
chat_app_auth.js
. Включите следующий код в
chat_app_auth.js
:const chat = require('@googleapis/chat'); async function createMessage() { const auth = new chat.auth.GoogleAuth({ // Specify service account details. keyFilename: 'credentials.json', // Specify required scopes. scopes: ['https://www.googleapis.com/auth/chat.bot'] }); const authClient = await auth.getClient(); // Create the Chat API client and authenticate with the service account. const chatClient = await chat.chat({ version: 'v1', auth: authClient }); // Create a Chat message. const result = await chatClient.spaces.messages.create({ // The space to create the message in. // // Replace SPACE_NAME with a space name. // Obtain the space name from the spaces resource of Chat API, // or from a space's URL. parent: 'spaces/SPACE_NAME', // The message to create. requestBody: { 'text': 'Hello, world!' } }); return result; } // Execute function then print details about the created message. createMessage().then(console.log);
В коде замените
SPACE_NAME
на имя пространства, которое можно получить из методаspaces.list
в Chat API или из URL пространства. Убедитесь, что файл закрытого ключа для вашей учётной записи сервиса называетсяcredentials.json
.
Скрипт приложений
В редакторе Apps Script отредактируйте файл
appsscript.json
и добавьте область OAuth, необходимую для выполнения внешних запросов на получение токена OAuth учетной записи службы:"oauthScopes": [ "https://www.googleapis.com/auth/script.external_request" ]
Сохраните следующий код в файле с именем
ChatAppAuth.gs
в вашем проекте Apps Script:// Specify the contents of the file credentials.json. const CREDENTIALS = CREDENTIALS; const SCOPE = 'https://www.googleapis.com/auth/chat.bot'; // The space to create the message in. // // Replace SPACE_NAME with a space name. // Obtain the space name from the spaces resource of Chat API, // or from a space's URL. const PARENT = 'spaces/SPACE_NAME' /** * Authenticates with Chat API using app credentials, then posts a message. */ function createMessageWithAppCredentials() { try { const service = getService_(); if (!service.hasAccess()) { console.error(service.getLastError()); return; } // Specify the message to create. const message = {'text': 'Hello world!'}; // Call Chat API with a service account to create a message. const result = Chat.Spaces.Messages.create( message, PARENT, {}, // Authenticate with the service account token. {'Authorization': 'Bearer ' + service.getAccessToken()}); // Log details about the created message. console.log(result); } catch (err) { // TODO (developer) - Handle exception. console.log('Failed to create message with error %s', err.message); } } /** * Configures the OAuth library to authenticate with the service account. */ function getService_() { return OAuth2.createService(CREDENTIALS.client_email) .setTokenUrl('https://oauth2.googleapis.com/token') .setPrivateKey(CREDENTIALS.private_key) .setIssuer(CREDENTIALS.client_email) .setSubject(CREDENTIALS.client_email) .setScope(SCOPE) .setPropertyStore(PropertiesService.getScriptProperties()); }
В коде замените
CREDENTIALS
содержимым файлаcredentials.json
.В коде замените
SPACE_NAME
на имя пространства, которое можно получить из методаspaces.list
в Chat API или из URL-адреса пространства.
Шаг 4: Запустите полный пример
В вашем рабочем каталоге соберите и запустите пример:
Ява
mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Питон
python3 chat_app_auth.py
Node.js
node chat_app_auth.js
Скрипт приложений
Откройте файл ChatAppAuth.gs
в редакторе скриптов приложений и нажмите «Выполнить» .
Ваш скрипт отправляет аутентифицированный запрос к API чата , который отвечает публикацией сообщения в пространстве чата в виде приложения чата.
Устранение неполадок в примере
В этом разделе описываются распространенные проблемы, с которыми вы можете столкнуться при попытке запустить этот образец.
Вам не разрешено использовать это приложение.
При запуске скрипта может возникнуть следующая ошибка:
<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}/messages?alt=json returned "You are not permitted to use this app". Details: "You are not permitted to use this app">
Это сообщение об ошибке означает, что у приложения чата нет разрешения на создание сообщений чата в указанном пространстве чата.
Чтобы устранить ошибку, добавьте приложение чата в пространство чата, указанное в скрипте.
Администратор должен предоставить приложению требуемую область авторизации OAuth для этого действия.
При запуске скрипта может возникнуть следующая ошибка:
<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}?alt=json returned "The administrator must grant the app the required OAuth authorization scope for this action.". Details: "The administrator must grant the app the required OAuth authorization scope for this action.">
Это сообщение об ошибке означает, что администратор Google Workspace еще не предоставил однократное разрешение приложению Chat на использование областей авторизации, начинающихся с имени https://www.googleapis.com/auth/chat.app.*
.
Чтобы устранить ошибку:
- Попросите администратора Google Workspace предоставить одобрение вашему приложению Chat . При обработке этой ошибки в логике приложения Chat рассмотрите возможность отправки сообщения о том, что приложению Chat требуется одобрение администратора для выполнения запрошенного действия, например:
To perform this action, I need approval. <https://support.google.com/a?p=chat-app-auth|Learn more>.
- Если метод Google Chat API поддерживает область авторизации
https://www.googleapis.com/auth/chat.bot
, которая не требует одобрения администратора, рассмотрите возможность использования этого метода. Чтобы узнать, какие области авторизации поддерживает метод, см. справочную документацию Google Chat API .
Похожие темы
- Узнайте, что еще может делать Chat API, изучив справочную документацию Chat API.
- Если вы используете область авторизации OAuth, начинающуюся с
https://www.googleapis.com/auth/chat.app.*
, узнайте, как администраторы предоставляют одноразовое одобрение .