انتقل للمحتوى

    عربي أو إنجليزي · ↑↓ للتنقل · Enter للفتح · Esc للقفل

    English
    في الصفحة دي

    الرسايل

    جدولة رسالة

    POST/v2/messages
    • الصلاحية:messages:send
    • Idempotency-Key:إجباري
    • متاحة عند الطلب
    • بيبعت رسايل

    متاحة عند الطلب

    الجدولة متاحة عند الطلب ومقفولة افتراضيًا: لحد ما تتفعّل لك، أي طلب فيه scheduleAt بيرد 422 SCHEDULING_DISABLED. الرسالة المجدولة هي المحتوى الوحيد اللي مرسلات بتحتفظ بيه (متشفّر، 30 يوم بالكتير)، عشان كده بتفضل مقفولة إلا لو طلبت من الدعم تفعيلها. الإرسال دلوقتي (من غير scheduleAt) شغال دايمًا.

    متاحة عند الطلب: الجدولة مقفولة افتراضيًا (422 SCHEDULING_DISABLED) لأن الرسالة المجدولة هي المحتوى الوحيد اللي مرسلات بتحتفظ بيه — مشفّر، 30 يوم بحد أقصى، وبيتمسح أول ما تتبعت. اطلب تفعيلها من الدعم. الغيها بـ DELETE /v2/messages/{id}.

    البارامترات

    الهيدرز

    الاسمالنوعالقيودالوصف
    Idempotency-Keyإجباريالنوعstringالقيود≤ 191 حرفالوصفid فريد من عندك للعملية دي (حد أقصى 191 حرف ASCII). لو كررت بنفس المفتاح ونفس الـ body بيرجعلك أول رد ومعاه Idempotent-Replayed: true — عمرها ما تتنفذ مرتين. بيتحفظ 24 ساعة.
    X-Request-Idاختياريالنوعstringالقيود—الوصفاختياري: id الطلب بتاعك وبيرجعلك (غير كده بنعمل req_…). اديه للدعم لو احتجت.

    الـ Body

    الاسمالنوعالقيودالوصف
    numberIdإجباريالنوعstringالقيود—الوصفالرقم اللي هتشتغل عليه (الـ id من GET /v2/numbers). المفتاح المقصور على أرقام معينة يستخدمها هي بس.
    toإجباريالنوعstringالقيود—الوصفالمستلم: رقم دولي أرقام بس من غير + أو أصفار في الأول (مثلًا 201001234567 أو 966501234567).
    typeإجباريالنوعstringالقيود—الوصفنوع الرسالة: text و image و video و audio و voice و document و sticker و location و contact و poll و event و buttons و list و cta_url. كل نوع له حقوله — شوف الجدول تحت.
    textاختياريالنوعstringالقيود—الوصفنص الرسالة. تنسيق واتساب بيعدّي زي ما هو (*عريض* و _مائل_ و ~مشطوب~).
    referenceاختياريالنوعstringالقيود≤ 128 حرفالوصفالـ id بتاعك (رقم أوردر، تذكرة…). بيرجعلك في ويب هوك message.status و interactive.reply وتقدر تفلتر بيه في GET /v2/messages.
    scheduleAtاختياريالنوعstring (date-time)القيود—الوصفوقت ISO 8601 بعد دقيقة لحد 30 يوم. متاح عند الطلب (غير كده 422 SCHEDULING_DISABLED).

    أنواع الرسايل

    typeالحقولملاحظات
    textالحقولtext (1–4096), linkPreviewملاحظاتتنسيق واتساب بيعدّي. معاينة أول رابط https بتتعمل بأمان لو ينفع.
    imageالحقولmedia, caption ≤ 1024, viewOnceملاحظاتJPEG · PNG · WebP، حد أقصى 5 ميجا.
    videoالحقولmedia, caption, viewOnce, gif, videoNoteملاحظاتMP4 · 3GPP، حد أقصى 16 ميجا. videoNote: دائري، ≤ 60 ثانية، من غير تعليق.
    audioالحقولmediaملاحظاتOGG · MP3 · M4A · AAC · AMR، حد أقصى 16 ميجا. بيظهر كملف صوت.
    voiceالحقولmedia, viewOnceملاحظاتبيظهر كرسالة صوتية (OGG/Opus بيحافظ على شكل الموجة).
    documentالحقولmedia, fileName ≤ 120, captionملاحظاتأي ملف ماعدا البرامج، حد أقصى 100 ميجا.
    stickerالحقولmediaملاحظاتWebP لحد 500 كيلو زي ما هو؛ PNG / JPG / GIF لحد 5 ميجا بيتحولوا.
    locationالحقولlatitude, longitude, name ≤ 100, address ≤ 200ملاحظاتموقع ثابت (الموقع المباشر مش ممكن من رقم مربوط).
    contactالحقولcontacts[] 1–5: name, phones[] 1–3, email, organizationملاحظاتالـ vCard بيتعمل على السيرفر.
    pollالحقولname ≤ 255, options[] 2–12, selectableCountملاحظاتالأصوات بتوصل كويب هوك poll.vote.
    eventالحقولname, startAt, endAt, description, locationNameملاحظاتتجريبي: بعض الموبايلات بتعرض الحدث في المحادثات الفردية كرسالة مش مدعومة.
    buttonsالحقولbody.text, buttons[] 1–3, header, footer, fallbackملاحظاتالبديل بالأرقام افتراضيًا؛ والردود بتوصل كـ interactive.reply.
    listالحقولbody.text, list.buttonText, list.sections[] (≤ 10 rows)ملاحظاتزرار قائمة بيفتح الاختيارات.
    cta_urlالحقولbody.text, cta.title ≤ 20, cta.urlملاحظاتزرار رابط واحد؛ قواعد الروابط بتتطبق على الرابط.

    الطلب

    curl -X POST "https://mursilat.com/api/v2/messages" \
      -H "Authorization: Bearer $WASLA_API_KEY" \
      -H "Idempotency-Key: order-1042-confirm" \
      -H "Content-Type: application/json" \
      -d '{
      "numberId": "cm1abcd2345efgh6789ijkl",
      "to": "201001234567",
      "type": "text",
      "text": "تذكير بموعدك بكرة الساعة 5",
      "scheduleAt": "2026-10-14T13:00:00+02:00"
    }'
    الطلب — JSON
    {
      "numberId": "cm1abcd2345efgh6789ijkl",
      "to": "201001234567",
      "type": "text",
      "text": "تذكير بموعدك بكرة الساعة 5",
      "scheduleAt": "2026-10-14T13:00:00+02:00"
    }

    الرد

    200مثال

    200 — application/json
    {
      "id": "3EB0A1B2C3D4E5F60718",
      "numberId": "cm1abcd2345efgh6789ijkl",
      "status": "scheduled",
      "type": "text",
      "reference": "order-1042",
      "scheduledAt": "2026-10-14T11:00:00.000Z",
      "interactionId": null,
      "format": null,
      "fallbackIncluded": null,
      "estimatedDelayMs": null
    }

    شكل الرد

    حقول الرد في المثال. افتح الكائنات والقوايم.

    • responseobject10 حقل
      • idstring "3EB0A1B2C3D4E5F60718"
      • numberIdstring "cm1abcd2345efgh6789ijkl"
      • statusstring "scheduled"
      • typestring "text"
      • referencestring "order-1042"
      • scheduledAtstring "2026-10-14T11:00:00.000Z"
      • interactionIdnull null
      • formatnull null
      • fallbackIncludednull null
      • estimatedDelayMsnull null

    الأخطاء

    غير أخطاء المصادقة وحدود الطلبات والتحقق اللي ممكن ترجع من أي endpoint:

    الأخطاء →

    حماية الرقم والسلوك

    وقت الإرسال حماية الرقم بتتطبق عادي. الرفض اللي ممكن يتكرر (فاصل، حد، ساعات هدوء، رقم واقف أو مفصول) بيتأجل لحد 24 ساعة؛ والباقي بيفشل وبيوصلك ويب هوك message.status: failed.

    جرّب

    ابعت الطلب ده من متصفحك لـ API مرسلات.

    مثال موثّق

    معاينة — النسخة دي من التوثيق مش على mursilat.com، فالكونسول بيعرض المثال الموثّق بدل ما يكلم الـ API.

    الطلبات الحقيقية بتستخدم رقمك وباقتك الحقيقيين: ممكن تبعت رسايل واتساب وتصرف من رصيدك وتمسح بيانات. (بيبعت رسايل)

    متخزن في ذاكرة التبويب ده بس: عمره ما بيتحفظ ولا بيتحط في الرابط، وبيتبعت لـ mursilat.com بس. لو عملت reload بيتنسي.

    تبعت الطلب ده بجد؟

    ده هيبعت رسالة واتساب حقيقية (أو حملة / كود) من رقمك وهيصرف من رصيد باقتك.

    POST /v2/messages