Skip to content

تشغيل استخراج

POST /v1/extractions/run

قم بتشغيل استخراج على مستند PDF. تتم معالجة المستند باستخدام القالب المحدد، وتُرجع البيانات المستخرجة كـ JSON منظم يطابق تعريفات حقول القالب.

جرّبه

اختبر هذا الـ endpoint بشكل تفاعلي في Swagger UI.

المصادقة مطلوبة

أدرج مفتاح API في ترويسة Authorization.

الطلب

الترويسات

الترويسةالقيمةمطلوب
AuthorizationBearer <token>نعم
Content-Typeapplication/jsonنعم

معاملات الاستعلام

المعاملالنوعمطلوبالوصف
asyncstringلااضبطه على "true" للعودة فوراً بحالة processing بدلاً من الانتظار حتى الاكتمال. السلوك الافتراضي (محذوف أو "false") هو متزامن.

الجسم

الحقلالنوعمطلوبالوصف
templateIdstringنعممعرّف قالب الاستخراج المراد استخدامه.
fileNamestringنعماسم الملف الأصلي للمستند.
pdfBase64stringنعممحتوى ملف PDF مشفر بـ Base64.
mimeTypestringنعمنوع MIME للملف. القيم المقبولة: application/pdf، application/vnd.openxmlformats-officedocument.wordprocessingml.document.
runIdstringلامعرّف اختياري لتجميع عمليات الاستخراج المرتبطة في تشغيل دفعي.

أمثلة الكود

bash
curl -X POST https://api.docmap.io/v1/extractions/run \
  -H "Authorization: Bearer dm_live_abc123def456ghi789jkl012mno345" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "tmpl_8f3a2b1c4d5e6f7g",
    "fileName": "invoice-2024-001.pdf",
    "pdfBase64": "JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YW...",
    "mimeType": "application/pdf"
  }'
typescript
const apiKey = process.env.DOCMAP_API_KEY

const response = await fetch('https://api.docmap.io/v1/extractions/run', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    templateId: 'tmpl_8f3a2b1c4d5e6f7g',
    fileName: 'invoice-2024-001.pdf',
    pdfBase64: pdfBuffer.toString('base64'),
    mimeType: 'application/pdf',
  }),
})

const { data } = await response.json()
console.log(data.extractedData)
python
import requests
import base64

api_key = "dm_live_abc123def456ghi789jkl012mno345"

with open("invoice-2024-001.pdf", "rb") as f:
    pdf_base64 = base64.b64encode(f.read()).decode("utf-8")

response = requests.post(
    "https://api.docmap.io/v1/extractions/run",
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    json={
        "templateId": "tmpl_8f3a2b1c4d5e6f7g",
        "fileName": "invoice-2024-001.pdf",
        "pdfBase64": pdf_base64,
        "mimeType": "application/pdf",
    },
)

data = response.json()["data"]
print(data["extractedData"])

الاستجابة

الحالة: 200 OK

جسم الاستجابة مغلف في كائن data.

الحقول

الحقلالنوعالوصف
idstringمعرّف الاستخراج الفريد (مسبوق بـ extract_).
userIdstringمعرّف المستخدم الذي يملك هذا الاستخراج.
templateIdstringمعرّف القالب المستخدم للاستخراج.
templateNamestringاسم العرض للقالب المستخدم.
fileNamestringاسم الملف الأصلي للمستند المرفوع.
status"processing" | "completed" | "failed"حالة الاستخراج الحالية. "processing" عند استخدام الوضع غير المتزامن، "completed" عند النجاح، "failed" عند الخطأ.
extractedDataobject | nullالبيانات المستخرجة المطابقة لحقول القالب. null إذا فشل الاستخراج.
errorstring | nullرسالة خطأ تصف الفشل. null إذا نجح الاستخراج.
variablesVariable[]مصفوفة تعريفات متغيرات القالب المستخدمة أثناء الاستخراج.
source"dashboard" | "api"كيف تم تشغيل الاستخراج.
runIdstring | nullمعرّف التشغيل الدفعي، إذا تم توفيره في الطلب.
processingTimeMsnumber | nullإجمالي مدة المعالجة بالمللي ثانية.
createdAtstringطابع زمني ISO 8601 لوقت إنشاء الاستخراج.

