1. Trước khi bắt đầu
Các ứng dụng Google Chat có Gemini là gì?
Các ứng dụng Google Chat có Gemini sẽ làm những việc sau:
- Đưa các dịch vụ và tài nguyên của bạn vào Google Chat để người dùng có thể nhận thông tin và thực hiện hành động mà không cần rời khỏi cuộc trò chuyện.
- Tích hợp với mô hình AI tạo sinh Gemini để có thể tạo hoặc tìm kiếm dữ liệu như văn bản hoặc hình ảnh vào những thời điểm cụ thể nhằm tinh giản quy trình làm việc của bạn.
Tại sao nên tích hợp các ứng dụng Google Chat với Gemini?
Các trường hợp sử dụng điển hình của các mô hình AI tạo sinh như Gemini thuộc các danh mục sau:
- Tạo và cải thiện nội dung. Tạo bản sao tiếp thị, soạn bài đăng trên mạng xã hội, tạo hình ảnh chân thực, sáng tác nhạc hoặc hỗ trợ tạo nội dung video.
- Tìm kiếm dữ liệu. Trích xuất thông tin chi tiết quan trọng từ một cơ sở kiến thức không có cấu trúc, tóm tắt văn bản dài, phân loại nội dung hoặc dịch ngôn ngữ với độ chính xác và tốc độ cao hơn.
- Cuộc trò chuyện. Tham gia vào những cuộc trò chuyện tự nhiên, giàu thông tin và sáng tạo.
Khả năng tích hợp những tính năng này ngay trong giao diện quen thuộc của Google Chat là một cơ hội lớn cho bất kỳ ai muốn cải thiện trải nghiệm và hiệu suất của người dùng.
Điều kiện tiên quyết
- Kiến thức cơ bản về Apps Script, Google Cloud và Node.js.
- Kiến thức cơ bản về các khái niệm trong Google Chat, bao gồm trình xử lý sự kiện, lệnh gạch chéo, hộp thoại, thẻ, tin nhắn, xác thực ứng dụng và API.
Sản phẩm bạn sẽ tạo ra
Trong lớp học lập trình này, bạn sẽ tạo 3 ứng dụng Google Chat bằng Gemini để giải quyết 3 trường hợp sử dụng được giới thiệu trong phần trước.
Ứng dụng quản lý vấn đề (tạo và cải thiện nội dung)
Ứng dụng này thực hiện những việc sau:
- Quản lý các vấn đề từ khi tạo đến khi đóng bằng các hoạt động tương tác cơ bản, trang chủ ứng dụng và xác thực ứng dụng.
- Theo dõi thông báo và cung cấp thông tin trợ giúp về tính toàn diện cho các sự kiện và tiện ích phụ kiện.
Bạn có thể dùng Gemini để làm những việc sau:
- Tạo báo cáo về vấn đề dựa trên nhật ký tin nhắn và thông tin chi tiết về vấn đề.
- Phân loại những từ không phù hợp trong tin nhắn bằng lời nhắc có điều kiện.
Các công nghệ chính được sử dụng là Vertex AI, Gemini, Apps Script và API Google Workspace (Quản trị, Chat, Tài liệu, Sự kiện).



Ứng dụng kiến thức (tìm kiếm dữ liệu)
Ứng dụng này dựa vào Gemini để hiểu và trả lời các câu hỏi bằng ngôn ngữ tự nhiên, đồng thời trả về thông tin tham khảo về nguồn từ dữ liệu không có cấu trúc.
Các công nghệ chính được sử dụng là tác nhân kho dữ liệu Dialogflow CX, webhook Dialogflow CX, Google Cloud Functions và Gemini.

Ứng dụng phản hồi (cuộc trò chuyện)
Ứng dụng này dựa vào Gemini để thu thập và lưu trữ các bài đánh giá bằng cách trò chuyện bằng ngôn ngữ tự nhiên.
Các công nghệ chính được sử dụng là tác nhân Dialogflow CX, công cụ Dialogflow CX, OpenAPI, Google Cloud Functions và Gemini.

Kiến thức bạn sẽ học được
- Cách tích hợp các ứng dụng Google Chat với Gemini thông qua Vertex AI.
- Cách tích hợp các ứng dụng Google Chat với các đặc vụ Dialogflow CX.
- Cách sử dụng các tính năng mới nhất của Google Chat: trang chủ của ứng dụng, Sự kiện trên Google Chat và các tiện ích bổ sung.
Những gì bạn cần
- Hoàn thành hướng dẫn bắt đầu nhanh Tạo ứng dụng Google Chat bằng Apps Script. Lớp học lập trình này dựa trên dự án Apps Script và dự án trên đám mây của Google Cloud đã tạo.
2. Bắt đầu thiết lập
Khởi động tài nguyên
Trong phần này, bạn sẽ truy cập và định cấu hình các tài nguyên sau đây bằng trình duyệt web mà bạn muốn dùng.
Dự án Apps Script
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Nhấp vào Cài đặt rồi bật Google Apps Script API.

- Chọn dự án của bạn.
- Nhấp vào Cài đặt dự án.
- Chọn hộp đánh dấu Hiển thị tệp kê khai "
appsscript.json" trong trình chỉnh sửa. - Đổi tên dự án thành
Chat Apps Gemini.

Dự án trên Google Cloud
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Nhấp vào Trình đơn ☰ > API và dịch vụ > Màn hình xin phép bằng OAuth > Chỉnh sửa ứng dụng, sau đó đặt Tên ứng dụng thành
Chat Apps Gemini.
- Chuyển đến phần cấu hình Google Chat API, sau đó đặt Tên ứng dụng và Nội dung mô tả thành
Chat Apps Gemini.

Google Chat
Trong Google Chat, hãy làm theo các bước sau:
- Nếu cần, hãy bắt đầu trò chuyện bằng ứng dụng nhắn tin Google Chat.
- Gửi một tin nhắn, chẳng hạn như
Hello, để đảm bảo tính năng này hoạt động.

Tải mã nguồn và tài nguyên xuống thiết bị
- Tải kho lưu trữ này trên GitHub xuống.
- Trong môi trường phát triển mà bạn muốn, hãy mở thư mục
apps-scriptrồi chuyển đến cùng thư mục đó trong cửa sổ dòng lệnh.

