واجهة التقارير
واجهة بصلاحيات محددة تسحب بها بيانات مكتبك من إيفا كور إلى 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 يرجع كل السجلات في رد واحد بأسماء الحقول في السطر الأول.
٤. المزامنة التدريجية
- السجلات مرتبة من الأقدم تغييرًا إلى الأحدث. اطلب الصفحة الأولى، ثم مرّر next_cursor في cursor حتى يصبح has_more = false.
- احفظ آخر next_cursor. في المزامنة التالية أرسله فيصلك فقط ما أُنشئ أو تغيّر بعده، كل سجل يعود كاملًا، فحدّثه عندك بالـ id.
- أو استخدم updated_since بوقت آخر مزامنة ناقص 5 دقائق (لتغطية العمليات التي تُحفظ متأخرة) وحدّث بالـ id.
- السجلات المحذوفة لا تظهر في المزامنة التدريجية: أعد السحب الكامل دوريًا (أسبوعيًا مثلًا).
٥. الربط مع Power BI
- Power BI Desktop ← Get data ← Web.
- الصق رابط الجدول بصيغة CSV، مثل: https://app.evacore.io/api/v1/leads?format=csv
- في نافذة الدخول اختر Basic: اسم المستخدم أي كلمة (مثل api)، وكلمة المرور هي المفتاح. اختر المستوى https://app.evacore.io ليُستخدم المفتاح لكل الجداول.
- إن ظهر العربي برموز غريبة: في المعاينة اختر File origin = 65001: Unicode (UTF-8).
- كرر «Web» لكل جدول تحتاجه (deals، properties، projects، units، reservations، activities، tasks، agents، teams) واربطها بالحقول *_id.
- بعد النشر في 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. |