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



Приложение "Знания" (поиск данных)
Это приложение использует Gemini для понимания и ответа на вопросы на естественном языке, а также для получения ссылок на источники из неструктурированных данных.
В качестве основных используемых технологий применяются агент хранилища данных Dialogflow CX, веб-перехватчик Dialogflow CX, Google Cloud Functions и Gemini.

Приложение для обратной связи (диалог)
Это приложение использует Gemini для сбора и хранения отзывов, а также диалогов на естественном языке.
В качестве основных используемых технологий применяются Dialogflow CX agent, Dialogflow CX tool, 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 выполните следующие действия:
- Нажмите «Настройки» , а затем включите API Google Apps Script.

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

Проект Google Cloud
В консоли Google Cloud выполните следующие действия:
- Выберите свой проект.
- Нажмите Меню ☰ > API и сервисы > Экран согласия OAuth > Редактировать приложение , а затем установите имя приложения на
Chat Apps Gemini.
- Перейдите в настройки Google Chat API, затем установите название приложения и описание на
Chat Apps Gemini.

Google Чат
В 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 — это мультимодальная магистерская программа от Google, доступная через Vertex AI. Она помогает людям раскрыть свой человеческий потенциал, чтобы они могли развивать воображение, расширять кругозор и повышать продуктивность.
Расширенная служба чата
Сервис Advanced Chat позволяет использовать API Google Chat в Apps Script. Это позволяет скриптам находить, создавать и изменять чат-пространства, добавлять или удалять участников из этих пространств, а также читать или публиковать сообщения с текстом, карточками, вложениями и реакциями.
Обзор архитектуры

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

Устранение неполадок из специально отведенного места.

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

Просмотрите исходный код
Проект Apps Script содержит следующие скрипты:
-
Configuration: Константы для редактирования в зависимости от среды. -
ChatApp: Обрабатывает события взаимодействия в Google Chat, включая сообщения, клики по карточкам, команды с косой чертой и диалоги. -
Storage: Вспомогательные функции, использующие службы свойств. -
ChatAppAuth: Вспомогательные функции, использующие аутентификацию в приложении Google Chat. -
Docs: Вспомогательные функции, использующие Google Docs. -
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 === undefined)
.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 Docs , Google Admin SDK и Vertex AI :
- Нажмите Меню ☰ > API и сервисы > Включенные API и сервисы , а затем подтвердите, что API включены.
Инициализация сервисного аккаунта
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > IAM и администрирование > Учетные записи служб > + Создать учетную запись службы .

- Установите имя учетной записи службы на
chat-app. - Установите для описания учетной записи службы
Chat app auth. - Нажмите «Создать и продолжить» .
- Нажмите «Готово» . Вы будете перенаправлены на страницу учетных записей служб , где сможете увидеть созданную вами учетную запись службы.

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

Диалоговое окно закрывается, и созданная вами пара открытого/закрытого ключей автоматически загружается в вашу локальную среду в виде JSON-файла. Вы можете использовать его содержимое позже при редактировании исходного кода вашего проекта Apps Script.
Обновите конфигурацию Google Chat API.
В консоли Google Cloud выполните следующие действия:
- Добавьте команду с косой чертой.
- Установите имя на
/create. - Установите идентификатор команды равным
1. - В поле «Описание» выберите
Create a new issue. - Установите флажок «Открыть диалоговое окно».
- Добавьте еще одну команду со слэшем.
- Установите имя на
/close. - Установите идентификатор команды равным
2. - В описании выберите
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 выберите свой проект.
- Выберите «Настройки проекта» .
- В разделе «Идентификаторы» нажмите «Копировать» .

- В текущей директории создайте файл
.clasp.json. - Замените
<your-script-id>на скопированный ID. - Скопируйте результат в файл
.clasp.json. - Сохраните файл
.clasp.json.
{
"scriptId": "<your-script-id>"
}
Отправить исходный код
- Выполните следующую команду:
$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 1. - Нажмите «Создать» .

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

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

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

- Откройте документ отчета. Он содержит основную информацию, историю изменений и краткое изложение.

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

Процессы проверки
Управление проблемами
Просмотрите исходный код
Проект 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. Приложение откроет диалоговое окно. - Установите заголовок на
Issue Title 2. - Установите значение «
Description 2. - Нажмите «Создать» .