Cài đặt và định cấu hình clasp
Chúng tôi sử dụng clasp để dễ dàng chỉnh sửa và đẩy các phiên bản mã nguồn từ môi trường cục bộ lên dự án Apps Script.
- Trong môi trường cục bộ, hãy cài đặt phiên bản mới nhất của
node,npmvàclasp.
npm install -g @google/clasp
- Đăng nhập bằng tài khoản của bạn:
clasp login

Nếu thành công, bạn sẽ thấy một màn hình xác nhận cơ bản trong trình duyệt web và tệp .clasprc.json chứa thông tin đăng nhập của bạn sẽ được cập nhật. Bạn có thể tìm thấy vị trí của tệp này trong thiết bị đầu cuối.

3. Ứng dụng 1: Bản dựng
Xem lại các khái niệm
Vertex AI
Vertex AI cung cấp mọi thứ bạn cần để xây dựng và sử dụng AI tạo sinh, bao gồm các giải pháp AI, trình tạo tác nhân, hơn 130 mô hình cơ sở và một nền tảng AI hợp nhất.

Gemini
Gemini là một LLM đa phương thức của Google, có thể truy cập thông qua Vertex AI. AI giúp mọi người khai phá tiềm năng của bản thân để có thể tăng cường trí tưởng tượng, mở rộng khả năng tìm tòi và nâng cao năng suất.
Dịch vụ Chat nâng cao
Dịch vụ Chat nâng cao cho phép bạn sử dụng Google Chat API trong Apps Script. Điều này cho phép tập lệnh tìm, tạo và sửa đổi phòng Chat, thêm hoặc xoá thành viên khỏi phòng, cũng như đọc hoặc đăng tin nhắn có văn bản, thẻ, tệp đính kèm và lượt thể hiện cảm xúc.
Xem xét cấu trúc

Ứng dụng nhắn tin Google Chat này được tạo bằng Apps Script. Cách thức hoạt động như sau:
- Người dùng gửi tin nhắn cho ứng dụng, có thể là trong tin nhắn trực tiếp hoặc trong một không gian.
- Ứng dụng này được triển khai trong một dự án Apps Script và được liên kết với một dự án trên đám mây của Google, sẽ xử lý thông báo.
- Ứng dụng này tích hợp với API Google Tài liệu và Google Chat.
- Ứng dụng này sử dụng Dịch vụ thuộc tính để lưu trữ dữ liệu trong các thuộc tính của tập lệnh.
- Ứng dụng sẽ gửi một phản hồi đồng bộ, trong tin nhắn trực tiếp hoặc trong không gian ban đầu.
Quy trình đánh giá
Tạo vấn đề

Khắc phục vấn đề trong không gian chuyên biệt

Đóng vấn đề trong không gian chuyên dụng

Xem xét mã nguồn
Dự án Apps Script chứa các tập lệnh sau:
Configuration: Các hằng số cần chỉnh sửa dựa trên môi trường.ChatApp: Xử lý các sự kiện tương tác trên Google Chat, bao gồm tin nhắn, lượt nhấp vào thẻ, lệnh gạch chéo và hộp thoại.Storage: Các hàm tiện ích dựa vào Dịch vụ thuộc tính.ChatAppAuth: Các hàm hiệu dụng dựa vào quy trình xác thực ứng dụng nhắn tin Google Chat.Docs: Các hàm tiện ích dựa trên Google Tài liệu.VertexAi: Các hàm tiện ích dựa trên Vertex AI.
Sau đây là những phần được sử dụng tích cực khi tạo tài liệu báo cáo bằng Gemini và nhật ký không gian trò chuyện:
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);
...
}
Cập nhật dự án trên Google Cloud
Cho phép API
- Trong bảng điều khiển Cloud, hãy bật các API Google Tài liệu, Google Admin SDK và Vertex AI:
- Nhấp vào Trình đơn ☰ > API và Dịch vụ > API và Dịch vụ đã bật, rồi xác nhận rằng các API đã được bật.
Khởi tạo tài khoản dịch vụ
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > IAM và Quản trị > Tài khoản dịch vụ > + Tạo tài khoản dịch vụ.

- Đặt Tên tài khoản dịch vụ thành
chat-app. - Đặt Nội dung mô tả tài khoản dịch vụ thành
Chat app auth. - Nhấp vào Tạo và tiếp tục.
- Nhấp vào Xong. Bạn sẽ được chuyển hướng đến trang Tài khoản dịch vụ và có thể thấy tài khoản dịch vụ mà bạn đã tạo.

- Chọn tài khoản dịch vụ mới tạo.
- Chọn thẻ Khoá.
- Nhấp vào Thêm khoá.
- Nhấp vào Tạo khoá mới.
- Chọn JSON.
- Nhấp vào Tạo.

Hộp thoại sẽ đóng và cặp khoá công khai/riêng tư mà bạn vừa tạo sẽ tự động tải xuống môi trường cục bộ dưới dạng tệp JSON. Sau này, bạn sẽ sử dụng nội dung của tệp này khi chỉnh sửa mã nguồn của dự án Apps Script.
Cập nhật cấu hình Google Chat API
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Thêm một lệnh dấu gạch chéo.
- Đặt Name thành
/create. - Đặt Command ID thành
1. - Đặt Description thành
Create a new issue. - Chọn hộp đánh dấu Mở một hộp thoại.
- Thêm một lệnh dấu gạch chéo khác.
- Đặt Name thành
/close. - Đặt Command ID thành
2. - Đặt Description thành
Close an issue. - Nhấp vào Lưu.

Cập nhật dự án Apps Script
- Thay đổi thư mục hiện tại trong thiết bị đầu cuối cục bộ thành
issue-management/1-baseline. Thư mục này chứa mã nguồn. Trước khi đẩy mã nguồn vào dự án Apps Script, bạn cần định cấu hình một số thứ.
Định cấu hình mã nguồn
- Đặt hằng số JSON có tên là
CHAT_CREDENTIALStrong tệpConfiguration.jsthành nội dung tệp khoá riêng tư mà bạn đã tải xuống trước đó.

- Trong Bảng điều khiển Google Cloud, hãy nhấp vào Trình đơn ☰ > IAM và quản trị > Cài đặt.
- Sao chép mã dự án.

- Đặt hằng số chuỗi có tên
PROJECT_IDtrong tệpConfiguration.jsthành mã dự án.

Định cấu hình clasp chế độ cài đặt
Để khởi động chế độ cài đặt clasp nhằm đẩy mã nguồn vào đúng dự án Apps Script, hãy làm theo các bước sau:
- Trong bảng điều khiển Apps Script, hãy chọn dự án của bạn.
- Chọn Cài đặt dự án.
- Trong mục Mã nhận dạng, hãy nhấp vào Sao chép.

