1. Zanim zaczniesz
Czym są aplikacje Google Chat z Gemini?
Aplikacje Google Chat z Gemini:
- Wprowadź swoje usługi i zasoby do Google Chat, aby użytkownicy mogli uzyskiwać informacje i podejmować działania bez opuszczania rozmowy.
- Integracja z modelem generatywnej AI Gemini, dzięki czemu mogą tworzyć lub wyszukiwać dane, takie jak tekst lub obrazy, w określonych momentach, aby usprawnić przepływy pracy.
Dlaczego warto zintegrować aplikacje Google Chat z Gemini?
Typowe zastosowania modeli generatywnej AI, takich jak Gemini, należą do tych kategorii:
- Tworzenie i ulepszanie treści. Generuj teksty marketingowe, twórz posty w mediach społecznościowych, realistyczne obrazy, komponuj muzykę lub pomagaj w tworzeniu treści wideo.
- Wyszukiwanie danych Wyodrębniaj kluczowe informacje z nieuporządkowanej bazy wiedzy, podsumowuj długie teksty, klasyfikuj treści lub tłumacz języki z większą dokładnością i szybkością.
- Rozmowa Prowadź naturalne, informacyjne i kreatywne rozmowy.
Możliwość zintegrowania tych funkcji bezpośrednio w znanym interfejsie Google Chat to ogromna szansa dla każdego, kto chce zwiększyć wygodę i produktywność użytkowników.
Wymagania wstępne
- Podstawowa znajomość Apps Script, Google Cloud i Node.js.
- Podstawowa wiedza o Google Chat, w tym o procedurach obsługi zdarzeń, poleceniach z ukośnikiem, oknach, kartach, wiadomościach, uwierzytelnianiu aplikacji i interfejsach API.
Co utworzysz
W tym laboratorium kodowania utworzysz 3 aplikacje Google Chat z Gemini, aby omówić 3 przypadki użycia przedstawione w poprzedniej sekcji.
Aplikacja do zarządzania problemami (tworzenie i ulepszanie treści)
Ta aplikacja wykonuje te czynności:
- Zarządzanie zgłoszeniami od momentu ich utworzenia do zamknięcia za pomocą podstawowych interakcji, strony głównej aplikacji i uwierzytelniania aplikacji.
- Monitoruje wiadomości i zapewnia pomoc w zakresie inkluzywności w przypadku wydarzeń i widżetów akcesoriów.
Za pomocą Gemini możesz wykonywać te czynności:
- Generowanie raportów o problemach na podstawie historii wiadomości i szczegółów problemu.
- Klasyfikowanie wykluczających słów w wiadomościach z promptami z ograniczeniami.
Główne używane technologie to Vertex AI, Gemini, Apps Script i interfejsy Google Workspace API (Admin, Chat, Docs, Events).



Aplikacja Knowledge (wyszukiwanie danych)
Ta aplikacja korzysta z Gemini, aby rozumieć pytania zadawane w języku naturalnym i na nie odpowiadać oraz zwracać odniesienia do źródeł z danych nieustrukturyzowanych.
Główne używane technologie to agent magazynu danych Dialogflow CX, webhook Dialogflow CX, Google Cloud Functions i Gemini.

Aplikacja do przesyłania opinii (rozmowa)
Ta aplikacja korzysta z Gemini do zbierania i przechowywania opinii w formie rozmów w języku naturalnym.
Główne używane technologie to agent Dialogflow CX, narzędzie Dialogflow CX, OpenAPI, Google Cloud Functions i Gemini.

Czego się nauczysz
- Jak zintegrować aplikacje Google Chat z Gemini za pomocą Vertex AI.
- Jak zintegrować aplikacje Google Chat z agentami Dialogflow CX.
- Jak korzystać z najnowszych funkcji Google Chat: strona główna aplikacji, wydarzenia w Google Chat i widżety dodatkowe.
Wymagania
- Ukończenie krótkiego wprowadzenia Tworzenie aplikacji Google Chat za pomocą Apps Script. Ten przewodnik opiera się na projekcie Apps Script i Google Cloud.
2. Konfiguracja
Inicjowanie zasobów
W tej sekcji uzyskasz dostęp do tych zasobów i skonfigurujesz je w preferowanej przeglądarce.
Projekt Apps Script
W konsoli Apps Script wykonaj te czynności:
- Kliknij Ustawienia, a następnie włącz interfejs Google Apps Script API.

- Wybierz projekt.
- Kliknij Ustawienia projektu.
- Zaznacz pole wyboru Wyświetlaj plik manifestu „
appsscript.json” w edytorze. - Zmień nazwę projektu na
Chat Apps Gemini.

Projekt Google Cloud
W konsoli Google Cloud wykonaj te czynności:
- Wybierz projekt.
- Kliknij Menu ☰ > Interfejsy API i usługi > Ekran zgody OAuth > Edytuj aplikację, a następnie ustaw Nazwę aplikacji na
Chat Apps Gemini.
- Otwórz konfigurację interfejsu Google Chat API, a następnie ustaw Nazwę aplikacji i Opis na
Chat Apps Gemini.

Google Chat
W Google Chat wykonaj te czynności:
- W razie potrzeby rozpocznij czat w aplikacji Google Chat.
- Wyślij wiadomość, np.
Hello, aby sprawdzić, czy działa.

Pobieranie kodu źródłowego i zasobów lokalnie
- Pobierz to repozytorium GitHub.
- W preferowanym środowisku programistycznym otwórz katalog
apps-script, a następnie przejdź do tego samego katalogu w terminalu.

