تخطَّ إلى المحتوى

الرسائل

عرض بصيغة Markdown

أرسل الرسائل واقرأ حالتها.

كل ما ترسله يمر عبر نقطة واحدة هي POST /messages. تختار type، وتضع المحتوى تحت مفتاح بالاسم نفسه، ثم تتابع ما يحدث عبر أحداث message.*.

كيف يعمل: إرسال الرسائلنافذة الـ24 ساعة · النص · الوسائط · الأزرار والقوائم والروابط · الموقع وبطاقات الاتصال والتفاعلات · الردود وإشعارات القراءة والكتابة · ما يحدث بعد الإرسال · إنستغرام وماسنجر · أي رقم يُرسل

نافذة الـ24 ساعة#

يحدد واتساب ما يمكنك إرساله بقاعدة واحدة:

  • خلال 24 ساعة من آخر رسالة للعميل تكون المحادثة مفتوحة: أرسل أي نوع وبنص حر.
  • في غير ذلك لا يُسلَّم إلا قالب معتمد. أي نوع آخر يُرفض بالخطأ window_closed قبل أن يصل إلى واتساب، فلا تُحاسب أبدًا على رسالة لم يكن بالإمكان تسليمها.

إذا رد العميل على قالب تُفتح النافذة من جديد. ويخبرك GET /conversations/{id} متى تُغلق (reply_window_expires_at).

النص#

JSON
{ "to": "+966501234567", "type": "text", "text": { "body": "أهلًا سارة! طلبك جاهز 🎉", "preview_url": true } }

حتى 4096 حرفًا. يعرض preview_url معاينة لأول رابط في النص.

الوسائط#

الصور والفيديو والصوت والمستندات والملصقات تأتي من رابط https:// عام يحمّله واتساب، أو من ملف رفعته مرة واحدة عبر POST /media:

JSON
{ "to": "+966501234567", "type": "document", "document": { "media_id": "med_381", "filename": "invoice-10482.pdf", "caption": "فاتورتك" } }
النوعالصيغالحد الأقصىتعليق
imageJPEG وPNG5 ميجابايتنعم
videoMP4 و3GPP16 ميجابايتنعم
audioAAC وMP4 وMPEG وAMR وOGG/Opus16 ميجابايتلا
documentأي ملف100 ميجابايتنعم، مع filename
stickerWebP بمقاس 512×512100 كيلوبايت (500 للمتحرك)لا

يُفحص الملف المرفوع وفق هذه الحدود عند رفعه، فلا يصل ملف سيرفضه واتساب إلى مرحلة الإرسال أصلًا.

الأزرار والقوائم والروابط#

يجيب العميل عن رسائل interactive بلمسة. يعود اختياره إليك كحدث message.received من نوع interactive يحمل id الذي حددته، فاعتمد عليه في منطقك.

JSON
{
  "to": "+966501234567",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "body": "هل تؤكد موعدك غدًا الساعة 4 عصرًا؟",
    "buttons": [
      { "id": "confirm_10482", "title": "تأكيد" },
      { "id": "reschedule_10482", "title": "تغيير الموعد" }
    ]
  }
}
interactive.typeما يراه العميلالحدود
buttonحتى 3 أزرار ردالعنوان 20 حرفًا، والمعرّف 256
listزر يفتح حتى 10 خيارات موزعة على أقسام10 صفوف إجمالًا، عنوان الصف 24 حرفًا والوصف 72
cta_urlزر واحد يفتح رابطًاالعنوان 20 حرفًا، وhttps:// فقط
location_requestزر لمشاركة موقعهالنص فقط

كل الأنواع تأخذ body، وكلها عدا location_request تقبل footer وheader اختياريين (نصًا، أو في cta_url رابط صورة أو فيديو أو مستند).