- Trong thư mục hiện tại, hãy tạo một tệp
.clasp.json. - Thay thế
<your-script-id>bằng mã nhận dạng đã sao chép. - Sao chép kết quả vào tệp
.clasp.json. - Lưu tệp
.clasp.json.
{
"scriptId": "<your-script-id>"
}
Đẩy mã nguồn
- Chạy lệnh sau:
$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.
Hãy thử
- Trong Google Chat, hãy gửi
Hello!trong tin nhắn trực tiếp cho ứng dụng. Ứng dụng sẽ không trả lời, nhưng một thông báo sẽ xuất hiện để nhắc bạn định cấu hình.

- Nhấp vào Định cấu hình.
- Chọn Tài khoản Google của bạn.
- Xác thực.
- Xem xét và cho phép truy cập vào ứng dụng.

Nếu thành công, bạn sẽ thấy một màn hình xác nhận cơ bản trên trang web và phản hồi thực tế từ ứng dụng cho tin nhắn ban đầu của bạn.


- Gửi một tin nhắn trực tiếp khác cho ứng dụng, nhưng sử dụng lệnh dấu gạch chéo
/create.

- Trong hộp thoại, hãy đặt Tiêu đề thành
Issue Title 1. - Đặt Nội dung mô tả thành Vấn đề
Description 1. - Nhấp vào Tạo.

Ứng dụng này sẽ thực hiện những việc sau:
- Đóng hộp thoại.
- Tạo một không gian dành riêng cho vấn đề mới tạo có cùng tiêu đề.
- Tham gia không gian mới tạo.
- Gửi tin nhắn có nội dung mô tả vấn đề trong không gian mới tạo.
- Gửi cho bạn một tin nhắn trực tiếp có đường liên kết đến không gian mới tạo.

- Trong không gian mới tạo, hãy gửi một tin nhắn có lệnh dấu gạch chéo
/closevà độ phân giải, chẳng hạn nhưNot reproducible.

Ứng dụng này sẽ thực hiện những việc sau:
- Tạo một tài liệu báo cáo trong Google Tài liệu.
- Gửi một tin nhắn đến không gian dành riêng cho vấn đề này, kèm theo đường liên kết đến tài liệu báo cáo mới tạo.

- Mở tài liệu báo cáo. Bảng này chứa thông tin cơ bản, nhật ký và bản tóm tắt.

4. Không bắt buộc: Ứng dụng 1: Thêm trang chủ của ứng dụng
Xem lại các khái niệm
Trang chủ của ứng dụng là một thông báo dạng thẻ có thể tuỳ chỉnh mà ứng dụng nhắn tin gửi cho người dùng khi người dùng truy cập vào thẻ Trang chủ từ một tin nhắn trực tiếp với ứng dụng nhắn tin. Thông báo này thường được dùng để hiển thị tài liệu hoặc thông tin tổng quan về ứng dụng. Về mặt kỹ thuật, có một sự kiện chuyên biệt để xử lý và sự kiện này dựa trên các nguyên tắc cốt lõi giống như thông báo trên thẻ.

Xem xét các quy trình
Quản lý vấn đề
Xem xét mã nguồn
Bạn cần chỉnh sửa dự án 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
}}]}};
}
Cập nhật dự án trên Google Cloud
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
Trong môi trường cục bộ, hãy làm theo các bước sau:
- Thay đổi thư mục hiện tại trong thiết bị đầu cuối thành
issue-management/2-app-home. Thư mục này chứa mã nguồn mà bạn cần sử dụng. - Sao chép tệp
issue-management/1-baseline/.clasp.jsonvào thư mục hiện tại. - Sao chép tệp
issue-management/1-baseline/Configuration.jsvào thư mục hiện tại để thay thế tệp hiện có. - Chạy lệnh sau:
clasp push
Thử nào
Trong Google Chat, hãy làm theo các bước sau:
- Gửi tin nhắn trực tiếp cho ứng dụng bằng lệnh dấu gạch chéo
/create. Ứng dụng sẽ mở một hộp thoại. - Đặt Tiêu đề thành
Issue Title 2. - Đặt Nội dung mô tả thành Vấn đề
Description 2. - Nhấp vào Tạo.

- Chọn thẻ Trang chủ trong không gian của bạn bằng ứng dụng nhắn tin Google Chat. Bạn có thể xem thông tin chi tiết về các vấn đề mà bạn đã tạo.

5. Không bắt buộc: Ứng dụng 1: Thêm tính năng giám sát không gian
Xem lại các khái niệm
Pub/Sub
Pub/Sub là một dịch vụ nhắn tin không đồng bộ và có khả năng mở rộng, giúp tách các dịch vụ tạo tin nhắn khỏi các dịch vụ xử lý những tin nhắn đó. Pub/Sub cho phép bạn tạo hệ thống gồm các nhà sản xuất và người tiêu dùng sự kiện, được gọi là nhà xuất bản và người đăng ký. Nhà xuất bản giao tiếp với người đăng ký một cách không đồng bộ bằng cách phát các sự kiện, thay vì bằng các lệnh gọi quy trình từ xa (RPC) đồng bộ.
Nhà xuất bản gửi các sự kiện đến dịch vụ Pub/Sub mà không cần quan tâm đến cách thức hoặc thời điểm các sự kiện này được xử lý. Sau đó, Pub/Sub sẽ phân phối các sự kiện đến tất cả những dịch vụ phản ứng với các sự kiện đó. Trong các hệ thống giao tiếp thông qua RPC, nhà xuất bản phải đợi người đăng ký nhận dữ liệu. Tuy nhiên, việc tích hợp không đồng bộ trong Pub/Sub sẽ tăng tính linh hoạt và độ mạnh mẽ của hệ thống tổng thể.
Chủ đề: Một tài nguyên được đặt tên, đại diện cho một nguồn cấp dữ liệu gồm các thông báo. Bạn phải tạo một chủ đề trước khi có thể xuất bản hoặc đăng ký theo dõi chủ đề đó.
Gói thuê bao: Để nhận các tin nhắn được đăng lên một chủ đề, bạn phải tạo một gói thuê bao cho chủ đề đó. Ứng dụng thuê bao nhận và xử lý các thông báo được xuất bản cho chủ đề. Một chủ đề có thể có nhiều gói thuê bao, nhưng một gói thuê bao nhất định chỉ thuộc về một chủ đề.
Sự kiện Google Workspace
Sự kiện Google Workspace thể hiện những thay đổi đối với các tài nguyên trong Google Workspace, chẳng hạn như khi tài nguyên được tạo, cập nhật hoặc xoá. Các ứng dụng có thể đăng ký nhận tài nguyên của Google Workspace để nhận và xử lý các sự kiện liên quan một cách không đồng bộ.

