الخطط والإعلانات والأساطيل والبيانات
الخطط والإعلانات والأساطيل والبيانات
بُنيت معظم منصات الخرائط لأمريكا الشمالية وأوروبا، وسُعِّرت بالدولار أو اليورو، وجرت فوترتها عبر بوابات بالكاد تعمل في الشرق الأوسط. أمّا Navvo فمبنيّة بالاتجاه المعاكس. إنها منصة مصمَّمة محلياً للمنطقة: بياناتها مُنسَّقة للأردن ومنطقة الخليج عموماً، وعملاتها محلية، وأسطُحها التجارية — خطط الواجهة البرمجية، اشتراكات المستهلكين، المواضع الإعلانية المُروَّجة، خدمات الأساطيل اللوجستية، وترخيص البيانات — مُصمَّمة للشركات التي تعمل وتُصدِر الفواتير وتتقاضى مدفوعاتها في المنطقة.
توثّق هذه الصفحة الطبقة التجارية التي تعلو واجهات الخرائط البرمجية:
- خطط الواجهة البرمجية وقياس الاستخدام — كتالوج الخطط العام، التسعير الإقليمي، وكيف يُحتسَب كل طلب ويُوزَن.
- صلاحيات المستهلكين — تقييد ميزات Navvo Plus للمستخدمين النهائيين (الخرائط دون اتصال، Atlas المتقدّم، تنبيهات المخاطر).
- الإعلانات / المواضع المُروَّجة — الدبابيس المُموَّلة، نتائج البحث المُموَّلة، وبطاقة Atlas مُموَّلة، مع فوترة قائمة على النقر.
- الأعمال — المطالبة بملكية مكان، وإدارة الحملات، وتوليد نصوص تسويقية بالذكاء الاصطناعي، وتنسيق المداخل، وعرض علامات الأعمال على الخريطة.
- الأساطيل / الميل الأخير — الأساطيل والسائقون ومهام التوصيل مع الدفع عند الاستلام، وتحسين المسار، وإثبات التسليم.
- ترخيص البيانات — تصدير GeoJSON منزوع الهوية للشركاء المرخَّصين، إضافةً إلى إعادة توجيه الإحالة.
-H "x-api-key: nvvo_YOUR_KEY". أمّا نقاط النهاية التي تتصرّف على حساب شخص بعينه أو أصوله — صلاحيات المستهلك ومجموعة الأساطيل بأكملها — فتتطلّب رمز JWT للمستخدم بصيغة -H "Authorization: Bearer USER_JWT" بدلاً من ذلك، ويُشار إلى هذا في كل نقطة نهاية. أمّا نقاط نهاية ترخيص البيانات فهي محصورة بالمسؤول. عنوان القاعدة هو https://navvo.io/api/v1.JOD أو SAR أو AED. ينقسم الدينار الأردني إلى 1000 فلس، لذا اقسِم monthlyPriceMinor (وأي حقل ينتهي بـ Minor) على 1000 للحصول على المبلغ بالدينار: 29000 بالوحدة الصغرى = 29.000 JOD. أمّا الريال السعودي والدرهم الإماراتي فينقسمان إلى 100، لذا اقسِم على 100 في حالة SAR/AED. اقرأ دائماً حقل currency قبل التنسيق.GET /billing/plans
تُعيد كتالوج خطط الواجهة البرمجية العام — كل خطة يمكن للمطوّر الاشتراك فيها، مع سعرها الإقليمي وحصة الطلبات المُتضمَّنة ومعدّل التجاوز وحدود المعدّل وقائمة الميزات. هذه النقطة آمنة للعرض مباشرةً على صفحة تسعير.
curl -s "https://navvo.io/api/v1/billing/plans" \
-H "x-api-key: nvvo_YOUR_KEY"
الاستجابة
{
"provider": "navvo-billing",
"currency": "JOD",
"plans": [
{
"key": "free",
"name": "Free",
"tagline": "For prototypes and side projects",
"currency": "JOD",
"monthlyPriceMinor": 0,
"includedRequests": 50000,
"overagePerThousandMinor": 0,
"rateLimitPerMin": 60,
"rateLimitPerDay": 5000,
"features": ["search", "geocoding", "places", "map-tiles"]
},
{
"key": "starter",
"name": "Starter",
"tagline": "For early-stage products going live",
"currency": "JOD",
"monthlyPriceMinor": 29000,
"includedRequests": 500000,
"overagePerThousandMinor": 400,
"rateLimitPerMin": 300,
"rateLimitPerDay": 100000,
"features": ["search", "geocoding", "places", "map-tiles", "routing", "traffic"]
},
{
"key": "growth",
"name": "Growth",
"tagline": "For scaling teams with real traffic",
"currency": "JOD",
"monthlyPriceMinor": 149000,
"includedRequests": 5000000,
"overagePerThousandMinor": 250,
"rateLimitPerMin": 1200,
"rateLimitPerDay": 1000000,
"features": ["search", "geocoding", "places", "map-tiles", "routing", "traffic", "matrix", "fleet", "imagery"]
},
{
"key": "enterprise",
"name": "Enterprise",
"tagline": "Custom volume, SLA, and data licensing",
"currency": "JOD",
"monthlyPriceMinor": null,
"includedRequests": null,
"overagePerThousandMinor": null,
"rateLimitPerMin": null,
"rateLimitPerDay": null,
"features": ["all", "data-licensing", "priority-support", "dedicated-tiles"]
}
]
}
| الحقل | النوع | الوصف |
|---|---|---|
provider | string | دائماً "navvo-billing". |
currency | string | عملة الفوترة لكتالوج هذا الحساب — إحدى عملات المنطقة: "JOD" أو "SAR" أو "AED". |
plans[].key | string | مُعرِّف آلي ثابت للخطة (free، starter، growth، enterprise). استخدمه عند الاشتراك. |
plans[].name | string | الاسم المعروض. |
plans[].tagline | string | وصف تسويقي من سطر واحد. |
plans[].currency | string | عملة الخطة (تطابق عملة الكتالوج currency). |
plans[].monthlyPriceMinor | number | null | السعر الشهري بالوحدات الصغرى لعملة currency (اقسِم على 1000 للدينار؛ وعلى 100 للريال/الدرهم). 0 للخطط المجانية، وnull لخطط المؤسسات "تواصل معنا". |
plans[].includedRequests | number | null | الطلبات المُوزَّنة المُتضمَّنة شهرياً قبل تطبيق التجاوز. null تعني مخصَّصة/غير محدودة. |
plans[].overagePerThousandMinor | number | null | السعر لكل 1,000 طلب مُوزَّن إضافي بعد includedRequests، بالوحدات الصغرى. 0 عند عدم فوترة التجاوز؛ وnull للخطط المخصَّصة. |
plans[].rateLimitPerMin | number | null | الحدّ الأقصى للطلبات المُوزَّنة في الدقيقة. null للحدود المخصَّصة. |
plans[].rateLimitPerDay | number | null | الحدّ الأقصى للطلبات المُوزَّنة في اليوم. null للحدود المخصَّصة. |
plans[].features | string | عائلات ميزات الواجهة البرمجية التي تفتحها الخطة (تتطابق مع نطاقات مثل routing، traffic، matrix، fleet). |
includedRequests وأي تجاوز بهذه الطلبات المُوزَّنة، لذا قد يستهلك حسابان يرسلان العدد نفسه من طلبات HTTP حصتيهما بمعدّلين مختلفين تماماً تبعاً لنقاط النهاية التي يطلبانها.currency وmonthlyPriceMinor المطابق، ثم اقسِم على عامل الوحدة الصغرى للعملة (1000 للدينار، و100 للريال/الدرهم). تعامَل مع الأسعار بقيمة null بوصفها دعوةً لـ "تواصل مع المبيعات" لا خطةً مجانية.GET /me/entitlements
تُعيد صلاحيات المستهلك للمستخدم المُسجَّل دخوله في Navvo — أي الميزات المميَّزة التي فتحها، وما إذا كان يملك اشتراك Navvo Plus، وسجلّات اشتراكاته الفعّالة. استخدمها لتقييد ميزات المستخدم النهائي في تطبيقك: تنزيل الخرائط دون اتصال، Atlas الذكي المتقدّم، تنبيهات المخاطر، وما شابه.
يتطلّب رمز JWT للمستخدم (لا مفتاح واجهة برمجية). مرِّر رمز جلسة المستخدم بوصفه رمز Bearer.
curl -s "https://navvo.io/api/v1/me/entitlements" \
-H "Authorization: Bearer USER_JWT"
الاستجابة
{
"provider": "navvo-entitlements",
"entitlements": [
"navvo_plus",
"offline_maps",
"atlas_advanced",
"hazard_alerts"
],
"plus": true,
"subscriptions": [
{
"id": "sub_9f3a21",
"product": "navvo_plus",
"status": "active",
"currency": "JOD",
"priceMinor": 3500,
"interval": "month",
"renewsAt": "2026-07-19T00:00:00Z"
}
]
}
| الحقل | النوع | الوصف |
|---|---|---|
provider | string | دائماً "navvo-entitlements". |
entitlements | string | مفاتيح الميزات التي فتحها المستخدم. تحقّق من العضوية قبل تفعيل ميزة مُقيَّدة. المفاتيح الشائعة: navvo_plus، offline_maps، atlas_advanced، hazard_alerts. |
plus | boolean | علامة ميسّرة — true عندما يملك المستخدم اشتراك Navvo Plus فعّالاً (يعادل احتواء entitlements على navvo_plus). |
subscriptions[] | array | سجلّات الاشتراكات الفعّالة: id، product، status، currency، priceMinor (وحدات صغرى)، interval (month | year)، وrenewsAt. |
navvo_plus هي المفتاح الرئيس للميزات المميَّزة للمستهلك. عند وجودها، تفتح الخرائط دون اتصال (مناطق خرائط قابلة للتنزيل للاستخدام بلا اتصال)، وAtlas المتقدّم (مساعد Atlas الذكي الأعلى قدرةً)، وتنبيهات المخاطر (إشعارات استباقية بمخاطر الطريق والحوادث). قيِّد واجهتك على مفتاح الصلاحية المحدَّد لا على plus وحدها، كي تظل الميزات المُمنوحة فردياً (التجارب، حزم الشركاء) تعمل.GET /ads/promoted
تُعيد دبابيس خريطة مُموَّلة داخل منطقة عرض — أماكن "مُروَّجة" يدفع مُعلِن لإبرازها. اعرضها إلى جانب نتائج البحث العضوية مع وسمها بصرياً بوصفها مُموَّلة. الفوترة بنظام CPC (التكلفة لكل نقرة): المشاهدات مجانية؛ وتُحاسَب عند نقر المستخدم (انظر POST /ads/{id}/click).
curl -s "https://navvo.io/api/v1/ads/promoted?bbox=35.85,31.90,36.00,32.00&categories=restaurant,cafe" \
-H "x-api-key: nvvo_YOUR_KEY"
معاملات الاستعلام
west,south,east,north (خط الطول/خط العرض بالدرجات العشرية). تُعاد فقط الدبابيس المُروَّجة داخل هذا المربع.restaurant,cafe,fuel). عند تعيينها، تُعاد فقط الإعلانات ضمن هذه الفئات. اتركها لجميع الفئات.الاستجابة
{
"provider": "navvo-ads",
"type": "promoted_pin",
"count": 1,
"ads": [
{
"id": "ad_promo_8821",
"type": "promoted_pin",
"placeId": "plc_amman_cafe_4410",
"title": "Rumi Café — Abdali",
"subtitle": "Specialty coffee · Open now",
"imageUrl": "https://navvo.io/ads/img/ad_promo_8821.jpg",
"ctaUrl": "https://navvo.io/go?ref=RUMI-ABDALI",
"lat": 31.9568,
"lng": 35.9098,
"sponsored": true
}
]
}
| الحقل | النوع | الوصف |
|---|---|---|
provider | string | دائماً "navvo-ads". |
type | string | دائماً "promoted_pin" لهذه النقطة. |
count | number | عدد الإعلانات المُعادة. |
ads[].id | string | مُعرِّف الإعلان. مرِّره إلى POST /ads/{id}/click عندما ينقر المستخدم الدبّوس أو دعوته للإجراء. |
ads[].type | string | "promoted_pin". |
ads[].placeId | string | المكان في Navvo الذي يروِّج له الإعلان — استخرِجه عبر واجهة الأماكن للحصول على التفاصيل الكاملة. |
ads[].title / subtitle | string | نص العرض لبطاقة الدبّوس. |
ads[].imageUrl | string | رابط صورة التصميم/المصغّرة. |
ads[].ctaUrl | string | رابط الوجهة لدعوة الإجراء. افتحه فقط بعد تسجيل النقرة. |
ads[].lat / lng | number | إحداثيات الدبّوس. |
ads[].sponsored | boolean | دائماً true. يجب أن تسِمها بصرياً بوصفها مُموَّلة. |
GET /ads/sponsored-search
تُعيد نتائج مُموَّلة لدمجها في قائمة نتائج البحث لاستعلام معيّن. الشكل نفسه للدبابيس المُروَّجة لكن بنوع sponsored_search. اعرضها موسومةً بوضوح بوصفها مُموَّلة، عادةً في أعلى النتائج العضوية.
curl -s "https://navvo.io/api/v1/ads/sponsored-search?q=coffee" \
-H "x-api-key: nvvo_YOUR_KEY"
معاملات الاستعلام
الاستجابة
{
"provider": "navvo-ads",
"type": "sponsored_search",
"count": 1,
"ads": [
{
"id": "ad_search_5530",
"type": "sponsored_search",
"placeId": "plc_amman_cafe_4410",
"title": "Rumi Café",
"subtitle": "Sponsored · Specialty coffee in Abdali",
"imageUrl": "https://navvo.io/ads/img/ad_search_5530.jpg",
"ctaUrl": "https://navvo.io/go?ref=RUMI-SEARCH",
"lat": 31.9568,
"lng": 35.9098,
"sponsored": true
}
]
}
تستخدم كائنات ads[] الحقول نفسها لـ GET /ads/promoted، مع تعيين type على "sponsored_search".
GET /ads/atlas-card
تُعيد بطاقة مُموَّلة واحدة على الأكثر لإبرازها داخل مساعد Atlas الذكي لاستعلام معيّن — ترويجاً واحداً وثيق الصلة بالسياق يُعرَض بطاقةً غنية ضمن نتيجة حوارية. النوع atlas_card. تُعيد ad: null عند عدم وجود راعٍ مناسب للاستعلام.
curl -s "https://navvo.io/api/v1/ads/atlas-card?q=where%20can%20I%20get%20coffee%20nearby" \
-H "x-api-key: nvvo_YOUR_KEY"
معاملات الاستعلام
الاستجابة
{
"provider": "navvo-ads",
"type": "atlas_card",
"ad": {
"id": "ad_atlas_2207",
"type": "atlas_card",
"placeId": "plc_amman_cafe_4410",
"title": "Rumi Café",
"subtitle": "Specialty coffee · 400 m away · Open now",
"imageUrl": "https://navvo.io/ads/img/ad_atlas_2207.jpg",
"ctaUrl": "https://navvo.io/go?ref=RUMI-ATLAS",
"lat": 31.9568,
"lng": 35.9098,
"sponsored": true
}
}
| الحقل | النوع | الوصف |
|---|---|---|
provider | string | دائماً "navvo-ads". |
type | string | دائماً "atlas_card". |
ad | object | null | كائن إعلان واحد (بالحقول نفسها لـ GET /ads/promoted)، أو null عند عدم وجود راعٍ مطابق. |
ad غير فارغ، وأبقِ وسم المُموَّل ظاهراً. تعامَل مع بطاقة null بوصفها الحالة الطبيعية لا خطأً.POST /ads/{id}/click
تُسجِّل نقرة قابلة للفوترة على إعلان وتُعيد رابط الوجهة للانتقال إليه. هذه هي اللحظة التي تُحاسَب فيها بنظام CPC — استدعِها مرة واحدة بالضبط عندما ينقر المستخدم فعلياً الإعلان أو دعوته للإجراء، ثم افتح الـ ctaUrl المُعاد.
curl -s -X POST "https://navvo.io/api/v1/ads/ad_promo_8821/click" \
-H "x-api-key: nvvo_YOUR_KEY"
معاملات المسار
ads[].id من أي من نقاط نهاية الإعلانات أعلاه.الاستجابة
{
"ok": true,
"ctaUrl": "https://navvo.io/go?ref=RUMI-ABDALI",
"chargedMinor": 180
}
| الحقل | النوع | الوصف |
|---|---|---|
ok | boolean | true عند تسجيل النقرة. |
ctaUrl | string | الوجهة التي تُفتَح بعد تسجيل النقرة — عادةً إعادة توجيه إحالة من Navvo (/go?ref=…). |
chargedMinor | number | تكلفة النقرة (CPC) المُحاسَبة فعلياً (وحدات صغرى). لإعلان ذاتي المزايدة هذه هي المزايدة الفعّالة وقت النقر، لا الأساسية. |
المزايدة الذكية التلقائية
افتراضياً يزايد الإعلان بتكلفة CPC ثابتة (bidMinor). فعِّل المزايدة التلقائية ليضبط Navvo المزايدة ديناميكياً لإنفاق الميزانية اليومية بالتساوي والفوز بالمشاهدات حيث تكون أعلى قيمة. فعِّلها بإضافة كائن autoBid إلى targeting الإعلان:
{ "targeting": { "categories": ["restaurant"], "autoBid": { "enabled": true, "maxBidMinor": 250 } } }
| الحقل | النوع | ملاحظات |
|---|---|---|
enabled | boolean | تشغيل المزايدة التلقائية لهذا الإعلان |
maxBidMinor | number | سقف اختياري للمزايدة الفعّالة (الافتراضي 3× المزايدة الأساسية) |
تحرّكها آليتان:
- ضبط وتيرة الميزانية — تتدرّج المزايدة الفعّالة بحسب تأخّر الإنفاق أو تقدّمه عن وتيرة يومية متساوية. متأخّر → ترفع المزايدة (حتى 3×) للّحاق؛ متقدّم → تخفضها (حتى 0.25×) لتدوم الميزانية. ولا تزايد أبداً بأكثر من المتبقّي من الميزانية.
- ترتيب eCPM — تتنافس الإعلانات على الإيراد المتوقّع لكل مشاهدة = المزايدة الفعّالة × نسبة النقر المتوقّعة (CTR مُنعَّمة بأسلوب لابلاس بأولوية 5%). الإعلان الجديد يُرتَّب بمزايدته؛ ومع تجميعه للنقرات يفوز الأداء المُثبَت بمكان أفضل عند المزايدة نفسها أو أقل.
ثم تحاسب POST /ads/{id}/click المزايدة الفعّالة (تُعاد كـ chargedMinor).
GET /admin/ads/{id}/bid · للمشرفين
شفافية لإعلان ذاتي المزايدة — تفصيل المزايدة الحيّة. للمشرفين فقط.
{
"ok": true, "id": "ad_promo_8821",
"autoBid": { "enabled": true, "maxBidMinor": 250 },
"baseBidMinor": 100, "pacingMultiplier": 1.8, "pCtr": 0.05,
"effectiveBidMinor": 180, "auctionScore": 9.0, "remainingBudgetMinor": 9000
}
الأعمال
واجهة الأعمال هي الطريقة التي تتولّى بها الشركة حضورها على خريطة Navvo: طالِب بملكية سجلّ المكان، ثم — بعد التحقّق من المطالبة — أدِر الحملات، وولِّد نصوصاً تسويقية بالذكاء الاصطناعي، ونسِّق مداخل المكان لذكاء الوصول. وتتوفّر أيضاً تغذية علامات عامة لعرض دبابيس الأعمال على أي سطح خريطة.
/business/claims و/business/campaigns و/business/ai-copy وإضافة المداخل) رمز JWT للمستخدم — -H "Authorization: Bearer USER_JWT". أمّا القراءتان المخصّصتان لعرض الخريطة — GET /business/markers وGET /places/{slug}/entrances — فعامّتان وتُصادِقان بمفتاح الواجهة البرمجية كأي قراءة أخرى.POST /business/claims
قدِّم مطالبة بملكية مكان. يمكن لأي مستخدم مُسجَّل الدخول تقديم مطالبة؛ يراجع مشرف Navvo الأدلة، وبعد الموافقة يصبح حسابك المالك المتحقَّق منه للمكان، ما يفتح نقاط النهاية المحصورة بالمالك أدناه.
curl -s -X POST "https://navvo.io/api/v1/business/claims" \
-H "Authorization: Bearer USER_JWT" \
-H "Content-Type: application/json" \
-d '{
"placeId": "plc_amman_cafe_4410",
"evidence": "رخصة مهن رقم 445871 مسجَّلة باسم شركة مقهى الرومي",
"evidenceType": "trade_license",
"evidenceUrls": { "license": "https://example.com/license.pdf" }
}'
الجسم
| الحقل | النوع | الوصف |
|---|---|---|
placeId | نص، مطلوب | المكان المُطالَب به (الحقل id من واجهة الأماكن أو GET /business/markers). |
evidence | نص | بيان داعم بنصّ حرّ. |
evidenceType | نص | أحد trade_license أو domain_email أو phone أو document أو other (الافتراضي other). |
evidenceUrls | كائن | روابط لمستندات الأدلة المرفوعة، بأي مفاتيح تشاء. |
الاستجابة
{
"id": "clm_1f2e3d",
"placeId": "plc_amman_cafe_4410",
"status": "pending",
"evidenceType": "trade_license",
"createdAt": "2026-07-02T09:30:00Z"
}
تبدأ المطالبات بالحالة pending ويُوسَم المكان على الخريطة بأن مطالبته قيد المراجعة. تابع التقدّم عبر GET /business/claims.
GET /business/claims
مطالباتك أنت، الأحدث أولاً (رمز JWT للمستخدم). تُعيد { total, items[] }؛ ويحمل كل عنصر حالته status (pending ← approved / rejected) إضافةً إلى reviewedAt وreviewNotes بعد بتّ المشرف.
curl -s "https://navvo.io/api/v1/business/claims" \
-H "Authorization: Bearer USER_JWT"
ذو صلة: تُعيد GET /business/owned-places (رمز JWT للمستخدم) سجلّات الأماكن الكاملة لكل مكان ملكيتك فيه متحقَّق منها — أي مجموعة الأماكن التي يمكن لنقاط النهاية أدناه التصرّف عليها.
POST /business/campaigns
أنشئ حملة ترويجية لمكان تملكه (مالك متحقَّق منه أو مسؤول). تُنشأ الحملات بالحالة draft؛ وتتحوّل المسودّة إلى موضع إعلاني حيّ (دبوس مُروَّج، بحث مُموَّل، بطاقة Atlas) بعد تفعيلها وتمويلها.
curl -s -X POST "https://navvo.io/api/v1/business/campaigns" \
-H "Authorization: Bearer USER_JWT" \
-H "Content-Type: application/json" \
-d '{
"placeId": "plc_amman_cafe_4410",
"name": "حملة القهوة المثلّجة الصيفية",
"targeting": { "categories": ["cafe"], "autoBid": { "enabled": true, "maxBidMinor": 250 } }
}'
الاستجابة
{
"id": "cmp_77aa",
"placeId": "plc_amman_cafe_4410",
"name": "حملة القهوة المثلّجة الصيفية",
"status": "draft",
"targeting": { "categories": ["cafe"], "autoBid": { "enabled": true, "maxBidMinor": 250 } },
"createdAt": "2026-07-02T09:31:00Z"
}
| الحقل | النوع | الوصف |
|---|---|---|
placeId | نص، مطلوب | مكان تملكه. يحصل غير المالكين على 403. |
name | نص، مطلوب | اسم العرض للحملة. |
targeting | كائن | استهداف الإعلان — بالشكل نفسه لكائن targeting في الإعلانات (categories وautoBid وغيرهما). |
GET /business/campaigns
اعرض الحملات (رمز JWT للمستخدم، محصورة بالأماكن التي تملكها؛ يرى المسؤولون الجميع). رشِّح عبر ?placeId=.
curl -s "https://navvo.io/api/v1/business/campaigns?placeId=plc_amman_cafe_4410" \
-H "Authorization: Bearer USER_JWT"
تُعيد { total, items[] } من كائنات الحملات (كما في POST /business/campaigns)، الأحدث أولاً.
POST /business/ai-copy
ولِّد نصوصاً تسويقية ووسوماً موجزة بالعربية والإنجليزية آمنة للإنتاج لمكان تملكه (مالك متحقَّق منه أو مسؤول). مرِّر كائن context بصيغة حرّة يصف ما تريد الكتابة عنه — المزايا، العروض، النبرة، الجمهور.
curl -s -X POST "https://navvo.io/api/v1/business/ai-copy" \
-H "Authorization: Bearer USER_JWT" \
-H "Content-Type: application/json" \
-d '{
"placeId": "plc_amman_cafe_4410",
"context": { "highlights": ["قهوة مختصة", "جلسة على السطح"], "tone": "ودّي", "offer": "خصم 10% قبل العاشرة صباحاً" }
}'
الاستجابة
{
"model": "navvo-copywriter",
"unavailable": false,
"purpose": "business_copy",
"content": "AR: قهوة مختصة على السطح في قلب العبدلي — خصم ١٠٪ قبل العاشرة صباحًا.\nEN: Rooftop specialty coffee in the heart of Abdali — 10% off before 10am."
}
201 حتى عندما تكون خلفية الذكاء الاصطناعي معطّلة. تحقّق دائماً من unavailable قبل استخدام content — عندما تكون true يكون content فارغاً وعليك المحاولة لاحقاً.GET /business/markers
تغذية دبابيس أعمال عامة متكيّفة مع مستوى التقريب لعرض الخريطة — الأماكن المُموَّلة أولاً ثم حسب التقييم. تُعيد التصنيف القانوني لكل مكان إضافةً إلى نمطه categoryStyle المُهيَّأ من لوحة الإدارة (اللون والأيقونة وشكل الدبوس) لتُعرَض الدبابيس متّسقةً مع خريطة Navvo.
curl -s "https://navvo.io/api/v1/business/markers?bbox=35.85,31.90,36.00,32.00&zoom=14&category=restaurants" \
-H "x-api-key: nvvo_YOUR_KEY"
معاملات الاستعلام
west,south,east,north. احذفه لإلغاء الترشيح المكاني.restaurants أو fuel). تُوحَّد الأسماء البديلة تلقائياً.verified للأعمال المُطالَب بها فقط.الاستجابة
{
"limit": 60,
"zoom": 14,
"category": "restaurants",
"categoryFiltered": true,
"performance": {
"requestedLimit": null, "limit": 60, "zoom": 14,
"candidateCount": 118, "returnedCount": 60,
"serverCapped": false, "resultCapped": true, "capReason": "zoom-limit"
},
"items": [
{
"id": "745cd311-887e-40ed-989d-94f7cb4d8f51",
"slug": "rumi-cafe-abdali-4410",
"nameEn": "Rumi Café",
"nameAr": "مقهى الرومي",
"canonicalCategorySlug": "restaurants",
"categories": ["restaurants"],
"rawCategories": ["Coffee shop"],
"categoryStyle": {
"source": "admin_map_categories",
"slug": "restaurants",
"color": "#F97316",
"iconName": "pin",
"pinStyle": "circle",
"zoomRange": { "min": 12, "max": 20 },
"visibility": { "map": true, "nearby": true, "searchFilters": true }
},
"claimStatus": "verified",
"sponsored": true,
"rating": 4.6,
"lng": 35.9098,
"lat": 31.9568
}
]
}
| الحقل | النوع | الوصف |
|---|---|---|
performance | كائن | تشخيص السقف — candidateCount مقابل returnedCount، وهل قُيِّدت النتيجة (serverCapped/resultCapped) ولماذا (capReason). |
items[].canonicalCategorySlug | نص | تصنيف Navvo القانوني للمكان (تُطابَق تصنيفات الاستيراد الخام مع تصنيفات لوحة الإدارة أو تُستنتَج). |
items[].categoryStyle | كائن | null | تنسيق الدبوس المُهيَّأ للتصنيف: color وiconName وpinStyle ونطاق التقريب الصالح zoomRange وظهور الأسطح visibility. |
items[].claimStatus | نص | unclaimed أو pending أو verified. |
items[].sponsored | منطقي | تُرتَّب الأماكن المُموَّلة أولاً — اعرضها بوسم واضح إن كنت تُميّز الدبابيس. |
GET /places/{slug}/entrances
عامة — اعرض مداخل المكان المعتمدة (السجلّات نفسها التي تُغذّي arrivalIntelligence في GET /places/{slug}).
curl -s "https://navvo.io/api/v1/places/rumi-cafe-abdali-4410/entrances" \
-H "x-api-key: nvvo_YOUR_KEY"
[
{
"id": "ent_9a01",
"type": "main",
"label": "الباب الرئيسي — جهة شارع الرينبو",
"notes": "دون درجات. مدخل المواقف بعد 40 متراً شرقاً.",
"location": "POINT(35.9099 31.9569)"
}
]
POST /places/{slug}/entrances
أضِف مدخلاً لمكان — المالك المتحقَّق منه للمكان، أو المسؤول. تمرّ المداخل المُقدَّمة عبر مراجعة إشراف قبل ظهورها للعموم وفي ذكاء الوصول، لذا لا يظهر المدخل الجديد في القراءات العامة فوراً. (كان تقديم المداخل متاحاً سابقاً لأي مستخدم مُسجَّل الدخول؛ وصار الآن محصوراً بالمالك/المسؤول مع الإشراف.)
curl -s -X POST "https://navvo.io/api/v1/places/rumi-cafe-abdali-4410/entrances" \
-H "Authorization: Bearer USER_JWT" \
-H "Content-Type: application/json" \
-d '{
"type": "parking",
"label": "مدخل مواقف السيارات",
"notes": "الحد الأقصى للارتفاع 2.1 متر",
"lat": 31.9571,
"lng": 35.9103
}'
| الحقل | النوع | الوصف |
|---|---|---|
type | نص، مطلوب | نوع المدخل — مثل main أو parking أو delivery أو accessible. |
label | نص | تسمية عرض قصيرة. |
notes | نص | إرشاد الأمتار الأخيرة المعروض للمستخدمين عند الوصول. |
lat / lng | رقم، مطلوب | إحداثيات المدخل. |
GET /places/{slug} ضمن arrivalIntelligence.candidates[]، والتوجيه إلى candidates[0].routeTarget أفضل من التوجيه إلى دبوس الخريطة.الأساطيل / الميل الأخير
تُحوِّل واجهة الأساطيل Navvo إلى منصة توصيل للميل الأخير: نظِّم الأساطيل، وعيِّن السائقين، وأرسِل مهام التوصيل (مع الدفع عند الاستلام)، وحسِّن ترتيب توقّفات اليوم، والتقِط إثبات التسليم. وهي مصمَّمة لشركات التوصيل والخدمات اللوجستية عند الطلب في المنطقة، بما في ذلك تدفّقات الدفع النقدي عند الاستلام الشائعة في الشرق الأوسط.
تتطلّب جميع نقاط نهاية الأساطيل رمز JWT للمستخدم (المالك/المُرسِل المُصادَق، أو — لنقاط النهاية الموجَّهة للسائق — السائق المُصادَق). مرِّره بصيغة -H "Authorization: Bearer USER_JWT".
هذا القسم نظرة عامة على المجموعة لا مرجعاً حقلاً بحقل لكل نقطة نهاية.
الأساطيل والسائقون
# عرض أساطيلك
curl -s "https://navvo.io/api/v1/fleet" \
-H "Authorization: Bearer USER_JWT"
# إنشاء أسطول
curl -s -X POST "https://navvo.io/api/v1/fleet" \
-H "Authorization: Bearer USER_JWT" \
-H "Content-Type: application/json" \
-d '{ "name": "Amman City Couriers", "city": "Amman" }'
| نقطة النهاية | الغرض |
|---|---|
GET /fleet | عرض الأساطيل التي تملكها. |
POST /fleet | إنشاء أسطول ({ name, city? }). |
GET /fleet/{id}/drivers | عرض سائقي أسطول. |
POST /fleet/{id}/drivers | إضافة سائق إلى أسطول ({ name, phone?, vehicle? }). |
مهام التوصيل (مع الدفع عند الاستلام)
# إنشاء مهمة توصيل مع دفع نقدي عند الاستلام
curl -s -X POST "https://navvo.io/api/v1/fleet/flt_amman_01/tasks" \
-H "Authorization: Bearer USER_JWT" \
-H "Content-Type: application/json" \
-d '{
"address": "Rainbow Street, Amman",
"lat": 31.9515,
"lng": 35.9239,
"recipient": "Layla H.",
"phone": "+962790000000",
"codAmountMinor": 12500,
"codCurrency": "JOD"
}'
| نقطة النهاية | الغرض |
|---|---|
GET /fleet/{id}/tasks | عرض مهام التوصيل لأسطول. |
POST /fleet/{id}/tasks | إنشاء مهمة توصيل. تدعم حقول الدفع عند الاستلام (أدناه). |
تحمل كل مهمة تفاصيل التوصيل (إحداثيات الوجهة، المُستلِم، جهة الاتصال) إضافةً إلى حقول الدفع عند الاستلام الاختيارية:
| الحقل | النوع | الوصف |
|---|---|---|
codAmountMinor | number | المبلغ المطلوب تحصيله عند التسليم، بالوحدات الصغرى (مثل 12500 = 12.500 JOD). اتركه أو 0 للطلبات المدفوعة مسبقاً. |
codCurrency | string | عملة مبلغ الدفع عند الاستلام — إحدى عملات المنطقة (JOD / SAR / AED). |
codCollected | boolean | ما إذا كان السائق قد حصّل النقد (يُضبَط عند تحديث الحالة). |
proofUrl | string | رابط دليل إثبات التسليم (توقيع/صورة) المُلتقَط عند الإتمام. |
تحسين المسار
# ترتيب توقّفات سائق المعلَّقة بأقرب جار من نقطة بداية
curl -s -X POST "https://navvo.io/api/v1/fleet/flt_amman_01/optimize" \
-H "Authorization: Bearer USER_JWT" \
-H "Content-Type: application/json" \
-d '{ "start": { "lat": 31.9539, "lng": 35.9106 }, "driverId": "drv_77" }'
تأخذ POST /fleet/{id}/optimize نقطة start وdriverId اختيارياً، وتُعيد المهام المعلَّقة للأسطول مُعاد ترتيبها في مسار أقرب جار فعّال (كل توقّف تالٍ هو الأقرب من بين المتبقّي). اترك driverId لتحسين جميع المهام غير المُسنَدة في الأسطول.
نقاط النهاية الموجَّهة للسائق
تستدعيها تطبيق السائق، مُصادَقاً بوصفه السائق:
| نقطة النهاية | الغرض |
|---|---|
GET /fleet/me/tasks | مهام اليوم المُسنَدة للسائق المُسجَّل دخوله. |
PATCH /fleet/tasks/{taskId}/status | تحديث حالة مهمة ({ status, codCollected?, proofUrl? }) — مثل وسمها delivered، وتسجيل تحصيل النقد، وإرفاق إثبات التسليم. |
POST /fleet/drivers/{driverId}/ping | الإبلاغ عن موقع السائق الحيّ ({ lat, lng }) للتتبّع وحساب الوقت المتوقَّع للوصول. |
# السائق يَسِم مهمة بأنها مُسلَّمة، والنقد محصَّل، مع دليل
curl -s -X PATCH "https://navvo.io/api/v1/fleet/tasks/tsk_5521/status" \
-H "Authorization: Bearer USER_JWT" \
-H "Content-Type: application/json" \
-d '{ "status": "delivered", "codCollected": true, "proofUrl": "https://navvo.io/pod/tsk_5521.jpg" }'
codAmountMinor / codCurrency)، وعند الإتمام اضبط codCollected: true وأرفِق proofUrl كي يُسوَّى النقد المحصَّل والتسليم معاً.تسوية الدفع عند الاستلام
| نقطة النهاية | الغرض |
|---|---|
GET /fleet/{id}/cod-reconciliation | محاسبة نقدية لكل سائق في الأسطول (المالك). |
GET /admin/fleet/cod-reconciliation?fleetId= | التقرير نفسه، محصور بالمسؤول. |
تقرير النقد في نهاية اليوم الذي تحتاجه كل عملية دفع عند الاستلام — يجمّع مهام COD حسب السائق ويخبرك، لكل سائق وإجمالاً، كم نقداً حُصِّل، وكم لا يزال مستحقّاً (خارج للتوصيل)، والأهم — أي تباين (discrepancy): طرود مُعلَّمة delivered دون ضبط codCollected، أي نقد كان يجب تسليمه ولم يُسجَّل. وتُتعقَّب الطرود الفاشلة/المرتجَعة منفصلةً (لا نقد متوقَّع).
curl -s "https://navvo.io/api/v1/fleet/flt_amman_01/cod-reconciliation" \
-H "Authorization: Bearer USER_JWT"
{
"provider": "navvo-fleet", "fleetId": "flt_amman_01", "currency": "JOD",
"totals": { "collectedMinor": 142500, "outstandingMinor": 38000, "discrepancyMinor": 5000, "failedMinor": 9000, "codTasks": 37 },
"drivers": [
{ "driverId": "drv_12", "name": "Sami",
"collectedMinor": 100000, "outstandingMinor": 7000, "discrepancyMinor": 5000, "failedMinor": 0,
"collectedCount": 8, "outstandingCount": 1, "discrepancyCount": 1 }
]
}
قيمة discrepancyMinor غير الصفرية هي الرقم الذي يجب التحقيق فيه — فهو نقد مُسلَّم لم يُسوَّ مع سائق. كل المبالغ بالوحدات الصغرى للعملة currency.
لوحة أداء السائقين
| نقطة النهاية | الغرض |
|---|---|
GET /fleet/{id}/driver-performance | ترتيب سائقي الأسطول (المالك). |
GET /admin/fleet/driver-performance?fleetId= | نفسه، محصور بالمسؤول. |
يرتّب السائقين بمقياس مركّب من حجم التوصيل × موثوقية الإكمال (score = delivered × successRate × 100)، مع متوسط زمن التوصيل وموثوقية الدفع عند الاستلام — فيتفوّق سائق عالي الحجم بموثوقية جيدة (لا مثالية) على سائق منخفض الحجم مثالي.
{
"provider": "navvo-fleet", "fleetId": "flt_amman_01", "driverCount": 3,
"drivers": [
{ "rank": 1, "driverId": "drv_2", "name": "Lina", "status": "online",
"delivered": 6, "failed": 2, "canceled": 0, "active": 1,
"successRate": 0.75, "avgDeliveryMinutes": 30, "codReliability": 1, "score": 450 },
{ "rank": 2, "driverId": "drv_1", "name": "Sami",
"delivered": 4, "failed": 0, "successRate": 1, "avgDeliveryMinutes": 20, "score": 400 }
]
}
| الحقل | ملاحظات |
|---|---|
successRate | delivered / (delivered + failed + canceled) |
avgDeliveryMinutes | متوسط assignedAt → deliveredAt، بحدّ أقصى 24 ساعة (null إن كان مجهولاً) |
codReliability | نسبة طرود COD للسائق التي سُجِّل نقدها بشكل صحيح (null إن لا COD) |
score | مقياس الترتيب — حجم التوصيل موزوناً بموثوقية الإكمال |
ترخيص البيانات (شريك / مسؤول)
يمكن للشركاء المرخَّصين سحب GeoJSON منزوع الهوية ومُجمَّع من مجموعات بيانات Navvo الإقليمية — للتحليلات أو البحث أو لإثراء منتجاتهم — بموجب اتفاقية ترخيص بيانات. هذه النقاط محصورة بالمسؤول: فهي غير متاحة بمفتاح مطوّر قياسي وتُوفَّر لحسابات الشركاء المرخَّصين.
| نقطة النهاية | الغرض |
|---|---|
GET /admin/data-licensing/datasets | عرض مجموعات البيانات المتاحة للترخيص (لكلٍّ مفتاح واسم وعدد صفوف) إضافةً إلى صيغ التصدير المدعومة formats. |
GET /admin/data-licensing/export?dataset=…&format=…&bbox=… | تصدير مجموعة بيانات بالصيغة المختارة لمنطقة عرض اختيارية. |
مجموعات البيانات (dataset=): signs (إشارات الطرق / النقاط)، incidents (حوادث نشطة منزوعة الهوية)، places (دليل النقاط العامة — الاسم، التصنيف، الإحداثيات).
الصيغ (format=، الافتراضي geojson):
| الصيغة | Content-Type | الاستخدام |
|---|---|---|
geojson | application/geo+json | FeatureCollection قياسية (الافتراضي؛ تُعاد ضمنياً) |
ndjson | application/x-ndjson | Feature واحد في كل سطر — مناسب للبثّ والبيانات الضخمة |
csv | text/csv | أعمدة مسطّحة lng,lat,… للجداول / pandas |
sql | application/sql | تفريغ محمول CREATE TABLE + INSERT للتحميل مباشرةً في مستودع بيانات |
تُنزَّل صيغ ndjson/csv/sql كملف (Content-Disposition)؛ والقيم مُهرَّبة بشكل صحيح (اقتباس CSV، ومضاعفة الاقتباس المفرد في SQL).
# عرض مجموعات البيانات والصيغ القابلة للترخيص (محصورة بالمسؤول)
curl -s "https://navvo.io/api/v1/admin/data-licensing/datasets" \
-H "x-api-key: nvvo_YOUR_KEY"
# تصدير نقاط إشارات الطرق بصيغة SQL لمنطقة عرض
curl -s "https://navvo.io/api/v1/admin/data-licensing/export?dataset=signs&format=sql&bbox=35.85,31.90,36.00,32.00" \
-H "x-api-key: nvvo_YOUR_KEY"
جميع التصديرات منزوعة الهوية — فبلاغات الحوادث مُجمَّعة ومجهولة الهوية، ولا تُضمَّن هوية المُبلِّغ أبداً.
GET /admin/privacy/density · خصوصية تفاضلية
خريطة كثافة آمنة للخصوصية — أين يتجمّع النشاط، مُطلَقة بموجب خصوصية تفاضلية رسمية (ضوضاء لابلاس مُعايَرة) مع كبت k-anonymity (تُسقَط الخلايا دون الحدّ ولا تُنشَر أبداً) ومحاذاة شبكية (تُحاذى النقاط إلى خلية شبكة بلاطات، لا إحداثيات دقيقة أبداً). تُسجَّل كل عملية إطلاق في سجلّ إنفاق epsilon. محصورة بالمسؤول.
| الاستعلام | النوع | ملاحظات |
|---|---|---|
source | string | feedback (بلاغات المستخدمين الحسّاسة) أو signs (نقاط عامة) |
epsilon | number | ميزانية الخصوصية — أقل = ضوضاء أكثر / خصوصية أعلى (افتراضي 1.0) |
minCount | number | حدّ k-anonymity؛ تُكبَت الخلايا ذات النقاط الأقل (افتراضي 5) |
zoom | number | دقّة الشبكة 8–16 (افتراضي 13) |
bbox | string | اختياري west,south,east,north |
curl -s "https://navvo.io/api/v1/admin/privacy/density?source=signs&epsilon=1&minCount=5&zoom=13" \
-H "x-api-key: nvvo_YOUR_KEY"
{
"provider": "navvo-privacy", "type": "FeatureCollection", "source": "signs",
"epsilon": 1, "minCount": 5, "gridZoom": 13, "pointsSampled": 412, "cells": 23,
"features": [
{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [35.925, 31.933] }, "properties": { "count": 19 } }
]
}
الأعداد مُضاف إليها ضوضاء، فهي تقريبية بحكم التصميم؛ والخلايا التي لا تراها كُبِتت للخصوصية. هذه هي الطريقة الآمنة لنشر "المناطق المزدحمة" دون كشف موقع أي فرد.
إعادة توجيه الإحالة
curl -s -i "https://navvo.io/api/v1/go?ref=RUMI-ABDALI"
GET /go?ref=CODE هي إعادة توجيه الإحالة / النسب المستخدمة في روابط ctaUrl للإعلانات وروابط الشركاء. تُسجِّل الإحالة مقابل رمز ref وتُصدِر إعادة توجيه HTTP إلى الوجهة، كي يُمكن نسب النقرات و(للإعلانات) فوترتها. عادةً لا تبني هذه الروابط يدوياً — افتح الـ ctaUrl المُعاد من POST /ads/{id}/click.
الأخطاء
| الحالة | متى |
|---|---|
400 | التحقّق — مثل bbox غير صحيح، أو غياب q، أو dataset غير معروف، أو جسم أسطول/مهمة غير صالح. |
401 | بيانات اعتماد مفقودة أو غير صالحة — لا مفتاح واجهة برمجية على نقطة محصورة بالمفتاح، أو لا/منتهٍ رمز JWT للمستخدم على نقطة محصورة بالـ JWT (الصلاحيات، الأساطيل). |
403 | مُصادَق لكن غير مسموح — مثل افتقار المفتاح للخطة/النطاق، أو غير المالك يتصرّف على أسطول، أو مستخدم دون ملكية أعمال متحقَّق منها يُنشئ حملة / نصاً بالذكاء الاصطناعي / مدخلاً، أو غير المسؤول يطلب نقطة ترخيص بيانات. |
404 | id إعلان أو id أسطول أو taskId غير معروف. |
الملخّص
| نقطة النهاية | المصادقة | تُعيد |
|---|---|---|
GET /billing/plans | مفتاح واجهة برمجية | { provider, currency, plans[] } |
GET /me/entitlements | رمز JWT للمستخدم | { provider, entitlements[], plus, subscriptions[] } |
GET /ads/promoted | مفتاح واجهة برمجية | { provider, type:"promoted_pin", count, ads[] } |
GET /ads/sponsored-search | مفتاح واجهة برمجية | { provider, type:"sponsored_search", count, ads[] } |
GET /ads/atlas-card | مفتاح واجهة برمجية | { provider, type:"atlas_card", ad } |
POST /ads/{id}/click | مفتاح واجهة برمجية | { ok, ctaUrl } |
POST /business/claims | رمز JWT للمستخدم | المطالبة المُنشأة (status: "pending") |
GET /business/claims | رمز JWT للمستخدم | { total, items[] } — مطالباتك |
GET /business/owned-places | رمز JWT للمستخدم (مالك) | { total, items[] } — أماكنك المتحقَّق منها |
POST /business/campaigns | رمز JWT للمستخدم (مالك/مسؤول) | الحملة المُنشأة (status: "draft") |
GET /business/campaigns | رمز JWT للمستخدم (محصورة بالمالك) | { total, items[] } |
POST /business/ai-copy | رمز JWT للمستخدم (مالك/مسؤول) | { model, unavailable, purpose, content } |
GET /business/markers | مفتاح واجهة برمجية | { limit, zoom, category, performance, items[] } |
GET /places/{slug}/entrances | مفتاح واجهة برمجية | المداخل المعتمدة [] |
POST /places/{slug}/entrances | رمز JWT للمستخدم (مالك/مسؤول) | المدخل المُنشأ (يخضع للإشراف قبل النشر) |
GET /fleet · POST /fleet | رمز JWT للمستخدم | أساطيلك / الأسطول المُنشأ |
GET·POST /fleet/{id}/drivers | رمز JWT للمستخدم | السائقون / السائق المُضاف |
GET·POST /fleet/{id}/tasks | رمز JWT للمستخدم | المهام / المهمة المُنشأة (حقول الدفع عند الاستلام) |
POST /fleet/{id}/optimize | رمز JWT للمستخدم | مسار مُرتَّب بأقرب جار |
GET /fleet/me/tasks | رمز JWT للمستخدم (سائق) | مهام السائق |
PATCH /fleet/tasks/{taskId}/status | رمز JWT للمستخدم (سائق) | المهمة المُحدَّثة (codCollected?، proofUrl?) |
POST /fleet/drivers/{driverId}/ping | رمز JWT للمستخدم (سائق) | الموقع الحيّ المُسجَّل |
GET /admin/data-licensing/datasets | مسؤول | مجموعات البيانات القابلة للترخيص |
GET /admin/data-licensing/export | مسؤول | FeatureCollection من GeoJSON منزوع الهوية |
GET /go?ref=CODE | مفتاح واجهة برمجية | إعادة توجيه HTTP إلى الوجهة (تُسجِّل الإحالة) |
المسارات السياحية والأسيجة الجغرافية والخرائط الثابتة
تحسين الرحلات متعددة المحطات، والأسيجة الجغرافية مع خطافات الويب، وصور الخرائط الثابتة القابلة للتضمين.
ذكاء المرور والملاحظات
ملفات المرور التاريخية، تصنيفات الازدحام، توقيت المغادرة، رؤى المنطقة، الشعبية الآمنة للخصوصية، تحليلات التغيير، وملاحظات داخل التطبيق.