الموقع وبطاقات الاتصال والتفاعلات#

  • location: القيمتان latitude وlongitude، واختياريًا name وaddress.
  • contacts: قائمة بطاقات، تحتاج كل منها إلى name.formatted_name، والرقم الذي يحمل wa_id يُظهر زر "مراسلة".
  • reaction: القيمة {"message_id": "imsg_…", "emoji": "👍"} تتفاعل مع رسالة، وemoji الفارغ يزيل التفاعل. التفاعلات مجانية ولا تُحتسب كرسائل.

الردود وإشعارات القراءة والكتابة#

  • أرسل reply_to (معرّف msg_… أو imsg_… أو معرّف واتساب) لتقتبس رسالة العميل في ردك.
  • يُظهر POST /messages/{id}/read للعميل علامتي القراءة الزرقاوين. أضف "typing_indicator": true لتظهر له عبارة "يكتب…" بينما تجهّز الرد (حتى 25 ثانية أو حتى ترد).

ما يحدث بعد الإرسال#

تعود الاستجابة فور قبول واتساب للرسالة بحالة status: accepted، ثم تتوالى الأحداث:

الحدثالمعنى
message.sentأرسلها واتساب
message.deliveredوصلت إلى هاتف العميل
message.readفتحها العميل (إن كان يشارك إشعارات القراءة)
message.failedتعذّر تسليمها، ويوضح error.code سبب واتساب

ضع معرّفك الخاص في reference (رقم طلب أو رقم تذكرة): يعود في الاستجابة وفي كل حدث، فلا تحتاج إلى جدول ربط.

إنستغرام وماسنجر#

النقطة نفسها ترد على إنستغرام وماسنجر: حدّد channel وأرسل to بمعرّف العميل من حقل from في رسالته. تقبل هاتان القناتان النص والصورة والفيديو والصوت والمستند، خلال 24 ساعة من آخر رسالة للعميل فقط، ولا قوالب فيهما: بعد إغلاق النافذة لا يمكنك الكتابة إلا بعد أن يكتب العميل.

JSON
{ "channel": "instagram", "to": "17841400000000000", "type": "text", "text": { "body": "شكرًا لتواصلك! المقاس متوفر ✨" } }

أي رقم يُرسل#

إن لم ترسل from تخرج الرسالة من الرقم الذي راسله العميل آخر مرة، وإلا من رقمك الافتراضي. للاختيار أرسل from بمعرّف رقم من GET /numbers، الذي يوضح أيضًا هل يستطيع كل رقم الإرسال الآن.

نقاط الواجهة

عرض الرسائل المرسلة عبر الواجهة

gethttps://api.saei.automize.sa/v1/messages
  • الصلاحية: messages:read
  • يعمل في وضع الاختبار

الأحدث أولًا. مفاتيح التشغيل تعرض الرسائل المرسلة عبر الواجهة، ومفاتيح الاختبار تعرض رسائل وضع الاختبار (المرسلة والواردة المحاكاة).

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

  • limitintegerاختياري

    عدد العناصر المطلوبة، من 1 إلى 100.

  • cursorstringاختياري

    قيمة next_cursor من الصفحة السابقة.

  • referencestringاختياري

    فقط الرسائل التي أرسلتها بهذا reference.

  • tostringاختياري

    فقط الرسائل المرسلة إلى هذا الرقم (E.164).