Sau đây là cách Google Workspace Events API gửi các sự kiện đến một ứng dụng thông qua một lượt đăng ký:
- Ứng dụng đăng ký một tài nguyên trong ứng dụng Google Workspace, chẳng hạn như một không gian.
- Tài nguyên mà ứng dụng đã đăng ký thay đổi.
- Ứng dụng Google Workspace gửi một sự kiện đến một chủ đề trong Pub/Sub. Chủ đề này đóng vai trò là điểm cuối thông báo cho gói thuê bao Google Workspace của ứng dụng. Sự kiện này chứa dữ liệu về những thay đổi trong tài nguyên.
- Ứng dụng xử lý thông báo Pub/Sub chứa sự kiện và thực hiện hành động (nếu cần).
Quy trình đánh giá
Tạo vấn đề (cập nhật)

Khắc phục vấn đề trong không gian dành riêng (nội dung cập nhật)

Đóng vấn đề trong không gian riêng (nội dung cập nhật)

Xử lý gói thuê bao

Xem xét mã nguồn
Bạn cần chỉnh sửa dự án 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);
}
Cập nhật dự án trên Google Cloud
Cho phép API
- Trong bảng điều khiển Google Cloud, hãy bật Google Workspace Events và PubSub.
- Nhấp vào Trình đơn ☰ > API và dịch vụ > API và dịch vụ đã bật, sau đó xác nhận rằng cả hai đều đã bật.
Bắt đầu quy trình đăng ký
Bạn cần tạo và đăng ký một chủ đề Pub/Sub để đăng tất cả các sự kiện trong không gian làm việc.
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến Trình đơn ☰ > Pub/Sub > Topics (Chủ đề).
- Nhấp vào Tạo chủ đề.
- Đặt Mã nhận dạng chủ đề thành
workspace-events. - Chọn hộp đánh dấu Thêm một gói thuê bao mặc định.
- Nhấp vào Tạo.

Để cấp quyền đăng thông báo Pub/Sub cho chủ đề mới tạo của bạn từ Google Chat, hãy làm theo các bước sau:
- Chọn chủ đề trong danh sách.
- Chọn thẻ Quyền.
- Thêm
chat-api-push@system.gserviceaccount.comvào Hiệu trưởng mới. - Chọn Nhà xuất bản Pub/Sub cho Vai trò.
- Nhấp vào Lưu.

Cập nhật dự án Apps Script
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến Trình đơn ☰ > IAM và Quản trị > Cài đặt.
- Sao chép mã dự án.

Trong môi trường cục bộ, hãy làm theo các bước sau:
- Thay đổi thư mục hiện tại trong thiết bị đầu cuối thành
issue-management/3-message-monitoring. Thư mục này chứa mã nguồn mà bạn cần. - Đặt hằng số chuỗi có tên là
PROJECT_IDtrong tệpConfiguration.jsthành mã dự án đã sao chép. - Đặt hằng số JSON có tên là
CHAT_CREDENTIALStrong tệpConfiguration.jsthành nội dung tệp khoá riêng tư mà bạn đã tải xuống trước đó. - Sao chép tệp
issue-management/2-app-home/.clasp.jsonvào thư mục hiện tại. - Chạy lệnh sau:
clasp push
Thử nào
Trong Google Chat, hãy làm theo các bước sau:
- Gửi tin nhắn trực tiếp cho ứng dụng bằng lệnh dấu gạch chéo
/create. Ứng dụng sẽ mở một hộp thoại. - Đặt Tiêu đề thành
Issue Title 3. - Đặt Nội dung mô tả thành Vấn đề
Description 3. - Nhấp vào Tạo.
- Trong không gian mới tạo, hãy gửi một vài tin nhắn thảo luận về vấn đề.
- Gửi tin nhắn bằng lệnh dấu gạch chéo
/closevà độ phân giải, chẳng hạn nhưFixed.
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến Trình đơn ☰ > Pub/Sub > Gói thuê bao.
- Chọn gói thuê bao workspace-events-sub.
- Chọn thẻ Tin nhắn.
- Nhấp vào Kéo. Bảng này hiển thị những tin nhắn liên quan đến nội dung bạn đã gửi đến không gian mới tạo.

Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs. - Chọn
processSubscriptiontrong phần Run (Chạy). - Nhấp vào
Run.Bạn có thể thấy trong nhật ký thực thi rằng các thông báo đã được xử lý.

Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến Trình đơn ☰ > Pub/Sub > Gói thuê bao.
- Chọn gói thuê bao workspace-events-sub.
- Chọn thẻ Tin nhắn.
- Nhấp vào Kéo. Bảng này sẽ không còn hiển thị những tin nhắn liên quan đến nội dung bạn đã gửi đến không gian mới tạo.

- Trong Google Chat, trong không gian dành riêng cho vấn đề thứ ba mà bạn đã tạo bằng lệnh dấu gạch chéo
/create, hãy gửi thêm một vài tin nhắn thảo luận về vấn đề đó.
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến Trình đơn ☰ > Pub/Sub > Gói thuê bao.
- Chọn gói thuê bao workspace-events-sub.
- Chọn thẻ Tin nhắn.
- Nhấp vào Kéo. Bảng này không hiển thị các tin nhắn liên quan đến nội dung bạn đã gửi đến không gian mới tạo.
6. Không bắt buộc: Ứng dụng 1: Thêm trợ giúp về tính toàn diện
Xem lại các khái niệm
Đặt câu lệnh cho AI tạo sinh là nghệ thuật tạo ra các chỉ dẫn hoặc câu hỏi để hướng dẫn một mô hình AI tạo sinh tạo ra loại kết quả cụ thể mà bạn mong muốn. Một phương pháp phổ biến là chặn câu trả lời bằng cách thêm các quy tắc và điều kiện vào câu lệnh. Điều này có thể giúp đảm bảo kết quả đầu ra an toàn, phù hợp, nhất quán và đáp ứng được kỳ vọng.
Quy trình đánh giá
Xử lý gói thuê bao (cập nhật)

