إرسال رسالة واتساب
يُرسل رسالة نصية حرة إلى مستلم واتساب. النص الحر مقيّد بـنافذة خدمة العملاء (24 ساعة) من ميتا — يجب أن يكون العميل قد راسل الوكيل خلال آخر 24 ساعة. للإرسال خارج النافذة، استخدم إرسال قالب بدلاً من ذلك.
أي نقطة أستدعي؟
POST إلى /v1/whatsapp/messages عبر HTTPS. النقطة تتطلّب نطاق whatsapp:send على مفتاح API الخاص بك — راجع التوثيق لمعرفة كيف تعمل النطاقات.
POST /v1/whatsapp/messages
كيف يبدو الطلب؟
curl -X POST https://api.mojeeb.app/v1/whatsapp/messages \
-H "Authorization: Bearer mk_live_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: reply-to-ticket-9001" \
-d '{
"agent_id": "12345678-1234-1234-1234-123456789012",
"from": "+15557654321",
"to": "+15551234567",
"text": { "body": "شكراً لتواصلك! كيف يمكنني المساعدة؟" }
}'
ماذا يُوضع في جسم الطلب؟
أربعة حقول مطلوبة. الوكيل وfrom معاً يُحدّدان رقم واتساب الذي ترسل منه؛ to وtext.body يحملان الوجهة والرسالة نفسها.
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
agent_id | UUID | نعم | الوكيل المُرسِل. يجب أن يكون مُصرَّحاً لمفتاح API. |
from | نص E.164 | نعم | رقم عمل واتساب المُرسِل. يجب مطابقة اتصال واتساب نشط على الوكيل. |
to | نص E.164 | نعم | هاتف المستلم، مثل +15551234567. |
text.body | نص | نعم | جسم الرسالة، 1–4096 حرفاً. |
ما الرؤوس الاختيارية التي يمكنني إرسالها؟
اثنان يستحقّان المعرفة — كلاهما يُحسّن الموثوقية وقابلية التتبّع دون تغيير ما يُرسَل.
| الرأس | الغرض |
|---|---|
Idempotency-Key | اجعل الإعادات آمنة. راجع الإعادة الآمنة. |
X-Correlation-ID | معرّف تتبّع مخصّص نحترمه ونُعيده في الاستجابة. |
كيف تبدو استجابة النجاح؟
HTTP 202 Accepted:
{
"id": "1fc4912f-efa3-4865-9424-da85f8f318a4",
"status": "queued",
"agent_id": "12345678-1234-1234-1234-123456789012",
"to": "+15551234567",
"type": "text",
"platform_message_id": null,
"created_at": "2026-04-30T08:24:38Z",
"sent_at": null,
"failed_at": null
}
الـ202 يعني أن الرسالة في طابور التسليم. استخدم id المُعاد مع استعلام حالة الرسالة لتتبّع التسليم.
ماذا قد يفشل؟
يُعاد ظرف الخطأ القياسي مع أحد الرموز أدناه. تفرّع على code (ثابت) — لا تفرّع أبداً على message (قد يُعاد صياغته). الكتالوج الكامل في صفحة الأخطاء.
code | HTTP | متى |
|---|---|---|
invalid_request_body | 422 | حقل مطلوب مفقود — param يُسمي أيهما |
invalid_phone_number | 422 | to ليس E.164 صالحاً |
invalid_from_phone | 422 | from ليس E.164 صالحاً |
from_phone_not_found_for_agent | 422 | from لا يطابق أي اتصال واتساب نشط — available_phones يُدرج ما يعمل |
agent_not_authorized | 403 | مفتاح API غير مسموح له باستخدام هذا الوكيل |
insufficient_scope | 403 | مفتاح API يفتقر whatsapp:send |
rate_limit_exceeded | 429 | ميزانية المفتاح تم بلوغها — راجع حدود المعدّل |
ماذا عن نافذة الـ24 ساعة؟
قواعد WhatsApp Business تتطلّب إرسال النص الحر داخل نافذة خدمة العملاء (24 ساعة) — يجب أن يكون العميل قد راسل الوكيل خلال آخر 24 ساعة. خارج هذه النافذة، ميتا ترفض التسليم حتى لو قبل مجيب الطلب وأعاد 202.
إن أرسلت نصاً حراً خارج النافذة، الاستجابة الفورية لا تزال 202 (نقبل ونضع في الطابور)، لكن الرسالة ستنتقل إلى status: "failed" مع failed_at معبّأ بمجرد رفض ميتا للتسليم. استعلم عن حالة الرسالة لرؤية ذلك يحدث.
للإرسال خارج النافذة، استخدم قالباً معتمداً مسبقاً بدلاً من ذلك — القوالب يمكن إرسالها في أي وقت.
أسئلة شائعة
هل يمكنني إرسال وسائط (صور، صوت، مستندات)؟
ليس في v1 من الواجهة العامة. دعم الوسائط محجوز كتغيير إضافي. استخدم لوحة التحكم لإرسال الوسائط في الوقت الحالي.
ما الحد الأقصى لطول الجسم؟
4096 حرفاً. هذا يُطابق حد واتساب نفسه. الأجسام الأطول تُرفَض بـinvalid_request_body.
هل تتحقّق الواجهة مما إذا كان المستلم داخل نافذة الـ24 ساعة؟
لا — ميتا تُطبّق النافذة، وليس نحن. الواجهة تقبل طلبك وتضع الإرسال في الطابور؛ إن رفضت ميتا التسليم، سترى status: "failed" على استعلام حالة الرسالة.
هل يمكن لنفس الرقم الإرسال إلى نفسه؟
لا يمكنك الإرسال إلى رقم عملك الخاص — ميتا ترفض هذا على مستوى المنصة. الإرسال يُعيد 202 منّا لكن failed على استعلام الحالة.
لماذا تقول رسالتي to: "" على استعلام الحالة؟
حالياً استجابة الحالة لا تُعيد هاتف المستلم. الـto الأصلي الذي أرسلته محفوظ داخلياً؛ هذه فجوة معروفة ستُسَدّ في إصدار مستقبلي دون كسر عقد v1.