1. Подготовка
Что такое приложения Google Chat с Gemini?
Приложения Google Chat с Gemini выполняют следующие действия:
- Интегрируйте свои сервисы и ресурсы с Google Chat, чтобы пользователи могли получать информацию и выполнять действия, не выходя из чата.
- Интегрируйте их с моделью генеративного ИИ Gemini, чтобы они могли создавать или искать данные, например текст или изображения, в определенное время для оптимизации рабочих процессов.
Зачем интегрировать приложения Google Chat с Gemini?
Типичные варианты использования моделей генеративного ИИ, таких как Gemini, делятся на следующие категории:
- Создание и улучшение контента. Генерируйте маркетинговые тексты, создавайте публикации для социальных сетей, реалистичные изображения, музыку и видеоконтент.
- Поиск данных. Извлекайте ключевые идеи из неструктурированной базы знаний, обобщайте длинные тексты, классифицируйте контент или переводите на другие языки с повышенной точностью и скоростью.
- Разговор. Общайтесь с Gemini на любые темы.
Возможность интегрировать эти функции непосредственно в привычный интерфейс Google Chat – это огромная возможность для всех, кто хочет повысить удобство и продуктивность своих пользователей.
Требования
- Базовые знания Apps Script, Google Cloud и Node.js.
- Базовые знания о концепциях Google Chat, включая обработчики событий, слеш-команды, диалоговые окна, карточки, сообщения, аутентификацию приложений и API.
Что вы создаете
В этой практической работе вы создадите три приложения для Google Chat с помощью Gemini, чтобы охватить три сценария использования, описанные в предыдущем разделе.
Приложение для управления проблемами (создание и улучшение контента)
Это приложение выполняет следующие действия:
- Управляет проблемами от создания до закрытия с помощью базовых взаимодействий, главного экрана приложения и аутентификации приложения.
- Отслеживает сообщения и помогает сделать мероприятия и виджеты более инклюзивными.
Вы используете Gemini, чтобы:
- Генерировать отчеты о проблемах на основе истории переписки и сведений о проблеме.
- Классифицируйте неинклюзивные слова в сообщениях с помощью закрытых запросов.
Основные используемые технологии: Vertex AI, Gemini, Apps Script и Google Workspace API (Admin, Chat, Docs, Events).



Приложение для поиска данных
Приложение использует Gemini, чтобы понимать вопросы на естественном языке и отвечать на них, а также возвращать ссылки на источники из неструктурированных данных.
Основные используемые технологии – агент хранилища данных Dialogflow CX, вебхук Dialogflow CX, Google Cloud Functions и Gemini.

Приложение для отзывов (разговор)
Это приложение использует Gemini для сбора и хранения отзывов с разговорами на естественном языке.
Основные используемые технологии: агент Dialogflow CX, инструмент Dialogflow CX, OpenAPI, Google Cloud Functions и Gemini.

Что вы узнаете
- Как интегрировать приложения Google Chat с Gemini через Vertex AI.
- Как интегрировать приложения Google Chat с агентами Dialogflow CX.
- Как использовать новые функции Google Chat: главный экран приложения, события Google Chat и виджеты.
Что вам понадобится
- Выполните инструкции из руководства Как создать приложение Google Chat с помощью Apps Script. Эта практическая работа основана на полученном проекте Apps Script и Google Cloud.
2. Подготовка
Инициализация ресурсов
В этом разделе вы получите доступ к следующим ресурсам и настроите их в предпочитаемом браузере.
Проект Apps Script
В консоли Apps Script выполните следующие действия:
- Нажмите Настройки и включите Google Apps Script API.

- Выберите проект.
- Нажмите Настройки проекта.
- Установите флажок Показать файл манифеста
appsscript.jsonв редакторе. - Переименуйте проект в
Chat Apps Gemini.

Проект Google Cloud
В консоли Google Cloud выполните следующие действия:
- Выберите проект.
- Нажмите Меню ☰ > API и сервисы > Окно запроса доступа OAuth > Изменить приложение, а затем в поле Название приложения введите
Chat Apps Gemini.
- Перейдите к конфигурации Google Chat API и задайте для параметров App name (Название приложения) и Description (Описание) значение
Chat Apps Gemini.

Google Chat
В Google Chat выполните следующие действия:
- При необходимости начните чат с приложением Google Chat.
- Отправьте сообщение, например
Hello, чтобы убедиться, что все работает.

Скачайте исходный код и ресурсы на локальный диск
- Скачайте этот репозиторий GitHub.
- В предпочитаемой среде разработки откройте каталог
apps-script, а затем перейдите в тот же каталог в терминале.

Установите и настройте clasp.
Мы используем clasp, чтобы легко редактировать и отправлять версии исходного кода из локальной среды в проект Apps Script.
- Установите последние версии
node,npmиclaspв локальной среде.
npm install -g @google/clasp
- Войдите в аккаунт.
clasp login

Если все пройдет успешно, в браузере появится экран подтверждения, а файл .clasprc.json с учетными данными клиента будет обновлен. Вы можете узнать, где он находится в вашем терминале.

3. Приложение 1. Сборка
Посмотреть концепции
Vertex AI
Vertex AI предлагает все необходимое для создания и использования генеративного искусственного интеллекта, включая ИИ-решения, конструктор агентов, более 130 базовых моделей и единую ИИ-платформу.

Gemini
Gemini – это мультимодальная большая языковая модель от Google, доступная через Vertex AI. Он помогает людям раскрыть свой потенциал, расширить воображение, развить любознательность и повысить продуктивность.
Расширенный сервис Chat
Расширенный сервис Chat позволяет использовать Google Chat API в Apps Script. Это позволяет скриптам находить, создавать и изменять чат-группы, добавлять и удалять участников, а также читать и публиковать сообщения с текстом, карточками, прикрепленными файлами и реакциями.
Архитектура отзывов

Это приложение Google Chat создано с помощью Apps Script. Ниже описан принцип работы этих отчетов.
- Пользователь отправляет сообщение приложению в прямой переписке или чат-группе.
- Приложение, которое реализовано в проекте Apps Script и связано с проектом Google Cloud, обрабатывает сообщение.
- Приложение интегрировано с API Google Документов и Google Chat.
- Приложение использует сервис свойств, чтобы сохранять данные в свойствах скрипта.
- Приложение отправляет синхронный ответ в прямой переписке или в исходной чат-группе.
Процессы проверки
Создать проблему

Устранение неполадок в чат-группе

Как закрыть проблему в чат-группе