Instalowanie i konfigurowanie clasp
Używamy clasp, aby łatwo edytować i przesyłać wersje kodu źródłowego z lokalnego środowiska do projektu Apps Script.
- W środowisku lokalnym zainstaluj najnowsze wersje
node,npmiclasp.
npm install -g @google/clasp
- Zaloguj się na swoje konto:
clasp login

Jeśli operacja się powiedzie, w przeglądarce zobaczysz podstawowy ekran potwierdzenia, a plik .clasprc.json z danymi logowania klienta zostanie zaktualizowany. Możesz sprawdzić, gdzie znajduje się w terminalu.

3. Aplikacja 1: kompilacja
Sprawdź pojęcia
Vertex AI
Vertex AI oferuje wszystko, czego potrzebujesz do tworzenia i używania generatywnej AI, w tym rozwiązania AI, kreator agentów, ponad 130 modeli podstawowych i zintegrowaną platformę AI.

Gemini
Gemini to multimodalny model LLM od Google dostępny w Vertex AI. Pomaga ludziom w pełni wykorzystać swój potencjał, rozwinąć wyobraźnię, poszerzyć ciekawość i zwiększyć produktywność.
Zaawansowana usługa Google Chat
Usługa Advanced Chat umożliwia korzystanie z interfejsu Google Chat API w Apps Script. Umożliwia to skryptom znajdowanie, tworzenie i modyfikowanie pokoi czatu, dodawanie i usuwanie użytkowników z pokoi oraz odczytywanie i publikowanie wiadomości z tekstem, kartami, załącznikami i reakcjami.
Sprawdź architekturę

Ta aplikacja Google Chat jest zbudowana za pomocą Apps Script. Działa to w ten sposób:
- Użytkownik wysyła wiadomość do aplikacji na czacie lub w pokoju.
- Aplikacja, która jest zaimplementowana w projekcie Apps Script i powiązana z projektem w chmurze Google, przetwarza wiadomość.
- Aplikacja jest zintegrowana z interfejsami Google Docs API i Google Chat API.
- Aplikacja używa usługi Properties do przechowywania danych we właściwościach skryptu.
- Aplikacja wysyła synchroniczną odpowiedź na czacie lub w oryginalnym pokoju.
Sprawdzanie przepływów
Utwórz problem

Rozwiązywanie problemów w specjalnym obszarze

Zamykanie zgłoszenia w przestrzeni dedykowanej

Sprawdź kod źródłowy
Projekt Apps Script zawiera te skrypty:
Configuration: stałe do edycji na podstawie środowiska.ChatApp: obsługuje zdarzenia interakcji w Google Chat, w tym wiadomości, kliknięcia kart, polecenia z ukośnikiem i okna.Storage: funkcje narzędziowe, które korzystają z usługi Properties.ChatAppAuth: funkcje użytkowe, które korzystają z uwierzytelniania aplikacji Google Chat.Docs: funkcje narzędziowe, które korzystają z Dokumentów Google.VertexAi: funkcje narzędziowe, które korzystają z Vertex AI.
Oto części, które są aktywnie używane podczas generowania dokumentów raportu za pomocą Gemini i historii przestrzeni czatu:
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);
...
}
Aktualizowanie projektu Google Cloud
włączyć interfejsy API,
- W konsoli Google Cloud włącz interfejsy API Dokumentów Google, pakietu Admin SDK Google i Vertex AI:
- Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy interfejsy API są włączone.
Inicjowanie konta usługi
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Uprawnienia > Konta usługi > + Utwórz konto usługi.

- Ustaw Nazwę konta usługi na
chat-app. - Ustaw Opis konta usługi na
Chat app auth. - Kliknij Utwórz i kontynuuj.
- Kliknij Gotowe. Nastąpi przekierowanie na stronę Konta usługi, na której zobaczysz utworzone konto usługi.

- Wybierz nowo utworzone konto usługi.
- Kliknij kartę Klucze.
- Kliknij Dodaj klucz.
- Kliknij Utwórz nowy klucz.
- Wybierz JSON.
- Kliknij Utwórz.

Okno zamyka się, a nowo utworzona para kluczy publicznych/prywatnych jest automatycznie pobierana do środowiska lokalnego jako plik JSON. Jego zawartość będzie później używana podczas edytowania kodu źródłowego projektu Apps Script.
Aktualizowanie konfiguracji Google Chat API
W konsoli Google Cloud wykonaj te czynności:
- Dodaj polecenie po ukośniku.
- Ustaw Nazwę na
/create. - Ustaw Identyfikator polecenia na
1. - Ustaw Opis na
Create a new issue. - Zaznacz pole wyboru Otwiera okno.
- Dodaj kolejne polecenie po ukośniku.
- Ustaw Nazwę na
/close. - Ustaw Identyfikator polecenia na
2. - Ustaw Opis na
Close an issue. - Kliknij Zapisz.

Aktualizowanie projektu Apps Script
- Zmień bieżący katalog w terminalu lokalnym na
issue-management/1-baseline. Zawiera kod źródłowy. Zanim wypchniesz kod źródłowy do projektu Apps Script, musisz skonfigurować kilka rzeczy.
Konfigurowanie kodu źródłowego
- Ustaw stałą JSON o nazwie
CHAT_CREDENTIALSw plikuConfiguration.jsna zawartość pobranego wcześniej pliku klucza prywatnego.

- W konsoli Google Cloud kliknij Menu ☰ > Administracja > Ustawienia.
- Skopiuj identyfikator projektu.

- Ustaw stałą tekstową o nazwie
PROJECT_IDw plikuConfiguration.jsna identyfikator projektu.

Skonfiguruj clasp ustawienia
Aby zainicjować ustawienia clasp i przesłać kod źródłowy do właściwego projektu Apps Script, wykonaj te czynności:
- W konsoli Apps Script wybierz projekt.
- Kliknij Ustawienia projektu.
- W sekcji Identyfikatory kliknij Kopiuj.

