API وMCP
من نموذج إلى رسم، عبر HTTP
سير عمل REST API كاملًا — جلسة، والملفات، والتكوين، ومعاينة، والتصدير، والتنزيل — والبرنامج نفسه بلغات cURL وJavaScript وTypeScript وPython.
قبل أن تبدأ
- حساب Occlusia ومفتاح API، يُنشأ ضمن مفاتيح API في حسابك. احتفظ بالمفتاح في متغير بيئة: تقرأ الأمثلة
OCCLUSIA_API_KEY. - نموذج: ملف
.skpمحفوظ بواسطة SketchUp 2021 أو أحدث، أو ملف.ifcأو.fbxأو.occs، بحد أقصى 512 MB. - معيارك الرسومي في صورة تكوين، مصدَّر من Occlusia Studio عبر Export › Configuration (.occc) — أو لا شيء، فيُرسم النموذج بالإعدادات الافتراضية.
- نقاط، أو حساب في الوصول المبكر: فتح النموذج وكل عملية تصدير يكلّفان نقاطًا (API وMCP، التكلفة).
الخطوات الست
- 01
افتح جلسة
يبدأ
POST /sessionsمحركًا خاصًا بك، مسجَّلًا دخوله إلى حسابك، ويجيب بمعرّفهid. يحتفظ الحساب بـ 3 جلسات في وقت واحد؛ وتنتهي الجلسة بعد 15 دقيقة دون استخدام، أو بعد 8 ساعات. - 02
ارفع الملفات
PUT /sessions/{id}/files/{name}، مع الملف في صورة متن خام للطلب: النموذج وتكوينه. والاسم هو اسم الملف في الجلسة، وليس مسارًا على الخادم أبدًا. - 03
افتح واضبط
يفتح الأمر
model.openمع{"path": "house.skp"}النموذج ويجيب بمناظره فيsections. ويطبّقconfig.setمع{"path": "standard.occc"}التكوين؛ والتكوين الذي يخالف الصيغة يُرفض كله، مع كل الأخطاء. - 04
انظر، إن احتجت
يجيب
preview.renderبمنظر في صورة PNG أو JPEG أو SVG نفسه، بحد أقصى 2048 بكسل على ضلعه الأطول. ولا يحتاج التصدير إليه. - 05
صدّر
exportمعformat—svgأوdxfأوpdfأوpngأوjpg—، وsectionsالمراد رسمها — اسم منظر، أو قائمة بها — وout: ملف لرسم واحد، أو مجلد لعدة رسومات. ويجعلmergedمنها ملف PDF واحدًا. - 06
نزّل، ثم أنهِ الجلسة
يُنزّل
GET /sessions/{id}/files/{name}ما كتبه التصدير؛ ويُنهيDELETE /sessions/{id}الجلسة، وتُحذف ملفاتها معها.
البرنامج نفسه بأربع لغات
نموذج واحد مُدخَل، ومنظره الأول مُخرَج بصيغة DXF، وتنتهي الجلسة حتى عند فشل خطوة. وتتوقف كل لغة عند الرفض بحالته ومتن الخطأ.
KEY=occ_sk_… # Account › API keys
API=https://api.occlusia.app/v1/engine
AUTH="Authorization: Bearer $KEY"
JSON="Content-Type: application/json"
# 1. A session: an engine of your own, with its own files
S=$(curl -s -X POST $API/sessions -H "$AUTH" | jq -r .id)
# 2. The model and your graphic standard
curl -T house.skp $API/sessions/$S/files/house.skp -H "$AUTH"
curl -T standard.occc $API/sessions/$S/files/standard.occc -H "$AUTH"
# 3. Open the model (1 credit), apply the configuration (free)
curl $API/sessions/$S/commands/model.open -H "$AUTH" -H "$JSON" -d '{"path":"house.skp"}'
curl $API/sessions/$S/commands/config.set -H "$AUTH" -H "$JSON" -d '{"path":"standard.occc"}'
# 4. Export one view as DXF (1 credit per drawing)
curl $API/sessions/$S/commands/export -H "$AUTH" -H "$JSON" \
-d '{"format":"dxf","sections":"Section A-A","out":"section-a.dxf"}'
# 5. Download it, then end the session: its files are deleted with it
curl -o section-a.dxf $API/sessions/$S/files/section-a.dxf -H "$AUTH"
curl -X DELETE $API/sessions/$S -H "$AUTH"تصدّر الأمثلة المنظر الأول للنموذج. ويسردها sections.list كلها ويقول أيها نشط؛ ويسرد objects.list وannotations.list وlevels.list بقية النموذج.
اختيار المناظر والصيغ
- يصدّر
"sections": "Section A-A"منظرًا واحدًا؛ و["Section A-A", "Ground floor plan"]عدة مناظر، لكل منها ملفه في المجلدout— أو ملف PDF واحد مع"merged": true. - يحدد
pageصفحة PDF لكل منظر —formatوorientationوscale_modeبقيمةfitأوcustomمعscale_denominator(1:N) وmargins_mm—، ويحددpagesمنظرًا واحدًا في كل صفحة؛ ويحددimageحجم صورة PNG أو JPEG أو مقياسها، والدقة والخلفية والجودة. - يقرأ
export.configإعداد صفحة كل منظر، ويغيّرهexport.setupدون تصدير، كما تفعل نافذة التصدير. - يجيب التصدير بالملفات التي كتبها وبما كلّفه؛ ويسرد
GET /sessions/{id}/filesملفات الجلسة.
التنسيق دون ملف تكوين
كل إعداد يحمله التكوين يمكن ضبطه أيضًا أمرًا بعد أمر: object.set لكائن، وobject.apply_preset لإعداد مسبق للتهشير، وlayers.create وlayers.update لطبقات DXF، وsection.set لمنظر، وannotation.set وlevel.set للملاحظات والمناسيب. ويسرد engine.schema كل إعداد وقيمه؛ ويجيب config.get بالتكوين كاملًا، لحفظه ملف .occc.
التصدير الطويل: المهام والأحداث
قد تستغرق مجموعة PDF دقائق. أرسل أمرها مع Prefer: respond-async: فيجيب بـ 202 ومهمة فورًا، ويقول GET /sessions/{id}/jobs/{job} إن كانت المهمة جارية، أو انتهت بنتيجتها، أو فشلت بخطئها. ويبثّ GET /sessions/{id}/events ما يفعله المحرك على هيئة أحداث مرسَلة من الخادم: progress وmessage وexport وjob وended.
الأخطاء وإعادة المحاولة
- كل رفض هو
{"error": {"code", "message"}}، برمز ثابت وحالة HTTP المقابلة له. - يحمل
429معcloud_limitأوrate_limited، و503معbusy، الترويسةRetry-After: انتظر تلك المدة، ثم أرسل الطلب نفسه مجددًا. - أرسل
Idempotency-Keyمع الأمر: فيُجاب عن إعادة المحاولة بعد جواب ضائع من التشغيل الأول — لا تُنفَّذ ولا تُحتسب مرتين أبدًا. - يحمل كل جواب
X-Request-Id: اذكره مع أي سؤال عن طلب.
المرجع
- GET /v1/engine
- إصدار المحرك وبناؤه، دون مفتاح.
- GET /v1/engine/openapi.json
- واجهة API كاملة بصيغة OpenAPI.
- GET /v1/engine/commands
- كل أمر، مع معاملاته بصيغة JSON Schema.
كل مسار وحد ورمز خطأ مسرود في API وMCP، ضمن REST API.