Проверьте исходный код
Проект Apps Script содержит следующие скрипты:
Configuration– константы, которые нужно изменить в зависимости от среды.ChatApp– обрабатывает события взаимодействия в Google Chat, включая сообщения, нажатия на карточки, слеш-команды и диалоги.Storage– служебные функции, которые используют сервис Properties.ChatAppAuth– служебные функции, которые используют аутентификацию приложения Google Chat.Docs: служебные функции, которые используют Google Документы.VertexAi– служебные функции, которые используют Vertex AI.
А вот какие части активно используются при создании отчетов с помощью Gemini и истории чатов:
appsscript.json
// Enables the Admin SDK Directory and Chat services, which you need to retrieve
// messages and usernames.
"enabledAdvancedServices": [
...
{
"userSymbol": "AdminDirectory",
"version": "directory_v1",
"serviceId": "admin"
},
{
"userSymbol": "Chat",
"version": "v1",
"serviceId": "chat"
}
...
]
// Includes the OAuth scopes to request the Admin SDK Directory, Google Chat,
// Google Docs, and Vertex AI APIs.
"oauthScopes": [
...
"https://www.googleapis.com/auth/admin.directory.user.readonly",
"https://www.googleapis.com/auth/chat.messages.readonly",
"https://www.googleapis.com/auth/documents",
"https://www.googleapis.com/auth/cloud-platform",
...
]
Configuration.js
// Relies on two constants: the first one is the Google Cloud project ID and the
// second one is the Vertex AI location to be used.
...
const PROJECT_ID = 'replace-with-gcp-project-id';
const VERTEX_AI_LOCATION_ID = 'us-central1';
...
ChatApp.js
// The slash command process function retrieves history, generates content, and passes
// it to the report generator.
function processSlashCommand(event) {
...
if (event.message.slashCommand.commandId == CLOSE_COMMAND_ID
&& event.message.space.type !== "DM") {
...
const history = exportSpaceHistory(spaceId);
const summary = summarizeSpace(history);
const docUrl = createReport(
issue.title, issue.description, resolution, history, summary
);
...
}
...
}
/**
* Fetches and concatenates the 100 first space messages by using the Google Chat API.
*
* Messages with slash commands are filtered (app command invocations).
*
* @return {string} concatenate space messages in the format "Sender's name: Message"
*/
function exportSpaceHistory(spaceName) {
const messages = Chat.Spaces.Messages.list(spaceName, { 'pageSize': 100 }).messages;
// Returns results after fetching message sender display names.
let users = new Map();
return messages>
.filter(message = message.slashCommand === undefin>ed)
.map(message =
`${getUserDisplayName(users, message.sender.name)}: ${message.text}`
).join('\n');
}
/**
* Fetches a user's display name by using the Admin Directory API.
*
* A cache is used to only call the API once per user.
*
* @param {Map} cache the map containing users previously fetched
* @param {string} userId the user ID to fetch
* @return {string} the user's display name
*/
function getUserDisplayName(cache, userId) {
if (cache.has(userId)) {
return cache.get(userId);
}
let displayName = 'Unknown User';
try {
const user = AdminDirectory.Users.get(
userId.replace("users/", ""),
{ projection: 'BASIC', viewType: 'domain_public' });
displayName = user.name.displayName ? user.name.displayName : user.name.fullName;
} catch (e) {
// Ignores errors, uses 'Unknown User' by default.
}
cache.set(userId, displayName);
return displayName;
}
VertexAi.js
/**
* Summarizes a Google Chat space history with the Gemini Pro model using
* Vertex AI API.
*
* @param {string} history the history
* @return {string} the summary
*/
function summarizeSpace(history) {
const url = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
+ `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
+ "/publishers/google/models/gemini-1.0-pro:generateContent";
const options = {
method: "POST",
headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
contentType: "application/json",
payload: JSON.stringify({
contents: {
role: "user",
parts: {
text: "Summarize the following conversation between engineers resolving"
+ " an issue in a few sentences.\n\n" + history
}
},
safetySettings: {
category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
threshold: "BLOCK_LOW_AND_ABOVE"
},
generationConfig: {
temperature: 0.2,
topP: 0.8,
topK: 40
}
})
};
return JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
.candidates[0].content.parts[0].text;
}
Docs.js
// The report generator function adds two sections: the first one is for the summary and the second one is for history.
function createReport(..., history, summary) {
...
body.appendParagraph("Summary").setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph(summary);
body.appendParagraph("History").setHeading(DocumentApp.ParagraphHeading.HEADING1);
body.appendParagraph(history);
...
}
Обновить проект Google Cloud
Как включить API
- В консоли Google Cloud включите API Google Документов, Google Admin SDK и Vertex AI.
- Нажмите Меню ☰ > API и сервисы > Включенные API и сервисы и убедитесь, что API включены.
Инициализация сервисного аккаунта
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > IAM и администрирование > Сервисные аккаунты > + Создать сервисный аккаунт.

- В поле Service account name (Название сервисного аккаунта) укажите
chat-app. - В поле Service account description (Описание сервисного аккаунта) введите
Chat app auth. - Нажмите кнопку Создать и продолжить.
- Нажмите Готово. Вы будете перенаправлены на страницу Сервисные аккаунты, где увидите созданный вами сервисный аккаунт.

- Выберите только что созданный сервисный аккаунт.
- Выберите вкладку Ключи.
- Нажмите Добавить ключ.
- Нажмите Создать ключ.
- Выберите JSON.
- Нажмите Создать.

Диалоговое окно закроется, и созданная пара ключей будет автоматически скачана на ваше устройство в виде JSON-файла. Его содержимое понадобится вам позже, когда вы будете редактировать исходный код проекта Apps Script.
Как изменить конфигурацию Google Chat API
В консоли Google Cloud выполните следующие действия:
- Добавьте слеш-команду.
- В поле Name (Название) укажите
/create. - В поле Command ID (Идентификатор команды) введите
1. - В поле Description (Описание) введите
Create a new issue. - Установите флажок Открывает диалоговое окно.
- Добавьте ещё одну слеш-команду.
- В поле Name (Название) укажите
/close. - В поле Command ID (Идентификатор команды) введите
2. - В поле Description (Описание) введите
Close an issue. - Нажмите Сохранить.

Обновление проекта Apps Script
- Измените текущий каталог в локальном терминале на
issue-management/1-baseline. Он содержит исходный код. Прежде чем отправлять исходный код в проект Apps Script, необходимо выполнить некоторые настройки.
Настройка исходного кода
- В файле
Configuration.jsзадайте для константы JSON с именемCHAT_CREDENTIALSсодержимое файла закрытого ключа, который вы скачали ранее.

- В консоли Google Cloud нажмите Меню ☰ > IAM и администрирование > Настройки.
- Скопируйте идентификатор проекта.

- В файле
Configuration.jsзадайте для строковой константыPROJECT_IDзначение идентификатора проекта.

Настройте параметры clasp.
Чтобы инициализировать настройки clasp для отправки исходного кода в нужный проект Apps Script, выполните следующие действия:
- В консоли Apps Script выберите проект.
- Выберите Project Settings (Настройки проекта).
- В разделе Идентификаторы нажмите Копировать.

- В текущем каталоге создайте файл
.clasp.json. - Замените
<your-script-id>скопированным идентификатором. - Скопируйте результат в файл
.clasp.json. - Сохраните файл
.clasp.json.
{
"scriptI<d": ">;your-script-id"
}
Исходный код push-уведомлений
- Выполните следующую команду:
$clasp push ? Manifest file has been updated. Do you want to push and overwrite? Yes └─ appsscript.json └─ ChatApp.js └─ ChatAppAuth.js └─ Configuration.js └─ Docs.js └─ Storage.js └─ VertexAi.js Pushed 7 files.
Попробовать
- В Google Chat отправьте
Hello!в прямом сообщении приложению. Приложение не ответит, но появится сообщение с предложением выполнить настройку.

- Нажмите Настроить.
- Выберите аккаунт Google.
- Выполните аутентификацию.
- Проверьте и разрешите доступ к приложению.

Если все пройдет успешно, на веб-странице появится подтверждение, а в приложении – ответ на ваше исходное сообщение.


- Отправьте приложению ещё одно сообщение, но со слеш-командой
/create.

- В диалоговом окне в поле Название введите
Issue Title 1. - В поле Description (Описание) введите Issue
Description 1. - Нажмите Создать.

Приложение выполняет следующие действия:
- Закрывает диалоговое окно.
- Создает чат-группу, посвященную новой проблеме, с тем же названием.
- Вы присоединитесь к созданной чат-группе.
- Отправляет сообщение с описанием проблемы в созданную чат-группу.
- Отправляет вам прямое сообщение со ссылкой на созданную чат-группу.

- В новой чат-группе отправьте сообщение со слеш-командой
/closeи разрешением, напримерNot reproducible.

Приложение выполняет следующие действия:
- Создает отчет в Google Документах.
- Отправляет в чат-группу, посвященную проблеме, сообщение со ссылкой на созданный документ отчета.

- Откройте документ с отчетом. В нем содержится основная информация, история и краткое описание.

4. Необязательно. Приложение 1: добавить главный экран приложения
Основные понятия
Главный экран приложения – это настраиваемое сообщение в виде карточки, которое приложение Chat отправляет пользователю, когда тот открывает вкладку Главный экран в прямой переписке с приложением Chat. Обычно на главном экране приложения размещается документация или обзорная информация. Технически это отдельное событие, которое обрабатывается по тем же принципам, что и сообщения с карточками.

Процессы проверки
Как устранять проблемы
Проверьте исходный код
Проект Apps Script нужно изменить.
ChatApp.js
/**
* Handles app home requests in Google Chat.
*
* Displays the latest status of all issues.
*/
function onAppHome() {
// Generates one card section per issue.
var sections = [];
for (var issueKey in appProperties.getProperties()) {
const issue = JSON.parse(appProperties.getProperty(issueKey));
if (issue.spaceId) {
sections.push({
header: `${issue.status} - ${issue.title}`,
widgets: [{ textParagraph: {
text: `Description: ${issue.description}`
}}, { textParagraph: {
text: `Resolution: ${issue.resolution}`
}}, { buttonList: { buttons: [{
text: "Open space",
onClick: { openLink: {
url: `https://mail.google.com/mail/u/0/#chat/space/${issue.spaceId}`
}}
}, {
text: "Open report",
onClick: { openLink: {
url: issue.reportUrl !== "" ? issue.reportUrl : "docs.new"
}},
disabled: issue.reportUrl === ""
}]}
}]
});
}
}
return { action: { navigations: [{ push_card: {
sections: sections
}}]}};
}
Обновить проект Google Cloud
В консоли Google Cloud выполните следующие действия:
В локальной среде выполните следующие действия:
- Измените текущий каталог в терминале на
issue-management/2-app-home. В нем содержится исходный код, который вам нужно использовать. - Скопируйте файл
issue-management/1-baseline/.clasp.jsonв текущий каталог. - Скопируйте файл
issue-management/1-baseline/Configuration.jsв текущий каталог, чтобы заменить существующий. - Выполните следующую команду:
clasp push
Попробовать
В Google Chat выполните следующие действия:
- Отправьте приложению прямое сообщение со слеш-командой
/create. Приложение откроет диалоговое окно. - В поле Title (Название) введите
Issue Title 2. - В поле Description (Описание) введите Issue
Description 2. - Нажмите Создать.