- W bieżącym katalogu utwórz plik
.clasp.json. - Zastąp
<your-script-id>skopiowanym identyfikatorem. - Skopiuj wynik do pliku
.clasp.json. - Zapisz plik
.clasp.json.
{
"scriptId": "<your-script-id>"
}
Przesyłanie kodu źródłowego
- Uruchom to polecenie:
$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.
Wypróbuj to
- W Google Chat wyślij
Hello!w wiadomości bezpośredniej do aplikacji. Aplikacja nie odpowie, ale pojawi się komunikat z prośbą o konfigurację.

- Kliknij Skonfiguruj.
- Wybierz konto Google.
- Uwierzytelnij.
- Sprawdź i zezwalaj na dostęp do aplikacji.

Jeśli się to uda, na stronie zobaczysz podstawowy ekran potwierdzenia i rzeczywistą odpowiedź aplikacji na Twoją pierwotną wiadomość.


- Wyślij do aplikacji kolejną wiadomość na czacie, ale tym razem użyj polecenia po ukośniku
/create.

- W oknie dialogowym ustaw Tytuł na
Issue Title 1. - Ustaw Opis na Problem
Description 1. - Kliknij Utwórz.

Aplikacja wykonuje te czynności:
- Zamyka okno.
- Tworzy pokój poświęcony nowo utworzonemu problemowi o tej samej nazwie.
- dołącza do nowo utworzonego pokoju.
- Wysyła wiadomość zawierającą opis problemu w nowo utworzonym pokoju.
- Wysyła do Ciebie wiadomość na czacie z linkiem do nowo utworzonego pokoju.

- W nowo utworzonym pokoju wyślij wiadomość z poleceniem po ukośniku
/closei rozdzielczością, np.Not reproducible.

Aplikacja wykonuje te czynności:
- Tworzy dokument raportu w Dokumentach Google.
- Wysyła wiadomość do pokoju poświęconego problemowi z linkiem do nowo utworzonego dokumentu raportu.

- Otwórz dokument raportu. Zawiera podstawowe informacje, historię i podsumowanie.

4. Opcjonalnie: Aplikacja 1: dodaj stronę główną aplikacji
Sprawdź pojęcia
Strona główna aplikacji to konfigurowalna wiadomość na karcie, którą aplikacja do obsługi czatu wysyła do użytkownika, gdy ten otworzy kartę Strona główna w wiadomości bezpośredniej z aplikacją do obsługi czatu. Zwykle służy do wyświetlania dokumentacji lub przeglądu aplikacji. Technicznie rzecz biorąc, istnieje specjalne zdarzenie, które obsługuje te wiadomości i opiera się na tych samych podstawowych zasadach co wiadomości na kartach.

Sprawdzanie przepływów
Zarządzanie problemami
Sprawdź kod źródłowy
Projekt Apps Script wymaga edycji.
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
}}]}};
}
Aktualizowanie projektu Google Cloud
W konsoli Google Cloud wykonaj te czynności:
W środowisku lokalnym wykonaj te czynności:
- Zmień bieżący katalog w terminalu na
issue-management/2-app-home. Zawiera kod źródłowy, którego musisz użyć. - Skopiuj plik
issue-management/1-baseline/.clasp.jsondo bieżącego katalogu. - Skopiuj plik
issue-management/1-baseline/Configuration.jsdo bieżącego katalogu, aby zastąpić istniejący plik. - Uruchom to polecenie:
clasp push
Wypróbuj
W Google Chat wykonaj te czynności:
- Wyślij do aplikacji wiadomość na czacie z poleceniem po ukośniku
/create. Aplikacja otworzy okno. - Ustaw Tytuł na
Issue Title 2. - Ustaw Opis na Problem
Description 2. - Kliknij Utwórz.

- Wybierz kartę Główna w pokoju w aplikacji Google Chat. Zobaczysz szczegóły utworzonych problemów.

5. Opcjonalnie: aplikacja 1: dodaj monitorowanie pokoju
Przeglądanie pojęć
Pub/Sub
Pub/Sub to asynchroniczna i skalowalna usługa do przesyłania wiadomości, która oddziela usługi generujące wiadomości od usług je przetwarzających. Pub/Sub umożliwia tworzenie systemów producentów i odbiorców zdarzeń, czyli wydawców i subskrybentów. Wydawcy komunikują się z subskrybentami asynchronicznie, transmitując zdarzenia, a nie za pomocą synchronicznych wywołań procedur zdalnych (RPC).
Wydawcy wysyłają zdarzenia do usługi Pub/Sub niezależnie od sposobu i czasu ich przetwarzania. Pub/Sub dostarcza następnie zdarzenia do wszystkich usług, które na nie reagują. W systemach komunikujących się za pomocą wywołań RPC wydawcy muszą czekać, aż subskrybenci otrzymają dane. Asynchroniczna integracja w Pub/Sub zwiększa jednak elastyczność i niezawodność całego systemu.
Temat: nazwany zasób, który reprezentuje strumień wiadomości. Aby opublikować temat lub zasubskrybować go, musisz go utworzyć.
Subskrypcja: aby otrzymywać wiadomości publikowane w temacie, musisz utworzyć subskrypcję tego tematu. Aplikacja subskrybująca otrzymuje i przetwarza wiadomości opublikowane w temacie. Temat może mieć wiele subskrypcji, ale dana subskrypcja należy tylko do jednego tematu.
Zdarzenia Google Workspace
Zdarzenia Google Workspace reprezentują zmiany w zasobach Google Workspace, np. utworzenie, zaktualizowanie lub usunięcie zasobu. Aplikacje mogą subskrybować zasoby Google Workspace, aby asynchronicznie otrzymywać i przetwarzać odpowiednie zdarzenia.

