Là một dev hay Project Manager (PM), chiều thứ sáu hàng tuần luôn là một cuộc chiến. Chúng ta mất hàng giờ để đi lùa anh em cập nhật tiến độ, sau đó copy-paste mớ hỗn độn từ Google Chat vào một file Google Docs, rồi lại phải ngồi tóm tắt báo cáo cho sếp.

Hôm nay, tôi sẽ hướng dẫn các bạn cách dùng Google Workspace Studio kết hợp Gemini AI để tự động hóa toàn bộ quy trình này (Collect -> Summarize -> Publish).

  1. Bài toán và Kiến trúc hệ thống (System Design)

Kịch bản: Thu thập trạng thái công việc hàng tuần cho team dự án Project Phoenix.

Ban đầu, tôi định để bot tự động gửi câu hỏi vào group chat và tự gom dữ liệu. Tuy nhiên, khi đào sâu vào Workspace Studio, tôi nhận ra tool này hiện tại chỉ hỗ trợ action “Notify me in Chat” (Gửi tin nhắn riêng cho cá nhân) chứ chưa hỗ trợ gửi thẳng vào Space. Thêm nữa, nếu để bot đọc toàn bộ kênh chat, nó sẽ thu thập cả những câu bông đùa của team, gây nhiễu dữ liệu.

Do đó, tôi quyết định thiết kế một kiến trúc thông minh hơn: Mô hình Human-in-the-loop (Có sự can thiệp của con người) với 3 luồng xử lý độc lập.

  • Luồng 1 (16:00 Thứ 6): Bot nhắc PM gửi câu hỏi vào nhóm.
  • Luồng 2 (Liên tục): Anh em chat báo cáo. PM đọc thấy tin nào hợp lệ thì thả emoji dấu tích xanh. Bot sẽ âm thầm nhặt tin nhắn đó ném vào Google Sheets.
  • Luồng 3 (17:00 Thứ 6): AI đọc Google Sheets, phân tích, tạo báo cáo Google Docs và gửi link cho PM duyệt.

2. Chi tiết cấu hình từng bước (Implementation)

Bước 1: Trợ lý nhắc nhở (Scheduled Trigger)

Tôi tạo một flow hẹn giờ chạy vào 16:00 mỗi chiều thứ sáu.

  • Starter: On a schedule (Weekly, Friday, 16:00).
  • Action: Notify me in Chat.

Nội dung tin nhắn bot gửi riêng cho tôi:

“Chào cả team @all, đã đến giờ report tuần! Mọi người vui lòng reply vào thread này, nhớ tag @ kèm theo các thông tin sau trước 17:00 nhé: 1. Việc đã làm / 2. Việc tuần sau / 3. Rủi ro / 4. Cần hỗ trợ”

Bước 2: Thu thập dữ liệu bằng Emoji (Consolidate Data)

Để tránh rác dữ liệu (noise data), tôi dùng Google Sheets làm database trung gian. Tôi tạo một file tên là Phoenix_Weekly_Log. Sau đó tạo flow thứ hai:

  • Starter: When an emoji reaction is added. (Chọn Space Project Phoenix và emoji là dấu tích xanh).
  • Action: Sheets -> Add a row. Tôi map biến tên người gửi vào cột A và nội dung chat vào cột B.

Chỉ những tin nhắn được tôi duyệt (thả emoji) mới được đưa vào Sheets. Khâu kiểm soát chất lượng dữ liệu đầu vào (Data Quality) đã được giải quyết gọn gàng.

Bước 3: Phân tích bằng Gemini và tạo Docs

Đây là trái tim của hệ thống. Đúng 17:00, flow này sẽ chạy.

Action 1: Sheets -> Get sheet contents (Lấy toàn bộ dữ liệu từ file Phoenix_Weekly_Log).

Action 2: Ask Gemini. Đây là lúc kỹ năng Prompt Engineering lên ngôi.

Để đáp ứng tiêu chuẩn báo cáo khắt khe, tôi truyền dữ liệu động từ Action 1 vào Prompt và yêu cầu rõ:

