المحادثات

تجمع المحادثات الرسائل ذات الصلة في حوارات. يصنّف AgentSend الرسائل تلقائياً استناداً إلى ترويسات البريد القياسية ليمتلك وكلاؤك دوماً السياق الكامل للمحادثة.

نظرة عامة

كل حوار بريدي في AgentSend منظَّم في محادثة. تجمع المحادثة كل الرسائل المتعلقة — الرسالة الأصلية، وكل رد، وكل رد على رد — في كائن محادثة واحد مُرتَّب. يسهّل ذلك على الوكلاء قراءة السجل الكامل قبل كتابة الرد.

تُنشأ المحادثات تلقائياً. عندما يستقبل AgentSend أو يرسل رسالة تبدأ حواراً جديداً، تُنشأ محادثة. وعند وصول رد، يطابقه AgentSend مع المحادثة القائمة ويُلحق الرسالة الجديدة بها.

المحادثات محصورة بصندوق بريد واحد. سلسلة البريد نفسها إذا وصلت إلى صندوقَين مختلفَين تنتج كائنَي محادثة منفصلَين.

كيف تعمل المحادثات

يتبع AgentSend النموذج القياسي للمحادثات البريدية المستخدَم في كل عميل بريد رئيسي. عند وصول رد، يفحص AgentSend ترويستَي In-Reply-To وReferences لتحديد المحادثة التي تنتمي إليها الرسالة. إذا وُجد تطابق، تُلحق الرسالة بتلك المحادثة. إذا لم يُوجد، تُنشأ محادثة جديدة.

يمكنك أيضاً ربط رسالة بمحادثة صراحةً بتضمين حقل threadId عند الإرسال. يفيد ذلك عندما تبدأ متابعة من جانب وكيلك وتريد إبقاءها مجموعة مع حوار سابق، حتى لو بدأ المستلم سلسلة ردود جديدة.

💡

اقرأ دائماً threadId من حمولات webhook الواردة ومرّره عند الرد. يضمن ذلك تجميعاً صحيحاً حتى لو غيّر المستلمون سطر الموضوع.

خوارزمية المطابقة

  1. تحقق من ترويسة In-Reply-To مقابل جميع معرّفات الرسائل المعروفة في الصندوق.
  2. إذا لم يُوجد تطابق، امسح قائمة ترويسة References من اليمين (الأحدث) إلى اليسار.
  3. إذا لم يوجد تطابق بعد ذلك، أنشئ محادثة جديدة لهذه الرسالة.

خصائص المحادثة

يحتوي كل كائن محادثة على الحقول التالية:

الخاصية النوع الوصف
id string المعرّف الفريد للمحادثة.
inboxId string صندوق البريد الذي تنتمي إليه هذه المحادثة.
subject string سطر موضوع أول رسالة في المحادثة.
messageCount integer إجمالي عدد الرسائل في هذه المحادثة.
lastMessageAt string (ISO 8601) طابع زمني لأحدث رسالة.
createdAt string (ISO 8601) طابع زمني لوقت إنشاء المحادثة.

قائمة المحادثات

احصل على جميع المحادثات لصندوق بريد باستخدام طلب GET. النتائج مرتَّبة بـlastMessageAt تنازلياً بحيث تظهر أكثر الحوارات نشاطاً أولاً.

javascript
// 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);
}

معاملات الاستعلام

المعامل Type الافتراضي Description
limit integer 20 العدد الأقصى للمحادثات المطلوب إرجاعها. الحد الأقصى 100.
offset integer 0 عدد المحادثات المطلوب تخطيها للترقيم.

الحصول على رسائل المحادثة

اجلب كل رسالة في المحادثة بالترتيب الزمني. يمنح ذلك وكيلك السجل الكامل للحوار اللازم لصياغة رد واعٍ بالسياق.

javascript
// 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`);

تُرجع الرسائل داخل المحادثة بترتيب زمني تصاعدي (sentAt الأقدم أولاً). يطابق هذا الترتيب الطبيعي الذي تتوقعه معظم واجهات محادثات LLM.

الرد في محادثة

لمواصلة حوار قائم، ضمّن threadId عند إرسال الرسالة. سيضبط AgentSend تلقائياً ترويستَي In-Reply-To وReferences الصحيحتين ليظهر الرد في عميل بريد المستلم كجزء من نفس الحوار.

javascript
// 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
  }),
});

إذا أغفلت threadId، ستبدأ الرسالة الصادرة محادثة جديدة حتى لو استخدمت نفس سطر الموضوع. مرّر دائماً threadId عند متابعة حوار.

حالات الاستخدام

تفتح المحادثات مجموعة من تدفقات العمل التي تتطلب ذاكرة عبر تبادلات بريدية متعددة.