Chương 11: Automation - Bot & Hiệu năng: Tự động hóa Chuyên sâu
"Tự động hóa không chỉ là tiết kiệm thời gian. Đó là việc loại bỏ sai sót của con người khỏi quy trình vận hành."
Trong chương trước, chúng ta đã học về Actions - những hành động do người dùng chủ động kích hoạt. Chương này sẽ đưa bạn vào thế giới của Automation (Bot) - những cỗ máy chạy ngầm trên Server, hoạt động không biết mệt mỏi kể cả khi bạn đang ngủ.
Chúng ta sẽ đi sâu vào kỹ thuật cấu hình, phân biệt rõ ràng khi nào dùng Action/Automation, và đặc biệt là cách sử dụng các tính năng nâng cao như xuất báo cáo PDF/Excel hay kết nối API (Webhook) để chat với Zalo/Telegram.
11.1 Action vs. Automation: Khi nào dùng cái nào?
Đây là câu hỏi kinh điển của mọi Developer AppSheet. Hiểu sai bản chất sẽ dẫn đến ứng dụng hoạt động chậm chạp hoặc logic bị lỗi.
| Đặc điểm | Action (Hành động) | Automation (Tự động hóa) |
|---|---|---|
| Nơi chạy | Client-side (Trên thiết bị người dùng). | Server-side (Trên máy chủ Google). |
| Kích hoạt | Người dùng bấm nút (Click). | Sự kiện (Thêm/Sửa/Xóa) hoặc Thời gian (Lịch). |
| Tốc độ | Tức thì (Instant) trên giao diện. | Có độ trễ (Vài giây đến vài phút sau khi Sync). |
| Offline | Hoạt động Offline (xếp hàng chờ Sync). | KHÔNG hoạt động Offline (chỉ chạy khi dữ liệu đã lên Server). |
| Kết nối | Chỉ thao tác nội bộ App (Data, Nav). | Kết nối thế giới bên ngoài (Email, SMS, API, File). |
| Use Case | Chuyển trang, điền form nhanh, tính toán đơn giản. | Gửi email, báo cáo PDF, duyệt đa cấp, đồng bộ hệ thống khác. |
Quy tắc vàng: Nếu cần phản hồi ngay lập tức cho người dùng (ví dụ: hiện thông báo lỗi, chuyển màn hình), hãy dùng Action. Nếu là việc tốn thời gian (gửi mail, tạo file) hoặc cần bảo mật (gọi API), hãy dùng Automation.
11.2 Phân loại Automation: Miễn phí vs. Trả phí
Không phải tính năng nào của Automation cũng miễn phí. Bạn cần nắm rõ để tư vấn cho sếp hoặc khách hàng.
11.2.1 Automation Miễn phí (Free/Prototype Plan)
- Email: Chỉ gửi được email về danh sách người tạo App (App Owner). Không gửi được cho khách hàng ngẫu nhiên.
- Số lượng: Giới hạn quota thấp.
- Mục đích: Chỉ để test tính năng (Debug).
11.2.2 Automation Trả phí (Core/Enterprise Plan)
- Email: Gửi không giới hạn (trong quota gói) tới bất kỳ email nào.
- File: Tạo báo cáo PDF, Excel, CSV chuyên nghiệp.
- Data Change: Kích hoạt từ thay đổi dữ liệu bên ngoài (ví dụ: ai đó sửa trực tiếp Google Sheet) - Chỉ gói Enterprise mới hỗ trợ External Events ổn định.
Lưu ý: Nếu bạn đang dùng gói Free mà thấy Bot báo "Success" nhưng khách không nhận được mail -> Đó là tính năng, không phải lỗi. Hãy kiểm tra hòm thư của chính bạn (App Owner).
11.3 Đặc quyền Gói Trả phí (Paid Plan Use Cases)
Khi nâng cấp lên gói AppSheet Core (hoặc Enterprise), bạn sẽ mở khóa được sức mạnh thực sự của Automation. Dưới đây là các kịch bản (Case Studies) mà gói Free không thể làm được (hoặc làm rất hạn chế).
11.3.1 Case 1: Notification & SMS (Thông báo Đẩy & Tin nhắn)
- Kịch bản: Khi Sếp duyệt đơn nghỉ phép, nhân viên phải nhận được thông báo "Ting!" trên điện thoại ngay lập tức.
- Yêu cầu Gói Trả phí:
- Để gửi Notification đến đúng người (ví dụ:
[NguoiTaoDon]), AppSheet cần biết chính xác User đó là ai (yêu cầu Require Sign-In và License). Ở gói Free, bạn chỉ có thể test gửi cho chính mình. - SMS: AppSheet hỗ trợ gửi tin nhắn qua Twilio. Đây là tính năng cao cấp cần cấu hình Gateway, cực kỳ hữu ích cho cảnh báo khẩn cấp (Ví dụ: Server quá nhiệt, Kho cháy).
- Để gửi Notification đến đúng người (ví dụ:
11.3.2 Case 2: Send Email chuyên nghiệp (Dynamic Recipients)
- Kịch bản: Gửi Báo giá (PDF) cho Khách hàng ngay sau khi tạo đơn hàng.
- Vấn đề gói Free: Email sẽ luôn bị chuyển hướng về hòm thư của bạn (Admin) để chặn spam. Khách hàng sẽ không nhận được gì cả.
- Giải pháp Gói Core:
- Gửi trực tiếp vào email khách hàng:
To: [EmailKhachHang]. - CC/BCC cho Kế toán, Giám đốc.
- Đính kèm file PDF/Excel chuyên nghiệp.
- Gửi trực tiếp vào email khách hàng:
11.3.3 Case 3: Advanced Triggers & External Events (Enterprise)
- Trigger tiêu chuẩn (Core): Bot chạy khi người dùng sửa dữ liệu TRONG AppSheet.
- External Event ( Enterprise): Điều gì xảy ra nếu nhân viên Kế toán sửa dữ liệu trực tiếp trên Google Sheets (không qua App)?
- Gói Core: AppSheet không biết gì cả -> Bot không chạy.
- Gói Enterprise: Hỗ trợ "On Change" từ Google Sheets/Salesforce. Ngay khi Sheet thay đổi, Bot AppSheet sẽ kích hoạt. Đây là tính năng sống còn khi tích hợp với các hệ thống ERP khác.
11.3.4 Case 4: Quy trình Phê duyệt Đa cấp (Approval Workflow)
- Quy trình: Nhân viên -> Trưởng phòng -> Giám đốc -> Nhân sự.
- Logic: Bot cần biết "Ai vừa bấm nút?".
- Dùng hàm
USEREMAIL()để xác thực người duyệt. - Gửi email "Request for Approval" (Email Động) chứa nút bấm duyệt nhanh (Dynamic Email). Sếp có thể bấm "Approve" ngay trong giao diện Gmail mà không cần mở App. Đây là tính năng "sát thủ" của AppSheet Core.
- Dùng hàm
11.4 Chuyên sâu: Kỹ thuật Xuất bản Báo cáo (PDF & Excel)
Một trong những tính năng "ăn tiền" nhất của AppSheet là tạo báo cáo tự động.
11.4.1 Quy trình 3 bước tạo mẫu (Template)
Chuẩn bị Template (Google Doc/Sheet):
- Tạo một Google Doc trắng.
- Sử dụng các Tags để điền dữ liệu động.
Cấu hình Bot:
- Task Type: Create a file.
- File Type:
PDFhoặcExcel(.xlsx). - Template: Chọn file Google Doc vừa tạo.
Lưu file:
- File Store: Google Drive.
- File Folder Path: Đường dẫn lưu file (ví dụ:
Baocao/[Nam]/[Thang]).
11.4.2 Cú pháp Template quan trọng
- Trường dữ liệu đơn:
<<[TenKhachHang]>>,<<[TongTien]>>. - Bảng danh sách con (Child Records): Dùng cặp thẻ
StartvàEnd.<<Start: [ChiTietDonHang]>> | Sản phẩm | Số lượng | Đơn giá | Thành tiền | | :--- | :--- | :--- | :--- | | <<[TenSanPham]>> | <<[SoLuong]>> | <<[DonGia]>> | <<[ThanhTien]>> | <<End>> - Lọc dữ liệu (Filter):
<<Start: SELECT(ChiTietDonHang[ID], [SoLuong] > 0)>> - Hình ảnh:
<<[HinhAnh]>>(Mặc định sẽ rất to).- Tip chỉnh size: Đặt hình ảnh vào một bảng (Table) trong Google Doc và chỉnh độ rộng cột của bảng đó.
Lưu ý khi xuất Excel: Template Excel khó cấu hình hơn Doc. Bạn phải đặt thẻ
<<Start>>và<<End>>trong cùng một dòng hoặc sử dụng Name Manager cẩn thận. Google Doc là lựa chọn an toàn cho PDF đẹp.
11.5 Chuyên sâu: Webhook & API Integration (Chat Bot)
Khi Email là chưa đủ, bạn cần gửi tin nhắn tức thì qua Zalo, Telegram hoặc Google Chat. Đây là lúc dùng Call a webhook.
11.5.1 Kịch bản: Thông báo Đơn hàng mới vào Google Chat
Tạo Google Chat Space:
- Tạo Space mới -> Apps & Integrations -> Manage Webhooks.
- Tạo Webhook mới -> Copy link URL (ví dụ:
https://chat.googleapis.com/...).
Cấu hình AppSheet Task:
- Task Type: Call a webhook.
- Url: Dán link Google Chat vừa copy.
- Verb:
POST. - Content Type:
JSON. - Body (Payload):
{ "text": " Đơn hàng mới!\nKhách hàng: <<[TenKH]>>\nTổng tiền: <<[TongTien]>>" }
11.5.2 Kịch bản: Gửi tin nhắn Telegram
- Tạo Bot Telegram: Chat với
@BotFatherđể lấyToken. - Lấy Chat ID: Chat với bot vừa tạo, rồi dùng API
getUpdatesđể lấy ID group. - Cấu hình AppSheet:
- Url:
https://api.telegram.org/bot<TOKEN>/sendMessage - Body:
{ "chat_id": "<CHAT_ID>", "text": "Cảnh báo: Tồn kho thấp - Sản phẩm: <<[TenSP]>>", "parse_mode": "HTML" }
- Url:
11.6 Tối ưu hóa Hiệu năng & Lưu ý sống còn
Tránh vòng lặp vô tận (Infinite Loops):
- Bot A chạy khi "Sửa đơn hàng" -> Bot A sửa lại cột "Ngày cập nhật" -> Sự kiện "Sửa đơn hàng" lại kích hoạt -> Bot A chạy tiếp.
- Giải pháp: Dùng điều kiện Conditions:
AND([Status]="Done", [_THISROW_BEFORE].[Status]<>"Done"). Chỉ chạy khi trạng thái thực sự thay đổi.
Wait Step (Bước chờ):
- Dùng để tạo quy trình Approval hoặc Reminder.
- Ví dụ: Gửi form duyệt -> Wait for a response (Chờ Sếp bấm nút Duyệt) -> Gửi mail thông báo kết quả.
Error Handling (Xử lý lỗi):
- Luôn bật
Monitortrong tab Manage để xem log khi Bot không chạy. - Lỗi phổ biến: Sai template path, sai quyền truy cập Drive, hoặc JSON body bị lỗi cú pháp.
- Luôn bật
Khi Automation "Hụt hơi" (Giới hạn & Apps Script):
- Vấn đề: Bot sẽ fail hoặc treo nếu bạn cố gắng xử lý quá nhiều dòng (Bulk Action hàng nghìn row), thuật toán quá phức tạp, hoặc thời gian chạy quá lâu (Timeout). AppSheet không sinh ra để xử lý "Big Data" hay logic tính toán quá nặng.
- Giải pháp: Hãy nghĩ đến Google Apps Script. Đây là backend mạnh mẽ giúp bạn viết code (JavaScript) để xử lý loops, mảng dữ liệu lớn, hoặc gọi API phức tạp mà Automation không làm nổi.
- Tính năng: Sử dụng task Call a script để chuyển gánh nặng xử lý sang Apps Script.
- Tham khảo: Call Apps Script from an automation
11.7 Giải phẫu một con Bot (Anatomy of a Bot)
Trong Automation tab, một Bot được cấu tạo bởi 3 mảnh ghép chính: Event (Sự kiện) -> Process (Quy trình) -> Task (Nhiệm vụ).
11.8 Đúc kết: Kỷ nguyên tự động hóa bắt đầu
Automation là "siêu năng lực" biến AppSheet từ một file Excel nhập liệu thành một hệ thống phần mềm thực thụ.
- Dùng Action cho tương tác người dùng.
- Dùng Automation cho quy trình nền (Email, File, API).
- Thận trọng với Quota và Infinite Loops.
Chương tiếp theo, chúng ta sẽ mở rộng khả năng của AppSheet không chỉ dừng lại ở gửi tin nhắn, mà là tích hợp sâu với các hệ thống khác qua API chuyên nghiệp hơn trong Chương 12: Integration & API.
11.9 Tài liệu tham khảo (Google Docs)
- AppSheet Automation Guide: Automation overview
- Sending Email: Sending email from a bot
- Document Generation: Document generation overview
- Webhooks: Call a webhook from a bot