A
Đăng nhập

Chương 12: Tích hợp Nâng cao (Integration)

AppSheet Integration

"Không có ứng dụng nào là một hòn đảo. Hãy kết nối AppSheet với thế giới."

AppSheet nằm trong hệ sinh thái Google, nên việc kết nối với Gmail, Drive, Calendar là "chuyện nhỏ". Nhưng sức mạnh thực sự nằm ở khả năng mở rộng không giới hạn thông qua Apps ScriptAPI.

12.1 Google Apps Script + AppSheet: Cặp đôi hoàn hảo

Đôi khi Bot của AppSheet không đủ mạnh (ví dụ: cần tính toán phức tạp, cần gọi API của ngân hàng, cần xử lý file Excel phức tạp). Lúc này, ta dùng Google Apps Script (GAS) làm "cánh tay nối dài".

  • Cơ chế: AppSheet gửi dữ liệu (JSON) sang GAS -> GAS xử lý -> GAS trả kết quả hoặc ghi lại vào Sheet.
  • Ứng dụng thực tế:
    • Tự động tạo Folder trên Drive theo tên khách hàng (KhachHang/NguyenVanA).
    • Lấy tỷ giá ngoại tệ từ API Vietcombank update vào Sheet mỗi sáng.
    • Tách tên "Nguyễn Văn A" thành "Họ: Nguyễn", "Tên: A" bằng thuật toán.

12.2 AppSheet API: Điều khiển từ xa

AppSheet cung cấp API cho phép các phần mềm bên ngoài (như Website bán hàng, Phần mềm kế toán, POS) ghi dữ liệu trực tiếp vào AppSheet mà không cần mở App.

  • Endpoint: https://api.appsheet.com/api/v2/apps/{appId}/tables/{tableName}/Action
  • Method: POST
  • Headers:
    • ApplicationAccessKey: {Your-API-Key}
    • Content-Type: application/json

12.2.1 Các Action hỗ trợ

Action Mô tả Khi nào dùng
Add Thêm 1 hoặc nhiều dòng mới Nhận đơn hàng từ web, thêm khách mới
Edit Sửa dòng có sẵn (theo Key) Cập nhật trạng thái, sửa thông tin
Delete Xóa dòng (theo Key) Hủy đơn, xóa dữ liệu test
Find Truy vấn dữ liệu theo điều kiện Tạo báo cáo, kiểm tra tồn kho

12.2.2 Use Case 1: Tạo Form HTML gửi dữ liệu vào AppSheet

Bạn có thể tạo form đẹp trên website riêng bằng HTML/CSS, khi submit sẽ gọi API thêm dữ liệu vào AppSheet.

{
  "Action": "Add",
  "Properties": { "Locale": "vi-VN" },
  "Rows": [
    { 
      "Name": "Khách mới từ Web", 
      "Phone": "0999888777",
      "Email": "khach@email.com",
      "Source": "Website Landing Page"
    }
  ]
}

Ưu điểm so với Google Form:

  • Tùy chỉnh giao diện 100%
  • Validation phức tạp (CMND, Số điện thoại VN)
  • Chạy thêm logic sau khi submit (redirect, tracking)

12.2.3 Use Case 2: Tạo Báo cáo/Truy vấn dữ liệu từ bên ngoài

Dùng Action Find để query dữ liệu từ AppSheet và hiển thị trên website/dashboard riêng.

{
  "Action": "Find",
  "Properties": { "Locale": "vi-VN" },
  "Rows": [
    {
      "Selector": "Filter(DonHang, [Status] = \"Pending\")"
    }
  ]
}

Ứng dụng:

  • Dashboard realtime hiển thị trên TV trong văn phòng
  • Báo cáo tự động gửi qua Email (kết hợp Apps Script)
  • Website kiểm tra trạng thái đơn hàng cho khách

12.2.4 Use Case 3: Truyền dữ liệu giữa 2 AppSheet khác nhau

Kịch bản: App "Bán hàng" của đội Sales cần đẩy đơn hàng hoàn thành sang App "Kho" của đội Warehouse.

Cách thực hiện:

  1. App Bán hàng có Bot: Khi [Status] = "Confirmed" → Gọi Webhook
  2. Webhook chứa payload JSON gọi tới API của App Kho
  3. App Kho nhận dữ liệu và tạo Phiếu xuất kho tự động
{
  "Action": "Add",
  "Properties": { "Locale": "vi-VN" },
  "Rows": [
    {
      "OrderID": "DH-2024-001",
      "Products": "Xi măng x10, Gạch x500",
      "DeliveryAddress": "123 Nguyễn Huệ, Q1",
      "RequestedBy": "Sale A",
      "DueDate": "2024-01-20"
    }
  ]
}

12.2.5 Use Case 4: Cập nhật dữ liệu hàng loạt (Bulk Update)

Thay vì import CSV thủ công, bạn có thể gọi API để cập nhật hàng loạt từ hệ thống khác.