Xem xét mã nguồn
Bạn cần chỉnh sửa dự án 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;
}
Cập nhật dự án Apps Script
Trong môi trường cục bộ, hãy làm theo các bước sau:
- Thay đổi thư mục hiện tại trong thiết bị đầu cuối thành
issue-management/4-inclusivity-help. Thư mục này chứa mã nguồn mà bạn cần. - Sao chép tệp
issue-management/3-message-monitoring/.clasp.jsonvào thư mục hiện tại. - Sao chép tệp
issue-management/3-message-monitoring/Configuration.jsvào thư mục hiện tại để thay thế tệp hiện có. - Chạy lệnh sau:
clasp push
Thử nào
Trong Google Chat, hãy làm theo các bước sau:
- Gửi tin nhắn trực tiếp cho ứng dụng bằng lệnh dấu gạch chéo
/create. Ứng dụng sẽ mở một hộp thoại. - Đặt Tiêu đề thành
Issue Title 4. - Đặt Nội dung mô tả thành Vấn đề
Description 4. - Nhấp vào Tạo.
- Trong không gian mới tạo, hãy gửi
It happened to me last week as well.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs. - Chọn
processSubscriptiontrong phần Run (Chạy). - Nhấp vào Chạy. Bạn có thể thấy trong nhật ký thực thi rằng các thông báo đã được xử lý.
Trong Google Chat, hãy làm theo các bước sau:
- Lưu ý rằng ứng dụng không gửi bất kỳ trợ giúp nào về tính toàn diện trong không gian mới tạo.
- Trong không gian mới tạo, hãy gửi tin nhắn
I had to add myself from the master to fix it.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs. - Chọn
processSubscriptiontrong phần Run (Chạy). - Nhấp vào Chạy. Bạn có thể thấy trong nhật ký thực thi rằng các thông báo đã được xử lý. Trong Google Chat, ứng dụng đã gửi một tin nhắn trợ giúp về tính toàn diện trong không gian mới tạo.

7. Không bắt buộc: Ứng dụng 1: Thêm lựa chọn ưu tiên
.
Xem lại các khái niệm
Tiện ích phụ kiện là một tiện ích không có đường viền, được đính kèm vào cuối tin nhắn do một ứng dụng gửi. Tiện ích này thường được dùng để cho phép người dùng phản ứng nhanh trong ngữ cảnh cụ thể của tin nhắn. Về mặt kỹ thuật, nút này dựa trên các nguyên tắc cốt lõi giống như nút thẻ.

Quy trình đánh giá
Tắt tính năng trợ giúp về tính toàn diện

Xem xét mã nguồn
Bạn cần chỉnh sửa dự án 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
}]
}}
}]}}]
}, ...);
...
}
...
}
...
}
...
}
Cập nhật dự án Apps Script
Trong môi trường cục bộ, hãy làm theo các bước sau:
- Thay đổi thư mục hiện tại trong thiết bị đầu cuối thành
issue-management/5-disable-help. Thư mục này chứa mã nguồn mà bạn cần. - Sao chép tệp
issue-management/4-inclusivity-help/.clasp.jsonvào thư mục hiện tại. - Sao chép tệp
issue-management/4-inclusivity-help/Configuration.jsvào thư mục hiện tại để thay thế tệp hiện có. - Chạy lệnh sau:
clasp push
Thử nào
Tắt tính năng trợ giúp
- Trong Google Chat, trong không gian dành riêng cho vấn đề thứ tư mà bạn đã tạo bằng lệnh dấu gạch chéo
/create, hãy gửi tin nhắnI had to add myself from the master to fix.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs. - Chọn
processSubscriptiontrong phần Run (Chạy). - Nhấp vào Chạy. Bạn có thể thấy trong nhật ký thực thi rằng các thông báo đã được xử lý.
Trong Google Chat, hãy làm theo các bước sau:
- Lưu ý rằng ứng dụng đã gửi một tin nhắn có nội dung trợ giúp về tính toàn diện đến không gian dành riêng cho vấn đề liên quan đến một tiện ích phụ kiện.
- Nhấp vào tiện ích phụ kiện để tắt tính năng trợ giúp về tính toàn diện.

Kiểm tra việc vô hiệu hoá
- Trong Google Chat, trong không gian dành riêng cho vấn đề thứ tư mà bạn đã tạo bằng lệnh dấu gạch chéo
/create, hãy gửi tin nhắnI had to add myself from the master to fix.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Chọn Trình chỉnh sửa.
- Chọn tệp
WorkspaceEvent.gs. - Chọn
processSubscriptiontrong phần Run (Chạy). - Nhấp vào Chạy. Bạn có thể thấy trong nhật ký thực thi rằng các thông báo đã được xử lý. Trong Google Chat, ứng dụng này không gửi tin nhắn có nội dung trợ giúp về tính toàn diện đến không gian dành riêng cho vấn đề này vì không gian đó đã bị vô hiệu hoá.

8. Ứng dụng 2: Xây dựng
Xem lại các khái niệm
Liên kết thực tế của AI tạo sinh
Mục tiêu là giúp các mô hình AI trở nên đáng tin cậy và cung cấp thông tin chính xác hơn bằng cách kết nối các mô hình này với những nguồn kiến thức có thể xác minh. Kỹ thuật này giúp ngăn AI bịa đặt thông tin, đồng thời có thể giúp câu trả lời phù hợp với ngữ cảnh và ít thiên vị hơn.
Ngôn ngữ tự nhiên
Mọi ngôn ngữ mà con người nói hoặc viết để giao tiếp hằng ngày, trái ngược với ngôn ngữ nhân tạo hoặc ngôn ngữ dựa trên máy tính.
Cloud Storage
Cloud Storage cho phép lưu trữ và truy xuất bất kỳ lượng dữ liệu nào trên toàn thế giới tại bất cứ thời điểm nào. Bạn có thể sử dụng dịch vụ này cho nhiều trường hợp, chẳng hạn như phân phát nội dung trang web, lưu trữ dữ liệu để lưu trữ và phục hồi sau thảm hoạ hoặc phân phối các đối tượng dữ liệu lớn cho người dùng thông qua phương thức tải xuống trực tiếp.
Kho lưu trữ dữ liệu Dialogflow CX
Dialogflow CX tích hợp với kho dữ liệu. Đây là tập hợp các trang web và tài liệu mà tác nhân kho dữ liệu sử dụng để tìm câu trả lời cho câu hỏi của người dùng cuối từ dữ liệu cụ thể. Đối với một câu hỏi cụ thể, nhân viên hỗ trợ kho dữ liệu sẽ tìm câu trả lời trong nội dung nguồn được cung cấp sẵn và tóm tắt thông tin tìm được thành một câu trả lời mạch lạc. Công cụ này cũng cung cấp các đường liên kết hỗ trợ đến nguồn của câu trả lời để người dùng cuối tìm hiểu thêm.
Xem xét cấu trúc