- Выберите вкладку Главная в чат-группе с приложением Google Chat. Вы увидите подробные сведения о созданных вами проблемах.

5. Необязательно. Приложение 1: добавьте мониторинг чат-групп
Проверка концепций
Pub/Sub
Pub/Sub – это асинхронный масштабируемый сервис обмена сообщениями, который разделяет сервисы, создающие сообщения, и сервисы, обрабатывающие их. Pub/Sub позволяет создавать системы организаторов и участников событий (издателей и подписчиков). Издатели взаимодействуют с подписчиками асинхронно через трансляцию событий, а не через синхронные вызовы удаленных процедур (RPC).
Издатели отправляют события в сервис издатель-подписчик независимо от того, как и когда эти события обрабатываются. После этого издатель-подписчик отправляет события во все сервисы, которые на них реагируют. В системах, использующих RPC, издатели должны ждать, пока подписчики получат данные. Однако асинхронная интеграция в Pub/Sub повышает гибкость и надежность всей системы.
Тема. Именованный ресурс, представляющий собой фид сообщений. Прежде чем публиковать тему или подписываться на нее, ее нужно создать.
Подписка. Чтобы получать сообщения, опубликованные в теме, необходимо создать подписку на эту тему. Клиент-подписчик получает и обрабатывает сообщения, опубликованные в теме. У темы может быть несколько подписок, но каждая подписка относится только к одной теме.
События Google Workspace
События Google Workspace представляют собой изменения в ресурсах Google Workspace, например создание, обновление или удаление ресурсов. Приложения могут подписываться на ресурсы Google Workspace, чтобы асинхронно получать и обрабатывать соответствующие события.

Вот как Google Workspace Events API доставляет события в приложение по подписке:
- Приложение подписывается на ресурс в приложении Google Workspace, например на чат-группу.
- Ресурс, на который подписано приложение, изменяется.
- Приложение Google Workspace доставляет событие в тему в Pub/Sub, которая служит конечной точкой оповещений для подписки Google Workspace приложения. Событие содержит данные о том, что изменилось в ресурсе.
- Приложение обрабатывает сообщение Pub/Sub, содержащее событие, и при необходимости выполняет действие.
Процессы проверки
Создать проблему (обновление)

Устранение неполадок в специальном чат-боте (обновление)

Закрыть вопрос из выделенного пространства (обновление)

Как обрабатывать подписки

