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

قائمة العملاء عبر API بالطلب GET /api/v1/contacts

قائمة العملاء عبر API يعيدها الطلب GET /api/v1/contacts: عملاء نشاطك من واتساب وماسنجر وإنستغرام، ومن أضافهم فريقك، الأحدث أولًا، 50 عميلًا في الصفحة. يحتاج الطلب إلى مفتاح بصلاحية contacts.read.

ما الذي يعيده طلب قائمة العملاء؟

رابط القسم «ما الذي يعيده طلب قائمة العملاء؟»

يعيد الطلب صفحة من العملاء في data، مرتّبة من الأحدث ظهورًا إلى الأقدم، ومعها nextCursor للصفحة التالية، أو null إذا كانت هذه آخر صفحة. يقرأ المفتاح عملاء نشاطه فقط.

ما المعاملات التي يقبلها الطلب؟

رابط القسم «ما المعاملات التي يقبلها الطلب؟»

كل المعاملات اختيارية، وأي معامل غيرها يعود بالخطأ 400:

المعاملالنوعالافتراضيمعناه
limitعدد صحيح50عدد العملاء في الصفحة، حتى 100
cursorنصnextCursor من الصفحة السابقة. انظر التقسيم إلى صفحات
sinceلحظة بصيغة ISOالعملاء الذين ظهروا أول مرة في هذه اللحظة أو بعدها

يحتاج since إلى تاريخ ووقت معًا، بحرف Z أو بفرق توقيت، مثل 2026-10-01T00:00:00Z. التاريخ وحده يُرفض. وإذا كتبت فرق توقيت بعلامة + في الرابط بنفسك فاكتبها %2B، لأن + في الرابط تُقرأ مسافة.

نافذة طرفيّة
curl "https://api.mujib.ai/api/v1/contacts?limit=50&since=2026-10-01T00:00:00Z" \
-H "Authorization: Bearer $MUJIB_API_KEY"
const url = new URL('https://api.mujib.ai/api/v1/contacts');
url.searchParams.set('limit', '50');
url.searchParams.set('since', '2026-10-01T00:00:00Z');
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.MUJIB_API_KEY}` },
});
const body = await res.json();
if (!res.ok) throw new Error(`${res.status} ${body.error.code}: ${body.error.message}`);
console.log(body.data.length, body.nextCursor);
import os
import requests
res = requests.get(
"https://api.mujib.ai/api/v1/contacts",
params={"limit": 50, "since": "2026-10-01T00:00:00Z"},
headers={"Authorization": f"Bearer {os.environ['MUJIB_API_KEY']}"},
timeout=30,
)
body = res.json()
if not res.ok:
raise RuntimeError(f"{res.status_code} {body['error']['code']}: {body['error']['message']}")
print(len(body["data"]), body["nextCursor"])

لقراءة كل الصفحات حتى النهاية، استخدم الدالة في التقسيم إلى صفحات.

رد ناجح بالرمز 200. البيانات هنا مثال مختلَق:

{
"data": [
{
"id": "5d8f2a61-0c4e-4b7a-9f13-6e2b8c0d4a57",
"name": "سارة",
"phone": "962790000000",
"channel": "whatsapp",
"stage": "qualified",
"tags": ["استشارة"],
"createdAt": "2026-11-02T09:14:37.205Z",
"lastActiveAt": "2026-11-03T16:40:02.918Z"
},
{
"id": "9b1e3c74-2a5d-4f08-8e6b-1c7d0a3f5e92",
"name": null,
"phone": null,
"channel": "instagram",
"stage": "new",
"tags": [],
"createdAt": "2026-10-28T14:05:12.481Z",
"lastActiveAt": "2026-10-28T14:07:55.030Z"
}
],
"nextCursor": "MjAyNi0xMC0yOFQxNDowNToxMi40ODFafDliMWUzYzc0LTJhNWQtNGYwOC04ZTZiLTFjN2QwYTNmNWU5Mg"
}

كل عميل فيه هذه الحقول دائمًا، والحقل الذي لا قيمة له يأتي null ولا يُحذف:

الحقلالنوعمعناه
idنصمعرّف العميل الثابت، تستخدمه في قراءة عميل واحد
nameنص أو nullاسم العميل، أو null إذا لم يُعرف
phoneنص أو nullالرقم كما هو محفوظ، وغالبًا بالصيغة الدولية دون + مثل 962790000000، أو null إذا لم يُعرف
channelنصمن أين جاء العميل (انظر الجدول التالي)
stageنصمرحلة العميل (انظر الجدول التالي)
tagsقائمة نصوصوسوم العميل، وقائمة فارغة إذا لم تكن له وسوم
createdAtلحظة UTCأول مرة ظهر فيها العميل
lastActiveAtلحظة UTCآخر نشاط للعميل

قيم channel:

القيمةمعناها
whatsappراسلك على واتساب
facebookراسلك على ماسنجر
instagramراسلك على إنستغرام
manualأضافه فريقك من لوحة التحكم
importاستُورد من ملف

قيم stage، وما يقابلها في لوحة التحكم:

القيمةفي لوحة التحكم
new«جديد»
engaged«متفاعل»
qualified«مؤهّل»
won«كسب»
lost«خسارة»
HTTPcodeالسبب
400VALIDATION_ERRORمعامل غير معروف، أو limit خارج المسموح، أو since ليس لحظة صحيحة، أو مؤشر لا يُقرأ
401UNAUTHORIZEDلا مفتاح، أو مفتاح غير صالح
403FORBIDDENالمفتاح لا يحمل contacts.read
429RATE_LIMITEDتجاوزت حدود الطلبات
500INTERNALخطأ غير متوقع في الخادم

التفاصيل وما تفعله عند كل خطأ في الأخطاء وحدود الطلبات.

الأسئلة الشائعة

هل تشمل القائمة العملاء من ماسنجر وإنستغرام؟

نعم. تشمل عملاء واتساب وماسنجر وإنستغرام، ومن أضافهم فريقك يدويًا، ومن استوردتهم من ملف. الحقل channel يقول من أين جاء كل عميل.

لماذا يأتي phone فارغًا لبعض العملاء؟

لأن مُجيب لا يأخذ رقم هاتف مع رسائل ماسنجر وإنستغرام. يظهر الرقم إذا ذكره العميل في المحادثة أو أضافه فريقك.

هل أستطيع البحث باسم أو رقم؟

لا. القائمة تقبل limit وcursor وsince فقط، وأي معامل آخر يعود بالخطأ 400.

هل تخرج ملاحظات فريقي عن العميل؟

لا. ملاحظات الفريق والحقول المخصّصة وما يتذكّره الوكيل لا تخرج من الواجهة.