Oto jak interfejs Google Workspace Events API dostarcza zdarzenia do aplikacji za pomocą subskrypcji:
- Aplikacja subskrybuje zasób w aplikacji Google Workspace, np. przestrzeń.
- Zmienia się zasób, do którego subskrybuje aplikacja.
- Aplikacja Google Workspace dostarcza zdarzenie do tematu w Pub/Sub, który służy jako punkt końcowy powiadomień dla subskrypcji Google Workspace aplikacji. Zdarzenie zawiera dane o tym, co się zmieniło w zasobie.
- Aplikacja przetwarza komunikat Pub/Sub zawierający zdarzenie i w razie potrzeby podejmuje odpowiednie działania.
Sprawdzanie przepływów
Utwórz problem (aktualizacja)

Rozwiązywanie problemów w przestrzeni dedykowanej (aktualizacja)

Zamykanie zgłoszenia z poziomu dedykowanego pokoju (aktualizacja)

Przetwarzanie subskrypcji

Sprawdź kod źródłowy
Projekt Apps Script wymaga edycji.
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);
}
Aktualizowanie projektu Google Cloud
włączyć interfejsy API,
- W konsoli Google Cloud włącz Google Workspace Events i PubSub.
- Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy oba są włączone.
Rozpoczęcie subskrypcji
Aby publikować wszystkie zdarzenia obszaru roboczego, musisz utworzyć temat Pub/Sub i zasubskrybować go.
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Pub/Sub > Tematy.
- Kliknij Utwórz temat.
- Ustaw Identyfikator tematu na
workspace-events. - Zaznacz pole wyboru Dodaj subskrypcję domyślną.
- Kliknij Utwórz.

Aby przyznać dostęp do publikowania wiadomości Pub/Sub w nowo utworzonym temacie z Google Chat, wykonaj te czynności:
- Wybierz temat z listy.
- Wybierz kartę Uprawnienia.
- Dodaj
chat-api-push@system.gserviceaccount.comdo pola Nowe podmioty zabezpieczeń. - W sekcji Rola wybierz Publikujący Pub/Sub.
- Kliknij Zapisz.

Aktualizowanie projektu Apps Script
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Administracja > Ustawienia.
- Skopiuj identyfikator projektu.

W środowisku lokalnym wykonaj te czynności:
- Zmień bieżący katalog w terminalu na
issue-management/3-message-monitoring. Zawiera on kod źródłowy, którego potrzebujesz. - W pliku
Configuration.jsustaw stałą tekstową o nazwiePROJECT_IDna skopiowany identyfikator projektu. - Ustaw stałą JSON o nazwie
CHAT_CREDENTIALSw plikuConfiguration.jsna zawartość pobranego wcześniej pliku klucza prywatnego. - Skopiuj plik
issue-management/2-app-home/.clasp.jsondo bieżącego katalogu. - Uruchom to polecenie:
clasp push
Wypróbuj
W Google Chat wykonaj te czynności:
- Wyślij do aplikacji wiadomość na czacie z poleceniem po ukośniku
/create. Aplikacja otworzy okno. - Ustaw Tytuł na
Issue Title 3. - Ustaw Opis na Problem
Description 3. - Kliknij Utwórz.
- W nowo utworzonym pokoju wyślij kilka wiadomości, w których opiszesz problem.
- Wyślij wiadomość z poleceniem po ukośniku
/closei rozwiązaniem, np.Fixed.
W konsoli Google Cloud wykonaj te czynności:
- Otwórz Menu ☰ > Pub/Sub > Subskrypcje.
- Wybierz subskrypcję workspace-events-sub.
- Wybierz kartę Wiadomości.
- Kliknij Pobierz. W tabeli wyświetlają się wiadomości związane z tym, co zostało wysłane do nowo utworzonego pokoju.

W konsoli Apps Script wykonaj te czynności:
- Wybierz projekt.
- Kliknij Edytujący.
- Wybierz plik
WorkspaceEvent.gs. - W sekcji Uruchom kliknij
processSubscription. - Kliknij
Run.W logu wykonania widać, że wiadomości zostały przetworzone.

W konsoli Google Cloud wykonaj te czynności:
- Otwórz Menu ☰ > Pub/Sub > Subskrypcje.
- Wybierz subskrypcję workspace-events-sub.
- Wybierz kartę Wiadomości.
- Kliknij Pobierz. Tabela nie będzie już wyświetlać wiadomości związanych z tym, co zostało wysłane do nowo utworzonego pokoju.

- W Google Chat w pokoju poświęconym trzeciemu problemowi, który został utworzony za pomocą polecenia po ukośniku
/create, wyślij jeszcze kilka wiadomości dotyczących tego problemu.
W konsoli Google Cloud wykonaj te czynności:
- Otwórz Menu ☰ > Pub/Sub > Subskrypcje.
- Wybierz subskrypcję workspace-events-sub.
- Wybierz kartę Wiadomości.
- Kliknij Pobierz. Tabela nie wyświetla wiadomości związanych z tym, co zostało wysłane do nowo utworzonego pokoju.
6. Opcjonalnie: Aplikacja 1. Dodaj pomoc dotyczącą integracji społecznej
Przeglądanie pojęć
Tworzenie promptów dla generatywnej AI to sztuka tworzenia instrukcji lub pytań, które mają pokierować modelem generatywnej AI w stronę konkretnego rodzaju pożądanych wyników. Częstą praktyką jest ograniczanie odpowiedzi przez dodawanie reguł i warunków w promptach. Może to pomóc w zapewnieniu, że dane wyjściowe są bezpieczne, trafne, spójne i zgodne z oczekiwaniami.
Sprawdzanie przepływów
Przetwarzanie subskrypcji (aktualizacja)

