واجهة التقارير

واجهة بصلاحيات محددة تسحب بها بيانات مكتبك من إيفا كور إلى Power BI أو Excel أو نظام ERP. كل مفتاح يخص مكتبًا واحدًا ولا يقرأ إلا بياناته، وفي حدود الصلاحيات التي اختارها المالك.

١. أنشئ مفتاحًا

مالك المكتب فقط ينشئ المفاتيح: «الربط والتكاملات» ← «واجهة التقارير» ← «مفتاح جديد». اختر اسمًا والصلاحيات ومدة الانتهاء. يظهر المفتاح (يبدأ بـ evak_) مرة واحدة، احفظه ككلمة مرور. يمكن إلغاؤه في أي وقت فيتوقف فورًا.

الصلاحيةالصلاحيةالروابط
readقراءة جميع الموارد (بما فيها الرسائل)/api/v1/leads, /api/v1/deals, /api/v1/properties, /api/v1/projects, /api/v1/units, /api/v1/reservations, /api/v1/activities, /api/v1/tasks, /api/v1/agents, /api/v1/teams, /api/v1/conversations, /api/v1/messages
leads:writeإنشاء وتعديل العملاء وإسنادهم/api/v1/leads
properties:writeإنشاء وتعديل العقارات وحالتها/api/v1/properties
leads:readالعملاء/api/v1/leads
deals:readالصفقات/api/v1/deals
properties:readالعقارات/api/v1/properties
projects:readالمشاريع والوحدات والحجوزات/api/v1/projects, /api/v1/units, /api/v1/reservations
activities:readالنشاطات والمهام/api/v1/activities, /api/v1/tasks
agents:readالموظفون والفرق/api/v1/agents, /api/v1/teams
conversations:readالمحادثات (بيانات وصفية فقط)/api/v1/conversations
messages:readنصوص الرسائل/api/v1/messages

٢. أرسل المفتاح

في ترويسة Authorization، بإحدى طريقتين. لا تضع المفتاح في الرابط أبدًا.

curl -H "Authorization: Bearer evak_YOUR_KEY" \
  "https://app.evacore.io/api/v1/leads?limit=100"

# Basic auth. Any user name, the key as the password (what Power BI uses):
curl -u "api:evak_YOUR_KEY" "https://app.evacore.io/api/v1/deals?updated_since=2026-10-01T00:00:00Z"

# CSV for Excel / Power BI. Every matching row in one response:
curl -u "api:evak_YOUR_KEY" "https://app.evacore.io/api/v1/properties?format=csv&fields=title,city,price,status" -o properties.csv

٣. شكل الرد

JSON بترميز UTF-8 والنص العربي كما هو. الأوقات بتوقيت UTC بصيغة ISO 8601، والمبالغ بالريال نصوصًا بخانتين عشريتين ("1500000.00") حتى لا تفقد دقتها. الحقل الفارغ null.

{
  "object": "list",
  "resource": "leads",
  "data": [
    {
      "id": "0e7b6a52-3c55-4a8e-b0a4-7c4d1f2e9a31",
      "name": "محمد العتيبي",
      "phone": "+966501234567",
      "status": "جديد",
      "budget": "1500000.00",
      "created_at": "2026-10-01T09:15:01.902Z",
      "updated_at": "2026-10-03T12:40:22.118Z"
    }
  ],
  "has_more": true,
  "next_cursor": "WyIyMDI2LTEwLTAzVDEyOjQwOjIyLjExODQ1MVoiLCIwZTdi…",
  "next": "/api/v1/leads?limit=100&cursor=WyIyMDI2…"
}

الصفحة فيها 100 سجل افتراضيًا وحتى 1000 بـ limit. اختر الحقول بـ fields (مفصولة بفواصل؛ id يأتي دائمًا). format=csv يرجع كل السجلات في رد واحد بأسماء الحقول في السطر الأول.

