В этом руководстве объясняется, как настроить и использовать служебную учетную запись для доступа к API Google Chat от имени приложения чата. Сначала пошагово объясняется, как создать служебную учетную запись. Затем демонстрируется, как написать скрипт, который использует служебную учетную запись для аутентификации в API чата и отправки сообщения в пространство чата.
При аутентификации с помощью служебной учетной записи для получения данных о чате или выполнения действий в нем, приложения чата должны быть членами этого пространства. Например, чтобы вывести список участников пространства или создать сообщение в пространстве, приложение чата само должно быть членом этого пространства. Единственное исключение — когда приложение чата создает пространство с помощью аутентификации приложения, в этом случае приложение создает пространство, а затем автоматически становится его участником.
Методы Google Chat API, поддерживающие авторизацию приложений с областями авторизации, названия которых начинаются https://www.googleapis.com/auth/chat.app.* , требуют однократного подтверждения администратора . Методы Google Chat API, поддерживающие авторизацию приложений с областью авторизации https://www.googleapis.com/auth/chat.bot не требуют дополнительного подтверждения.
Если вашему приложению чата необходим доступ к данным пользователя или выполнение действий от имени пользователя, вместо этого выполните аутентификацию как пользователь . Если вы являетесь администратором домена, вы можете предоставить делегирование полномочий на уровне домена, чтобы разрешить учетной записи службы приложения чата доступ к данным пользователя без необходимости получения согласия от каждого пользователя. Для получения дополнительной информации см. раздел «Аутентификация и авторизация с использованием делегирования полномочий на уровне домена» .
Чтобы узнать больше о том, когда приложениям чата требуется аутентификация и какой тип аутентификации следует использовать, см. раздел «Типы необходимой аутентификации» в обзоре аутентификации и авторизации API чата.
Предварительные требования
Java
- 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, которое получает и обрабатывает события взаимодействия . Чтобы создать интерактивное приложение чата с использованием HTTP-сервиса, выполните следующие действия в этом кратком руководстве .
- Добавьте приложение «Чат» в пространство. Чтобы добавить приложение «Чат», см. раздел «Тестирование интерактивных функций для приложений Google Chat» .
Python
- Python 3.6 или выше
- Инструмент управления пакетами pip
- Приложение Google Chat, которое получает и обрабатывает события взаимодействия . Чтобы создать интерактивное приложение чата с использованием HTTP-сервиса, выполните следующие действия в этом кратком руководстве .
- Добавьте приложение «Чат» в пространство. Чтобы добавить приложение «Чат», см. раздел «Тестирование интерактивных функций для приложений Google Chat» .
Node.js
- Node.js 14 или выше
- Инструмент управления пакетами npm
- Инициализированный проект Node.js. Чтобы инициализировать новый проект, создайте новую папку, перейдите в неё и выполните следующую команду в командной строке:
npm init
- Приложение Google Chat, которое получает и обрабатывает события взаимодействия . Чтобы создать интерактивное приложение чата с использованием HTTP-сервиса, выполните следующие действия в этом кратком руководстве .
- Добавьте приложение «Чат» в пространство. Чтобы добавить приложение «Чат», см. раздел «Тестирование интерактивных функций для приложений Google Chat» .
Apps Script
- Приложение Google Chat, которое получает и обрабатывает события взаимодействия . Чтобы создать интерактивное приложение чата в Apps Script, выполните следующие действия в этом кратком руководстве .
- Добавьте приложение «Чат» в пространство. Чтобы добавить приложение «Чат», см. раздел «Тестирование интерактивных функций для приложений Google Chat» .
Шаг 1: Создайте учетную запись службы в консоли Google Cloud.
Создайте учетную запись службы, которую ваше приложение для чата сможет использовать для доступа к API Google.
Создайте учетную запись службы
Для создания служебной учетной записи выполните следующие действия:
Консоль Google Cloud
- В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .
- Нажмите «Создать учетную запись службы» .
- Заполните данные учетной записи службы, затем нажмите «Создать и продолжить» .
- Необязательно: назначьте роли вашей учетной записи службы, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Для получения более подробной информации см. раздел «Предоставление, изменение и отзыв доступа к ресурсам» .
- Нажмите «Продолжить» .
- Необязательно: укажите пользователей или группы, которые могут управлять этой учетной записью службы и выполнять с ней действия. Дополнительные сведения см. в разделе «Управление имитацией учетной записи службы» .
- Нажмите «Готово» . Запишите адрес электронной почты учетной записи службы.
gcloud CLI
- Создайте учетную запись службы:
gcloud iam service-accounts createSERVICE_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.* , вашему приложению чата необходимо получить одноразовое подтверждение администратора .
Для получения подтверждения от администратора необходимо подготовить учетную запись службы вашего приложения «Чат», указав следующую информацию:
- Клиент OAuth, совместимый с Google Workspace Marketplace.
- Настройка приложения в SDK Google Workspace Marketplace.
Создайте OAuth-клиент, совместимый с Google Workspace Marketplace.
Чтобы создать OAuth-клиент, совместимый с Google Workspace Marketplace, выполните следующие действия:
В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .
Щёлкните по учетной записи службы, которую вы создали для своего приложения «Чат».
Нажмите «Дополнительные настройки» .
Нажмите «Создать OAuth-клиент, совместимый с Google Workspace Marketplace» .
Нажмите «Продолжить» .
Появляется сообщение с подтверждением, указывающее на то, что создан OAuth-клиент, совместимый с Google Workspace Marketplace.
Настройте приложение «Чат» в SDK Google Workspace Marketplace.
Чтобы настроить приложение «Чат» в SDK Google Workspace Marketplace, выполните следующие действия:
В консоли Google Cloud включите SDK Google Workspace Marketplace.
В > API и сервисы > Включенные API и сервисы > Google Workspace Marketplace SDK > Конфигурация приложения .
Заполните страницу «Настройка приложения». Способ настройки вашего чат-приложения зависит от вашей целевой аудитории и других факторов. Для получения помощи по заполнению страницы «Настройка приложения в SDK Google Workspace Marketplace» см. раздел «Настройка приложения» . Для целей данного руководства введите следующую информацию:
- В разделе «Видимость приложения» выберите «Частное» .
- В разделе «Настройки установки» выберите «Индивидуальная установка + установка администратора» .
- В разделе «Интеграция приложений» выберите приложение «Чат» .
В разделе «Области аутентификации OAuth» укажите все области аутентификации , используемые вашим приложением чата.
В разделе «Информация о разработчике» укажите ваше имя разработчика , URL-адрес веб-сайта разработчика и адрес электронной почты разработчика .
Нажмите «Сохранить черновик» .
Получите одобрение администратора.
Теперь, когда ваша учетная запись службы настроена на получение подтверждения администратора, получите его от администратора Google Workspace, который может предоставить подтверждение, выполнив действия, описанные в разделе «Настройка авторизации для приложений чата» .
Шаг 2: Установите клиентскую библиотеку Google и другие зависимости.
Установите клиентскую библиотеку Google и другие зависимости, необходимые для проекта.
Java
Чтобы добавить клиентские библиотеки 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>
Python
Если вы еще не установили клиентские библиотеки Google для Python, выполните следующую команду в командной строке:
pip3 install --upgrade google-api-python-client google-authNode.js
Чтобы добавить клиентские библиотеки Google в ваш проект Node.js, перейдите в каталог вашего проекта и выполните следующую команду в командной строке:
npm install "@googleapis/chat"Apps Script
В этом примере используется библиотека OAuth2 for Apps Script для генерации JWT-токена для аутентификации учетной записи службы. Чтобы добавить библиотеку в свой проект Apps Script:
- Слева нажмите «Редактор .
- Слева, рядом с пунктом «Библиотеки» , нажмите « библиотеку» .
- Введите идентификатор скрипта
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF. - Нажмите «Найти» , затем нажмите «Добавить» .
В этом примере используется служба Advanced Chat для вызова API Google Chat. Чтобы включить эту службу для вашего проекта Apps Script:
- Слева нажмите «Редактор .
- Слева, рядом с пунктом «Услуги» , нажмите « услугу» .
- Выберите Google Chat API .
- В поле «Версия» выберите v1 .
- Нажмите «Добавить» .
Вы можете использовать любой язык, поддерживаемый нашими клиентскими библиотеками .
Шаг 3: Напишите скрипт, который использует учетную запись службы для аутентификации в Chat API.
Следующий код выполняет аутентификацию в API чата с использованием учетной записи службы, а затем отправляет сообщение в пространство чата:
Java
- В директории вашего проекта откройте файл
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>
Python
- В рабочей директории создайте файл с именем
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
В редакторе 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: Запустите полный пример.
В рабочей директории соберите и запустите пример:
Java
mvn compile assembly:singlejava -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Python
python3 chat_app_auth.pyNode.js
node chat_app_auth.jsApps Script
Откройте файл ChatAppAuth.gs в редакторе Apps Script и нажмите «Запустить» .
Ваш скрипт отправляет аутентифицированный запрос к 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 с просьбой одобрить ваше приложение чата . При обработке этой ошибки в логике вашего приложения чата рассмотрите возможность отправки сообщения о том, что приложению чата требуется одобрение администратора для выполнения запрошенного действия, например:
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.*, узнайте, как администраторы предоставляют одноразовое подтверждение .