Sprawdź kod źródłowy
Projekt Apps Script wymaga edycji.
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;
}
Aktualizowanie projektu Apps Script
W środowisku lokalnym wykonaj te czynności:
- Zmień bieżący katalog w terminalu na
issue-management/4-inclusivity-help. Zawiera on potrzebny kod źródłowy. - Skopiuj plik
issue-management/3-message-monitoring/.clasp.jsondo bieżącego katalogu. - Skopiuj plik
issue-management/3-message-monitoring/Configuration.jsdo bieżącego katalogu, aby zastąpić istniejący plik. - Uruchom to polecenie:
clasp push
Wypróbuj
W Google Chat wykonaj te czynności:
- Wyślij do aplikacji wiadomość na czacie z poleceniem po ukośniku
/create. Aplikacja otworzy okno. - Ustaw Tytuł na
Issue Title 4. - Ustaw Opis na Problem
Description 4. - Kliknij Utwórz.
- W nowo utworzonym pokoju wyślij
It happened to me last week as well.
W konsoli Apps Script wykonaj te czynności:
- Wybierz projekt.
- Kliknij Edytujący.
- Wybierz plik
WorkspaceEvent.gs. - W sekcji Uruchom kliknij
processSubscription. - Kliknij Wykonaj. Z logu wykonania widać, że wiadomości zostały przetworzone.
W Google Chat wykonaj te czynności:
- Zwróć uwagę, że aplikacja nie wysłała żadnej pomocy dotyczącej inkluzywności w nowo utworzonym pokoju.
- W nowo utworzonym pokoju wyślij wiadomość
I had to add myself from the master to fix it.
W konsoli Apps Script wykonaj te czynności:
- Wybierz projekt.
- Kliknij Edytujący.
- Wybierz plik
WorkspaceEvent.gs. - W sekcji Uruchom kliknij
processSubscription. - Kliknij Wykonaj. Z logu wykonania widać, że wiadomości zostały przetworzone. W Google Chat aplikacja wysłała w nowo utworzonym pokoju wiadomość z poradami dotyczącymi inkluzywności.

7. Opcjonalnie: aplikacja 1: dodaj preferencje
.
Przeglądanie pojęć
Widżet akcesoriów to widżet bez obramowania dołączony do dołu wiadomości wysłanej przez aplikację. Zwykle służy do umożliwienia użytkownikowi szybkiego reagowania w konkretnym kontekście wiadomości. Technicznie rzecz biorąc, opiera się na tych samych podstawowych zasadach co przyciski kart.

Sprawdzanie przepływów
Wyłączanie pomocy dotyczącej inkluzywności

Sprawdź kod źródłowy
Projekt Apps Script wymaga edycji.
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
}]
}}
}]}}]
}, ...);
...
}
...
}
...
}
...
}
Aktualizowanie projektu Apps Script
W środowisku lokalnym wykonaj te czynności:
- Zmień bieżący katalog w terminalu na
issue-management/5-disable-help. Zawiera on kod źródłowy, którego potrzebujesz. - Skopiuj plik
issue-management/4-inclusivity-help/.clasp.jsondo bieżącego katalogu. - Skopiuj plik
issue-management/4-inclusivity-help/Configuration.jsdo bieżącego katalogu, aby zastąpić istniejący plik. - Uruchom to polecenie:
clasp push
Wypróbuj
Wyłącz pomoc
- W Google Chat w pokoju poświęconym czwartemu problemowi, który został utworzony za pomocą polecenia po ukośniku
/create, wyślij wiadomośćI had to add myself from the master to fix.
W konsoli Apps Script wykonaj te czynności:
- Wybierz projekt.
- Kliknij Edytujący.
- Wybierz plik
WorkspaceEvent.gs. - W sekcji Uruchom kliknij
processSubscription. - Kliknij Wykonaj. Z logu wykonania widać, że wiadomości zostały przetworzone.
W Google Chat wykonaj te czynności:
- Zwróć uwagę, że aplikacja wysłała wiadomość z pomocą dotyczącą włączania do pokoju poświęconego problemowi z widżetem akcesoriów.
- Kliknij widżet akcesorium, aby wyłączyć funkcję pomocy w zakresie inkluzywności.

Sprawdzanie wyłączenia
- W Google Chat w pokoju poświęconym czwartemu problemowi, który został utworzony za pomocą polecenia po ukośniku
/create, wyślij wiadomośćI had to add myself from the master to fix.
W konsoli Apps Script wykonaj te czynności:
- Wybierz projekt.
- Kliknij Edytujący.
- Wybierz plik
WorkspaceEvent.gs. - W sekcji Uruchom kliknij
processSubscription. - Kliknij Wykonaj. Z logu wykonania widać, że wiadomości zostały przetworzone. W Google Chat aplikacja nie wysłała do pokoju poświęconego temu problemowi wiadomości z pomocą dotyczącą inkluzywności, ponieważ ta funkcja była wyłączona.

