Skip to content

معالجة الخلفية والردود

On this page

لا ينبغي أن يبقي اتصال مفتوحاً من خلال تحليل سجلات السيرة الذاتية المتأخرة أو تحليل مقابلة تستغرق ساعة واحدة. نقطة نهاية التزامن تقبل الروابط أو تحميلات ، الإجابة على الفور مع task_id، وتشغيل العمل من جانبنا. اجمع النتيجة عن طريق استطلاع الرأي أو أرسلها إلى خادمك

نقاط نهاية التزامن

النقطة النهائيةالمدخلاتالنتيجة
POST /parse/asyncما يصل إلى 25 رابط CV (file_urls) ، أو تم تحميله filesنتيجة تحليل واحدة لكل CV، بالترتيب، نفس الشكل POST /parse/
POST /evaluate/asyncما يصل إلى 25 رابط CV (resume_urls) ، أو تحميل resume_pdfs، بالإضافة إلى job_details أو job_idتقييم واحد لكل CV، بالترتيب، نفس الشكل POST /evaluate/
POST /summary/asyncوصلة تسجيل (media_url) ، أو ملف media واحد تم تحميله؛ اختياري interview_id و languagetranscript_text, transcript_entries و summary
POST /transcribe/asyncوصلة تسجيل (media_url) ، أو ملف واحد تحميل mediatranscript_text و transcript_entries
POST /translate/asynctext, texts أو روابط الوثائق (file_urls) ، أو تحميل files؛source_language و target_languageنفس الشكل POST /translate/

كل طلب للتزامن يمكن أن يتضمن أيضا callback_url.

نقطة نهاية الاقتراعالعائدات
GET /{op}/tasks/{task_id}حالة المهمة وعند الانتهاء من المهمة، النتيجة {op} هو parse،evaluate،summary،transcribe أو translate.

إرسال مهمة

أرسل application/json مع قائمة الروابط، أو multipart/form-data مع تحميلات. في الأجزاء المتعددة، يمكن تكرار حقل الرابط أو إرسال رابط واحد لكل سطر.

curl -X POST https://api.curriculo.me/public/parse/async \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -H 'Content-Type: application/json' \
  -d '{"file_urls": ["https://example.com/cvs/candidate_a.pdf", "https://example.com/cvs/candidate_b.pdf"], "callback_url": "https://example.com/curriculo/callback"}'
curl -X POST https://api.curriculo.me/public/summary/async \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -H 'Content-Type: application/json' \
  -d '{"media_url": "https://example.com/interviews/interview.mp4", "interview_id": "int_0042", "language": "ko"}'
curl -X POST https://api.curriculo.me/public/translate/async \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -H 'Content-Type: application/json' \
  -d '{"texts": ["Senior backend engineer", "Remote within Europe"], "source_language": "en", "target_language": "fr"}'

بالنسبة لطلبات JSON إلى /translate/async، مطلوبsource_language . بالنسبة لـ /evaluate/async، أرسل الوظيفة كـ job_details أو job_id.

يرد API على الفور مع 202:

{ "task_id": "…", "status": "queued", "callback_secret": "whsec_…" }

callback_secret يتم إرجاعها فقط عندما ترسل callback_url. يظهر بالضبط مرة واحدة، مثل مفتاح API، لذلك تخزينها.

الحصول على النتيجة

الانتخابات

curl https://api.curriculo.me/public/parse/tasks/<task_id> \
  -H 'Authorization: Bearer key_abc123_yoursecret'

يمكن قراءة المهمة بنفس المفتاح الذي خلقها، سواء تم إعادة الاتصال أم لا. الإجابة لا تشمل الإتصال مرة أخرى URL أو السرية.

الحقلالمعنى
task_idهوية المهمة
opأية عملية تقوم بها المهمة
statusqueued, processing, succeeded أو failed.
status_codeحالة HTTP التي أنتجها العملية نفسها، بمجرد الانتهاء منها.
resultجسم الاستجابة للعملية بعد status هو succeeded؛null قبل.
errorرسالة الخطأ عندما فشلت المهمة
deliveryحالة إرسال المكالمات: not_requested،pending،delivered أو dead، مع عدد المحاولات.
created_at, completed_atطوابع الزمن

ردات المكالمات