Проверьте исходный код
Проект Apps Script нужно изменить.
appsscript.json
// Enables the Workspace Events service.
"enabledAdvancedServices": [
...
{
"userSymbol": "WorkspaceEvents",
"version": "v1",
"serviceId": "workspaceevents"
}
...
]
Configuration.js
// Adds two constants: the first one is the Pub/Sub topic ID and the second one
// is the Pub/Sub subscription ID to be used to retrieve Google Workspace events.
...
const GWS_PUBSUB_TOPIC_ID = `projects/${PROJECT_ID}/topics/workspace-events`;
const GWS_PUBSUB_SUBSCRIPTION_ID =
`projects/${PROJECT_ID}/subscriptions/workspace-events-sub`;
...
ChatApp.js
// Edits the function to delete the subscription at issue closure.
function processSlashCommand(event) {
...
if (event.message.slashCommand.commandId == CLOSE_COMMAND_ID
&& event.message.space.type !== "DM") {
...
deleteSubscription(issue.subscriptionId);
...
}
...
}
// Edits the function to create the subscription.
function createIssue(event) {
...
const subscriptionId = createSpaceSubscription(spaceUrl);
const createdIssue = saveCreatedIssue(..., subscriptionId);
...
}
// Edits the function to delete the subscription.
function onRemoveFromSpace(event) {
...
deleteSubscription(issue.subscriptionId);
...
}
Storage.js
// Edits the function to keep track of the subscription ID.
function saveCreatedIssue(..., spaceId, subscriptionId) {
...
appProperties.setProperty(spaceId, JSON.stringify({
...
subscriptionId: subscriptionId,
...
}));
...
}
WorkspaceEvent.js
/**
* Creates a new subscription to Google Workspace Events associated to a
* Google Chat space.
*
* The subscription scope includes message creation events and resources.
*
* @param {string} spaceId the space ID to create a subscription for
* @return the ID of the newly created subscription
*/
function createSpaceSubscription(spaceId) {
const operation = WorkspaceEvents.Subscriptions.create({
targetResource: `//chat.googleapis.com/${spaceId}`,
eventTypes: ["google.workspace.chat.message.v1.created"],
notificationEndpoint: { pubsubTopic: GWS_PUBSUB_TOPIC_ID },
payloadOptions: { includeResource: true },
});
return operation.response.name;
}
/**
* Processes events from subscription by using the Google Cloud PubSub API.
*
* It pulls and acknowledges each event.
*/
function processSubscription() {
const response = UrlFetchApp.fetch(
`https://pubsub.googleapis.com/v1/${GWS_PUBSUB_SUBSCRIPTION_ID}:pull`,
{
method: "POST",
contentType: "application/json",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
payload: JSON.stringify({ maxMessages: 10 })
}
);
const messages = JSON.parse(response.getContentText()).receivedMessages;
for (var messageIndex in messages) {
const message = messages[messageIndex];
const ceType = message.message.attributes["ce-type"];
const dataStr = Utilities.newBlob(Utilities.base64Decode(message.message.data))
.getDataAsString();
if (ceType === "google.workspace.events.subscription.v1.expirationReminder") {
// Renews subscription.
renewSubscription(JSON.parse(dataStr).subscription.name);
} else if (ceType === "google.workspace.chat.message.v1.created") {
// Processes the message text when it's sent in a space.
const chatMessage = JSON.parse(dataStr).message;
if (chatMessage.sender.type !== "BOT") {
console.log("Message was processed.");
}
}
// Acknowledges successful processing to avoid getting it again next time.
ackSubscription(message.ackId);
}
}
/**
* Acknowledges a subscription event by using the Google Cloud PubSub API.
*
* @param {string} ackId the ID of the event acknowledgment to send
*/
function ackSubscription(ackId) {
UrlFetchApp.fetch(
`https://pubsub.googleapis.com/v1/${GWS_PUBSUB_SUBSCRIPTION_ID}:acknowledge`,
{
method: "POST",
contentType: "application/json",
headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
payload: JSON.stringify({
ackIds: [ackId]
})
}
);
}
/**
* Renews a subscription to Google Workspace Events.
*
* The default time to live option is used.
*
* @param {string} subscriptionId the ID of the subscription to renew
*/
function renewSubscription(subscriptionId) {
WorkspaceEvents.Subscriptions.patch({ttl: '0s'}, subscriptionId);
}
/**
* Deletes a subscription to Google Workspace Events.
*
* @param {string} subscriptionId the ID of the subscription to delete
*/
function deleteSubscription(subscriptionId) {
WorkspaceEvents.Subscriptions.remove(subscriptionId);
}
Обновить проект Google Cloud
Как включить API
- В консоли Google Cloud включите Google Workspace Events и Pub/Sub.
- Нажмите Меню ☰ > API и сервисы > Включенные API и сервисы и убедитесь, что оба API включены.
Как оформить подписку
Необходимо создать тему издателя-подписчика и подписаться на нее, чтобы публиковать все события Workspace.
В консоли Google Cloud выполните следующие действия:
- Выберите Меню ☰ > издатель-подписчик > Topics (Темы).
- Нажмите Создать тему.
- В поле Topic ID (Идентификатор темы) введите
workspace-events. - Установите флажок Добавить подписку по умолчанию.
- Нажмите Создать.

Чтобы предоставить Google Chat доступ к публикации сообщений издатель-подписчик в созданной теме, выполните следующие действия:
- Выберите тему из списка.
- Перейдите на вкладку Права доступа.
- Добавьте
chat-api-push@system.gserviceaccount.comв поле New principals (Новые субъекты). - В разделе Роль выберите Издатель Pub/Sub.
- Нажмите Сохранить.

Обновление проекта Apps Script
В консоли Google Cloud выполните следующие действия:
- Нажмите на значок Меню ☰ > IAM & Admin (IAM и администрирование) > Settings (Настройки).
- Скопируйте идентификатор проекта.

В локальной среде выполните следующие действия:
- Измените текущий каталог в терминале на
issue-management/3-message-monitoring. В нем содержится нужный вам исходный код. - В файле
Configuration.jsзадайте для строковой константыPROJECT_IDзначение скопированного идентификатора проекта. - Задайте для константы JSON с именем
CHAT_CREDENTIALSв файлеConfiguration.jsзначение, соответствующее содержимому файла закрытого ключа, который вы скачали ранее. - Скопируйте файл
issue-management/2-app-home/.clasp.jsonв текущий каталог. - Выполните следующую команду:
clasp push
Попробовать
В Google Chat выполните следующие действия:
- Отправьте приложению прямое сообщение со слеш-командой
/create. Приложение откроет диалоговое окно. - В поле Title (Название) введите
Issue Title 3. - В поле Description (Описание) введите Issue
Description 3. - Нажмите Создать.
- В новой чат-группе отправьте несколько сообщений, в которых обсуждается проблема.
- Отправьте сообщение со слеш-командой
/closeи решением, напримерFixed.
В консоли Google Cloud выполните следующие действия:
- Выберите Меню ☰ > Pub/Sub > Subscriptions (Подписки).
- Выберите подписку workspace-events-sub.
- Выберите вкладку Сообщения.
- Нажмите Pull (Извлечь). В таблице показаны сообщения, связанные с тем, что вы отправили в новую чат-группу.