مثال

json
{
  "data": {
    "id": "extract_9k2m4n6p8q0r1s3t",
    "userId": "uid_a1b2c3d4e5f6",
    "templateId": "tmpl_8f3a2b1c4d5e6f7g",
    "templateName": "Invoice Template",
    "fileName": "invoice-2024-001.pdf",
    "status": "completed",
    "extractedData": {
      "vendor_name": "Acme Corp",
      "invoice_number": "INV-2024-001",
      "invoice_date": "2024-11-15",
      "total_amount": 1250.00,
      "currency": "USD",
      "line_items": [
        {
          "description": "Widget A",
          "quantity": 10,
          "unit_price": 125.00
        }
      ]
    },
    "error": null,
    "variables": [
      {
        "name": "vendor_name",
        "type": "string",
        "description": "Name of the vendor or supplier"
      },
      {
        "name": "total_amount",
        "type": "number",
        "description": "Total invoice amount"
      }
    ],
    "source": "api",
    "runId": null,
    "processingTimeMs": 3842,
    "createdAt": "2024-11-20T14:30:00.000Z"
  }
}

الوضع غير المتزامن

بشكل افتراضي، تنتظر واجهة API انتهاء الاستخراج قبل الاستجابة (متزامن). لعمليات الاستخراج الطويلة، يمكنك استخدام الوضع غير المتزامن للحصول على استجابة فورية والاستعلام عن النتيجة لاحقاً.

أضف ?async=true إلى عنوان URL لتفعيل الوضع غير المتزامن:

bash
curl -X POST "https://api.docmap.io/v1/extractions/run?async=true" \
  -H "Authorization: Bearer dm_live_abc123def456ghi789jkl012mno345" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "tmpl_8f3a2b1c4d5e6f7g",
    "fileName": "invoice-2024-001.pdf",
    "pdfBase64": "JVBERi0xLjQKMSAwIG9iago8PAovVHlwZSAvQ2F0YW...",
    "mimeType": "application/pdf"
  }'

الاستجابة: 202 Accepted

الاستجابة لها نفس الشكل كاستجابة متزامنة، لكن status ستكون "processing"، وextractedData ستكون null، وprocessingTimeMs ستكون null:

json
{
  "data": {
    "id": "extract_9k2m4n6p8q0r1s3t",
    "userId": "uid_a1b2c3d4e5f6",
    "templateId": "tmpl_8f3a2b1c4d5e6f7g",
    "templateName": "Invoice Template",
    "fileName": "invoice-2024-001.pdf",
    "status": "processing",
    "extractedData": null,
    "error": null,
    "variables": [...],
    "source": "api",
    "runId": null,
    "processingTimeMs": null,
    "createdAt": "2024-11-20T14:30:00.000Z"
  }
}

استخدم المعرّف id المُرجع للاستعلام عن نقطة النهاية جلب استخراج حتى يتغير status إلى "completed" أو "failed".

WARNING

إذا بقي الاستخراج في حالة "processing" لأكثر من دقيقتين، تعامل معه على أنه فاشل. لا يوجد مهلة تلقائية -- في حالات نادرة (مثل إعادة تشغيل الخادم)، قد يبقى السجل في حالة "processing" إلى أجل غير مسمى.

الأخطاء

الحالةالرمزالوصف
401UNAUTHORIZEDمفتاح API / رمز مفقود أو غير صالح أو منتهي الصلاحية.
404NOT_FOUNDالقالب المحدد غير موجود أو لا ينتمي إلى حسابك.
429USAGE_LIMIT_EXCEEDEDلقد وصلت إلى حد الاستخراج الشهري لخطتك.
500INTERNAL_ERRORحدث خطأ غير متوقع أثناء معالجة الاستخراج.

وثائق DocMap API