8. Aplikacja 2: Kompilacja
Sprawdź pojęcia
Ugruntowanie generatywnej AI
Chodzi o zwiększenie wiarygodności i rzetelności modeli AI poprzez łączenie ich ze zweryfikowanymi źródłami wiedzy. Ta metoda pomaga zapobiegać wymyślaniu informacji przez AI i sprawia, że odpowiedzi są bardziej trafne i mniej obciążone.
Naturalny język
Każdy język, którym ludzie posługują się w mowie lub piśmie w codziennej komunikacji, w przeciwieństwie do języków sztucznych lub komputerowych.
Cloud Storage
Cloud Storage umożliwia przechowywanie i wyszukiwanie dowolnych ilości danych w dowolnym momencie na całym świecie. Usługę Cloud Storage można wykorzystać w różnych scenariuszach, takich jak wyświetlanie zawartości witryny, przechowywanie danych na potrzeby archiwizacji i odtwarzania awaryjnego lub dystrybucja dużych obiektów danych do użytkowników za pomocą bezpośredniego pobierania.
Magazyn danych Dialogflow CX
Dialogflow CX integruje się z magazynami danych, czyli zbiorami witryn i dokumentów używanych przez agentów magazynu danych do znajdowania odpowiedzi na pytania użytkowników na podstawie konkretnych danych. W przypadku danego pytania agent magazynu danych wyszukuje odpowiedź w podanych treściach źródłowych i podsumowuje wyniki w spójnej odpowiedzi. Zawiera też linki do źródeł odpowiedzi, dzięki którym użytkownik może dowiedzieć się więcej.
Sprawdź architekturę

Ta aplikacja do Google Chat jest utworzona za pomocą Dialogflow CX i działa w ten sposób:
- Użytkownik wysyła wiadomość do aplikacji na czacie lub w pokoju.
- Aplikacja, która jest agentem Dialogflow CX i jest powiązana z projektem w chmurze Google, przetwarza wiadomość.
- Aplikacja jest zintegrowana z magazynem danych znajdującym się w Cloud Storage.
- Aplikacja wysyła synchroniczną odpowiedź na czacie lub w oryginalnym pokoju.
Sprawdzanie automatyzacji
Odpowiedz na pytanie
Sprawdź kod źródłowy
Jedynym potrzebnym źródłem nie jest kod, ale dane, których używasz do ugruntowania.
google-chat-overview.pdf
Zawiera nieustrukturyzowane informacje o aplikacjach Google Chat, wydrukowaną wersję strony z witryny dla deweloperów Google Workspace.

Aktualizowanie projektu Google Cloud
W konsoli Google Cloud wykonaj te czynności:
- włączyć interfejsy Dialogflow API i Cloud Storage API;
- Włącz interfejs Vertex AI Agent Builder API.
- Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy wszystkie interfejsy API są włączone.
.
Tworzenie agenta magazynu danych Dialogflow CX
Inicjowanie danych o wiedzy
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Cloud Storage > Zasobniki.

- Kliknij Utwórz.
- Ustaw name na
gchat-knowledge. - Kliknij Utwórz.

- Wybierz zasobnik gchat-knowledge.
- Kliknij Prześlij pliki.
- Pobierz i wybierz plik google-chat-overview.pdf ze swojego środowiska lokalnego.

Utwórz aplikację
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Kreator agentów > Aplikacje.
- Kliknij Nowa aplikacja.
- Wybierz typ Google Chat.

- Wpisz w polu
Company namenazwę firmy. - Ustaw
Agent namenaknowledge. - Kliknij Dalej.

- Kliknij Utwórz nowy magazyn danych.
- Wybierz Cloud Storage jako źródło danych.

- Kliknij Plik.
- Kliknij Przeglądaj.
- Wybierz plik
google-chat-overview.pdf. - Kliknij Dalej.
- Ustaw nazwę magazynu danych na
gchat-knowledge-ds. - Kliknij Utwórz.

- W tabeli wybierz magazyn danych gchat-knowledge-ds.
- Kliknij Utwórz.

- Po kilku minutach kliknij Menu ☰ > Kreator agentów > Aplikacje. Zobaczysz, że aplikacja jest widoczna.

- Kliknij Menu ☰ > Kreator agentów > Magazyny danych.
- Kliknij magazyn danych gchat-knowledge-ds. Liczba dokumentów to
1, co oznacza, że są one gotowe.

Ukończ i przetestuj aplikację
W konsoli Dialogflow CX wykonaj te czynności:
- wybrać projekt Google Cloud;
- Wybierz agenta wiedzy.

- Wybierz Ustawienia agenta > Generatywna AI > Agent generatywny.
- Zmień model z Text Bison na Gemini Pro.
- Kliknij Zapisz.

- Kliknij Przetestuj agenta.
- Wyślij
What is Google Chat?. Pracownik obsługi klienta odpowiada w sposób, który ma znaczenie.

Integrowanie aplikacji Google Chat
W konsoli Dialogflow CX wykonaj te czynności:
- wybrać projekt Google Cloud;
- W wierszu agenta wiedzy kliknij
> Kopiuj nazwę.

W konsoli Google Cloud wykonaj te czynności:
- Otwórz konfigurację interfejsu Google Chat API.
- W sekcji Ustawienia połączenia wybierz Dialogflow.
- W sekcji Ustawienia Dialogflow wybierz Dialogflow CX.
- Ustaw Agent or Environment resource name (Nazwa zasobu agenta lub środowiska) na skopiowaną nazwę agenta.
- Usuń 2 polecenia z ukośnikiem.

- W Google Chat wyślij
What is Google Chat?w czacie do aplikacji Google Chat. Agent odpowie w sensowny sposób.

9. Opcjonalnie: aplikacja 2. Dodaj źródła
Sprawdź pojęcia
Webhook Dialogflow CX
Usługa, która hostuje logikę biznesową lub wywołuje inne usługi. Podczas sesji Dialogflow CX webhooki mogą korzystać z danych wyodrębnionych przez przetwarzanie języka naturalnego, aby generować dynamiczne odpowiedzi, weryfikować zebrane dane lub wywoływać działania na backendzie.
Cloud Functions
Cloud Functions to doskonałe rozwiązanie do tworzenia bezserwerowych backendów, przetwarzania danych w czasie rzeczywistym i tworzenia inteligentnych aplikacji. Nie ma serwerów, które trzeba by udostępniać, zarządzać nimi, instalować na nich poprawki ani je aktualizować. Automatycznie się skalują, mają wysoką dostępność i są odporne na awarie.
Sprawdzanie automatyzacji
Odpowiedz na pytanie (aktualizacja)

