حالة الرسالة

حالة الرسالة

المتابعة، الإلغاء، وقرار الرسائل unknown.

متابعة الرسالة

GET /messages/{message_id}

HTTP 200
{
  "success": true,
  "message": {
    "message_id": "msg_…",
    "status": "sent",
    "to": "9665xxxxxxxx",
    "type": "text",
    "client_reference": "order-123",
    "provider_message_id": "…",
    "last_error_code": null,
    "created_at": "…",
    "updated_at": "…"
  },
  "request_id": "…"
}
queuedفي الطابور بانتظار الإرسال — يمكن إلغاؤها.
sendingجاري تسليمها لواتساب.
sentقبلها واتساب وأعطاها provider_message_id.
failedفشل الإرسال — السبب في last_error_code (WORKER_DIED: تعطل الإرسال عندنا مرتين لنفس الرسالة).
blockedلم تُرسل لأن الجلسة غير متصلة أو لأن واتساب يقيّد الحساب مؤقتاً — السبب في last_error_code.
cancelledألغيتها قبل الإرسال.
unknownانقطع الاتصال أثناء التسليم ولا نعرف هل وصلت أم لا — تحتاج قراراً منك (قسم حالة الرسالة). last_error_code: TIMEOUT أو WORKER_DIED.

حالة الرسالة تنتهي عند sent. الوصول للجهاز والقراءة يصلان عبر حدث message.ack في Webhook: ack = 1 خادم، 2 وصلت للجهاز، 3 قُرئت، 4 شُغّلت (صوت/فيديو).

إلغاء رسالة

POST /messages/{message_id}/cancel

HTTP 200 { "success": true, "message_id": "msg_…", "status": "cancelled" }
HTTP 409 { "code": "CANNOT_CANCEL", … }

متاح فقط والرسالة queued ولم يبدأ إرسالها؛ غير ذلك يرجع 409 CANNOT_CANCEL. رصيد التجربة يُعاد عند الإلغاء.

قرار الرسائل unknown

POST /messages/{message_id}/unknown-decision

{ "decision": "sent" }      // treat as sent
{ "decision": "failed" }    // treat as failed
{ "decision": "resend", "confirm_duplicate": true }

HTTP 202 (resend)
{ "success": true, "decision": "resend", "new_message_id": "msg_…", "status": "queued" }

تحقق من المحادثة على الجوال ثم اختر: sent أو failed لإغلاق الرسالة، أو resend لإرسال نسخة جديدة. resend يتطلب confirm_duplicate = true لأن الأصل ربما وصل فعلاً، ويُنشئ message_id جديداً. يمكنك الاشتراك في حدث message.unknown لتعرف بها فوراً.