Kết nối hệ thống ticket của bạn
Cho Đội Agent tự nhận ticket đã duyệt qua Workflow Hook, đọc và cập nhật ticket qua MCP, rồi gửi kết quả về bằng callback.
Trên trang này
Workflow Hook cho phép hệ thống của bạn (Jira, Linear, Zendesk, helpdesk nội bộ…) khởi chạy một quy trình khi có sự kiện, thay vì bạn bấm chạy thủ công. Kết hợp với MCP và callback, bạn có một vòng khép kín: ticket được duyệt → Đội Agent xử lý → ticket được cập nhật.
Hệ thống ticket ──(1) webhook ký HMAC──► Hook của quy trình ──► Đội Agent
▲ │
├──────(3) callback ký HMAC: run.started … run.succeeded ◄──┤
└──────(2) MCP: get_ticket, add_internal_comment, set_progress, attach_artifactChỉ gửi webhook cho ticket đã được người có thẩm quyền duyệt. Nội dung ticket luôn được Đội Agent coi là dữ liệu không đáng tin, không phải chỉ thị.
1. Tạo quy trình từ template
- Quy trình › Tạo quy trình → chọn template Xử lý ticket phần mềm.
- Template đặt sẵn: chạy tuần tự BA → DEV → Tester, Phản biện kiểm tra kết quả, tối đa 2 lần sửa mỗi việc, 240 phút, bạn duyệt kết quả cuối.
- Chọn Agent cho từng vai trò. DEV và Tester cần connector RexAPF CLI (máy staging) — xem Runtime ngoài.
- Gán connector MCP của hệ thống ticket (quyền đọc-ghi) cho Điều phối.
- Tab Duyệt › Ghi dữ liệu qua REST / MCP: giữ Hỏi mỗi lần, rồi ở Tool MCP tự chạy tích các tool an toàn như
add_internal_comment,set_progress,attach_artifact. Các tool ghi khác vẫn chờ bạn duyệt; Gmail và Lịch luôn chờ duyệt. - Xuất bản.
2. Tạo Hook
Trong trang quy trình → tab Hooks → Tạo Hook:
| Trường | Gợi ý |
|---|---|
| Bộ lọc | event bằng ticket.approved |
| Ánh xạ đầu vào | Mặc định gửi cả JSON vào request |
| Khoá đồng thời | ticket.area với tối đa 1 — các ticket cùng khu vực chạy lần lượt |
| Mã sự kiện | Header X-Rex-Event-Id, ví dụ ticket:<id>:approval:<vòng> |
| Callback | URL của hệ thống bạn; khoá callback chỉ hiện một lần khi tạo |
Sau khi lưu, bạn nhận địa chỉ Hook và khoá ký (cũng chỉ hiện một lần).
3. Gửi webhook
import { createHmac, randomUUID } from "node:crypto";
async function sendApproved(ticket: { id: string; round: number }, payload: unknown) {
const body = JSON.stringify(payload);
const ts = Math.floor(Date.now() / 1000).toString();
const eventId = `ticket:${ticket.id}:approval:${ticket.round}`;
const sig = createHmac("sha256", process.env.REX_HOOK_SECRET!).update(`${ts}.${eventId}.${body}`).digest("hex");
const res = await fetch(process.env.REX_HOOK_URL!, {
method: "POST",
headers: { "content-type": "application/json", "X-Rex-Timestamp": ts, "X-Rex-Event-Id": eventId, "X-Rex-Signature": `v1=${sig}` },
body,
});
// 202 accepted | 200 duplicate (đã nhận trước đó) → coi là thành công. 429/5xx → thử lại với backoff.
return res.status;
}- Thời gian lệch tối đa ±5 phút. Gửi lại cùng
X-Rex-Event-Idkhông tạo lượt chạy mới. - Muốn xử lý lại ticket: tăng vòng (
approval:2).
4. Nhận callback
RexAPF gửi run.started, run.waiting_approval, run.succeeded, run.failed, run.cancelled, run.rejected về URL callback, ký bằng khoá callback trên chuỗi ts.deliveryId.body (header X-Rex-Delivery-Id). Payload có status, summary, runUrl, correlation (ví dụ ticketId) và với run.succeeded có finalOutput — báo cáo JSON của template:
{ "summary": "…", "branch": "ticket/123", "prUrl": null, "tests": { "command": "npx vitest run …", "passed": 42, "failed": 0 }, "risks": [] }Xử lý callback idempotent theo X-Rex-Delivery-Id, bỏ qua sự kiện của vòng cũ, không cho trạng thái đi lùi; luôn trả 2xx sau khi đã xác thực chữ ký.
5. Cấp MCP cho Đội Agent
Hệ thống ticket cung cấp một MCP server (Streamable HTTP, Bearer token) với các tool tối thiểu:
| Tool | Loại | Ghi chú |
|---|---|---|
get_ticket, list_tickets | Chỉ đọc | Chỉ ticket đang được xử lý |
add_internal_comment | Ghi | Ghi chú nội bộ, người báo không thấy |
set_progress | Ghi | Chỉ in_progress / awaiting_review |
attach_artifact | Ghi | branch (không phải main/master), pr (https), report |
Không có tool nào cho Agent duyệt, giải quyết hay từ chối ticket — việc đó luôn thuộc về con người. Thêm MCP server trong Tuỳ biến › Kết nối và gán cho Agent cần dùng.
6. Câu hỏi của CLI
Khi RexAPF CLI hỏi (ví dụ xin cài gói), thẻ CLI đang hỏi bạn hiện trên Bảng điều phối của lượt chạy. Chỉ bạn trả lời; Agent không trả lời thay. Nếu chờ quá thời hạn trong Thông báo & thời hạn, bạn được nhắc lại qua các kênh đã bật.