Ví dụ: Cập nhật giá 100 sản phẩm cùng lúc từ file Excel của phòng Kế toán.

{
  "Action": "Edit",
  "Properties": { "Locale": "vi-VN" },
  "Rows": [
    { "ProductID": "SP001", "Price": 55000 },
    { "ProductID": "SP002", "Price": 120000 },
    { "ProductID": "SP003", "Price": 89000 }
  ]
}

Lưu ý quan trọng:

  • Mỗi request có thể chứa tối đa 500 rows
  • Nếu nhiều hơn, chia thành nhiều batch và gọi tuần tự
  • Luôn có cột Key (Primary Key) để xác định dòng cần sửa

12.2.6 Use Case 5: Webhook 2 chiều - AppSheet ↔ Hệ thống khác

Chiều 1 (AppSheet → Hệ thống): Bot gọi Webhook khi có event
Chiều 2 (Hệ thống → AppSheet): Hệ thống gọi API khi cần

Ví dụ thực tế: Đồng bộ với phần mềm kế toán MISA

  1. Khi tạo Đơn hàng trên AppSheet → Webhook gọi MISA tạo Hóa đơn
  2. Khi MISA xuất Hóa đơn xong → API gọi AppSheet cập nhật trạng thái

12.2.7 Bảo mật API Key

Cảnh báo: API Key có quyền truy cập toàn bộ dữ liệu. Tuyệt đối KHÔNG đặt trong code frontend (JavaScript trên trình duyệt).

Best Practice:

  • Đặt API Key trong biến môi trường (Environment Variable )
  • Gọi API từ backend/server (Node.js, Apps Script, n8n)
  • Tạo nhiều API Key cho các mục đích khác nhau
  • Revoke (thu hồi) Key ngay khi nghi ngờ bị lộ

12.3 Zapier / Make (Integromat)

Nếu bạn không biết code (No-Code 100%), hãy dùng Zapier hoặc Make để làm trung gian kết nối AppSheet với hàng ngàn ứng dụng khác (Slack, Trello, Facebook Lead Ads, WooCommerce).


12.4 Thực hành (Guided Practice)

Mục tiêu: Đồng bộ lịch hẹn gặp khách lên Google Calendar.

12.4.1 Kết nối Data Source Google Calendar

  1. Vào My Account -> Sources -> New Data Source.
  2. Chọn Google Calendar.
  3. Vào App -> Data -> Tables -> Add New Table.
  4. Chọn Calendar vừa kết nối. Đặt tên bảng là GCalendar.

12.4.2 Tạo Bot đồng bộ

  1. Tạo Bot mới: Sync Meeting to Calendar.
  2. Event: New Activity Added.
    • Table: Activities.
    • Condition: [Type] = "Meeting".
  3. Task: Add Row to GCalendar.
    • Chọn bảng đích: GCalendar.
    • Map các cột:
      • Title: [Note] (Nội dung cuộc họp).
      • Start: [Date] + [Time].
      • End: [Date] + [Time] + "01:00:00" (Mặc định họp 1 tiếng).
      • Description: "Họp với khách hàng: " & [OpportunityID].[CustomerID].[Name].

12.4.3 Test

  1. Vào App tạo một Activity mới loại Meeting.
  2. Mở Google Calendar trên điện thoại/máy tính xem lịch có hiện lên không.

12.5 Vận dụng (Your Project)

Câu hỏi:

  1. Quản lý hồ sơ: Bạn có cần tạo Folder riêng trên Google Drive để chứa hồ sơ/ảnh cho từng dự án không? -> Dùng Apps Script để tạo Folder tự động khi có Dự án mới.
  2. Web-to-App: Bạn có muốn khi khách điền form trên Website WordPress, nó tự chạy vào AppSheet không? -> Dùng AppSheet API hoặc Make.com để bắn dữ liệu về.
  3. Thông báo Zalo: Sếp bạn thích nhận thông báo qua Zalo hơn Email? -> Dùng Webhook gọi tới Zalo OA API.

12.6 Lời kết: Mở rộng biên giới ứng dụng

Đến thời điểm này, ứng dụng của bạn đã không còn giới hạn trong nội bộ AppSheet nữa. Bạn đã biết cách dùng Apps Script để tạo thư mục Drive, dùng API để đồng bộ lịch Google Calendar. Những giới hạn kỹ thuật dường như đã bị xóa bỏ hoàn toàn nhờ sức mạnh của sự kết nối.

Nhưng khi ứng dụng càng mạnh, dữ liệu càng nhiều, thì rủi ro càng lớn. Làm sao đảm bảo nhân viên Sale A không nhìn thấy khách của Sale B? Làm sao để Giám đốc thấy hết nhưng không lỡ tay xóa nhầm? Chương 13: "Phân quyền Đa lớp (Security Deep Dive)" sẽ là bài học quan trọng nhất để bảo vệ "tài sản số" của doanh nghiệp bạn.