Quyết định hoàn tiền trong Logic Apps: AI với con người tham gia
Trong bài viết này, chúng ta sẽ xây dựng một Logic App có khả năng quyết định xem có nên chấp thuận, leo thang hay từ chối yêu cầu hoàn tiền. Logic App sẽ áp dụng chính sách, tạm dừng để chờ phê duyệt của con người khi cần thiết, và gửi email cho khách hàng với quyết định cuối cùng.
Tại sao chọn mô hình này?
Hầu hết các quy trình hoàn tiền đều là sự kết hợp giữa các quy tắc rõ ràng (tự động chấp thuận số tiền nhỏ cho lý do hợp lệ) và các trường hợp đặc biệt (cần có con người). Logic Apps hiện nay hỗ trợ hành động Agent (Azure OpenAI) có khả năng lý luận, gọi công cụ và điều khiển quy trình - hoàn hảo cho việc kết hợp chính sách và con người.
Chúng ta sẽ xây dựng gì (tóm tắt)
HTTP POST (JSON yêu cầu hoàn tiền)
└─ Agent "RefundAgent" (Azure OpenAI gpt-4.1-mini)
├─ Tool: Send_Mail_For_Action (Outlook/Webhook) -> tạm dừng & chờ phê duyệt
├─ Tool: Send_Final_Status_Email (Outlook) -> thông báo cho khách hàng
└─ Tool: EndWorkflow (Kết thúc) -> hoàn tất quy trình
└─ Response 200 (đầu ra tùy chọn)
🧩 Chính sách quyết định
Tự động chấp thuận nếu:
- Số tiền ≤ 200
- Lý do chứa hư hỏng, khiếm khuyết, hoặc không bao giờ đến
Leo thang nếu:
- Số tiền > 200
- Lý do không rõ ràng hoặc ngoài chính sách
Từ chối nếu:
- Lý do vi phạm chính sách (ví dụ: hối tiếc của người mua ngoài thời gian quy định)
Yêu cầu đến (kích hoạt HTTP)
Logic App mong đợi một tải trọng JSON như sau:
{
"requestId": "REQ-2025-0918-001",
"customerEmail": "alex@example.com",
"orderId": "ORD-992311",
"reason": "Sản phẩm bị hư hỏng. Màn hình bị nứt.",
"amount": 149.99
}
Dưới đây là một mẫu tải trọng sẵn sàng để thử nghiệm.
Cách mà Agent suy nghĩ
- Thông điệp hệ thống (chính sách + định dạng): yêu cầu agent tạo ra quyết định JSON có tính quyết định và điều hướng quy trình.
- Thông điệp người dùng: chèn thân yêu cầu thô (
@{triggerBody()}) để Agent thấy requestId, email, lý do, số tiền.
Agent sau đó chọn công cụ:
- Gọi Send_Email_For_Action chỉ khi cần quyết định của con người.
- Nếu không, chuyển tới Send_Final_Status_Email với thông điệp rõ ràng, thân thiện với khách hàng.
- Kết thúc với EndWorkflow khi mục tiêu đạt được.
Con người tham gia (cách tạm dừng hoạt động)
Công cụ Send_Email_For_Action của bạn sử dụng:
- Outlook "Email với Lựa chọn": gửi một email có thể hành động (ví dụ: Chấp thuận / Từ chối).
- Quy trình sẽ tạm dừng cho đến khi người phê duyệt nhấp vào một lựa chọn; công cụ sẽ tiếp tục với lựa chọn của người phê duyệt.
JSON (quy trình làm việc của bạn)
Kích hoạt (HTTP POST)
- Loại: Yêu cầu (loại: Http)
- Sơ đồ: requestId, customerEmail, orderId, reason, amount
Hành động Agent: RefundAgent
- Mô hình: Azure OpenAI gpt-4.1-mini
- Hệ thống: chính sách + hướng dẫn vòng người
- Người dùng: bao gồm thân yêu cầu
- Kênh: Cho phép cả hai kênh đầu vào và đầu ra
🔄 Vòng người tham gia yêu cầu kênh thời gian thực
Để vòng phê duyệt của con người (HITL) hoạt động đúng cách, bạn cần bật tùy chọn sau trong tab Kênh của hành động Agent:
✅ Cho phép cả hai kênh đầu vào và đầu ra
- Điều này giữ cho quy trình làm việc hoạt động trong khi Agent đang chờ quyết định của con người.
- Phản hồi của người phê duyệt (Chấp thuận / Từ chối) được gửi lại đến URL gọi lại, và vì cả hai kênh đều mở, Agent có thể tiếp tục trong thời gian thực mà không cần khởi động lại quy trình làm việc.
- Nếu không bật tùy chọn này, quy trình sẽ kết thúc sau phản hồi đầu tiên và bạn không thể hỗ trợ các tương tác HITL.
Công cụ 1: Send_Email_For_Action
- Mục đích: Tạm dừng để có phê duyệt của con người khi Agent không chắc chắn
- Thành phần:
- Send_email_for_Approval_Or_Denial: Outlook Mail với Lựa chọn với:
- Đến: người phê duyệt (địa chỉ demo của bạn)
- Chủ đề:
@{agentParameters('Subject')} #Cần sự nhập của bạn# - Nội dung:
@agentParameters('Body') - Lựa chọn:
@agentParameters('User Options')(ví dụ: "Chấp thuận, Từ chối")
- Send_email_for_Approval_Or_Denial: Outlook Mail với Lựa chọn với:
Công cụ 2: Send_Final_Status_Email
- Mục đích: Thông báo cho khách hàng về quyết định cuối cùng
- Đầu vào:
- Chủ đề:
@agentParameters('Subject') - Nội dung :
<p class="editor-paragraph">@{agentParameters('Body')}</p> - Đến : khách hàng (JSON của bạn sử dụng danh sách cố định; tham số hóa để
customerEmailcho sản xuất)
- Chủ đề:
Công cụ 3: EndWorkflow
- Mục đích: kết thúc một cách sạch sẽ với trạng thái Thành công khi hoàn tất
📊 Lịch sử chạy
Một trong những cách hữu ích nhất để xác thực và gỡ lỗi Logic App của bạn là xem Lịch sử chạy. Mỗi lần thực thi cho thấy:
- Các bước quy trình làm việc bên trái: kích hoạt, RefundAgent, và các công cụ (ví dụ: Gửi Email để Hành động, Gửi Email Trạng thái Cuối cùng).
- Nhật ký Agent bên phải: các bước lý luận chi tiết, tải trọng yêu cầu và quyết định JSON có tính quyết định được tạo ra bởi Agent.
- Chỉ báo trạng thái ✅ hoặc ❌ giúp bạn nhanh chóng nhận biết liệu một bước có thành công hay không.
Trong ví dụ RefundAgent:
- 📸 Ảnh chụp màn hình: Lịch sử chạy — bên trái hiển thị các bước quy trình Logic App, bên phải hiển thị nhật ký Agent với lý luận và quyết định.
- Đối với một hoàn tiền có giá trị cao ($275.50), Agent đã khớp một lý do hợp lệ (“khiếm khuyết”) nhưng vì số tiền vượt quá $200, nó đã leo thang đến người phê duyệt con người. Lịch sử chạy cho thấy bước “Gửi Email để Phê duyệt hoặc Từ chối” đã được gọi.
- Đối với một hoàn tiền có giá trị thấp hơn ($145.00), Agent thấy rằng lý do (“sản phẩm bị hư hỏng”) là hợp lệ và số tiền dưới ngưỡng, vì vậy nó đã tự động chấp thuận hoàn tiền và gửi email trạng thái cuối cùng trực tiếp cho khách hàng.
Điều này cung cấp tính minh bạch hoàn toàn về cách quyết định được đưa ra và con đường quy trình đã theo - điều này rất quan trọng cho khả năng kiểm toán trong các kịch bản HITL (Con người tham gia).
Kết luận
Bạn hiện đã có một quy trình hoàn tiền có tính quyết định, có thể kiểm toán kết hợp giữa tự động hóa chính sách với phán đoán của con người - tất cả đều bên trong Logic Apps.