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

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

    English
    في الصفحة دي

    الردود التلقائية

    إنشاء قاعدة

    POST/v2/numbers/{numberId}/auto-replies
    • الصلاحية:autoreplies:write
    • Idempotency-Key:اختياري
    • بيغيّر إعدادات

    match: ‏EXACT / CONTAINS / STARTS_WITH بتقارن كلمات حرفيًا بعد توحيد الحروف العربي (أ/إ/آ، ى/ي، ة/ه، والتشكيل). REGEX بياخد trigger.patterns: تعبيرات RE2 النمطية (وقت خطّي — مفيش تعليق من التراجع). مقبول "regex" و "starts_with" بحروف صغيرة و trigger.matchType.

    البارامترات

    المسار

    الاسمالنوعالقيودالوصف
    numberIdإجباريالنوعstringالقيود—الوصفرقم الـ id بتاع الرقم (من GET /v2/numbers).

    الهيدرز

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

    الـ Body

    الاسمالنوعالقيودالوصف
    nameإجباريالنوعstringالقيود≤ 120 حرفالوصفاسم القاعدة (حد أقصى 120).
    enabledاختياريالنوعbooleanالقيودالافتراضي trueالوصفfalse بيسيب القاعدة موجودة بس يوقف ردها.
    triggerإجباريالنوعobjectالقيود—الوصفإمتى القاعدة ترد.
    trigger.typeاختياريالنوعstringالقيودواحد من: KEYWORD · FIRST_MESSAGE · AWAYالوصفKEYWORD (الرسالة فيها/هي كلمة معينة) أو FIRST_MESSAGE (ترحيب بمحادثة جديدة) أو AWAY (برا مواعيد العمل).
    trigger.matchاختياريالنوعstringالقيودواحد من: EXACT · CONTAINS · STARTS_WITH · REGEXالوصفEXACT أو CONTAINS أو STARTS_WITH (كلمات حرفية بعد توحيد الحروف العربي: أ/إ/آ ← ا، ى ← ي، ة ← ه، من غير تشكيل) أو REGEX (أنماط RE2 في trigger.patterns). أي حالة حروف مقبولة (regex و starts_with)؛ و trigger.matchType اسم بديل.
    trigger.keywordsاختياريالنوعstring[]القيود≤ 50 عنصرالوصفلحد 50 كلمة لقواعد EXACT / CONTAINS / STARTS_WITH.
    trigger.patternsاختياريالنوعstring[]القيود1–10 عنصرالوصفقواعد REGEX: من 1 لـ 10 أنماط RE2، كل نمط ≤ 200 حرف؛ أي نمط يطابق بيشغّل القاعدة. وقت خطّي — من غير نظر للأمام/للخلف ولا إشارة لمجموعة سابقة. المجموعات بتتحط في الرد كـ {1} و {2} أو {اسم_المجموعة}.
    trigger.regexاختياريالنوعobjectالقيود—الوصفخيارات REGEX.
    trigger.regex.ignoreCaseاختياريالنوعbooleanالقيودالافتراضي trueالوصفتجاهل الحروف الكبيرة والصغيرة (افتراضيًا true).
    trigger.regex.normalizeArabicاختياريالنوعbooleanالقيودالافتراضي trueالوصفالمطابقة على النص بعد توحيد الحروف العربي: أ/إ/آ ← ا، ى ← ي، ة ← ه، من غير تطويل وتشكيل، والأرقام العربي ← 0–9 (افتراضيًا true).
    trigger.regex.allowLinksInCapturesاختياريالنوعbooleanالقيودالافتراضي falseالوصفسيب الروابط في الأجزاء الملتقطة (افتراضيًا false: بتتشال دايمًا عشان محدش يخلّي رقمك يبعت رابط من اختياره).
    scheduleاختياريالنوعobject | nullالقيود—الوصفمواعيد العمل (لقواعد AWAY). null = طول الوقت.
    schedule.timezoneاختياريالنوعstringالقيود—الوصفالمنطقة الزمنية IANA، مثلًا Africa/Cairo أو Asia/Riyadh.
    schedule.daysاختياريالنوعinteger[]القيود—الوصفأيام الشغل، 0 = الأحد … 6 = السبت.
    schedule.startاختياريالنوعstringالقيود—الوصفوقت الفتح HH:mm.
    schedule.endاختياريالنوعstringالقيود—الوصفوقت القفل HH:mm.
    replyإجباريالنوعobjectالقيود—الوصفالرد.
    reply.textاختياريالنوعstringالقيود≤ 4096 حرفالوصفنص الرد؛ {name|بديل} بيحط اسم العميل.
    reply.mediaUrlاختياريالنوعstringالقيود—الوصفملف https:// عام اختياري يتبعت مع الرد.
    reply.mediaTypeاختياريالنوعstringالقيودواحد من: image · video · document · audioالوصفنوع reply.mediaUrl.
    cooldownMinutesاختياريالنوعintegerالقيود≥ 0الوصفماترُدّش على نفس الشخص بنفس القاعدة تاني قبل الدقايق دي.
    priorityاختياريالنوعintegerالقيود—الوصفالترتيب لو أكتر من قاعدة اتطابقت: الرقم الأصغر بيتشاف الأول (الافتراضي 0).

    الطلب

    curl -X POST "https://mursilat.com/api/v2/numbers/cm1abcd2345efgh6789ijkl/auto-replies" \
      -H "Authorization: Bearer $WASLA_API_KEY" \
      -H "Idempotency-Key: order-1042-confirm" \
      -H "Content-Type: application/json" \
      -d '{
      "name": "الأسعار",
      "trigger": {
        "type": "KEYWORD",
        "match": "CONTAINS",
        "keywords": [
          "سعر",
          "بكام",
          "price"
        ]
      },
      "reply": {
        "text": "أهلاً {name|بيك} 👋 الأسعار: https://example.com/prices"
      },
      "cooldownMinutes": 60
    }'
    الطلب — JSON
    {
      "name": "الأسعار",
      "trigger": {
        "type": "KEYWORD",
        "match": "CONTAINS",
        "keywords": [
          "سعر",
          "بكام",
          "price"
        ]
      },
      "reply": {
        "text": "أهلاً {name|بيك} 👋 الأسعار: https://example.com/prices"
      },
      "cooldownMinutes": 60
    }

    الرد

    201مثال

    201 — application/json
    {
      "id": "cm3rule0001xyz",
      "sessionId": "cm1abcd2345efgh6789ijkl",
      "scope": "number",
      "name": "الأسعار",
      "enabled": true,
      "trigger": {
        "type": "KEYWORD",
        "match": "CONTAINS",
        "keywords": [
          "سعر",
          "بكام",
          "price"
        ]
      },
      "schedule": null,
      "reply": {
        "text": "أهلاً {name|بيك} 👋 الأسعار: https://example.com/prices"
      },
      "cooldownMinutes": 60,
      "priority": 0,
      "stats": {
        "triggered": 42,
        "lastTriggeredAt": "2026-10-13T07:40:00.000Z"
      },
      "createdAt": "2026-10-01T09:00:00.000Z",
      "updatedAt": "2026-10-10T09:00:00.000Z"
    }

    شكل الرد

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

    • responseobject13 حقل
      • idstring "cm3rule0001xyz"
      • sessionIdstring "cm1abcd2345efgh6789ijkl"
      • scopestring "number"
      • namestring "الأسعار"
      • enabledboolean true
      • triggerobject3 حقل
        • typestring "KEYWORD"
        • matchstring "CONTAINS"
        • keywordsarray3 عنصر
          • [0]string "سعر"
      • schedulenull null
      • replyobject1 حقل
        • textstring "أهلاً {name|بيك} 👋 الأسعار: https://example.com/prices"
      • cooldownMinutesinteger 60
      • priorityinteger 0
      • statsobject2 حقل
        • triggeredinteger 42
        • lastTriggeredAtstring "2026-10-13T07:40:00.000Z"
      • createdAtstring "2026-10-01T09:00:00.000Z"
      • updatedAtstring "2026-10-10T09:00:00.000Z"

    الأخطاء

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

    الأخطاء →

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

    مثال REGEX: ‏{"name":"حالة الطلب","trigger":{"type":"KEYWORD","match":"regex","patterns":["(?:طلب|order)\s*#?(?<order>\d{4,8})"]},"reply":{"text":"طلبك رقم {order} بيتجهز 👍"}}. المجموعات بتتحط في الرد كـ {1} و {2} أو {اسم_المجموعة} (متنضّفة، أقصى 100 حرف لكل واحدة و 1,024 حرف في المجموع؛ والروابط — مواقع أو دومينات أو wa.me / t.me — بتتشال دايمًا إلا لو regex.allowLinksInCaptures = true).

    الحدود: ≤ 10 أنماط في القاعدة، ≤ 200 حرف لكل نمط، {n} ≤ 100، ≤ 20 مجموعة، ≤ 50 قاعدة REGEX في الحساب. مش مدعوم في RE2: النظر للأمام/للخلف (?=…) (?<=…)، الإشارة لمجموعة سابقة \1، المجموعات الذرّية. الأنماط بالأرقام 0–9 بس، من غير تشكيل ولا تطويل ولا حروف مخفية. regex.ignoreCase و regex.normalizeArabic شغّالين افتراضيًا. الرسائل الأطول من 4,096 حرف مش بتتقارن بقواعد REGEX.

    الترتيب: رقم الأولوية الأصغر الأول، بعدين الكلمات > الترحيب > الغياب؛ وفي نفس الأولوية قواعد REGEX بتتقيّم بعد EXACT / CONTAINS / STARTS_WITH.

    جرّب

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

    مثال موثّق

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

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

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

    بارامترات المسار

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

    ده بيغيّر إعدادات حسابك.

    POST /v2/numbers/{numberId}/auto-replies