Sprawdź kod źródłowy
Jedyny kod źródłowy, którego potrzebujesz, to funkcja dostosowująca odpowiedzi agenta do wiadomości w Google Chat. Jest używany jako webhook.
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
}}]
}]}
}]
}}]
}});
});
Aktualizowanie projektu Google Cloud
W konsoli Google Cloud wykonaj te czynności:
- włączyć interfejsy Cloud Build API, Cloud Functions API, Cloud Logging API, Artifact Registry API i Cloud Run API;
- Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy interfejsy API są włączone.
Aktualizowanie agenta magazynu danych Dialogflow CX
Musisz wdrożyć funkcję Cloud Function i zaktualizować webhook Dialogflow CX, aby w miarę możliwości wywoływać go z wielu źródeł.
Zwracanie wielu źródeł
Domyślnie nowy agent magazynu danych zwraca maksymalnie 1 źródło, ale możesz to zmienić.
W konsoli Dialogflow CX wykonaj te czynności:
- wybrać projekt Google Cloud;
- Wybierz agenta wiedzy.
- Kliknij Strona startowa.
- Kliknij Edytuj magazyny danych.
- W sekcji Odpowiedzi agenta ustaw opcję Opcje odpowiedzi magazynu danych na
5. - Kliknij Zapisz.

Inicjowanie funkcji w Cloud Functions
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Cloud Functions.
- Kliknij Utwórz funkcję.
- W sekcji Podstawowe informacje ustaw nazwę na
function-1. - W sekcji Uwierzytelnianie wybierz przycisk radiowy Zezwalaj na nieuwierzytelnione wywołania.
- W sekcji Ustawienia środowiska wykonawczego, kompilacji, połączeń i zabezpieczeń ustaw Maksymalną liczbę instancji na
3. - Kliknij Dalej.

- Ustaw Punkt wejścia na
agent-response-adapter. - Zastąp domyślną zawartość plikami package.json i index.js.
- Kliknij Wdróż.

- Skopiuj adres URL i poczekaj kilka minut, aż funkcja zostanie wdrożona.

Inicjowanie webhooka
Musisz skonfigurować agenta Dialogflow CX tak, aby używał webhooka, który wywołuje nowo wdrożoną funkcję.
W konsoli Dialogflow CX wykonaj te czynności:
- wybrać projekt Google Cloud;
- Wybierz agenta wiedzy.
- Kliknij Zarządzaj > Webhooki > Utwórz.
- Ustaw Wyświetlaną nazwę na
Google Chat Response Adapter. - Ustaw adres URL webhooka na skopiowany wcześniej adres URL.
- Kliknij Zapisz.

- Kliknij Utwórz.
- Kliknij Strona startowa.
- Kliknij Edytuj magazyny danych.
- W sekcji Ustawienia webhooka kliknij przełącznik Włącz webhooka.
- Wybierz Google Chat Response Adapter for Webhook (Adapter odpowiedzi Google Chat dla webhooka).
- Ustaw tag na
arbitrary_tag. - Kliknij Zapisz.

Aplikacja testowa
- W Google Chat wyślij
What is Google Chat?w wiadomości bezpośredniej do aplikacji Google Chat. Agent odpowie czymś sensownym i kartą ze źródłami, jeśli takie istnieją.

10. Aplikacja 3. Kompilacja
Sprawdź pojęcia
Interakcje konwersacyjne
Są to wymiany informacji lub pomysłów między co najmniej 2 osobami w języku naturalnym. W przeciwieństwie do interfejsów technicznych, które często opierają się na bezstanowych, wysoce ustrukturyzowanych i nietolerancyjnych wymianach informacji.
Specyfikacja OpenAPI
Zapewnia spójny sposób przekazywania informacji na każdym etapie cyklu życia interfejsu API. Jest to język specyfikacji interfejsów API HTTP, który definiuje strukturę i składnię w sposób niezależny od języka programowania, w którym został utworzony interfejs API. Specyfikacje interfejsu API są zwykle pisane w języku YAML lub JSON, co ułatwia ich udostępnianie i używanie.
Agent Dialogflow CX
Podstawowy element składowy aplikacji agentów. Aplikacja agenta zwykle ma wielu agentów, z których każdy jest zdefiniowany do obsługi określonych zadań. Dane agenta są przekazywane do modelu LLM, dzięki czemu ma on informacje potrzebne do odpowiadania na pytania i wykonywania zadań. Każdy agent może przekazywać informacje, wysyłać zapytania do usług zewnętrznych lub przekazywać obsługę rozmowy do przepływu Dialogflow CX lub innego agenta w celu wykonania podzadań.
Narzędzie Dialogflow CX
Narzędzia służą do łączenia aplikacji agenta z systemami zewnętrznymi. Systemy te mogą wzbogacać wiedzę aplikacji agentów i umożliwiać im wydajne wykonywanie złożonych zadań.
Sprawdź architekturę

Ta aplikacja do Google Chat jest utworzona za pomocą Dialogflow CX i działa w ten sposób:
- Użytkownik wysyła wiadomość do aplikacji na czacie lub w pokoju.
- Aplikacja, która jest agentem Dialogflow CX i jest powiązana z projektem w chmurze Google, przetwarza wiadomość.
- Aplikacja jest zintegrowana z agentem.
- Aplikacja wysyła synchroniczną odpowiedź na czacie lub w oryginalnym pokoju.
Sprawdzanie automatyzacji
Zbieranie opinii