Ứng dụng nhắn tin Google Chat này được tạo bằng Dialogflow CX và hoạt động như sau:
- Người dùng gửi tin nhắn cho ứng dụng, có thể là trong tin nhắn trực tiếp hoặc trong một không gian.
- Ứng dụng này là một nhân viên hỗ trợ Dialogflow CX và được liên kết với một dự án trên đám mây của Google, sẽ xử lý thông báo.
- Ứng dụng này tích hợp với một kho dữ liệu nằm trong Cloud Storage.
- Ứng dụng sẽ gửi một phản hồi đồng bộ, trong tin nhắn trực tiếp hoặc trong không gian ban đầu.
Xem xét các luồng
Trả lời câu hỏi
Xem xét mã nguồn
Nguồn duy nhất mà bạn cần không phải là mã, mà là dữ liệu bạn dùng để làm cơ sở.
google-chat-overview.pdf
Chứa thông tin không có cấu trúc của các ứng dụng Google Chat, một bản in của một trang trên trang web dành cho nhà phát triển Google Workspace.

Cập nhật dự án trên đám mây của Google
Trong Google Cloud Console, hãy làm theo các bước sau:
- Bật API Dialogflow và Cloud Storage.
- Bật Vertex AI Agent Builder API.
- Nhấp vào Trình đơn ☰ > API và dịch vụ > API và dịch vụ đã bật, sau đó xác nhận rằng tất cả API đều đã bật.
.
Tạo nhân viên hỗ trợ kho dữ liệu Dialogflow CX
Khởi tạo dữ liệu kiến thức
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > Cloud Storage > Buckets.

- Nhấp vào Tạo.
- Đặt name thành
gchat-knowledge. - Nhấp vào Tạo.

- Chọn nhóm gchat-knowledge.
- Nhấp vào Tải tệp lên.
- Tải tệp google-chat-overview.pdf xuống và chọn tệp này trong môi trường cục bộ của bạn.

Tạo ứng dụng
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > Trình tạo đặc vụ > Ứng dụng.
- Nhấp vào Ứng dụng mới.
- Chọn loại cuộc trò chuyện.

- Đặt
Company namethành tên công ty của bạn. - Đặt
Agent namethànhknowledge. - Nhấp vào Tiếp tục.

- Nhấp vào Tạo kho dữ liệu mới.
- Chọn Cloud Storage làm nguồn dữ liệu.

- Chọn Tệp.
- Nhấp vào Duyệt xem.
- Chọn tệp
google-chat-overview.pdf. - Nhấp vào Tiếp tục.
- Đặt tên kho dữ liệu thành
gchat-knowledge-ds. - Nhấp vào Tạo.

- Chọn kho dữ liệu gchat-knowledge-ds trong bảng.
- Nhấp vào Tạo.

- Sau vài phút, hãy nhấp vào Trình đơn ☰ > Trình tạo tác nhân > Ứng dụng và bạn sẽ thấy ứng dụng.

- Nhấp vào Trình đơn ☰ > Trình tạo đặc vụ > Kho dữ liệu.
- Nhấp vào kho dữ liệu gchat-knowledge-ds. Số lượng tài liệu là
1, cho biết rằng tài liệu đã sẵn sàng.

Hoàn tất và kiểm thử ứng dụng
Trong bảng điều khiển Dialogflow CX, hãy làm theo các bước sau:
- Chọn dự án Google Cloud của bạn.
- Chọn tác nhân kiến thức.

- Chọn Cài đặt tác nhân > AI tạo sinh > Tác nhân tạo sinh.
- Chuyển mô hình từ Text Bison sang Gemini Pro.
- Nhấp vào Lưu.

- Nhấp vào Kiểm thử tác nhân.
- Gửi
What is Google Chat?. Trợ lý phản hồi bằng một câu trả lời có ý nghĩa.

Tích hợp ứng dụng nhắn tin Google Chat
Trong bảng điều khiển Dialogflow CX, hãy làm theo các bước sau:
- Chọn dự án Google Cloud của bạn.
- Trong hàng của tác nhân tri thức, hãy nhấp vào biểu tượng
> Sao chép tên.

Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến phần cấu hình API Google Chat.
- Trong phần Cài đặt kết nối, hãy chọn Dialogflow.
- Trong phần Cài đặt Dialogflow, hãy chọn Dialogflow CX.
- Đặt Tên tài nguyên của Agent hoặc Environment thành tên của tác nhân mà bạn đã sao chép.
- Xoá 2 lệnh gạch chéo.

- Trong Google Chat, hãy gửi
What is Google Chat?trong tin nhắn trực tiếp đến ứng dụng nhắn tin Google Chat. Tác nhân sẽ phản hồi bằng một nội dung có ý nghĩa.

9. Không bắt buộc: Ứng dụng 2: Thêm nguồn
Xem lại các khái niệm
Webhook Dialogflow CX
Một dịch vụ lưu trữ logic nghiệp vụ hoặc gọi các dịch vụ khác. Trong phiên Dialogflow CX, webhook có thể dựa vào dữ liệu được trích xuất bằng tính năng xử lý ngôn ngữ tự nhiên để tạo phản hồi linh hoạt, xác thực dữ liệu đã thu thập hoặc kích hoạt các hành động trên phụ trợ.
Cloud Functions
Cloud Functions rất phù hợp để tạo các phần phụ trợ không máy chủ, xử lý dữ liệu theo thời gian thực và tạo các ứng dụng thông minh. Không có máy chủ nào để cung cấp, quản lý, vá hoặc cập nhật. Các dịch vụ này tự động mở rộng quy mô, có tính sẵn sàng cao và khả năng kháng lỗi.
Xem xét các luồng
Trả lời câu hỏi (cập nhật)