٤. المزامنة التدريجية

  1. السجلات مرتبة من الأقدم تغييرًا إلى الأحدث. اطلب الصفحة الأولى، ثم مرّر next_cursor في cursor حتى يصبح has_more = false.
  2. احفظ آخر next_cursor. في المزامنة التالية أرسله فيصلك فقط ما أُنشئ أو تغيّر بعده، كل سجل يعود كاملًا، فحدّثه عندك بالـ id.
  3. أو استخدم updated_since بوقت آخر مزامنة ناقص 5 دقائق (لتغطية العمليات التي تُحفظ متأخرة) وحدّث بالـ id.
  4. السجلات المحذوفة لا تظهر في المزامنة التدريجية: أعد السحب الكامل دوريًا (أسبوعيًا مثلًا).

٥. الربط مع Power BI

  1. Power BI Desktop ← Get data ← Web.
  2. الصق رابط الجدول بصيغة CSV، مثل: https://app.evacore.io/api/v1/leads?format=csv
  3. في نافذة الدخول اختر Basic: اسم المستخدم أي كلمة (مثل api)، وكلمة المرور هي المفتاح. اختر المستوى https://app.evacore.io ليُستخدم المفتاح لكل الجداول.
  4. إن ظهر العربي برموز غريبة: في المعاينة اختر File origin = 65001: Unicode (UTF-8).
  5. كرر «Web» لكل جدول تحتاجه (deals، properties، projects، units، reservations، activities، tasks، agents، teams) واربطها بالحقول *_id.
  6. بعد النشر في Power BI Service: Settings ← Data source credentials ← Basic بالمفتاح نفسه، ثم فعّل Scheduled refresh.

Excel يعمل بالطريقة نفسها: Data ← From Web ← الرابط نفسه ← Basic.

الكتابة وإعادة المحاولة

استخدم POST /api/v1/leads أو POST /api/v1/properties للإنشاء، وPATCH على الرابط نفسه مع /{id} للتعديل. تتطلب العملية leads:write أو properties:write؛ صلاحية read لا تسمح بالكتابة. يمكن تعديل حالة العميل وإسناده لموظف المبيعات في المكتب نفسه، أو تعديل العقار وحالته. راجع وصف OpenAPI للحقول والقيم المسموحة.

أرسل JSON مع Idempotency-Key فريد لكل عملية (من 1 إلى 128 حرفاً مرئياً). إعادة الطلب نفسه بالمفتاح نفسه تعيد الاستجابة الأصلية دون تكرار التعديل. تغيير محتوى الطلب أو مساره يعيد 409. عند 503 أعد المحاولة بالمفتاح نفسه. تغيير حالة عقار مرتبط بوحدة مشروع يتم من مسار الحجوزات، والإسناد المشترك النشط يُحسم من المكتب أولاً.

يعرض المالك عدد الطلبات لكل مفتاح ولكل يوم خلال آخر 30 يوماً بتوقيت الرياض، من صفحة مفاتيح الواجهة. تُحسب محاولات القراءة والكتابة وإعادة الطلب والرفض مرة واحدة لكل طلب موثّق. يشترك الجميع في حد 120 في الدقيقة؛ CSV يستهلك 10 من الحد ويُحسب طلباً واحداً.

٦. الحدود والأخطاء

الرمزالمعنى
400معامل غير صحيح (حقل غير معروف، تاريخ، cursor، limit).
401المفتاح مفقود أو غير معروف أو ملغى أو منتهٍ.
403المفتاح لا يملك صلاحية هذا الجدول.
404جدول غير معروف.
429تجاوزت 120 طلبًا في الدقيقة لهذا المفتاح (تصدير CSV يُحسب 10). انتظر عدد الثواني في Retry-After.

كل خطأ بالشكل: { "error": { "code": "…", "message": "…" } }. الكتابة تتطلب صلاحية مستقلة ومفتاح Idempotency-Key.

٧. الجداول وحقولها

المواصفة الكاملة بصيغة OpenAPI 3.1: https://app.evacore.io/api/v1/openapi.json

GET /api/v1/leads

