الرسائل
تمثل الرسائل الرسائل الفردية التي يرسلها أو يستقبلها صندوق بريد. أرسل رسائل HTML غنية، وتتبع حالة التسليم، واقرأ الردود الواردة.
نظرة عامة
الرسالة هي بريد إلكتروني واحد مرتبط بـصندوق بريد. عندما يرسل وكيلك رسالة، يُنشأ رسالة صادرة. عندما يرد شخص أو يرسل إلى عنوان وكيلك، تُنشأ رسالة واردة تلقائياً.
كل رسالة تنتمي إلى محادثة — إما موجودة مسبقاً (للردود) أو محادثة جديدة تُنشأ تلقائياً عند بدء محادثة جديدة.
الرسائل غير قابلة للتعديل بعد إنشائها. لإرسال متابعة، أنشئ رسالة جديدة في نفس المحادثة بتمرير threadId.
إرسال بريد إلكتروني
POST /inboxes/{inboxId}/messages
أرسل بريداً من صندوق بالنشر إلى نقطة نهاية رسائله. المصفوفة to وsubject مطلوبان؛ أما البقية فاختيارية.
جسم الطلب
| الحقل | النوع | الوصف |
|---|---|---|
to مطلوب |
string[] | مصفوفة عناوين المستلمين. |
subject مطلوب |
string | سطر موضوع الرسالة. |
cc |
string[] | مستلمو CC. |
bcc |
string[] | مستلمو BCC. غير مرئيين للمستلمين الآخرين. |
bodyText |
string | نص عادي. يُستخدم كبديل عند تقديم bodyHtml أيضاً. |
bodyHtml |
string | نص HTML. عند تقديم كل من bodyText وbodyHtml، تُرسل الرسالة كـ multipart/alternative. |
threadId |
string | المحادثة المطلوب الرد ضمنها. إذا تُركت، تُنشأ محادثة جديدة. |
attachmentIds |
string[] | معرّفات المرفقات المرفوعة مسبقاً المطلوب تضمينها. |
const res = 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: "Following up on your request", bodyText: "Hi, just checking in on your request.", bodyHtml: "<p>Hi, just checking in on your request.</p>", }), } ); const message = await res.json(); console.log(message.id); // msg_abc123 console.log(message.delivery); // "email" or "dry-run" console.log(message.status); // "queued"
خصائص الرسالة
يحتوي كل كائن رسالة تُرجعه API على الحقول التالية.
| الخاصية | Type | Description |
|---|---|---|
id |
string | المعرّف الفريد للرسالة. |
inboxId |
string | صندوق البريد الذي تنتمي إليه هذه الرسالة. |
threadId |
string | المحادثة التي تُجمَّع فيها هذه الرسالة. |
direction |
string | outbound للرسائل التي أرسلها وكيلك؛ inbound للرسائل المستلمة. |
fromAddress |
string | عنوان بريد المرسل. |
toAddresses |
string[] | المستلمون الرئيسيون. |
ccAddresses |
string[] | مستلمو CC. |
subject |
string | Email subject line. |
bodyText |
string | محتوى نصي عادي. |
bodyHtml |
string | محتوى HTML. |
delivery |
string | ما إذا كانت البيئة أرسلت بريداً حقيقياً (email) أو حاكته فقط (dry-run). |
status |
string | حالة التسليم الحالية. راجع حالة الرسالة أدناه. |
attachments |
object[] | مصفوفة كائنات مرفقات تحوي id وfilename وcontentType وsize. |
messageIdHeader |
string | قيمة ترويسة Message-ID وفق RFC 5322، تُستخدم للمحادثات في عملاء البريد. |
createdAt |
string | طابع زمني ISO 8601 لوقت إنشاء الرسالة. |
حالة الرسالة
تمر الرسائل الصادرة بدورة حياة تسليم. تحقق من delivery أولاً لتأكيد ما إذا كانت البيئة أرسلت بريداً حقيقياً أو حاكته فقط، ثم استخدم status أو Webhooks لمتابعة دورة الحياة من جانب المزود.
دورة حياة الصادر
- queued — تم قبول الرسالة وتنتظر الإرسال.
- sending — يجري تسليم الرسالة حالياً إلى خادم بريد المستلم.
- sent — قبل خادم بريد المستلم الرسالة.
- delivered — تأكيد التسليم (حيث يدعم خادم الاستقبال ذلك).
حالات الفشل
- failed — منع خطأ عابر أو دائم التسليم. تحقق من حمولة webhook لمعرفة السبب.
- bounced — عنوان المستلم غير موجود أو رفض الخادم الرسالة نهائياً.
- complained — وسم المستلم الرسالة كبريد مزعج.
الرسائل الواردة
- received — وصلت رسالة إلى الصندوق من مرسل خارجي.
إذا بلغت رسالة حالة bounced أو complained، تجنب إرسال مزيد من الرسائل إلى ذلك العنوان لحماية سمعة المرسل لديك.
قائمة الرسائل
GET /inboxes/{inboxId}/messages
احصل على قائمة مقسَّمة للرسائل في صندوق. رشّح حسب الحالة للعثور على الردود الواردة أو عمليات الإرسال الفاشلة أو أي مجموعة أخرى.
| معامل الاستعلام | Type | Description |
|---|---|---|
limit |
number | عدد الرسائل المطلوب إرجاعها. الافتراضي 20، الحد الأقصى 100. |
offset |
number | عدد الرسائل المطلوب تخطيها للترقيم. الافتراضي 0. |
status |
string | رشّح حسب الحالة. أحد القيم: queued، sending، sent، delivered، failed، bounced، complained، received. |
// Fetch the 10 most recent inbound messages const res = await fetch( `https://api.agentsend.io/inboxes/${inboxId}/messages?status=received&limit=10`, { headers: { "x-api-key": process.env.AGENTSEND_API_KEY } } ); const { data, total } = await res.json(); for (const msg of data) { console.log(msg.fromAddress, msg.subject, msg.bodyText); }
استخدم Webhooks بدلاً من الاستعلام الدوري لتصلك إشعارات فور وصول رسالة جديدة. الاستعلام الدوري بديل جيد للنصوص البسيطة والمهام قصيرة الأمد.
HTML مقابل النص العادي
يدعم AgentSend رسائل النص العادي وHTML وmultipart. استخدم bodyText للنص العادي وbodyHtml لمحتوى HTML.
- إذا قدّمت
bodyTextفقط، تُرسل الرسالة كـtext/plain. - إذا قدّمت
bodyHtmlفقط، تُرسل الرسالة كـtext/html. - إذا قدّمت كليهما، تُرسل الرسالة كـ
multipart/alternative. ستعرض عملاء البريد الذين يدعمون HTML النسخة HTML؛ والآخرون سيعودون إلى النص العادي.
ضمّن دائماً نسخة bodyText بجانب bodyHtml. يحسّن ذلك قابلية التسليم وسهولة الوصول والتوافق مع عملاء البريد النصي.
حذف الرسائل
DELETE /messages/{id}
احذف رسالة حسب معرّفها. يزيل هذا سجل الرسالة من AgentSend. لا يسحب ذلك رسالة تم تسليمها بالفعل من صندوق المستلم.
await fetch(`https://api.agentsend.io/messages/${messageId}`, { method: "DELETE", headers: { "x-api-key": process.env.AGENTSEND_API_KEY }, });
حذف الرسالة نهائي. ينبغي حذف الرسائل الواردة التي هي جزء من محادثة نشطة بحذر، لأن سجل المحادثة سيصبح غير مكتمل.