Dưới đây là log báo cáo của team. Hãy đóng vai PM, tổng hợp BẮT BUỘC theo format sau:

  1. Executive Summary: Viết tóm tắt trong 3-7 dòng.
  2. Context Analysis: Phân tách rõ ràng [FACTS] (Sự thật/Việc đã xong) và [ASSUMPTIONS] (Rủi ro, dự đoán).
  3. Action Items: Trích xuất ít nhất 5 task, bắt buộc có đủ 4 thông tin: Tên Task | Owner | Due date | Dependencies.

Action 3: Docs -> Create a doc. Output từ Gemini sẽ được đẩy thẳng vào đây.

Action 4: Chat -> Notify me in Chat. Bot sẽ gửi link file Docs nháp cho tôi.

Video demo:

3. Các yêu cầu vận hành (Operational Requirements)

Một hệ thống tự động hóa chỉ thực sự production-ready khi nó xử lý được các rủi ro vận hành.

Quy chuẩn lưu trữ (Storage & Naming Convention) Không ai muốn đi bới tung Google Drive để tìm báo cáo tuần trước. Ở node Create a doc, tôi đã ép cứng vị trí lưu trữ vào một Shared Drive của dự án. Tên file được cấu hình tự động sinh ra theo công thức: [Weekly_Status_Report] Project Phoenix – {Current_Date}.

Xử lý trùng lặp (Duplicate Runs) Nếu tôi vô tình bấm chạy lại flow tổng hợp lúc 17:15, bot có tạo ra hai bản báo cáo đè nhau không? Câu trả lời là không.

4. Ba lỗi thực tế và cách khắc phục (Failure Modes & Mitigations)

Trong quá trình build và test, tôi đã lường trước 3 kịch bản lỗi sau:

  • Lỗi 1: Tỷ lệ phản hồi thấp (Low Response Rate) Nếu đến 17:00 chỉ có 1 dev báo cáo, AI sẽ rơi vào trạng thái thiếu context và bắt đầu “chém gió” (hallucination). Để phòng ngừa, tôi thêm logic đếm số dòng từ Sheets. Nếu nhỏ hơn 2 dòng, flow sẽ không gọi Gemini mà tự động gửi cảnh báo cho PM để vào giục team.
  • Lỗi 2: Trôi định dạng (Formatting Drift) và Tràn dữ liệu (Truncation) Nếu team chat quá nhiều, việc ném 500 dòng text thô vào Gemini sẽ gây tràn bộ nhớ. Việc dùng Google Sheets làm bộ đệm giúp dữ liệu có cấu trúc hơn, giảm thiểu token. Thêm vào đó, LLM rất hay tự ý đổi định dạng trả về, việc tôi gán cứng các tag [FACTS] và [ASSUMPTIONS] trong prompt giúp ép AI trả về kết quả đồng nhất hàng tuần.
  • Lỗi 3: Lỗi phân quyền (Chat & Drive Permissions) Đây là lỗi kinh điển. Ở bước tạo file Docs, luồng sẽ chết cứng với lỗi 403 nếu Service Account của Workspace Studio không có quyền ghi vào Shared Drive. Bạn bắt buộc phải chia sẻ quyền Editor cho thư mục đích ngay từ đầu.

6. Tài liệu tham khảo (References)

Để xây dựng nên kiến trúc hệ thống và luồng xử lý trên, tôi đã tham khảo tài liệu chính thức từ Google cũng như học hỏi từ các use-case thực tế của cộng đồng lập trình viên:

  • Tự động hóa xử lý Chat Log với Google Workspace Studio (Cộng đồng Google Cloud Nhật Bản): Một bài viết cực kỳ chi tiết trên Zenn.dev phân tích về các giới hạn của Workspace Studio và cách tương tác với Google Chat. Link tham khảo: https://zenn.dev/google_cloud_jp/articles/google-workspace-studio-chat-log
  • Ứng dụng AI Skill để tối ưu hóa tác vụ văn phòng: Bài viết chia sẻ trên Note.com gợi ý về cách kết nối các công cụ Workspace để làm báo cáo tự động. Link tham khảo: https://note.com/ai_skill/n/nf1ea921961da
  • Tài liệu hướng dẫn chính thức của Google Workspace Studio: Nơi tra cứu danh sách các trigger, action hiện có, cách map biến (Variables) và xử lý các mã lỗi (Failure Modes) như 403 Permission Denied khi làm việc với Google Drive. Link tham khảo: Hỗ trợ Google Workspace (tìm kiếm từ khóa Workspace Studio automation).
Tags: