المحادثات
تجمع المحادثات الرسائل ذات الصلة في حوارات. يصنّف AgentSend الرسائل تلقائياً استناداً إلى ترويسات البريد القياسية ليمتلك وكلاؤك دوماً السياق الكامل للمحادثة.
نظرة عامة
كل حوار بريدي في AgentSend منظَّم في محادثة. تجمع المحادثة كل الرسائل المتعلقة — الرسالة الأصلية، وكل رد، وكل رد على رد — في كائن محادثة واحد مُرتَّب. يسهّل ذلك على الوكلاء قراءة السجل الكامل قبل كتابة الرد.
تُنشأ المحادثات تلقائياً. عندما يستقبل AgentSend أو يرسل رسالة تبدأ حواراً جديداً، تُنشأ محادثة. وعند وصول رد، يطابقه AgentSend مع المحادثة القائمة ويُلحق الرسالة الجديدة بها.
المحادثات محصورة بصندوق بريد واحد. سلسلة البريد نفسها إذا وصلت إلى صندوقَين مختلفَين تنتج كائنَي محادثة منفصلَين.
كيف تعمل المحادثات
يتبع AgentSend النموذج القياسي للمحادثات البريدية المستخدَم في كل عميل بريد رئيسي. عند وصول رد، يفحص AgentSend ترويستَي In-Reply-To وReferences لتحديد المحادثة التي تنتمي إليها الرسالة. إذا وُجد تطابق، تُلحق الرسالة بتلك المحادثة. إذا لم يُوجد، تُنشأ محادثة جديدة.
يمكنك أيضاً ربط رسالة بمحادثة صراحةً بتضمين حقل threadId عند الإرسال. يفيد ذلك عندما تبدأ متابعة من جانب وكيلك وتريد إبقاءها مجموعة مع حوار سابق، حتى لو بدأ المستلم سلسلة ردود جديدة.
اقرأ دائماً threadId من حمولات webhook الواردة ومرّره عند الرد. يضمن ذلك تجميعاً صحيحاً حتى لو غيّر المستلمون سطر الموضوع.
خوارزمية المطابقة
- تحقق من ترويسة
In-Reply-Toمقابل جميع معرّفات الرسائل المعروفة في الصندوق. - إذا لم يُوجد تطابق، امسح قائمة ترويسة
Referencesمن اليمين (الأحدث) إلى اليسار. - إذا لم يوجد تطابق بعد ذلك، أنشئ محادثة جديدة لهذه الرسالة.
خصائص المحادثة
يحتوي كل كائن محادثة على الحقول التالية:
| الخاصية | النوع | الوصف |
|---|---|---|
id |
string | المعرّف الفريد للمحادثة. |
inboxId |
string | صندوق البريد الذي تنتمي إليه هذه المحادثة. |
subject |
string | سطر موضوع أول رسالة في المحادثة. |
messageCount |
integer | إجمالي عدد الرسائل في هذه المحادثة. |
lastMessageAt |
string (ISO 8601) | طابع زمني لأحدث رسالة. |
createdAt |
string (ISO 8601) | طابع زمني لوقت إنشاء المحادثة. |
قائمة المحادثات
احصل على جميع المحادثات لصندوق بريد باستخدام طلب GET. النتائج مرتَّبة بـlastMessageAt تنازلياً بحيث تظهر أكثر الحوارات نشاطاً أولاً.
// 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 | عدد المحادثات المطلوب تخطيها للترقيم. |
الحصول على رسائل المحادثة
اجلب كل رسالة في المحادثة بالترتيب الزمني. يمنح ذلك وكيلك السجل الكامل للحوار اللازم لصياغة رد واعٍ بالسياق.
// 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 الصحيحتين ليظهر الرد في عميل بريد المستلم كجزء من نفس الحوار.
// 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 عند متابعة حوار.
حالات الاستخدام
تفتح المحادثات مجموعة من تدفقات العمل التي تتطلب ذاكرة عبر تبادلات بريدية متعددة.
- دعم العملاء — حمّل المحادثة الكاملة قبل توليد الرد ليمتلك وكيل الدعم كامل السياق السابق. خصّص المحادثات لوكلاء بشر فقط عند الحاجة.
- متابعات المبيعات — تتبَّع سلاسل التواصل متعدد اللمسات. اعرف متى رد العميل المحتمل آخر مرة وكم رسالة في السلسلة قبل التصعيد.
- الجدولة والتنسيق — أدِر مفاوضات ذهاباً وإياباً (مواعيد الاجتماعات، شروط العقود) داخل محادثة واحدة ليظل سجل الحوار متاحاً دائماً.
- جمع الأبحاث — أرسل استفساراً أولياً، اجمع الردود، ثم تابع بأسئلة توضيحية — كل ذلك ضمن محادثة منظمة واحدة لكل جهة اتصال.