Xem xét mã nguồn
Mã nguồn duy nhất bạn cần là hàm điều chỉnh phản hồi của trợ lý ảo cho phù hợp với tin nhắn trên Google Chat. URL này được dùng làm 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
}}]
}]}
}]
}}]
}});
});
Cập nhật dự án trên Google Cloud
Trong Google Cloud Console, hãy làm theo các bước sau:
- Bật API Cloud Build, Cloud Functions, Cloud Logging, Artifact Registry và Cloud Run.
- Nhấp vào Trình đơn ☰ > API và dịch vụ > API và dịch vụ đã bật rồi xác nhận rằng các API đã được bật.
Cập nhật nhân viên lưu trữ dữ liệu Dialogflow CX
Bạn cần triển khai một Cloud Function và cập nhật webhook Dialogflow CX để kích hoạt Cloud Function đó bằng nhiều nguồn khi có thể.
Trả về nhiều nguồn
Theo mặc định, một tác nhân kho dữ liệu mới chỉ trả về tối đa một nguồn, nhưng bạn có thể thay đổi để có nhiều nguồn hơn.
Trong bảng điều khiển Dialogflow CX, hãy làm theo các bước sau:
- Chọn dự án Google Cloud của bạn.
- Chọn tác nhân kiến thức.
- Chọn Trang bắt đầu.
- Chọn Chỉnh sửa kho dữ liệu.
- Trong phần Phản hồi của Tác nhân, hãy đặt Lựa chọn phản hồi của kho dữ liệu thành
5. - Nhấp vào Lưu.

Khởi chạy Cloud Functions
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > Cloud Functions.
- Nhấp vào Tạo hàm.
- Trong phần Cơ bản, hãy đặt tên thành
function-1. - Trong phần Xác thực, hãy chọn Nút chọn Cho phép lệnh gọi chưa được xác thực.
- Trong phần Cài đặt thời gian chạy, bản dựng, kết nối và bảo mật, hãy đặt Số lượng phiên bản tối đa thành
3. - Nhấp vào Tiếp theo.

- Đặt Entry point thành
agent-response-adapter. - Thay thế nội dung mặc định bằng các tệp package.json và index.js.
- Nhấp vào Triển khai.

- Sao chép URL trong khi bạn đợi vài phút để hàm này triển khai.

Khởi tạo webhook
Bạn cần định cấu hình tác nhân Dialogflow CX để sử dụng một webhook kích hoạt hàm mới triển khai.
Trong bảng điều khiển Dialogflow CX, hãy làm theo các bước sau:
- Chọn dự án Google Cloud của bạn.
- Chọn tác nhân kiến thức.
- Chọn Manage > Webhooks > Create (Quản lý > Webhook > Tạo).
- Đặt Tên hiển thị thành
Google Chat Response Adapter. - Đặt URL webhook thành URL mà bạn đã sao chép trước đó.
- Nhấp vào Lưu.

- Nhấp vào Build (Bản dựng).
- Chọn Trang bắt đầu.
- Chọn Chỉnh sửa kho dữ liệu.
- Trong phần Cài đặt webhook, hãy nhấp vào nút bật/tắt Bật webhook.
- Chọn Google Chat Response Adapter for Webhook (Bộ chuyển đổi phản hồi Google Chat cho Webhook).
- Đặt tag thành
arbitrary_tag. - Nhấp vào Lưu.

Ứng dụng kiểm thử
- Trong Google Chat, hãy gửi
What is Google Chat?trong tin nhắn trực tiếp đến ứng dụng nhắn tin Google Chat. Tác nhân sẽ trả lời bằng một nội dung có ý nghĩa và một thẻ có nguồn (nếu có).

10. Ứng dụng 3: Xây dựng
Xem lại các khái niệm
Tương tác trò chuyện
Đó là những cuộc trao đổi thông tin hoặc ý tưởng qua lại giữa hai người trở lên bằng ngôn ngữ tự nhiên. Điều này trái ngược với các giao diện kỹ thuật thường dựa vào các trao đổi không trạng thái, có cấu trúc cao và không khoan dung.
Quy cách OpenAPI
Đây là một phương tiện nhất quán để truyền tải thông tin qua từng giai đoạn trong vòng đời của API. Đây là một ngôn ngữ đặc tả cho các API HTTP, xác định cấu trúc và cú pháp theo cách không phụ thuộc vào ngôn ngữ lập trình mà API được tạo. Thông số kỹ thuật API thường được viết bằng YAML hoặc JSON, giúp bạn dễ dàng chia sẻ và sử dụng thông số kỹ thuật.
Tác nhân Dialogflow CX
Thành phần cơ bản của ứng dụng đại lý. Ứng dụng đại lý thường có nhiều đại lý, trong đó mỗi đại lý được xác định để xử lý các tác vụ cụ thể. Dữ liệu về tác nhân được cung cấp cho LLM, vì vậy LLM có thông tin cần thiết để trả lời câu hỏi và thực hiện các tác vụ. Mỗi tác nhân có thể cung cấp thông tin, gửi truy vấn đến các dịch vụ bên ngoài hoặc chuyển việc xử lý cuộc trò chuyện sang một luồng Dialogflow CX hoặc một tác nhân khác để xử lý các tác vụ phụ.
Công cụ Dialogflow CX
Công cụ được dùng để kết nối các ứng dụng đại lý với các hệ thống bên ngoài. Các hệ thống này có thể bổ sung kiến thức cho các ứng dụng tác nhân và giúp các ứng dụng này thực hiện hiệu quả các tác vụ phức tạp.
Xem xét cấu trúc

Ứng dụng nhắn tin Google Chat này được tạo bằng Dialogflow CX và hoạt động như sau:
- Người dùng gửi tin nhắn cho ứng dụng, có thể là trong tin nhắn trực tiếp hoặc trong một không gian.
- Ứng dụng này là một nhân viên hỗ trợ Dialogflow CX và được liên kết với một dự án trên đám mây của Google, sẽ xử lý thông báo.
- Ứng dụng tích hợp với một trợ lý ảo.
- Ứng dụng sẽ gửi một phản hồi đồng bộ, trong tin nhắn trực tiếp hoặc trong không gian ban đầu.
Xem xét các luồng
Thu thập bài đánh giá

Xem xét mã nguồn
Mã nguồn duy nhất mà bạn cần là hàm mô phỏng dịch vụ phụ trợ mà tác nhân sử dụng làm công cụ.
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
Khởi động dịch vụ phụ trợ mô phỏng
Bạn triển khai một Cloud Function để mô phỏng dịch vụ phụ trợ mà ứng dụng tác nhân Dialogflow CX cần tích hợp và gọi dưới dạng một công cụ.
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > Cloud Functions.
- Nhấp vào Tạo hàm.
- Trong phần Cơ bản, hãy đặt tên thành
function-2. - Trong phần Xác thực, hãy chọn nút chọn Cho phép lệnh gọi chưa xác thực.
- Trong phần Cài đặt thời gian chạy, bản dựng, kết nối và bảo mật, hãy đặt Số lượng phiên bản tối đa thành
3. - Nhấp vào Tiếp theo.