حقول الاستجابة200
  • object"list"مطلوب
  • dataarray<Message>مطلوب
    الحقول الفرعية (28)
    • idstringمطلوب

      معرّف فريد. عامله كنص معتم وخزّنه كنص حتى 64 حرفًا.

    • object"message"مطلوب
    • livemodebooleanمطلوب
    • directionstringمطلوب

      outbound للرسائل التي ترسلها، وinbound لرسائل العملاء.

      إحدى القيمoutboundinbound

    • channelstringمطلوب

      إحدى القيمwhatsappinstagrammessenger

    • fromstring | nullاختياري

      المُرسِل، بصيغة E.164 في واتساب.

    • tostring | nullاختياري

      المُستلِم، بصيغة E.164 في واتساب.

    • typestringمطلوب

      نوع محتوى الرسالة.

    • textobjectاختياري
      الحقول الفرعية (1)
      • bodystringاختياري
    • templateobjectاختياري
      الحقول الفرعية (4)
      • namestringاختياري
      • languagestringاختياري
      • variablesobjectاختياري
      • bodystringاختياري
    • imageobjectاختياري

      رسائل الوسائط تحمل link (أو media_id) وcaption وfilename وmime_type عند توفرها.

    • videoobjectاختياري
    • audioobjectاختياري
    • documentobjectاختياري
    • stickerobjectاختياري
    • locationobjectاختياري
    • contactsarrayاختياري
    • interactiveobjectاختياري

      ما أرسلته (type وbody وbuttons…)، أو عند ضغط العميل: reply: {id, title}.

    • reactionobjectاختياري
    • statusstringمطلوب

      accepted ← sent ← delivered ← read، أو failed. رسائل العملاء حالتها received. تصلك تغيّرات الحالة كأحداث ويب هوك.

      إحدى القيمacceptedsentdeliveredreadfailedreceived

    • errorobject | nullاختياري

      سبب فشل التسليم، عندما تكون status هي failed.

      الحقول الفرعية (3)
      • codestring | nullاختياري
      • titlestring | nullاختياري
      • messagestring | nullاختياري
    • referencestring | nullاختياري

      مرجعك الخاص، يُعاد كما أرسلته في طلب الإرسال وفي كل حدث.

    • conversation_idstring | nullاختياري
    • provider_message_idstring | nullاختياري

      معرّف الرسالة لدى واتساب (wamid).

    • contactobject | nullاختياري
      الحقول الفرعية (1)
      • namestring | nullاختياري
    • contextobject | nullاختياري

      في الرد، الرسالة التي يُرَد عليها.

      الحقول الفرعية (1)
      • provider_message_idstringاختياري
    • created_atstring | nullمطلوب
    • updated_atstring | nullاختياري
  • has_morebooleanمطلوب
  • next_cursorstring | nullمطلوب
الأخطاء المحتملة2
جرّبها
curl -X GET https://api.saei.automize.sa/v1/messages \
  -H "Authorization: Bearer $API_KEY"
الاستجابة

صفحة من الرسائل.

{
  "object": "list",
  "data": [
    {
      "id": "msg_48213",
      "object": "message",
      "livemode": false,
      "direction": "outbound",
      "channel": "whatsapp",
      "from": "+966112345678",
      "to": "+966501234567",
      "type": "text",
      "text": {
        "body": "string"
      },
      "template": {
        "name": "string",
        "language": "string",
        "variables": {},
        "body": "string"
      },
      "image": {},
      "video": {},
      "audio": {},
      "document": {},
      "sticker": {},
      "location": {},
      "contacts": [],
      "interactive": {},
      "reaction": {},
      "status": "accepted",
      "error": {
        "code": "string",
        "title": "string",
        "message": "string"
      },
      "reference": "string",
      "conversation_id": "string",
      "provider_message_id": "string",
      "contact": {
        "name": "string"
      },
      "context": {
        "provider_message_id": "string"
      },
      "created_at": "2026-10-01T09:30:00Z",
      "updated_at": "2026-10-01T09:30:00Z"
    }
  ],
  "has_more": false,
  "next_cursor": "string"
}

إرسال رسالة

posthttps://api.saei.automize.sa/v1/messages
  • الصلاحية: messages:send
  • محاكاة في وضع الاختبار
  • يقبل Idempotency-Key

نقطة واحدة لكل أنواع الرسائل: حدّد type وضع المحتوى تحت مفتاح بنفس الاسم: text أو template أو image أو video أو audio أو document أو sticker أو location أو contacts أو interactive (أزرار رد، قوائم، أزرار روابط، طلب موقع) أو reaction.

  • خلال 24 ساعة من آخر رسالة أرسلها العميل يمكنك إرسال أي نوع.
  • خارج هذه النافذة (أو لبدء محادثة) لا يُسلَّم إلا template معتمد. أي نوع آخر يُرجع window_closed.
  • إنستغرام وماسنجر (channel) للردود فقط: نص ووسائط خلال الـ24 ساعة.