Sprawdź kod źródłowy
Jedyny kod źródłowy, którego potrzebujesz, to funkcja do symulowania usługi backendu, której agent używa jako narzędzia.
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
Inicjowanie makiety usługi backendu
Wdrażasz funkcję Cloud Function, aby symulować usługę backendu, którą aplikacja agenta Dialogflow CX musi zintegrować i wywoływać jako narzędzie.
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Cloud Functions.
- Kliknij Utwórz funkcję.
- W sekcji Podstawowe informacje ustaw nazwę na
function-2. - W sekcji Uwierzytelnianie kliknij przycisk Zezwalaj na nieuwierzytelnione wywołania.
- W sekcji Ustawienia środowiska wykonawczego, kompilacji, połączeń i zabezpieczeń ustaw Maksymalną liczbę instancji na
3. - Kliknij Dalej.

- Ustaw Punkt wejścia na
feedback-app-backend. - Zastąp domyślną zawartość plikami package.json i index.js.
- Kliknij Wdróż.

- Skopiuj adres URL i poczekaj kilka minut, aż funkcja zostanie wdrożona.
Tworzenie aplikacji agenta Dialogflow CX
Utwórz aplikację
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Kreator agentów > Aplikacje.
- Kliknij Nowa aplikacja.
- Kliknij Agent.
- Ustaw Wyświetlaną nazwę na
Feedback App. - Kliknij Utwórz.

Uruchom narzędzie
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Kreator agentów > Aplikacje.
- Wybierz agenta Aplikacja do przesyłania opinii.
- Kliknij Narzędzia > + Utwórz.
- Ustaw Nazwę na
review. - Wybierz OpenAPI.
- W przypadku parametru description ustaw tę wartość:
The tool takes the number of stars as a parameter of the store review method and saves it in a database for later use.
- Pobierz i zastąp
$URLw pliku service-openapi.yaml skopiowanym wcześniej adresem URL. - Ustaw
YAML Schemana zmodyfikowaną zawartość plikuservice-openapi.yaml. - Kliknij Zapisz.

Inicjowanie agenta
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Kreator agentów > Aplikacje.
- Wybierz agenta Aplikacja do przesyłania opinii.
- Wybierz Agenty > Domyślny agent generatywny.
- Ustaw Nazwa agenta na
Feedback collector. - Ustaw wartość
goalna:
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.
- W przypadku parametru instructions ustaw tę wartość:
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.
- Kliknij Zapisz.

Aplikacja testowa
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Kreator agentów > Aplikacje.
- Wybierz agenta Aplikacja do przesyłania opinii.
- Otwórz Podgląd agenta.
- W sekcji Agent wybierz Kolektor opinii.
- W sekcji Wybierz model generatywny kliknij gemini-pro.
- Aby rozpocząć, wyślij wiadomość
Hello!.

W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Cloud Functions.
- Wybierz funkcja-2 > Logi. W niektórych logach jako dzwoniący widnieje Google-Dialogflow.

Integracja z aplikacją Google Chat
W konsoli Dialogflow CX wykonaj te czynności:
- wybrać projekt Google Cloud;
- Kliknij menu czynności agenta
Feedback App. - Kliknij Skopiuj nazwę.
W konsoli Google Cloud wykonaj te czynności:
- Otwórz konfigurację interfejsu Google Chat API.
- Ustaw Agent or Environment resource name (Nazwa zasobu agenta lub środowiska) na nazwę agenta skopiowaną wcześniej.

- W Google Chat wyślij
Hello!w wiadomości bezpośredniej do aplikacji Google Chat, aby rozpocząć. Agent odpowiada podobnie jak w teście przeprowadzonym w konsoli Dialogflow CX.

11. Czyszczenie danych
Usuwanie projektu w chmurze Google
Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym ćwiczeniu, zalecamy usunięcie projektu Google Cloud.
W konsoli Google Cloud wykonaj te czynności:
- Kliknij Menu ☰ > Administracja > Ustawienia.
- Kliknij Wyłącz.
- Wpisz identyfikator projektu.
- Kliknij Wyłącz mimo to.

Usuwanie projektu Apps Script
Zalecamy też usunięcie projektu Apps Script.
W konsoli Apps Script wykonaj te czynności:
- Wybierz projekt.
- Kliknij menu czynności.
- Kliknij Usuń.

12. Gratulacje
Gratulacje! Tworzenie aplikacji Google Chat z Gemini
Co dalej?
W tym Codelabs pokazaliśmy tylko proste przypadki użycia, ale istnieje wiele obszarów, które warto rozważyć w aplikacjach Google Chat, np.:
- Integracja z innymi modelami generatywnej AI, w tym modelami niestandardowymi.
- obsługiwać inne typy multimediów, takie jak dźwięk, obrazy i filmy;
- Korzystaj z multimodalności.
- Korzystaj z dłuższych okien kontekstu i pętli informacji zwrotnych.
- Opublikuj w Marketplace aplikacje Google Chat gotowe do wdrożenia. Deweloperzy mają do dyspozycji wiele materiałów, takich jak filmy w YouTube, strony z dokumentacją, przykłady kodu i samouczki.
- Włącz Google Chat w organizacji. Funkcja trybu importowania ułatwia rozpoczęcie pracy.
Więcej informacji
- Witryna z dokumentacją dla deweloperów dotyczącą Google Chat
- Integracja Google Chat i Dialogflow CX
- Repozytorium GitHub ze wszystkimi przykładami Google Chat
- Tryb importu Google Chat
- Strona dokumentacji dla deweloperów dotyczącej Apps Script
- Kanał Google Workspace Developers w YouTube
- Centrum dla deweloperów Google Cloud
- Modele generatywnej AI
- Modele niestandardowe generatywnej AI
- Generatywna AI z długimi oknami kontekstu
- Pętla opinii dotyczących generatywnej AI