- Đặt Entry point thành
feedback-app-backend. - Thay thế nội dung mặc định bằng các tệp package.json và index.js.
- Nhấp vào Triển khai.

- Sao chép URL trong khi bạn đợi vài phút để hàm này triển khai.
Tạo ứng dụng nhân viên hỗ trợ Dialogflow CX
Tạo ứng dụng
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > Trình tạo đặc vụ > Ứng dụng.
- Nhấp vào Ứng dụng mới.
- Chọn Agent (Nhân viên hỗ trợ).
- Đặt Tên hiển thị thành
Feedback App. - Nhấp vào Tạo.

Khởi động công cụ
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > Trình tạo đặc vụ > Ứng dụng.
- Chọn nhân viên hỗ trợ Ứng dụng phản hồi.
- Nhấp vào Công cụ > + Tạo.
- Đặt Name thành
review. - Chọn OpenAPI.
- Đặt description thành giá trị sau:
The tool takes the number of stars as a parameter of the store review method and saves it in a database for later use.
- Tải xuống và thay thế
$URLtrong tệp service-openapi.yaml bằng URL mà bạn đã sao chép trước đó. - Đặt
YAML Schemathành nội dung đã chỉnh sửa của tệpservice-openapi.yaml. - Nhấp vào Lưu.

Tác nhân khởi tạo
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > Trình tạo đặc vụ > Ứng dụng.
- Chọn nhân viên hỗ trợ Ứng dụng phản hồi.
- Chọn Agents > Default Generative Agent (Tác nhân > Tác nhân tạo sinh mặc định).
- Đặt Tên tác nhân thành
Feedback collector. - Đặt
goalthành giá trị sau:
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.
- Đặt instructions thành giá trị sau:
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.
- Nhấp vào Lưu.

Ứng dụng thử nghiệm
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > Trình tạo đặc vụ > Ứng dụng.
- Chọn nhân viên hỗ trợ Ứng dụng phản hồi.
- Chuyển đến phần Xem trước nhân viên hỗ trợ.
- Trong mục Agent (Nhân viên), hãy chọn Feedback collector (Công cụ thu thập ý kiến phản hồi).
- Trong phần Chọn mô hình tạo sinh, hãy chọn gemini-pro.
- Gửi tin nhắn
Hello!để bắt đầu.

Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > Cloud Functions.
- Chọn function-2 > Logs (function-2 > Nhật ký). Một số nhật ký cho thấy Google-Dialogflow là người gọi.

Tích hợp ứng dụng nhắn tin Google Chat
Trong bảng điều khiển Dialogflow CX, hãy làm theo các bước sau:
- Chọn dự án Google Cloud của bạn.
- Nhấp vào trình đơn thao tác của tác nhân
Feedback App. - Nhấp vào Sao chép tên.
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Chuyển đến phần cấu hình API Google Chat.
- Đặt Tên tài nguyên Agent or Environment (Tên tài nguyên của Agent hoặc Môi trường) thành tên của tác nhân mà bạn đã sao chép trước đó.

- Trong Google Chat, hãy gửi
Hello!trong tin nhắn trực tiếp đến ứng dụng Google Chat để bắt đầu. Tác nhân phản hồi tương tự như thử nghiệm của bạn trên bảng điều khiển Dialogflow CX.

11. Dọn dẹp
Xoá dự án trên Google Cloud
Để tránh phát sinh phí cho Tài khoản Google Cloud của bạn đối với các tài nguyên được sử dụng trong lớp học lập trình này, bạn nên xoá dự án trên đám mây của Google Cloud.
Trong Bảng điều khiển Google Cloud, hãy làm theo các bước sau:
- Nhấp vào Trình đơn ☰ > IAM và Quản trị > Cài đặt.
- Nhấp vào Tắt.
- Nhập mã dự án.
- Nhấp vào Vẫn tắt.

Xoá dự án Apps Script
Bạn cũng nên xoá dự án Apps Script.
Trong bảng điều khiển Apps Script, hãy làm theo các bước sau:
- Chọn dự án của bạn.
- Nhấp vào trình đơn thao tác.
- Nhấp vào Xóa.

12. Xin chúc mừng
Xin chúc mừng! Bạn đã tạo các ứng dụng Google Chat bằng Gemini!
Tiếp theo là gì?
Chúng tôi chỉ giới thiệu các trường hợp sử dụng đơn giản trong lớp học lập trình này, nhưng có rất nhiều lĩnh vực mở rộng mà bạn có thể cân nhắc trong các ứng dụng Google Chat của mình, chẳng hạn như:
- Tích hợp với các mô hình AI tạo sinh khác, kể cả mô hình tuỳ chỉnh.
- Hỗ trợ các loại nội dung nghe nhìn khác, chẳng hạn như âm thanh, hình ảnh và video.
- Sử dụng đa phương thức.
- Dựa vào các cửa sổ ngữ cảnh và vòng lặp phản hồi dài hơn.
- Phát hành các ứng dụng Google Chat sẵn sàng cho phiên bản phát hành công khai trên trang web thương mại. Có rất nhiều tài nguyên dành cho nhà phát triển, chẳng hạn như video trên YouTube, trang web tài liệu, mã mẫu và hướng dẫn.
- Bật Google Chat cho tổ chức của bạn. Tính năng chế độ nhập giúp bạn dễ dàng bắt đầu hơn.
Tìm hiểu thêm
- Trang web tài liệu dành cho nhà phát triển của Google Chat
- Tích hợp Google Chat và Dialogflow CX
- Kho lưu trữ GitHub cho tất cả các mẫu Google Chat
- Chế độ nhập của Google Chat
- Trang web tài liệu dành cho nhà phát triển về Apps Script
- Kênh YouTube của Nhà phát triển Google Workspace
- Trung tâm dành cho nhà phát triển của Google Cloud
- Mô hình AI tạo sinh
- Mô hình tuỳ chỉnh của AI tạo sinh
- Cửa sổ ngữ cảnh dài của AI tạo sinh
- Vòng hồi tiếp của AI tạo sinh