В консоли Apps Script выполните следующие действия:
- Выберите проект.
- Выберите Редактор.
- Выберите файл
WorkspaceEvent.gs. - В разделе Выполнить выберите
processSubscription. - Нажмите
Run.В журнале выполнения вы увидите, что сообщения были обработаны.

В консоли Google Cloud выполните следующие действия:
- Выберите Меню ☰ > Pub/Sub > Subscriptions (Подписки).
- Выберите подписку workspace-events-sub.
- Выберите вкладку Сообщения.
- Нажмите Pull (Извлечь). В таблице больше не показываются сообщения, связанные с тем, что вы отправили в новую чат-группу.

- В Google Chat в чат-группе, посвященной третьей проблеме, которую вы создали с помощью слеш-команды
/create, отправьте ещё несколько сообщений, в которых обсуждается эта проблема.
В консоли Google Cloud выполните следующие действия:
- Выберите Меню ☰ > Pub/Sub > Subscriptions (Подписки).
- Выберите подписку workspace-events-sub.
- Выберите вкладку Сообщения.
- Нажмите Pull (Извлечь). В таблице не отображаются сообщения, связанные с тем, что вы отправили в новую чат-группу.
6. Optional: App 1: Add inclusivity help
Проверка концепций
Запросы к генеративному ИИ – это искусство составления инструкций или вопросов, которые направляют модель генеративного ИИ к получению желаемого результата. Распространенная практика – ограничивать ответы, добавляя правила и условия в запросы. Это помогает сделать результат безопасным, релевантным, последовательным и соответствующим ожиданиям.
Процессы проверки
Как обрабатывать подписки (обновление)

Проверьте исходный код
Проект Apps Script нужно изменить.
WorkspaceEvent.js
// Edits the function to replace logging by an actual card message.
function processSubscription() {
...
for (var messageIndex in messages) {
...
} else if (ceType === "google.workspace.chat.message.v1.created") {
...
const inclusivityCheck = getInclusivityFeedback(chatMessage.text);
if (inclusivityCheck !== "It's inclusive!") {
createAppMessageUsingChatService({
cardsV2: [{ cardId: "1", card: { header: {
title: "Inclusivity",
subtitle: `The following words are not inclusive: ${inclusivityCheck}`
}}}]
},
chatMessage.space.name);
}
...
}
...
}
...
}
VertexAi.js
/**
* Gets feedback on inclusivity for a text with the Gemini Pro model using
* Vertex AI API.
*
* Returns "It's inclusive!" when it is otherwise a list of word(s) that might not
* be optimal.
*
* @param {string} text the text
* @return {string} the feedback
*/
function getInclusivityFeedback(text) {
const url = `https://${VERTEX_AI_LOCATION_ID}-aiplatform.googleapis.com/v1`
+ `/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION_ID}`
+ "/publishers/google/models/gemini-1.0-pro:generateContent";
const options = {
method: "POST",
headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
contentType: "application/json",
payload: JSON.stringify({
contents: {
role: "user",
parts: {
text: "Are there any words that obviously go against inclusivity "
+ "in this text:"
+ `\n\n----------\n${text}\n----------\n\n`
+ "If there are not, answer \"It's inclusive!\" "
+ "otherwise answer by listing them separated by commas. "
+ "Do not answer with any explanation."
}
},
safetySettings: {
category: "HARM_CATEGORY_SEXUALLY_EXPLICIT",
threshold: "BLOCK_LOW_AND_ABOVE"
},
generationConfig: {
temperature: 0.2,
topP: 0.8,
topK: 40
}
})
};
return JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
.candidates[0].content.parts[0].text;
}
Обновление проекта Apps Script
В локальной среде выполните следующие действия:
- Измените текущий каталог в терминале на
issue-management/4-inclusivity-help. В нем содержится нужный вам исходный код. - Скопируйте файл
issue-management/3-message-monitoring/.clasp.jsonв текущий каталог. - Скопируйте файл
issue-management/3-message-monitoring/Configuration.jsв текущий каталог, чтобы заменить существующий. - Выполните следующую команду:
clasp push
Попробовать
В Google Chat выполните следующие действия:
- Отправьте приложению прямое сообщение со слеш-командой
/create. Приложение откроет диалоговое окно. - В поле Title (Название) введите
Issue Title 4. - В поле Описание введите "Проблема
Description 4". - Нажмите Создать.
- В созданной чат-группе отправьте
It happened to me last week as well.
В консоли Apps Script выполните следующие действия:
- Выберите проект.
- Выберите Редактор.
- Выберите файл
WorkspaceEvent.gs. - В разделе Выполнить выберите
processSubscription. - Нажмите Выполнить. В журнале выполнения можно увидеть, что сообщения были обработаны.
В Google Chat выполните следующие действия:
- Обратите внимание, что приложение не отправило никаких подсказок по инклюзивности в только что созданную чат-группу.
- В созданной чат-группе отправьте сообщение
I had to add myself from the master to fix it.
В консоли Apps Script выполните следующие действия:
- Выберите проект.
- Выберите Редактор.
- Выберите файл
WorkspaceEvent.gs. - В разделе Выполнить выберите
processSubscription. - Нажмите Выполнить. В журнале выполнения можно увидеть, что сообщения были обработаны. В Google Chat приложение отправило справочное сообщение об инклюзивности в недавно созданную чат-группу.

7. Необязательно. Приложение 1: добавьте настройки
.
Проверка концепций
Виджет-дополнение – это виджет без рамки, прикрепленный к нижней части сообщения, отправленного приложением. Обычно он используется для того, чтобы пользователь мог быстро отреагировать на сообщение. Технически они основаны на тех же принципах, что и кнопки карточек.

Процессы проверки
Как отключить подсказки по инклюзивности