عملاء المكتب من كل القنوات. الصلاحية: leads:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idمعرّف (UUID)رقم العميل.
nameنصالاسم.
phoneنصرقم الجوال.
emailنصالبريد الإلكتروني.
statusنصالحالة كما تظهر في اللوحة.
sourceنصمصدر العميل.
channelنصقناة المحادثة.
intentنصالغرض: شراء أو إيجار.
scoreنصتقييم العميل.
property_typeنصنوع العقار المطلوب.
cityنصالمدينة.
districtنصالحي.
budgetمبلغ بالريال (نص بخانتين)الميزانية بالريال.
budget_minمبلغ بالريال (نص بخانتين)أقل ميزانية بالريال.
budget_maxمبلغ بالريال (نص بخانتين)أعلى ميزانية بالريال.
bedroomsعدد صحيحعدد الغرف.
timelineنصالإطار الزمني.
financingنصالتمويل.
tagsقائمة نصوصالوسوم.
agent_idنصالموظف المسؤول.
team_idمعرّف (UUID)الفريق.
project_idمعرّف (UUID)المشروع.
merged_into_lead_idمعرّف (UUID)إن دُمج في عميل آخر.
opted_outصح/خطأطلب عدم التواصل.
follow_up_atتاريخ ووقت UTC ‏(ISO 8601)موعد المتابعة القادم.
first_contact_atتاريخ ووقت UTC ‏(ISO 8601)وقت أول تواصل.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.

GET /api/v1/deals

الصفقات على العملاء. الصلاحية: deals:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idمعرّف (UUID)رقم الصفقة.
lead_idمعرّف (UUID)العميل.
kindنصنوع الصفقة.
titleنصالعنوان.
stageنصالمرحلة.
valueمبلغ بالريال (نص بخانتين)القيمة بالريال.
property_idمعرّف (UUID)العقار.
unit_idمعرّف (UUID)الوحدة.
agent_idنصالموظف.
expected_close_dateتاريخ (YYYY-MM-DD)تاريخ الإغلاق المتوقع.
won_atتاريخ ووقت UTC ‏(ISO 8601)وقت الكسب.
lost_atتاريخ ووقت UTC ‏(ISO 8601)وقت الخسارة.
lost_reasonنصسبب الخسارة.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.

GET /api/v1/properties

عقارات المكتب. الصلاحية: properties:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idمعرّف (UUID)رقم العقار.
titleنصالعنوان.
descriptionنصالوصف.
typeنصالنوع.
purposeنصالغرض.
statusنصالحالة.
cityنصالمدينة.
districtنصالحي.
priceمبلغ بالريال (نص بخانتين)السعر بالريال.
rent_monthlyمبلغ بالريال (نص بخانتين)الإيجار الشهري بالريال.
area_m2رقمالمساحة م².
built_up_area_m2رقممساحة البناء م².
bedroomsعدد صحيحالغرف.
bathroomsعدد صحيحدورات المياه.
age_yearsعدد صحيحعمر العقار.
project_idمعرّف (UUID)المشروع.
agent_idsقائمة نصوصالموظفون.
ad_license_numberنصرقم ترخيص الإعلان.
external_sourceنصمصدر الاستيراد.
external_refنصالرقم في المصدر.
public_linkنصالرابط العام.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.

GET /api/v1/projects

المشاريع. الصلاحية: projects:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idمعرّف (UUID)رقم المشروع.
nameنصالاسم.
developerنصالمطوّر.
cityنصالمدينة.
districtنصالحي.
statusنصالحالة.
delivery_dateتاريخ (YYYY-MM-DD)تاريخ التسليم.
wafi_numberنصترخيص وافي.
price_minمبلغ بالريال (نص بخانتين)أقل سعر بالريال.
price_maxمبلغ بالريال (نص بخانتين)أعلى سعر بالريال.
descriptionنصالوصف.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.

GET /api/v1/units

وحدات المشاريع. الصلاحية: projects:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idمعرّف (UUID)رقم الوحدة.
project_idمعرّف (UUID)المشروع.
property_idمعرّف (UUID)العقار المرتبط.
codeنصرمز الوحدة.
buildingنصالمبنى.
floorعدد صحيحالدور.
modelنصالنموذج.
area_m2رقمالمساحة م².
built_up_area_m2رقممساحة البناء م².
bedroomsعدد صحيحالغرف.
bathroomsعدد صحيحدورات المياه.
priceمبلغ بالريال (نص بخانتين)السعر بالريال.
statusنصالحالة.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.