- В приложении Google Chat выберите вкладку «Главная» в своем рабочем пространстве. Там вы сможете увидеть подробную информацию о созданных вами задачах.

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

Вот как API событий Google Workspace передает события в приложение по подписке:
- Приложение подписывается на ресурс в приложении 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 и PubSub.
- Нажмите Меню ☰ > API и сервисы > Включенные API и сервисы , а затем убедитесь, что оба включены.
Инициировать подписку
Для публикации всех событий рабочей области необходимо создать тему Pub/Sub и подписаться на неё.
В консоли Google Cloud выполните следующие действия:
- Перейдите в Меню ☰ > Публикации/Подписки > Темы .
- Нажмите «Создать тему» .
- Установите идентификатор темы на
workspace-events. - Установите флажок «Добавить подписку по умолчанию» .
- Нажмите «Создать» .

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

Обновить проект Apps Script
В консоли Google Cloud выполните следующие действия:
- Перейдите в Меню ☰ > IAM и администрирование > Настройки .
- Скопируйте идентификатор проекта.

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

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

В консоли Google Cloud выполните следующие действия:
- Перейдите в Меню ☰ > Публикации/Подписки > Подписки .
- Выберите подписку workspace-events-sub .
- Выберите вкладку «Сообщения» .
- Нажмите «Вытянуть» . В таблице больше не отображаются сообщения, отправленные вами в созданное пространство.

- В чате Google , в поле, посвященном третьей проблеме, которую вы создали с помощью команды
/create, отправьте еще несколько сообщений, в которых обсудите эту проблему.
В консоли Google Cloud выполните следующие действия:
- Перейдите в Меню ☰ > Публикации/Подписки > Подписки .
- Выберите подписку workspace-events-sub .
- Выберите вкладку «Сообщения» .
- Нажмите «Вытянуть» . В таблице не отображаются сообщения, относящиеся к тому, что вы отправили в созданное пространство.
6. Дополнительно: Приложение 1: Добавить помощь по вопросам инклюзивности
Обзор концепций
Подсказки для генеративного ИИ — это искусство составления инструкций или вопросов, направляющих модель генеративного ИИ к конкретному желаемому результату. Распространенной практикой является ограничение ответов путем добавления правил и условий в подсказки. Это помогает сделать результат безопасным, релевантным, согласованным и соответствующим ожиданиям.
Процессы проверки
Обработка подписок (обновление)

Просмотрите исходный код
Проект 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. Приложение откроет диалоговое окно. - Установите заголовок на
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 , в поле, посвященном четвертой проблеме, которую вы создали с помощью команды
/create, отправьте сообщение,I had to add myself from the master to fix.
В консоли Apps Script выполните следующие действия:
- Выберите свой проект.
- Выберите редактор .
- Выберите файл
WorkspaceEvent.gs. - В разделе «Выполнение» выберите
processSubscription. - Нажмите кнопку «Выполнить» . В журнале выполнения вы увидите, что сообщения были обработаны.
В Google Chat выполните следующие действия:
- Обратите внимание, что приложение отправило сообщение с просьбой о помощи в обеспечении инклюзивности в раздел, посвященный проблеме с виджетом-аксессуаром.
- Нажмите на виджет аксессуаров, чтобы отключить справку по вопросам инклюзивности.

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

8. Приложение 2: Разработка
Обзор концепций
заземление Gen AI
Речь идёт о повышении достоверности и надёжности моделей ИИ за счёт их привязки к проверяемым источникам знаний. Этот метод помогает предотвратить искусственное выдумывание информации ИИ и способствует формированию контекстно релевантных и менее предвзятых ответов.
Естественный язык
Любой язык, на котором говорят или пишут люди для повседневного общения, в отличие от искусственных или компьютерных языков.
Облачное хранилище
Облачное хранилище позволяет хранить и извлекать любые объемы данных в любое время по всему миру. Оно может использоваться в самых разных сценариях, включая предоставление контента веб-сайтов, хранение данных для архивирования и аварийного восстановления, а также распространение больших объемов данных среди пользователей посредством прямой загрузки.
хранилище данных Dialogflow CX
Dialogflow CX интегрируется с хранилищами данных , представляющими собой наборы веб-сайтов и документов, используемых агентами хранилищ данных для поиска ответов на вопросы конечных пользователей на основе конкретных данных. Для заданного вопроса агент хранилища данных ищет ответ в заданном исходном контенте и обобщает полученные данные в связный ответ. Он также предоставляет ссылки на источники ответа, чтобы конечный пользователь мог узнать больше.
Обзор архитектуры

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

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