إذا أرسلتم callback_url، يتم نشر المهمة المكتملة هناك ك application/json مع هذه العناوين:

الرأسالقيمة
X-Curriculo-Signaturesha256=<hex>: حروف صغيرة الستة HMAC-SHA256 من جسم الطلب الخام بالضبط، المفتاح مع callback_secret
X-Curriculo-Task-Idهوية المهمة
Content-Typeapplication/json

الجثة هي {task_id, op, status, status_code, result, error, completed_at}.

لا توجد عنوان طابع زمني، لذلك إزالة عمليات التسليم المكررة على task_id: يمكن أن تأتي نفس المهمة أكثر من مرة إذا استجاب خادمك ببطء أو بطريق خطأ.

تحقق من التوقيع

قم بحساب HMAC-SHA256 من جسم الطلب الخام، باستخدام callback_secret الخاص بك بالضبط كما جرى (بما في ذلك مقدمة whsec_ ) كمفتاح. مقارنة sha256= + الحروف الصغيرة الستة مع X-Curriculo-Signature في وقت ثابت. استخدم البايتات الخام كما تلقت، قبل أي تحليل JSON، ورفض أي شيء لا يطابق.

Python:

import hashlib
import hmac

def is_valid(raw_body: bytes, signature_header: str, callback_secret: str) -> bool:
    # callback_secret is used as-is, including the "whsec_" prefix
    expected = "sha256=" + hmac.new(
        callback_secret.encode(), raw_body, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature_header or "")

JavaScript (Node.js):

import crypto from "node:crypto";

// rawBody must be the unparsed request body (a Buffer)
export function isValid(rawBody, signatureHeader, callbackSecret) {
  const expected =
    "sha256=" +
    crypto.createHmac("sha256", callbackSecret).update(rawBody).digest("hex");
  const a = Buffer.from(expected);
  const b = Buffer.from(signatureHeader || "");
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

ثم قم بتكرار النسخة على رأس X-Curriculo-Task-Id (أو task_id في الجسم) والرد 2xx.

التسليم وإعادة المحاولات

  • أي إجابة غير2xx تعتبر فشل في التسليم، ولا يتم اتباع إعادة التوجيهات.
  • محاولات إعادة التسليم مع تأخير متزايد (1, 5, 15 و 60 دقيقة، ثم 4 ساعات) لمدة 5 ساعات و 21 دقيقة في الإجمال، قبل أن يتم وضع علامة على التسليم dead.
  • النتيجة تبقى قابلة للقراءة في GET /{op}/tasks/{task_id} على أي حال، لذلك لا شيء يضيع على التسليم المفقود.

متطلبات على عناوين URL

يجب أن تكون عناوين الاتصال الراجعية https، يمكن الوصول إليها علناً ، ولا تحتوي على أوراق اعتماد. يتم رفض العناوين على الشبكات الخاصة.

  • الروابط التي ترسلها (file_urls،resume_urls،media_url) يجب أن تكون الروابط العامة https . الرابط العام أو مخزن URL الموقع مسبقاً (على سبيل المثال S3) يعمل كلاهما.
  • الروابط التي تقوم بإعادة التوجيه يتم رفضها.
  • التسجيلات عن طريق الرابط يمكن أن تصل إلى 1 GB و 2 ساعات. الملفات المحمولة محدودة إلى 12 MB كل واحد.

الفواتير

  • يتم إرسال تكاليف للمهمة مرة واحدة ، عند النتيجة النهائية ، كطلب واحد من عملها: تحليل غير متزامن من 25 رابط يكلف 0.01 دولارًا.
  • لا يتم دفع المهام التي تفشل (رابط ميت، ملف لا يمكن قراءته) أبدا.
  • مهام التسجيل (/summary/async,/transcribe/async) احتفظوا بالرسوم لمدة ساعتين أقصاها عندما يتم قبول المهمة. بدون إئتمان كاف لتلك الحجز، فإن الطلب يعيد 400. يتم إطلاق الحجز إذا فشلت المهمة.

انظر التسعير والفواتير.

البيانات المحتفظ بها من قبل المهام

على عكس العمليات المزامنة، تُحتفظ مهمة خلفية بالنتيجة حتى تتمكن من إجراء استطلاع للرأي عنها، وتُخزن الملفات المتحملة تحت حسابك. انظر معالجة البيانات.

Updated