معالجة الخلفية والردود
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 و language | transcript_text, transcript_entries و summary |
POST /transcribe/async | وصلة تسجيل (media_url) ، أو ملف واحد تحميل media | transcript_text و transcript_entries |
POST /translate/async | text, 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 | أية عملية تقوم بها المهمة |
status | queued, 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-Signature | sha256=<hex>: حروف صغيرة الستة HMAC-SHA256 من جسم الطلب الخام بالضبط، المفتاح مع callback_secret |
X-Curriculo-Task-Id | هوية المهمة |
Content-Type | application/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