- Нажмите «Создать» .
- Задайте имя
gchat-knowledge. - Нажмите «Создать» .

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

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

- Укажите
Company nameвашей компании. - Установите
Agent nameкакknowledge. - Нажмите «Продолжить» .

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

- Выберите файл .
- Нажмите «Обзор» .
- Выберите файл
google-chat-overview.pdf. - Нажмите «Продолжить» .
- Задайте имя хранилища данных как
gchat-knowledge-ds. - Нажмите «Создать» .

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

- Через пару минут нажмите Меню ☰ > Конструктор агентов > Приложения , и вы увидите приложение.

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

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

- Выберите «Настройки агента» > «Генеративный ИИ» > «Генеративный агент» .
- Переключитесь с модели Text Bison на Gemini Pro .
- Нажмите « Сохранить ».

- Нажмите «Проверить агента» .
- Отправьте сообщение
What is Google Chat?. Оператор ответит чем-то содержательным.

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

В консоли Google Cloud выполните следующие действия:
- Перейдите в раздел настроек Google Chat API.
- В разделе «Настройки подключения» выберите Dialogflow .
- В настройках Dialogflow выберите Dialogflow CX .
- Установите имя ресурса Agent или Environment равным имени агента, которое вы скопировали.
- Удалите две команды со слэшем.

- В Google Chat отправьте сообщение
What is Google Chat?в личном сообщении приложению Google Chat. Оператор ответит вам чем-то содержательным.

