Utas
Utas mengelompokkan pesan terkait ke dalam percakapan. AgentSend secara otomatis menyusun utas pesan berdasarkan header email standar sehingga agen Anda selalu memiliki konteks penuh percakapan.
Ikhtisar
Setiap percakapan email di AgentSend diatur ke dalam utas. Utas mengumpulkan semua pesan terkait — email asli, setiap balasan, dan setiap balasan-ke-balasan — ke dalam satu objek percakapan yang terurut. Ini memudahkan agen membaca riwayat lengkap sebelum menyusun respons.
Utas dibuat secara otomatis. Saat AgentSend menerima atau mengirim pesan yang memulai percakapan baru, utas dibuat. Saat balasan tiba, AgentSend mencocokkannya dengan utas yang ada dan menambahkan pesan baru.
Utas dicakup ke kotak masuk. Rantai email yang sama yang diterima oleh dua kotak masuk berbeda akan menghasilkan dua objek utas terpisah.
Cara Kerja Threading
AgentSend mengikuti model threading email standar yang digunakan oleh setiap klien email utama. Saat balasan tiba, AgentSend memeriksa header In-Reply-To dan References untuk mengidentifikasi utas yang ada tempat pesan berada. Jika ditemukan kecocokan, pesan ditambahkan ke utas tersebut. Jika tidak ditemukan kecocokan, utas baru dibuat.
Anda juga dapat secara eksplisit mengaitkan pesan dengan utas dengan menyertakan field threadId saat mengirim. Ini berguna saat Anda memulai tindak lanjut dari sisi agen Anda dan ingin tetap dikelompokkan dengan percakapan sebelumnya, meskipun penerima memulai rantai balasan baru.
Selalu baca threadId dari payload webhook masuk dan teruskan kembali saat membalas. Ini menjamin pengelompokan yang benar bahkan saat penerima mengubah baris subjek mereka.
Algoritma pencocokan
- Periksa header
In-Reply-Toterhadap semua ID pesan yang diketahui di kotak masuk. - Jika tidak cocok, pindai daftar header
Referencesdari kanan (paling baru) ke kiri. - Jika masih tidak cocok, buat utas baru untuk pesan ini.
Properti Utas
Setiap objek utas memiliki field berikut:
| Properti | Tipe | Deskripsi |
|---|---|---|
id |
string | Pengenal unik untuk utas. |
inboxId |
string | Kotak masuk tempat utas ini berada. |
subject |
string | Baris subjek pesan pertama di utas. |
messageCount |
integer | Jumlah total pesan di utas ini. |
lastMessageAt |
string (ISO 8601) | Timestamp pesan terbaru. |
createdAt |
string (ISO 8601) | Timestamp saat utas pertama kali dibuat. |
Daftar Utas
Ambil semua utas untuk kotak masuk menggunakan request GET. Hasil diurutkan berdasarkan lastMessageAt menurun sehingga percakapan paling aktif muncul lebih dulu.
// 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); }
Parameter query
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
limit |
integer | 20 | Jumlah maksimum utas yang dikembalikan. Maks 100. |
offset |
integer | 0 | Jumlah utas yang dilewati untuk paginasi. |
Mendapatkan Pesan Utas
Ambil setiap pesan di utas dalam urutan kronologis. Ini memberi agen Anda riwayat percakapan lengkap yang dibutuhkan untuk menyusun balasan yang sadar konteks.
// 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(); // Build a conversation history for your LLM const history = data.map(msg => ({ role: msg.direction === "outbound" ? "assistant" : "user", content: msg.bodyText, })); console.log(`Loaded ${history.length} messages from thread`);
Pesan dalam utas dikembalikan dalam urutan kronologis menaik (sentAt terlama dulu). Ini cocok dengan urutan alami yang diharapkan oleh sebagian besar API percakapan LLM.
Membalas di Utas
Untuk melanjutkan percakapan yang ada, sertakan threadId saat mengirim pesan. AgentSend akan secara otomatis menetapkan header In-Reply-To dan References yang benar sehingga balasan muncul di klien email penerima sebagai bagian dari percakapan yang sama.
// POST /inboxes/{id}/messages — reply within an existing thread 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", // ties this message to the existing conversation }), });
Jika Anda menghilangkan threadId, pesan keluar akan memulai utas baru meskipun Anda menggunakan baris subjek yang sama. Selalu teruskan threadId saat melanjutkan percakapan.
Kasus Penggunaan
Utas membuka serangkaian alur kerja yang membutuhkan memori di beberapa pertukaran email.
- Dukungan pelanggan — Muat utas lengkap sebelum menghasilkan balasan sehingga agen dukungan Anda memiliki semua konteks sebelumnya. Tugaskan utas ke agen manusia hanya saat diperlukan.
- Tindak lanjut penjualan — Lacak urutan penjangkauan multi-sentuh. Ketahui kapan prospek terakhir membalas dan berapa banyak pesan dalam rantai sebelum meningkatkan.
- Penjadwalan & koordinasi — Jalankan negosiasi bolak-balik (waktu rapat, ketentuan kontrak) dalam satu utas sehingga riwayat percakapan selalu dapat diakses.
- Pengumpulan riset — Kirim query awal, kumpulkan respons, dan tindak lanjuti dengan pertanyaan klarifikasi — semua dalam satu utas terorganisir per kontak.