Проверьте исходный код
Проект Apps Script нужно изменить.
ChatApp.js
// Edits the function to handle the inclusivity help disablement action for a
// given space.
function onCardClick(event) {
...
if (event.action.actionMethodName === "disableInclusivityHelp") {
disableInclusivityHelp(event.common.parameters.spaceId);
}
}
Storage.js
// Edits the function to keep track of the inclusivity help setting.
function saveCreatedIssue(title, description, spaceId, subscriptionId) {
appProperties.setProperty(spaceId, JSON.stringify({
...
inclusivityHelp: true,
...
}));
...
}
/**
* Disables inclusivity help in a space.
*
* @param {string} spaceId the ID of dedicated space of the issue
*/
function disableInclusivityHelp(spaceId) {
var issue = JSON.parse(appProperties.getProperty(spaceId));
issue.inclusivityHelp = false;
appProperties.setProperty(spaceId, JSON.stringify(issue));
}
/**
* Checks whether the app should help with inclusivity in a given space.
*
* @param {string} spaceId the ID of dedicated space of the issue
* @return whether the app should help with inclusivity
*/
function shouldHelpWithInclusivity(spaceId) {
return JSON.parse(appProperties.getProperty(spaceId)).inclusivityHelp;
}
WorkspaceEvent.js
// Edits the function to display the accessory widget to the existing card message.
function processSubscription() {
...
for (var messageIndex in messages) {
...
} else if (ceType === "google.workspace.chat.message.v1.created") {
...
&& if (... shouldHelpWithInclusivity(chatMessage.space.name)) {
createAppMessageUsingChatService({
...
accessoryWidgets: [{ buttonList: { buttons: [{
altText: "Disable inclusivity help",
icon: {
iconUrl: "https://upload.wikimedia.org/.../Stop_hand_rugen.png"
},
onClick: { action: {
function: "disableInclusivityHelp",
parameters: [{
key: "spaceId",
value: chatMessage.space.name
}]
}}
}]}}]
}, ...);
...
}
...
}
...
}
...
}
Обновление проекта Apps Script
В локальной среде выполните следующие действия:
- Измените текущий каталог в терминале на
issue-management/5-disable-help. В нем содержится нужный вам исходный код. - Скопируйте файл
issue-management/4-inclusivity-help/.clasp.jsonв текущий каталог. - Скопируйте файл
issue-management/4-inclusivity-help/Configuration.jsв текущий каталог, чтобы заменить существующий. - Выполните следующую команду:
clasp push
Попробовать
Как отключить справку
- В Google Chat в чат-группе, посвященной четвертой проблеме, которую вы создали с помощью слеш-команды
/create, отправьте сообщениеI had to add myself from the master to fix.
В консоли Apps Script выполните следующие действия:
- Выберите проект.
- Выберите Редактор.
- Выберите файл
WorkspaceEvent.gs. - В разделе Выполнить выберите
processSubscription. - Нажмите Выполнить. В журнале выполнения можно увидеть, что сообщения были обработаны.
В Google Chat выполните следующие действия:
- Обратите внимание, что приложение отправило сообщение с советами по инклюзивности в чат-группу, посвященную проблеме с виджетом аксессуаров.
- Нажмите на виджет, чтобы отключить подсказки по инклюзивности.

Проверка отключения
- В Google Chat в чат-группе, посвященной четвертой проблеме, которую вы создали с помощью слеш-команды
/create, отправьте сообщениеI had to add myself from the master to fix.
В консоли Apps Script выполните следующие действия:
- Выберите проект.
- Выберите Редактор.
- Выберите файл
WorkspaceEvent.gs. - В разделе Выполнить выберите
processSubscription. - Нажмите Выполнить. В журнале выполнения можно увидеть, что сообщения были обработаны. В Google Chat приложение не отправило сообщение с рекомендациями по инклюзивности в чат-группу, посвященную этой проблеме, поскольку оно было отключено.

8. Приложение 2. Сборка
Посмотреть концепции
Обоснование генеративного ИИ
Она позволяет сделать ИИ-модели более фактическими и надежными, подключив их к проверяемым источникам знаний. Этот метод помогает предотвратить выдумывание информации искусственным интеллектом и может помочь сделать ответы контекстуально релевантными и менее предвзятыми.
Естественный язык
Любой язык, на котором люди говорят или пишут в повседневном общении, в отличие от искусственных или компьютерных языков.
Cloud Storage
Cloud Storage позволяет размещать данные в нашем хранилище и получать их когда угодно и из любой точки земного шара. Его можно использовать для различных целей, включая размещение контента сайта, хранение данных для архивирования и аварийного восстановления или распространение больших объектов данных среди пользователей путем прямой загрузки.
Хранилище данных Dialogflow CX
Dialogflow CX интегрируется с хранилищами данных – наборами сайтов и документов, которые агенты хранилища данных используют для поиска ответов на вопросы конечных пользователей. Агент хранилища данных ищет ответ на вопрос в предоставленном контенте и обобщает результаты в связный ответ. Также в ответе приводятся ссылки на источники, чтобы пользователь мог узнать больше.
Архитектура отзывов

Это приложение Google Chat создано с помощью Dialogflow CX и работает следующим образом:
- Пользователь отправляет сообщение приложению в прямой переписке или чат-группе.
- Приложение, которое является агентом Dialogflow CX и связано с проектом Google Cloud, обрабатывает сообщение.
- Приложение интегрировано с хранилищем данных в Cloud Storage.
- Приложение отправляет синхронный ответ в прямой переписке или в исходной чат-группе.
Проверить процессы
Ответить на вопрос
Проверьте исходный код
Единственный источник, который вам нужен, – это не код, а данные, которые вы используете для заземления.
google-chat-overview.pdf
Содержит неструктурированную информацию о приложениях Google Chat, печатную версию страницы с сайта разработчиков Google Workspace.

Обновить проект Google Cloud
В консоли Google Cloud выполните следующие действия:
- Включите Dialogflow API и Cloud Storage API.
- Включите Vertex AI Agent Builder API.
- Нажмите Меню ☰ > API и сервисы > Включенные API и сервисы и убедитесь, что все API включены.
.
Как создать агент хранилища данных Dialogflow CX
Инициализация данных базы знаний
В консоли Google Cloud выполните следующие действия:
- Нажмите на значок меню ☰ > Cloud Storage > Сегменты.

- Нажмите Создать.
- В поле name укажите
gchat-knowledge. - Нажмите Создать.

- Выберите сегмент gchat-knowledge.
- Нажмите Загрузить файлы.
- Скачайте и выберите файл google-chat-overview.pdf из локальной среды.

Создать приложение
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > Agent Builder > Приложения.
- Нажмите Новое приложение.
- Выберите тип чата.

- В качестве
Company nameукажите название компании. - Присвойте свойству
Agent nameзначениеknowledge. - Нажмите Продолжить.

- Нажмите Создать хранилище данных.
- Выберите Cloud Storage в качестве источника данных.

- Выберите Файл.
- Нажмите Поиск.
- Выберите файл
google-chat-overview.pdf. - Нажмите Продолжить.
- Укажите название хранилища данных:
gchat-knowledge-ds. - Нажмите Создать.

- Выберите в таблице хранилище данных gchat-knowledge-ds.
- Нажмите Создать.

- Через пару минут нажмите Меню ☰ > Agent Builder > Apps (Приложения) и убедитесь, что приложение появилось в списке.

- Нажмите Меню ☰ > Agent Builder > Хранилища данных.
- Нажмите на хранилище данных gchat-knowledge-ds. Количество документов –
1. Это означает, что все готово.

Завершение и тестирование приложения
В консоли Dialogflow CX выполните следующие действия:
- Выберите проект Google Cloud.
- Выберите агент Знания.

- Выберите Agent settings (Настройки агента) > Generative AI (Генеративный искусственный интеллект) > Generative agent (Генеративный агент).
- Переключите модель с Text Bison на Gemini Pro.
- Нажмите Сохранить.

- Нажмите Протестировать агент.
- Отправить
What is Google Chat?. Агент дает осмысленный ответ.

Интеграция приложения Google Chat
В консоли Dialogflow CX выполните следующие действия:
- Выберите проект Google Cloud.
- В строке агента нажмите на значок с тремя точками
> Копировать название.