9. Дополнительно: Приложение 2: Добавить источники
Обзор концепций
Веб-хук Dialogflow CX
Сервис, который размещает бизнес-логику или вызывает другие сервисы. Во время сеанса Dialogflow CX веб-хуки могут использовать данные, извлеченные с помощью обработки естественного языка, для генерации динамических ответов, проверки собранных данных или запуска действий на бэкэнде.
Облачные функции
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, response) => {
// 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.forEach((citation) => {
// Avoid duplications.
if (linkTitles.indexOf(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 (linkTitles.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 выполните следующие действия:
- Включите API Cloud Build, Cloud Functions, Cloud Logging, Artifact Registry и Cloud Run.
- Нажмите Меню ☰ > API и сервисы > Включенные API и сервисы , а затем подтвердите, что API включены.
Обновить агент хранилища данных Dialogflow CX
Необходимо развернуть облачную функцию и обновить веб-перехватчик Dialogflow CX, чтобы по возможности запускать ее из нескольких источников.
Возвращать несколько источников
По умолчанию новый агент хранилища данных возвращает максимум один источник, но вы можете изменить это значение на большее.
В консоли Dialogflow CX выполните следующие действия:
- Выберите свой проект в Google Cloud.
- Выберите агента знаний .
- Выберите «Начальная страница» .
- Выберите «Редактировать хранилища данных» .
- В разделе «Ответы агента» установите параметр «Параметры ответа хранилища данных» равным
5. - Нажмите « Сохранить ».

Инициировать облачную функцию
В консоли Google Cloud выполните следующие действия:
- Нажмите Меню ☰ > Облачные функции .
- Нажмите « Создать функцию» .
- В разделе «Основные параметры» задайте имя
function-1. - В разделе «Аутентификация» выберите переключатель «Разрешить неаутентифицированные вызовы» .
- В разделе «Среда выполнения, сборка, подключения и параметры безопасности » установите максимальное количество экземпляров равным
3. - Нажмите «Далее» .

- Установите точку входа на
agent-response-adapter. - Замените содержимое по умолчанию файлами package.json и index.js .
- Нажмите «Развернуть» .

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

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

- Нажмите «Сборка» .
- Выберите «Начальная страница» .
- Выберите «Редактировать хранилища данных» .
- В разделе «Настройки веб-перехватчика» нажмите переключатель «Включить веб- перехватчик».
- Выберите адаптер Google Chat Response Adapter для веб-хуков .
- Установить тег в значение
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, response) => {
response.send('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
Инициировать имитацию серверной службы
You deploy a Cloud Function to simulate a backend service that the Dialogflow CX agent app needs to integrate and call as a tool.
В консоли Google Cloud выполните следующие действия:
- Click Menu ☰ > Cloud Functions .
- Click Create function .
- Under Basics , set name to
function-2. - Under Authentication , select the Allow unauthenticated invocations radio button.
- Under Runtime, build, connections and security settings , set Maximum number of instances to
3. - Нажмите «Далее» .

- Set Entry point to
feedback-app-backend. - Replace the default content with the files package.json and index.js .
- Click Deploy .

- Copy the URL while you wait a couple minutes for the function to deploy.
Create Dialogflow CX agent app
Создать приложение
В консоли Google Cloud выполните следующие действия:
- Click Menu ☰ > Agent builder > Apps .
- Click New app .
- Select Agent .
- Set Display name to
Feedback App. - Нажмите «Создать» .

Initiate tool
В консоли Google Cloud выполните следующие действия:
- Click Menu ☰ > Agent builder > Apps .
- Select the Feedback App agent.
- Click Tools > + Create .
- Set Name to
review. - Select OpenAPI .
- Set description to the following value:
The tool takes the number of stars as a parameter of the store review method and saves it in a database for later use.
- Download and replace
$URLin the file service-openapi.yaml with the URL that you copied previously. - Set
YAML Schemato the edited content of theservice-openapi.yamlfile. - Нажмите « Сохранить ».

Initiate agent
В консоли Google Cloud выполните следующие действия:
- Click Menu ☰ > Agent builder > Apps .
- Select the Feedback App agent.
- Select Agents > Default Generative Agent .
- Set Agent name to
Feedback collector. - Set
goalto the following value:
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.
- Set instructions to the following value:
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.
- Нажмите « Сохранить ».

Test app
В консоли Google Cloud выполните следующие действия:
- Click Menu ☰ > Agent builder > Apps .
- Select the Feedback App agent.
- Go to Preview agent .
- Under Agent , select Feedback collector .
- Under Select generative model , select gemini-pro .
- Send the message
Hello!to start.

В консоли Google Cloud выполните следующие действия:
- Click Menu ☰ > Cloud Functions .
- Select function-2 > Logs . Some logs show Google-Dialogflow as caller.

Integrate Google Chat app
In the Dialogflow CX console , follow these steps:
- Select your Google Cloud project.
- Click the action menu of the
Feedback Appagent. - Click Copy name .
В консоли Google Cloud выполните следующие действия:
- Go to the Google Chat API configuration.
- Set Agent or Environment resource name to the agent name that you copied previously.

- In Google Chat , send
Hello!in a direct message to the Google Chat app to start. The agent responds similarly to your test from the Dialogflow CX console.

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

Delete Apps Script project
We recommend that you delete your Apps Script project, too.
In the Apps Script console , follow these steps:
- Выберите свой проект.
- Click the action menu.
- Нажмите « Удалить» .

12. Поздравляем!
Congratulations! You built Google Chat apps with Gemini!
Что дальше?
We only showcased simple use cases in this codelab, but there are plenty of expansion areas that you might want to consider in your Google Chat apps, such as the following:
- Integrate with other Generative AI models, including customs.
- Support other types of media, such as audio, image, and video.
- Use multimodality.
- Rely on longer context windows and feedback loops.
- Publish production-ready Google Chat apps on the marketplace. There are plenty of resources available for developers such as YouTube videos, documentation websites, code samples, and tutorials.
- Enable Google Chat for your organization. The import mode feature makes it easier to get started.
Узнать больше
- Сайт документации для разработчиков Google Chat
- Google Chat and Dialogflow CX integration
- Репозиторий GitHub со всеми примерами использования Google Chat
- Google Chat import mode
- Developers documentation website for Apps Script
- Google Workspace Developers YouTube channel
- Центр разработчиков Google Cloud
- Модели генеративного искусственного интеллекта
- Generative AI Custom Models
- Generative AI long context windows
- Generative AI feedback loop