تصلك الاستجابة فور قبول القناة للرسالة (status: accepted). أما تحديثات التسليم والقراءة فتصلك كأحداث ويب هوك message.*. مع مفتاح اختبار تكون الرسالة محاكاة ولا تصل إلى واتساب أبدًا.

الترويسات

  • Idempotency-Keystringاختياري

    أي نص فريد (يُفضّل UUID). إعادة الطلب بنفس المفتاح ونفس الجسم تُرجع الاستجابة الأولى بدل التنفيذ مرتين. يُحفظ لمدة 24 ساعة.

جسم الطلب

نوع الرسالة

على هاتف العميلشكل تقريبي
نشاطك التجاريحساب أعمال

ثم تصلك أحداث الويب هوك هذه

  1. أُرسلتmessage.sent
  2. وصلتmessage.delivered
  3. قُرئتmessage.read

رسالة نصية عادية. فقط خلال نافذة الـ24 ساعة بعد آخر رسالة للعميل.

  • channelstringاختياري

    القناة المرسَل عبرها. إنستغرام وماسنجر للردود فقط (نص، صورة، فيديو، صوت، مستند) خلال 24 ساعة من آخر رسالة للعميل، ويكون to حينها معرّف العميل من حقل from في رسالته.

    إحدى القيمwhatsappinstagrammessenger

  • tostringمطلوب

    رقم هاتف العميل بصيغة E.164، مثل +966501234567. في إنستغرام وماسنجر معرّف العميل من رسالته.

  • fromstringاختياري

    أي أرقامك يرسلها: معرّف رقم (num_…) أو الرقم بصيغة E.164. الافتراضي: الرقم الذي راسله العميل آخر مرة، وإلا رقمك الافتراضي.

  • reply_tostringاختياري

    أرسلها ردًّا على هذه الرسالة (معرّف msg_… أو imsg_… أو wamid من واتساب).

  • referencestringاختياري

    معرّفك الخاص لهذه الرسالة (رقم طلب، رقم تذكرة). يُعاد في الاستجابة وفي كل حدث ويب هوك يخصها.

  • type"text"مطلوب
  • textobjectمطلوب
    الحقول الفرعية (2)
    • bodystringمطلوب

      نص الرسالة. حتى 4096 حرفًا، والعربية والرموز التعبيرية مدعومة.

    • preview_urlbooleanاختياري

      اعرض معاينة لأول رابط في النص.

حقول الاستجابة202
  • idstringمطلوب

    معرّف فريد. عامله كنص معتم وخزّنه كنص حتى 64 حرفًا.

  • object"message"مطلوب
  • livemodebooleanمطلوب
  • directionstringمطلوب

    outbound للرسائل التي ترسلها، وinbound لرسائل العملاء.

    إحدى القيمoutboundinbound

  • channelstringمطلوب

    إحدى القيمwhatsappinstagrammessenger

  • fromstring | nullاختياري

    المُرسِل، بصيغة E.164 في واتساب.

  • tostring | nullاختياري

    المُستلِم، بصيغة E.164 في واتساب.

  • typestringمطلوب

    نوع محتوى الرسالة.

  • textobjectاختياري
    الحقول الفرعية (1)
    • bodystringاختياري
  • templateobjectاختياري
    الحقول الفرعية (4)
    • namestringاختياري
    • languagestringاختياري
    • variablesobjectاختياري
    • bodystringاختياري
  • imageobjectاختياري

    رسائل الوسائط تحمل link (أو media_id) وcaption وfilename وmime_type عند توفرها.

  • videoobjectاختياري
  • audioobjectاختياري
  • documentobjectاختياري
  • stickerobjectاختياري
  • locationobjectاختياري
  • contactsarrayاختياري
  • interactiveobjectاختياري

    ما أرسلته (type وbody وbuttons…)، أو عند ضغط العميل: reply: {id, title}.

  • reactionobjectاختياري
  • statusstringمطلوب

    accepted ← sent ← delivered ← read، أو failed. رسائل العملاء حالتها received. تصلك تغيّرات الحالة كأحداث ويب هوك.

    إحدى القيمacceptedsentdeliveredreadfailedreceived

  • errorobject | nullاختياري

    سبب فشل التسليم، عندما تكون status هي failed.

    الحقول الفرعية (3)
    • codestring | nullاختياري
    • titlestring | nullاختياري
    • messagestring | nullاختياري
  • referencestring | nullاختياري

    مرجعك الخاص، يُعاد كما أرسلته في طلب الإرسال وفي كل حدث.

  • conversation_idstring | nullاختياري
  • provider_message_idstring | nullاختياري

    معرّف الرسالة لدى واتساب (wamid).

  • contactobject | nullاختياري
    الحقول الفرعية (1)
    • namestring | nullاختياري
  • contextobject | nullاختياري

    في الرد، الرسالة التي يُرَد عليها.

    الحقول الفرعية (1)
    • provider_message_idstringاختياري
  • created_atstring | nullمطلوب
  • updated_atstring | nullاختياري
