--- title: "Tự động hóa Quy trình | Lotics - Nền tảng vận hành AI" description: "Các loại kích hoạt, tập con JavaScript dùng để viết quy trình và ví dụ thực tế về tự động hóa quy trình trong Lotics." --- # Tự động hóa quy trình Quy trình Lotics kết hợp công cụ, luồng điều khiển và biểu thức để tự động hóa nghiệp vụ từ đầu đến cuối. Bạn viết quy trình bằng một tập con nhỏ của JavaScript, được nền tảng kiểm tra khi lưu; từ đó công cụ quy trình xử lý việc thực thi và trạng thái giữa các bước. Một quy trình duy nhất có thể nhận email, trích xuất dữ liệu bằng AI, truy vấn và cập nhật bản ghi, tạo chứng từ và gửi thông báo, tất cả mà không cần rời khỏi nền tảng. ## Quy trình là gì? Quy trình trong Lotics là một chuỗi các bước thực thi tự động khi điều kiện kích hoạt được đáp ứng. Mỗi quy trình có đúng một kích hoạt và một hoặc nhiều bước. Các bước chạy theo thứ tự, và mỗi bước có thể tham chiếu dữ liệu từ sự kiện kích hoạt hoặc từ các bước trước đó thông qua biểu thức. Quy trình được thiết kế để thay thế các tác vụ thủ công, lặp đi lặp lại mà đội vận hành thực hiện hàng ngày: sao chép dữ liệu giữa các hệ thống, gửi email theo dõi, cập nhật bảng tính, tạo báo cáo. Bạn đặt kích hoạt cho quy trình và viết ra điều cần xảy ra. Công cụ quy trình quản lý thứ tự thực thi, xử lý lỗi và duy trì trạng thái giữa các bước — kể cả qua một lần tạm dừng kéo dài nhiều ngày. Trợ lý AI có thể xây dựng quy trình từ mô tả bằng ngôn ngữ tự nhiên. Mô tả những gì bạn muốn tự động hóa ("khi có yêu cầu booking đến qua email, tạo bản ghi lô hàng, phân công cho đội vận hành và gửi email xác nhận") và trợ lý sẽ tạo quy trình với kích hoạt, bước và biểu thức chính xác. ## Các loại kích hoạt Mỗi quy trình bắt đầu bằng một kích hoạt, sự kiện khiến quy trình chạy. Lotics hỗ trợ các loại kích hoạt bao phủ các cách phổ biến nhất mà công việc đến tay đội vận hành: tác vụ theo lịch, thông tin liên lạc đến, hành động người dùng và sự kiện từ hệ thống bên ngoài. Phản ứng với vòng đời bản ghi (tạo / cập nhật / xóa) được cấu hình dưới dạng **table workflows** — xem mục table workflows. Kích hoạt được cấu hình cho từng quy trình và không thể kết hợp. Nếu bạn cần cùng một quy trình chạy theo cả lịch và email đến, hãy tạo hai quy trình. Mỗi kích hoạt cung cấp dữ liệu ngữ cảnh mà các bước tiếp theo có thể đọc. ### recurring_schedule Kích hoạt theo lịch cron (ví dụ: mỗi ngày làm việc lúc 9h sáng, thứ Hai đầu tiên của tháng, mỗi 6 giờ). Sử dụng cho các tác vụ định kỳ không phụ thuộc vào sự kiện cụ thể. **Dữ liệu ngữ cảnh:** trigger_id. **Ví dụ sử dụng:** Tạo báo cáo tổng hợp hàng ngày về hóa đơn quá hạn. Kiểm tra container đã ở bãi quá 14 ngày. Gửi email KPI hàng tuần cho ban quản lý. ### receive_gmail_email Kích hoạt khi email mới đến tài khoản Gmail đã kết nối. Kích hoạt này theo dõi hộp thư đến và xử lý tự động mỗi tin nhắn đến. **Dữ liệu ngữ cảnh:** email_id, from (địa chỉ người gửi), subject, body (toàn bộ nội dung email), và attachments[] (danh sách tệp đính kèm). **Ví dụ sử dụng:** Trích xuất dữ liệu hóa đơn từ email nhà cung cấp. Phân tích xác nhận booking từ hãng tàu. Chuyển hướng yêu cầu khách hàng đến đội phù hợp dựa trên từ khóa tiêu đề. ### receive_outlook_email Kích hoạt khi email mới đến tài khoản Outlook đã kết nối. Hoạt động giống hệt kích hoạt Gmail nhưng dành cho tài khoản Microsoft 365. **Dữ liệu ngữ cảnh:** email_id, from (địa chỉ người gửi), subject, body (toàn bộ nội dung email), và attachments[] (danh sách tệp đính kèm). **Ví dụ sử dụng:** Tương tự kích hoạt Gmail. Xử lý đơn đặt hàng nhận qua Outlook. Trích xuất hướng dẫn vận chuyển từ email hãng vận tải. ### app_workflow Kích hoạt khi một ứng dụng Lotics chạy một trong các quy trình mà nó khai báo. Ứng dụng là các giao diện tùy chỉnh xây dựng trên bảng, và đây là cách một nút hay một tương tác trong ứng dụng chạy logic quy trình. **Dữ liệu ngữ cảnh:** inputs -- các giá trị ứng dụng truyền vào, theo đúng lược đồ đầu vào mà quy trình khai báo. **Ví dụ sử dụng:** Ứng dụng bảng điều khiển vận hành với hành động "Điều phối" phân công tài xế, cập nhật trạng thái lô hàng và gửi thông báo. Ứng dụng cổng khách hàng với hành động "Yêu cầu báo giá" tạo bản ghi và thông báo cho đội bán hàng. ### receive_webhook Kích hoạt khi yêu cầu HTTP POST được nhận tại URL webhook duy nhất của quy trình. Điều này cho phép hệ thống bên ngoài kích hoạt quy trình mà không cần code tích hợp riêng cho Lotics. **Dữ liệu ngữ cảnh:** Toàn bộ nội dung yêu cầu, headers và tham số query từ HTTP POST đến. **Ví dụ sử dụng:** Nhận cập nhật theo dõi lô hàng từ API hãng vận tải. Xử lý thông báo thanh toán từ cổng thanh toán. Nhận dữ liệu từ bất kỳ hệ thống bên ngoài nào có thể gửi yêu cầu HTTP. ## Quy trình được viết bằng gì Bạn viết quy trình bằng một **tập con nhỏ của JavaScript**. Không có bảng các loại bước để học thuộc, cũng không phải ghép JSON: bạn viết các câu lệnh, và nền tảng phân tích chúng khi lưu thành một cây đã được kiểm tra. Chính cây đó mới là thứ chạy. **JavaScript bạn viết không bao giờ được thực thi lúc chạy** — nó chỉ được phân tích một lần khi lưu, kiểm tra, rồi lưu lại. Nhờ vậy một quy trình không thể làm điều gì bất ngờ trên môi trường thật: những gì bộ kiểm tra đã chấp nhận chính là toàn bộ những gì có thể xảy ra. Phần lớn những gì bạn viết là JavaScript thông thường — `const` và `let`, phép gán, `if` / `else if` / `else`, `switch`, `for ... of`, `while`, `do ... while`, vòng lặp `for` có biến đếm, `break` và `continue`, `try` / `catch`, phép tính và so sánh, chuỗi lồng biến, và cú pháp tách giá trị. Bên trên đó là một số dạng riêng của nền tảng: | Bạn muốn gì | Bạn viết | |---|---| | Gọi một công cụ và giữ kết quả | `const shipment = await get_record({ ... });` | | Gọi một công cụ, không cần kết quả | `await send_email({ ... });` | | Tính một giá trị một lần rồi dùng lại | `const yesterday = subDays(now(), 1);` | | Để AI làm một bước cần phán đoán | `const parsed = await agent({ instructions, input, tools, output });` | | Tạm dừng một khoảng thời gian | `await wait({ duration_in_minutes: 5 });` | | Dừng tới khi có sự kiện bên ngoài | `await wait_for_event({ event_type: "webhook", event_ref: ref, timeout_in_minutes: 60 });` | | Dừng chờ một người phê duyệt | `const approval = await wait_for_approval({ approvers, prompt });` | | Chặn một thao tác ghi sai kèm thông báo | `validate({ checks: [{ fail_when: ..., field_key: "...", message: ... }] });` | | Kết thúc sớm kèm kết quả | `return({ status: "success", message: ... });` | Hai thứ trông giống JavaScript nhưng không phải: `return(...)` là một **lời gọi hàm**, không phải câu lệnh `return` của JavaScript, và nó mang theo trạng thái để bên gọi đọc. Và cái tên bạn gán cho một lời gọi công cụ (`const shipment = ...`) trở thành id của bước đó trong nhật ký thực thi — đó là cách bạn tìm lại nó khi soát một lần chạy. Phê duyệt là kiểu tạm dừng duy nhất đáng gán vào một biến, vì nó mang quyết định trả về: ``` const approval = await wait_for_approval({ approvers: record["fld_approvers"], prompt: `Duyệt báo giá cho ${record["fld_name"]}?`, }); if (approval.status == "approved") { // tạo dự án, chuyển giai đoạn, báo cho kinh doanh } else { // ghi lại approval.decision_comment } ``` ### Những gì bị từ chối ngay khi lưu Đây là các quy tắc nên biết trước, vì mỗi quy tắc đều ngăn một lỗi mà nếu không sẽ xảy ra âm thầm: - **Không được tạm dừng bên trong vòng lặp.** `wait`, `wait_for_event` và `wait_for_approval` bị từ chối nếu nằm trong thân bất kỳ vòng lặp nào. Khi một quy trình đang dừng chạy tiếp, nó vào lại *sau* toàn bộ vòng lặp, nên một điểm dừng đặt bên trong sẽ chạy vòng đầu, dừng lại, rồi bỏ qua mọi vòng còn lại cùng mọi thao tác ghi của chúng. Hãy đưa điểm dừng ra ngoài vòng lặp, hoặc tách vòng lặp thành các lần chạy được kích hoạt riêng. - **Không dùng `agent(...)` trong hook `before_create` / `before_update` / `before_delete`.** Bước agent chạy sau khi thao tác ghi đã xong, nên không chặn được nó. - **Chỉ gọi được các công cụ và hàm trợ giúp mà nền tảng biết tên.** Không có lời gọi hàm tùy ý và không có việc chạy JavaScript lúc thực thi — đó chính là tính chất mà toàn bộ thiết kế dựa vào. ### Giới hạn khi quy trình đang chạy - **Vòng lặp dừng ở 10.000 vòng**, kết thúc lần chạy với lỗi ghi rõ "nhiều khả năng lặp vô hạn" thay vì quay mãi. - **Mỗi lượt thực thi có hạn mức thời gian**, kiểm lại sau mỗi vòng lặp, nên một vòng lặp chạy lâu sẽ dừng với lỗi rõ ràng thay vì làm treo yêu cầu. - **Một bước phê duyệt mà danh sách người duyệt không ra được ai** — do nối nhầm một trường văn bản, hoặc một nhóm rỗng — kết thúc lần chạy với lỗi nêu rõ giá trị sai. Sai sót đó vẫn qua được bước kiểm kiểu, nên đây là chỗ bạn gặp nó. ## Ví dụ: xác nhận booking freight forwarder Một công ty freight forwarding nhận xác nhận booking từ hãng tàu qua email. Trước Lotics, điều phối viên phải đọc từng email thủ công, tìm số booking, kiểm tra tên tàu và ETA, mở bảng theo dõi, cập nhật bản ghi và chuyển tiếp thông tin cho khách hàng. Quy trình này mất 10-15 phút mỗi booking và dễ sai sót. Với quy trình Lotics, toàn bộ quá trình được tự động hóa: **Kích hoạt:** `receive_gmail_email` kích hoạt khi email xác nhận booking đến hộp thư vận hành. **Bước 1 -- Trích xuất AI:** Sử dụng AI để trích xuất dữ liệu có cấu trúc từ nội dung email: số booking, tên tàu, số container, ETA, cảng xếp hàng và cảng dỡ hàng. AI xử lý các định dạng email khác nhau từ các hãng tàu khác nhau. **Bước 2 -- Tìm bản ghi khớp:** Truy vấn bảng Lô hàng để tìm bản ghi khớp với số booking đã trích xuất. **Bước 3 -- Cập nhật bản ghi:** Cập nhật bản ghi lô hàng khớp với tên tàu, số container và ETA đã trích xuất. Sử dụng biểu thức để ánh xạ mỗi trường trích xuất với trường bản ghi tương ứng. **Bước 4 -- Kiểm tra thay đổi ETA (if):** So sánh ETA vừa trích xuất với ETA đã có trên bản ghi. Nếu khác nhau, quy trình phân nhánh đến bước thông báo. **Bước 5 -- Thông báo đội (có điều kiện):** Nếu ETA thay đổi, gửi thông báo cho đội vận hành với ETA cũ và mới, số booking và tên tàu. **Bước 6 -- Tạo PDF:** Tạo chứng từ xác nhận booking PDF từ mẫu công ty, điền dữ liệu đã trích xuất và các trường bản ghi đã cập nhật. **Bước 7 -- Gửi email khách hàng:** Gửi PDF đã tạo đến địa chỉ email khách hàng (lấy từ bản ghi khách hàng liên kết), cùng với tóm tắt chi tiết booking. Toàn bộ quá trình chạy mà không cần can thiệp thủ công. ## Ví dụ: xử lý và đối chiếu hóa đơn Một công ty logistics nhận hàng trăm hóa đơn nhà cung cấp hàng tháng qua email. Mỗi hóa đơn cần được ghi nhận, đối chiếu với đơn đặt hàng tương ứng và chuyển đến đội tài chính để thanh toán. Xử lý thủ công tốn đội kế toán phải trả 3-4 ngày mỗi tháng. **Kích hoạt:** `receive_gmail_email` kích hoạt khi email hóa đơn đến. **Bước 1 -- Trích xuất AI:** Sử dụng AI để trích xuất dữ liệu có cấu trúc từ tệp đính kèm email: tên nhà cung cấp, số hóa đơn, ngày hóa đơn, các mục chi tiết (mỗi mục có mô tả, số lượng, đơn giá và thành tiền), tổng tiền và đơn vị tiền tệ. **Bước 2 -- Xác nhận dữ liệu hóa đơn (validate):** Kiểm tra các trường bắt buộc có mặt: tên nhà cung cấp không rỗng, số hóa đơn theo đúng định dạng, tổng tiền dương và có ít nhất một mục chi tiết. Tất cả lỗi được báo cáo trong một lần. **Bước 3 -- Tạo bản ghi mục chi tiết (vòng lặp):** Lặp qua các dòng hàng đã trích xuất. Với mỗi mục, một lời gọi lồng bên trong tạo bản ghi trong bảng Chi tiết hóa đơn với mô tả, số lượng, đơn giá và thành tiền. **Bước 4 -- Tìm PO khớp:** Truy vấn bảng Đơn đặt hàng để tìm PO khớp theo tên nhà cung cấp và số PO từ dữ liệu trích xuất. **Bước 5 -- So sánh tổng tiền (if):** So sánh tổng hóa đơn với số tiền PO. Nếu chênh lệch vượt 2%, quy trình phân nhánh đến đường dẫn sai lệch. **Bước 6a -- Đánh dấu sai lệch (nếu chênh lệch > 2%):** Tạo cờ sai lệch trên bản ghi hóa đơn với số tiền PO dự kiến, số tiền hóa đơn thực tế và phần trăm chênh lệch. Gửi thông báo cho quản lý tài chính với liên kết đến bản ghi hóa đơn và PO để xem xét thủ công. **Bước 6b -- Tự động xác minh (nếu số tiền khớp):** Đặt trạng thái hóa đơn thành "Đã xác minh" tự động. Hóa đơn chuyển thẳng vào hàng đợi thanh toán mà không cần can thiệp thủ công. Đội tài chính giờ xử lý cùng khối lượng hóa đơn trong nửa ngày. ## Thực thi và xử lý lỗi Khi quy trình chạy, công cụ tạo bản ghi thực thi theo dõi trạng thái của mỗi bước. Bạn có thể xem toàn bộ lịch sử thực thi cho bất kỳ quy trình nào: bước nào đã chạy, dữ liệu nào chúng nhận, chúng trả về gì và mỗi bước mất bao lâu. Nếu một bước thất bại, quy trình dừng tại bước đó và ghi lại lỗi với đầy đủ ngữ cảnh: câu lệnh nào hỏng, dữ liệu đầu vào đã phân giải (với biểu thức đã được tính) và thông báo lỗi. Lỗi không bao giờ bị nuốt im lặng. Bạn có thể xem thực thi, khắc phục sự cố (sửa biểu thức, cập nhật cấu hình công cụ, sửa dữ liệu nguồn) và hiểu chính xác điều gì đã sai. Quy trình đạt đến bước `wait` hoặc `wait_for_event` lưu toàn bộ ngữ cảnh và tiếp tục từ nơi dừng khi điều kiện được đáp ứng. Trạng thái thực thi được lưu trữ, nên ngay cả khi máy chủ khởi động lại, quy trình vẫn tiếp tục chính xác. ## Câu hỏi thường gặp ### Tôi có thể tạo bao nhiêu quy trình? Không có giới hạn cứng về số lượng quy trình. Bạn có thể tạo bao nhiêu tùy nhu cầu vận hành. Mỗi quy trình chạy độc lập, và công cụ xử lý các thực thi đồng thời trên tất cả quy trình đang hoạt động. ### Điều gì xảy ra khi một bước quy trình thất bại? Quy trình dừng tại bước thất bại và ghi lại lỗi với đầy đủ ngữ cảnh: câu lệnh nào hỏng, dữ liệu đầu vào và thông báo lỗi. Bạn có thể xem lịch sử thực thi, xác định vấn đề và hiểu chính xác điều gì đã sai. Lỗi không bao giờ bị nuốt im lặng. ### Trợ lý AI có thể xây dựng quy trình cho tôi không? Có. Mô tả quy trình bạn muốn tự động hóa bằng ngôn ngữ tự nhiên, và trợ lý AI sẽ tạo quy trình với kích hoạt, bước và biểu thức phù hợp. Sau đó bạn có thể xem lại và điều chỉnh cấu hình trước khi kích hoạt. ### Quy trình có thể gọi quy trình khác không? Quy trình không trực tiếp gọi quy trình khác. Nếu bạn cần logic chung giữa nhiều quy trình, hãy cấu trúc các bước trong mỗi quy trình một cách độc lập. Điều này giữ mỗi quy trình tự chứa và dễ gỡ lỗi hơn. ### Quy trình có chạy thời gian thực không? Có. Các kích hoạt dựa trên sự kiện (thay đổi bản ghi, email, webhook, hành động trong ứng dụng) kích hoạt trong vài giây kể từ khi sự kiện xảy ra. Kích hoạt theo lịch chạy vào thời gian cron đã cấu hình. Mỗi bước thực thi ngay khi bước trước hoàn thành. ### Quy trình gọi được những công cụ nào? Kho công cụ bao gồm CRUD bản ghi (tạo, đọc, cập nhật, truy vấn), gửi thư qua tài khoản Gmail hoặc Outlook đã kết nối, tạo chứng từ (PDF, Excel, Word), gửi thông báo và nhiều hơn nữa. Trợ lý AI biết toàn bộ danh mục công cụ và sẽ chọn công cụ phù hợp khi xây dựng quy trình từ mô tả của bạn. ### Quy trình có thể xử lý file và tệp đính kèm không? Có. Kích hoạt email cung cấp tệp đính kèm như một phần ngữ cảnh, đã được tải sẵn vào không gian làm việc. Quy trình có thể truyền chúng cho một bước AI, đính kèm vào bản ghi, tạo chứng từ và gửi email có tệp đính kèm. ### Điều gì xảy ra trong bước wait? Công cụ quy trình lưu toàn bộ trạng thái thực thi (tất cả kết quả bước, ngữ cảnh kích hoạt, vị trí hiện tại) và lên lịch tiếp tục. Khi thời gian chờ hết hoặc sự kiện dự kiến xảy ra, công cụ tiếp tục thực thi từ chính xác nơi dừng. Trạng thái được lưu vào cơ sở dữ liệu, nên nó tồn tại qua khởi động lại máy chủ. ### Làm thế nào để gỡ lỗi quy trình không hoạt động? Mở lịch sử thực thi của quy trình để xem mỗi lần chạy. Với mỗi thực thi, bạn có thể kiểm tra mọi bước: đầu vào đã phân giải (với biểu thức đã được đánh giá thành giá trị thực), đầu ra, thời lượng và bất kỳ lỗi nào. Điều này cho phép bạn truy vết chính xác nơi dữ liệu chảy và nơi nó bị lỗi.