В консоли Google Cloud выполните следующие действия:
- Перейдите к конфигурации Google Chat API.
- В разделе Настройки подключения выберите Dialogflow.
- В разделе Настройки Dialogflow выберите Dialogflow CX.
- В поле Название ресурса агента или среды вставьте скопированное название агента.
- Удалите две слеш-команды.

- В Google Chat отправьте
What is Google Chat?в прямом сообщении приложению Google Chat. Агент ответит на него.

9. Приложение 2 (необязательно). Добавьте источники
Посмотреть концепции
Вебхук Dialogflow CX
Сервис, в котором размещена бизнес-логика или который вызывает другие сервисы. Во время сеанса Dialogflow CX вебхуки могут использовать данные, извлеченные с помощью обработки естественного языка, чтобы генерировать динамические ответы, проверять собранные данные или запускать действия на сервере.
Cloud Functions
Cloud Functions отлично подходит для создания бессерверных бэкендов, обработки данных в реальном времени и создания интеллектуальных приложений. Вам не нужно настраивать, обслуживать и обновлять серверы. Они автоматически масштабируются, обладают высокой доступностью и отказоустойчивостью.
Процессы проверки
Ответить на вопрос (обновление)

Проверьте исходный код
Единственный исходный код, который вам нужен, – это функция для адаптации ответов агента к сообщениям Google Chat. Он используется как вебхук.
package.json
// The function relies on the Cloud Functions framework to run.
{
"name": "agent-response-adapter",
"version": "0.0.1",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
},
...
}
index.js
/**
* Handles all incoming requests.
*
* It takes a Dialogflow CX agent response as input and returns a
* valid Google Chat card message with both the text and source links
*/
functions.http('agent-response-adapter', (request, res>ponse) = {
// Creates Google Chat buttons based on the data store agent response
// grounding details.
var linkTitles = [];
var linkButtons = [];
const grounding = request.body.messages[1].payload.richContent[0][0];
if (grounding.type === "match_citations") {
// Supports citation match type.
grounding.citations.fo>rEach((citation) = {
// Avoid duplications.
if (linkTitles.indexO<f(citation.title) 0) {
linkButtons.push({
text: citation.title,
onClick: { openLink: {
url: citation.actionLink
}}
});
linkTitles.push(citation.title);
}
});
} else if (grounding.type === "info") {
// Supports info type.
if (linkTitl<es.indexOf(grounding.title) 0) {
linkButtons.push({
text: grounding.title,
onClick: { openLink: {
url: grounding.actionLink
}}
});
linkTitles.push(grounding.title);
}
}
// Sends the Dialogflow CX fulfillment response to replace the agent response
// with the Chat message with text and source buttons.
response.send({ fulfillment_response: {
merge_behavior: "REPLACE",
messages: [{ payload: {
// Reuses the original data store agent response text.
text: request.body.messages[0].text.text[0],
cardsV2: [{
cardId: "sourcesCard",
card: { sections: [{
header: "Sources",
widgets: [{ buttonList: {
buttons: linkButtons
}}]
}]}
}]
}}]
}});
});
Обновить проект Google Cloud
В консоли Google Cloud выполните следующие действия:
- Включите Cloud Build API, Cloud Functions API, Cloud Logging API, Artifact Registry API и Cloud Run API.
- Нажмите Меню ☰ > API и сервисы > Включенные API и сервисы и убедитесь, что API включены.
Как обновить агент хранилища данных Dialogflow CX
Вам нужно развернуть функцию Cloud Functions и обновить вебхук Dialogflow CX, чтобы он запускал ее с несколькими источниками, когда это возможно.
Возврат нескольких источников
По умолчанию новый агент хранилища данных возвращает только один источник, но вы можете изменить это значение.
В консоли Dialogflow CX выполните следующие действия:
- Выберите проект Google Cloud.
- Выберите агент Знания.
- Выберите Начальная страница.
- Выберите Изменить хранилища данных.
- В разделе Agent responses (Ответы агента) задайте для параметра Data store response options (Варианты ответов хранилища данных) значение
5. - Нажмите Сохранить.

Запуск функции Cloud Functions
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > Cloud Functions.
- Нажмите Create function (Создать функцию).
- В разделе Основные настройки в поле Название введите
function-1. - В разделе Аутентификация выберите переключатель Разрешить вызовы без аутентификации.
- В разделе Runtime, build, connections and security settings (Среда выполнения, сборка, подключения и настройки безопасности) задайте для параметра Maximum number of instances (Максимальное количество экземпляров) значение
3. - Нажмите Далее.

- В поле Entry point (Точка входа) введите
agent-response-adapter. - Замените контент по умолчанию файлами package.json и index.js.
- Нажмите Deploy (Развернуть).

- Скопируйте URL и подождите несколько минут, пока функция будет развернута.

Инициация вебхука
Вам нужно настроить агент Dialogflow CX так, чтобы он использовал вебхук, который запускает только что развернутую функцию.
В консоли Dialogflow CX выполните следующие действия:
- Выберите проект Google Cloud.
- Выберите агент Знания.
- Выберите Manage (Управление) > Webhooks (Вебхуки) > Create (Создать).
- В поле Отображаемое название укажите
Google Chat Response Adapter. - В поле Webhook URL (URL вебхука) вставьте скопированный ранее URL.
- Нажмите Сохранить.

- Нажмите Создать.
- Выберите Начальная страница.
- Выберите Изменить хранилища данных.
- В разделе Настройки вебхука нажмите на переключатель Включить вебхук.
- Выберите Google Chat Response Adapter for Webhook (Адаптер ответов Google Chat для вебхука).
- Присвойте свойству tag значение
arbitrary_tag. - Нажмите Сохранить.

Тестовое приложение
- В Google Chat отправьте
What is Google Chat?в прямом сообщении приложению Google Chat. Агент ответит по существу и покажет карточку с источниками, если они есть.

10. Приложение 3. Сборка
Посмотреть концепции
Взаимодействие в чате
Это обмен информацией или идеями между двумя или более людьми на естественном языке. В отличие от технических интерфейсов, которые часто полагаются на не сохраняющие состояние, строго структурированные и нетерпимые к ошибкам обмены.
Спецификация OpenAPI
Она обеспечивает согласованную передачу информации на каждом этапе жизненного цикла API. Это язык спецификации для HTTP API, который определяет структуру и синтаксис независимо от языка программирования, на котором создан API. Спецификации API обычно пишутся на YAML или JSON, что позволяет легко делиться ими и использовать их.
Агент Dialogflow CX
Основной строительный блок приложений-агентов. В приложении агента обычно много агентов, каждый из которых выполняет определенные задачи. Данные агента передаются LLM, чтобы у нее была информация, необходимая для ответов на вопросы и выполнения задач. Каждый агент может предоставлять информацию, отправлять запросы внешним сервисам или передавать управление разговором потоку Dialogflow CX или другому агенту для обработки подзадач.
Инструмент Dialogflow CX
Инструменты используются для подключения приложений агентов к внешним системам. Эти системы могут расширить знания приложений-агентов и дать им возможность эффективно выполнять сложные задачи.
Архитектура отзывов