GET /api/v1/reservations

حجوزات الوحدات والعربون. الصلاحية: projects:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idمعرّف (UUID)رقم الحجز.
project_idمعرّف (UUID)المشروع.
unit_idمعرّف (UUID)الوحدة.
lead_idمعرّف (UUID)العميل.
statusنصالحالة.
depositمبلغ بالريال (نص بخانتين)العربون بالريال.
payment_modeنصطريقة الدفع.
hold_expires_atتاريخ ووقت UTC ‏(ISO 8601)نهاية مهلة الحجز.
paid_atتاريخ ووقت UTC ‏(ISO 8601)وقت تأكيد العربون.
created_byنصأنشأه.
closed_byنصأغلقه.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.

GET /api/v1/activities

المكالمات ونتائجها وتغييرات حالة العملاء. الصلاحية: activities:read. updated_since: أُنشئ منذ (لا تتغير السجلات) الوقت المعطى.

الحقلالنوعالمعنى
idنصرقم النشاط.
typeنصالنوع.
lead_idمعرّف (UUID)العميل.
user_idنصمن قام به.
actionنصالإجراء.
outcomeنصنتيجة المكالمة.
from_statusنصالحالة السابقة.
to_statusنصالحالة الجديدة.
follow_up_atتاريخ ووقت UTC ‏(ISO 8601)موعد المتابعة.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).

GET /api/v1/tasks

مهام المكتب. الصلاحية: activities:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idمعرّف (UUID)رقم المهمة.
titleنصالعنوان.
statusنصالحالة.
due_atتاريخ ووقت UTC ‏(ISO 8601)الاستحقاق.
lead_idمعرّف (UUID)العميل.
assignee_idنصالمكلَّف.
created_byنصأنشأها.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.

GET /api/v1/agents

موظفو المكتب. الصلاحية: agents:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idنصرقم الموظف.
nameنصالاسم.
emailنصالبريد.
roleنصالدور.
team_idsقائمة نصوصالفرق.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.

GET /api/v1/teams

فرق المبيعات. الصلاحية: agents:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idمعرّف (UUID)رقم الفريق.
nameنصالاسم.
region_idمعرّف (UUID)المنطقة.
leader_idنصالقائد.
member_idsقائمة نصوصالأعضاء.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإنشاء (UTC).
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.

GET /api/v1/conversations

محادثات واتساب وإنستقرام وتيك توك، أعداد وأوقات فقط، دون نص الرسائل. الصلاحية: conversations:read. updated_since: فيها رسالة منذ الوقت المعطى.

الحقلالنوعالمعنى
idنصرقم المحادثة.
channelنصالقناة.
contactنصرقم العميل أو حسابه.
contact_nameنصاسم العميل.
lead_idنصالعميل.
message_countعدد صحيحعدد الرسائل.
inbound_countعدد صحيحمن العميل.
outbound_countعدد صحيحمن المكتب أو إيفا.
first_message_atتاريخ ووقت UTC ‏(ISO 8601)أول رسالة.
last_message_atتاريخ ووقت UTC ‏(ISO 8601)آخر رسالة.

GET /api/v1/messages

نصوص رسائل المحادثات. الرسالة المحذوفة تبقى بلا نص. الصلاحية: messages:read. updated_since: أُنشئ أو تغيّر منذ الوقت المعطى.

الحقلالنوعالمعنى
idنصرقم الرسالة.
conversation_idنصالمحادثة.
channelنصالقناة.
directionنصالاتجاه.
senderنصالمرسل.
sent_by_user_idنصالموظف المرسل.
textنصنص الرسالة.
media_typeنصنوع الوسائط.
lead_idنصالعميل.
created_atتاريخ ووقت UTC ‏(ISO 8601)وقت الإرسال.
updated_atتاريخ ووقت UTC ‏(ISO 8601)آخر تغيير (UTC): وهو ما يقارنه updated_since.
واجهة التقارير للمطوّرين · إيفا كور