Chuỗi Hội Thoại
Chuỗi hội thoại nhóm các tin nhắn liên quan thành cuộc hội thoại. AgentSend tự động gom chuỗi tin nhắn dựa trên header email chuẩn, để các agent luôn có đầy đủ ngữ cảnh của cuộc hội thoại.
Tổng Quan
Mọi cuộc hội thoại email trong AgentSend được tổ chức thành một chuỗi. Một chuỗi thu thập tất cả tin nhắn liên quan — email ban đầu, mọi phản hồi, và mọi phản hồi của phản hồi — vào một đối tượng hội thoại duy nhất, có thứ tự. Điều này giúp các agent dễ dàng đọc toàn bộ lịch sử trước khi soạn phản hồi.
Chuỗi hội thoại được tạo tự động. Khi AgentSend nhận hoặc gửi một tin nhắn bắt đầu cuộc hội thoại mới, một chuỗi sẽ được tạo. Khi có phản hồi đến, AgentSend ghép nó với chuỗi hiện có và thêm tin nhắn mới vào.
Chuỗi hội thoại được giới hạn trong phạm vi của một hộp thư. Cùng một chuỗi email nhận bởi hai hộp thư khác nhau sẽ tạo ra hai đối tượng chuỗi riêng biệt.
Cách Gom Chuỗi Hoạt Động
AgentSend tuân theo mô hình gom chuỗi email chuẩn được sử dụng bởi mọi email client lớn. Khi một phản hồi đến, AgentSend kiểm tra các header In-Reply-To và References để xác định chuỗi hiện có mà tin nhắn thuộc về. Nếu tìm thấy khớp, tin nhắn được thêm vào chuỗi đó. Nếu không, một chuỗi mới sẽ được tạo.
Bạn cũng có thể chỉ định rõ ràng tin nhắn thuộc chuỗi nào bằng cách bao gồm trường threadId khi gửi. Điều này hữu ích khi bạn khởi xướng theo dõi từ phía agent và muốn giữ nó cùng chuỗi với cuộc hội thoại trước đó, ngay cả khi người nhận bắt đầu chuỗi phản hồi mới.
Luôn đọc threadId từ payload webhook đến và truyền lại khi trả lời. Điều này đảm bảo gom chuỗi chính xác ngay cả khi người nhận thay đổi tiêu đề.
Thuật toán ghép
- Kiểm tra header
In-Reply-Tovới tất cả ID tin nhắn đã biết trong hộp thư. - Nếu không khớp, quét danh sách header
Referencestừ phải (mới nhất) sang trái. - Nếu vẫn không khớp, tạo một chuỗi mới cho tin nhắn này.
Thuộc Tính Chuỗi
Mỗi đối tượng chuỗi có các trường sau:
| Thuộc tính | Kiểu | Mô tả |
|---|---|---|
id |
string | Định danh duy nhất của chuỗi. |
inboxId |
string | Hộp thư mà chuỗi này thuộc về. |
subject |
string | Dòng tiêu đề của tin nhắn đầu tiên trong chuỗi. |
messageCount |
integer | Tổng số tin nhắn trong chuỗi này. |
lastMessageAt |
string (ISO 8601) | Dấu thời gian của tin nhắn gần nhất. |
createdAt |
string (ISO 8601) | Dấu thời gian khi chuỗi được tạo lần đầu. |
Liệt Kê Chuỗi
Lấy tất cả chuỗi cho một hộp thư bằng yêu cầu GET. Kết quả được sắp xếp theo lastMessageAt giảm dần, nên các cuộc hội thoại hoạt động gần đây nhất sẽ xuất hiện trước.
// GET /inboxes/{id}/threads?limit=20&offset=0 const res = await fetch( `https://api.agentsend.io/inboxes/${inboxId}/threads?limit=20&offset=0`, { headers: { "x-api-key": process.env.AGENTSEND_API_KEY } } ); const { data, total } = await res.json(); for (const thread of data) { console.log(thread.id, thread.subject, thread.messageCount); }
Tham số truy vấn
| Tham số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
limit |
integer | 20 | Số lượng chuỗi tối đa trả về. Tối đa 100. |
offset |
integer | 0 | Số lượng chuỗi bỏ qua để phân trang. |
Lấy Tin Nhắn Của Chuỗi
Lấy mọi tin nhắn trong một chuỗi theo thứ tự thời gian. Điều này cho agent lịch sử hội thoại đầy đủ cần thiết để soạn phản hồi có ngữ cảnh.
// GET /threads/{id}/messages const res = await fetch( `https://api.agentsend.io/threads/${threadId}/messages`, { headers: { "x-api-key": process.env.AGENTSEND_API_KEY } } ); const { data } = await res.json(); // Xây dựng lịch sử hội thoại cho LLM của bạn const history = data.map(msg => ({ role: msg.direction === "outbound" ? "assistant" : "user", content: msg.bodyText, })); console.log(`Đã nạp ${history.length} tin nhắn từ chuỗi`);
Tin nhắn trong một chuỗi được trả về theo thứ tự thời gian tăng dần (sentAt cũ nhất trước). Điều này khớp với thứ tự tự nhiên mà hầu hết API hội thoại LLM mong đợi.
Trả Lời Trong Chuỗi
Để tiếp tục cuộc hội thoại hiện có, bao gồm threadId khi gửi tin nhắn. AgentSend sẽ tự động đặt các header In-Reply-To và References đúng để phản hồi xuất hiện trong email client của người nhận như một phần của cùng cuộc hội thoại.
// POST /inboxes/{id}/messages — trả lời trong chuỗi hiện có await fetch(`https://api.agentsend.io/inboxes/${inboxId}/messages`, { method: "POST", headers: { "x-api-key": process.env.AGENTSEND_API_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ to: ["customer@example.com"], subject: "Re: Your support request", bodyText: "Thanks for reaching out! Here is the information you requested...", threadId: "thrd_abc123", // gắn tin nhắn này với cuộc hội thoại hiện có }), });
Nếu bạn bỏ qua threadId, tin nhắn gửi đi sẽ bắt đầu một chuỗi mới ngay cả khi bạn dùng cùng tiêu đề. Luôn truyền threadId khi tiếp tục cuộc hội thoại.
Các Trường Hợp Sử Dụng
Chuỗi hội thoại mở ra tập hợp các quy trình yêu cầu bộ nhớ qua nhiều lần trao đổi email.
- Hỗ trợ khách hàng — Tải toàn bộ chuỗi trước khi tạo phản hồi để agent hỗ trợ có đầy đủ ngữ cảnh. Chỉ chuyển chuỗi cho agent người khi cần.
- Theo dõi bán hàng — Theo dõi các chuỗi tiếp cận nhiều lần. Biết khi nào khách hàng tiềm năng trả lời lần cuối và bao nhiêu tin nhắn trong chuỗi trước khi leo thang.
- Lên lịch & phối hợp — Chạy các cuộc đàm phán qua lại (thời gian họp, điều khoản hợp đồng) trong một chuỗi duy nhất để lịch sử hội thoại luôn truy cập được.
- Thu thập nghiên cứu — Gửi câu hỏi ban đầu, thu thập phản hồi, và theo dõi với câu hỏi làm rõ — tất cả trong một chuỗi được tổ chức cho mỗi liên hệ.