Это приложение Google Chat создано с помощью Dialogflow CX и работает следующим образом:
- Пользователь отправляет сообщение приложению в прямой переписке или чат-группе.
- Приложение, которое является агентом Dialogflow CX и связано с проектом Google Cloud, обрабатывает сообщение.
- Приложение интегрировано с агентом.
- Приложение отправляет синхронный ответ в прямой переписке или в исходной чат-группе.
Проверить процессы
Сбор отзывов

Проверьте исходный код
Единственный исходный код, который вам нужен, – это функция для имитации бэкенд-службы, которую агент использует в качестве инструмента.
package.json
// The function relies on the Cloud Functions framework to run.
{
"name": "feedback-app-backend",
"version": "0.0.1",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
},
...
}
index.js
/**
* Handles all incoming requests.
*
* It always returns OK in plain text.
*/
functions.http('feedback-app-backend', (request, res>ponse) = {
response.send(9;OK');
});
service-openapi.yaml
// Defines the backend service structure and how to request it.
openapi: 3.1.0
info:
title: Review Store
license:
name: Apache 2.0
identifier: Apache-2.0
version: 0.0.1
servers:
- url: https://us-central1-project-0.cloudfunctions.net
paths:
/store-review:
post:
operationId: storeReview
summary: Store a new review
requestBody:
content:
application/json:
schema:
type: object
properties:
stars:
type: integer
format: int64
responses:
'200':
description: success
content:
application/json:
schema:
type: string
Инициализация макета серверной службы
Вы развертываете функцию Cloud Functions, чтобы симулировать бэкенд-службу, которую агент Dialogflow CX должен интегрировать и вызывать как инструмент.
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > Cloud Functions.
- Нажмите Create function (Создать функцию).
- В разделе Основные настройки в поле Название введите
function-2. - В разделе Аутентификация выберите переключатель Разрешить вызовы без аутентификации.
- В разделе Runtime, build, connections and security settings (Среда выполнения, сборка, подключения и настройки безопасности) задайте для параметра Maximum number of instances (Максимальное количество экземпляров) значение
3. - Нажмите Далее.

- В поле Entry point (Точка входа) введите
feedback-app-backend. - Замените контент по умолчанию файлами package.json и index.js.
- Нажмите Развернуть.

- Скопируйте URL и подождите несколько минут, пока функция будет развернута.
Как создать приложение агента Dialogflow CX
Создать приложение
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > Agent Builder > Приложения.
- Нажмите Новое приложение.
- Выберите Агент.
- В поле Отображаемое название укажите
Feedback App. - Нажмите Создать.

Запустите инструмент.
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > Agent Builder > Приложения.
- Выберите агент Feedback App.
- Нажмите Инструменты > + Создать.
- В поле Name (Название) укажите
review. - Выберите OpenAPI.
- Задайте для свойства description следующее значение:
The tool takes the number of stars as a parameter of the store review method and saves it in a database for later use.
- Скачайте файл service-openapi.yaml и замените в нем
$URLна скопированный ранее URL. - Задайте для
YAML Schemaотредактированное содержимое файлаservice-openapi.yaml. - Нажмите Сохранить.

Как запустить агент
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > Agent Builder > Приложения.
- Выберите агент Feedback App.
- Выберите Агенты > Генеративный агент по умолчанию.
- В поле Agent name (Название агента) укажите
Feedback collector. - Задайте для параметра
goalследующее значение:
You are an agent that collects reviews from Google Chat app developers. A review may be between 0 and 5 stars. The more stars, the more positive the review.
- Задайте для свойства instructions следующее значение:
If the developer didn't provide the number of stars, ask for the number of stars.
After the developer provides the number of stars of the review, confirm the number with the developer and use ${TOOL: review} to store the review with the number of stars.
If ${TOOL: review} fails, apologize and ask to try again later. Otherwise, thank the developer for the review.
- Нажмите Сохранить.

Тестовое приложение
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > Agent Builder > Приложения.
- Выберите агент Feedback App.
- Перейдите в раздел Предварительный просмотр агента.
- В разделе Агент выберите Сборщик отзывов.
- В разделе Select generative model (Выбрать генеративную модель) выберите gemini-pro.
- Чтобы начать, отправьте сообщение
Hello!.

В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > Cloud Functions.
- Выберите function-2 > Logs (Функция-2 > Журналы). В некоторых журналах в качестве вызывающего абонента указан Google-Dialogflow.

Интегрировать приложение Google Chat
В консоли Dialogflow CX выполните следующие действия:
- Выберите проект Google Cloud.
- Нажмите на меню действий агента
Feedback App. - Нажмите Скопировать название.
В консоли Google Cloud выполните следующие действия:
- Перейдите к конфигурации Google Chat API.
- В поле Agent or Environment resource name (Название ресурса агента или среды) вставьте скопированное ранее название агента.

- В Google Chat отправьте
Hello!в прямом сообщении приложению Google Chat, чтобы начать. Агент отвечает так же, как и при тестировании в консоли Dialogflow CX.

11. Организовать
Как удалить проект Google Cloud
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этой практической работе, рекомендуем удалить проект Google Cloud.
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > IAM и администрирование > Настройки.
- Нажмите Завершить работу.
- Введите идентификатор проекта.
- Нажмите Все равно выключить.

Удалить проект Apps Script
Мы рекомендуем также удалить проект Apps Script.
В консоли Apps Script выполните следующие действия:
- Выберите проект.
- Нажмите на меню действий.
- Нажмите Удалить.

12. Поздравляю!
Поздравляем! Вы создали приложения Google Chat с помощью Gemini.
Что дальше?
В этой практической работе мы рассмотрели только простые сценарии использования, но есть множество других возможностей, которые вы можете реализовать в своих приложениях Google Chat, например:
- Интеграция с другими моделями генеративного ИИ, в том числе собственными.
- Поддержка других типов медиаконтента, например аудио, изображений и видео.
- Используйте мультимодальность.
- Используйте более длинные окна контекста и циклы обратной связи.
- Публикуйте готовые приложения Google Chat в Marketplace. Для разработчиков доступно множество ресурсов, таких как видео на YouTube, сайты с документацией, примеры кода и руководства.
- Включите Google Chat для организации. Режим импорта упрощает начало работы.
Подробнее…
- Документация для разработчиков Google Chat
- Интеграция Google Chat и Dialogflow CX
- Репозиторий GitHub для всех примеров Google Chat
- Режим импорта Google Chat
- Документация для разработчиков по Apps Script
- Канал YouTube для разработчиков Google Workspace
- Центр разработчиков Google Cloud
- Модели генеративного ИИ
- Специальные модели генеративного искусственного интеллекта
- Длинные окна контекста в генеративном искусственном интеллекте
- Цикл обратной связи генеративного искусственного интеллекта