الأخطاء المحتملة21
جرّبها
مثال
curl -X POST https://api.saei.automize.sa/v1/messages \
  -H "Authorization: Bearer $API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "to": "+966501234567",
  "type": "text",
  "text": {
    "body": "أهلًا سارة! طلبك جاهز للاستلام 🎉"
  },
  "reference": "order-10482"
}'
الاستجابة

قبلها واتساب (أو المحاكي في وضع الاختبار).

{
  "id": "msg_48213",
  "object": "message",
  "livemode": true,
  "direction": "outbound",
  "channel": "whatsapp",
  "from": "+966112345678",
  "to": "+966501234567",
  "type": "text",
  "text": {
    "body": "أهلًا سارة! طلبك جاهز للاستلام 🎉"
  },
  "status": "accepted",
  "error": null,
  "reference": "order-10482",
  "conversation_id": "conv_311",
  "provider_message_id": "wamid.HBgMOTY2NTAxMjM0NTY3FQIAERgSMEM4",
  "created_at": "2026-10-01T09:30:00Z",
  "updated_at": "2026-10-01T09:30:00Z"
}

جلب رسالة

gethttps://api.saei.automize.sa/v1/messages/{id}
  • الصلاحية: messages:read
  • يعمل في وضع الاختبار

الرسالة وحالتها الحالية. يعمل مع الرسائل التي أرسلتها (msg_…) ورسائل العملاء الواردة في أحداث الويب هوك (imsg_…).

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

  • idstringمطلوب

    معرّف العنصر.

حقول الاستجابة200
  • idstringمطلوب

    معرّف فريد. عامله كنص معتم وخزّنه كنص حتى 64 حرفًا.

  • object"message"مطلوب
  • livemodebooleanمطلوب
  • directionstringمطلوب

    outbound للرسائل التي ترسلها، وinbound لرسائل العملاء.

    إحدى القيمoutboundinbound

  • channelstringمطلوب

    إحدى القيمwhatsappinstagrammessenger

  • fromstring | nullاختياري

    المُرسِل، بصيغة E.164 في واتساب.

  • tostring | nullاختياري

    المُستلِم، بصيغة E.164 في واتساب.

  • typestringمطلوب

    نوع محتوى الرسالة.

  • textobjectاختياري
    الحقول الفرعية (1)
    • bodystringاختياري
  • templateobjectاختياري
    الحقول الفرعية (4)
    • namestringاختياري
    • languagestringاختياري
    • variablesobjectاختياري
    • bodystringاختياري
  • imageobjectاختياري

    رسائل الوسائط تحمل link (أو media_id) وcaption وfilename وmime_type عند توفرها.

  • videoobjectاختياري
  • audioobjectاختياري
  • documentobjectاختياري
  • stickerobjectاختياري
  • locationobjectاختياري
  • contactsarrayاختياري
  • interactiveobjectاختياري

    ما أرسلته (type وbody وbuttons…)، أو عند ضغط العميل: reply: {id, title}.

  • reactionobjectاختياري
  • statusstringمطلوب

    accepted ← sent ← delivered ← read، أو failed. رسائل العملاء حالتها received. تصلك تغيّرات الحالة كأحداث ويب هوك.

    إحدى القيمacceptedsentdeliveredreadfailedreceived

  • errorobject | nullاختياري

    سبب فشل التسليم، عندما تكون status هي failed.

    الحقول الفرعية (3)
    • codestring | nullاختياري
    • titlestring | nullاختياري
    • messagestring | nullاختياري
  • referencestring | nullاختياري

    مرجعك الخاص، يُعاد كما أرسلته في طلب الإرسال وفي كل حدث.

  • conversation_idstring | nullاختياري
  • provider_message_idstring | nullاختياري

    معرّف الرسالة لدى واتساب (wamid).

  • contactobject | nullاختياري
    الحقول الفرعية (1)
    • namestring | nullاختياري
  • contextobject | nullاختياري

    في الرد، الرسالة التي يُرَد عليها.

    الحقول الفرعية (1)
    • provider_message_idstringاختياري
  • created_atstring | nullمطلوب
  • updated_atstring | nullاختياري
الأخطاء المحتملة2
جرّبها
curl -X GET https://api.saei.automize.sa/v1/messages/msg_48213 \
  -H "Authorization: Bearer $API_KEY"
الاستجابة

الرسالة.

{
  "id": "msg_48213",
  "object": "message",
  "livemode": false,
  "direction": "outbound",
  "channel": "whatsapp",
  "from": "+966112345678",
  "to": "+966501234567",
  "type": "text",
  "text": {
    "body": "string"
  },
  "template": {
    "name": "string",
    "language": "string",
    "variables": {},
    "body": "string"
  },
  "image": {},
  "video": {},
  "audio": {},
  "document": {},
  "sticker": {},
  "location": {},
  "contacts": [],
  "interactive": {},
  "reaction": {},
  "status": "accepted",
  "error": {
    "code": "string",
    "title": "string",
    "message": "string"
  },
  "reference": "string",
  "conversation_id": "string",
  "provider_message_id": "string",
  "contact": {
    "name": "string"
  },
  "context": {
    "provider_message_id": "string"
  },
  "created_at": "2026-10-01T09:30:00Z",
  "updated_at": "2026-10-01T09:30:00Z"
}

تعليم رسالة العميل كمقروءة

posthttps://api.saei.automize.sa/v1/messages/{id}/read
  • الصلاحية: messages:send
  • محاكاة في وضع الاختبار

تظهر للعميل علامتا القراءة الزرقاوان على رسالته (وعلى كل ما أرسله قبلها). أضف typing_indicator: true لتظهر له أيضًا عبارة "يكتب…" بينما تجهّز الرد، وتستمر حتى 25 ثانية أو حتى ترد.

تعمل على رسائل واتساب التي استقبلتها (imsg_… من أحداث message.received).

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

  • idstringمطلوب

    معرّف العنصر.

جسم الطلب

  • typing_indicatorbooleanاختياري

    أظهر للعميل أيضًا "يكتب…".

حقول الاستجابة200
  • object"read_receipt"مطلوب
  • message_idstringمطلوب
  • livemodebooleanمطلوب
  • typing_indicatorbooleanاختياري
الأخطاء المحتملة4
جرّبها
curl -X POST https://api.saei.automize.sa/v1/messages/msg_48213/read \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "typing_indicator": true
}'
الاستجابة

يرى العميل الآن رسالته مقروءة.

{
  "object": "read_receipt",
  "message_id": "imsg_88213",
  "livemode": true,
  "typing_indicator": true
}