Skip to content

백그라운드 처리 및 콜백

On this page

CV의 백록을 분석하거나 1시간짜리 면접을 분석하는 것은 연결이 열려있지 않아야합니다. 아싱크 엔드포인트는 링크나 업로드를 받아 task_id로 즉시 응답하고 우리의 편에서 작업을 실행합니다. 설문조사를 통해 결과를 수집하거나 서버에 전달하십시오.

아싱크 엔드포인트

최종점입력결과
POST /parse/async최대 25개의 CV 링크 (file_urls), 또는 업로드 filesCV당 1개의 분석 결과, 순서대로, 같은 모양으로 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), 또는 업로드된 media 파일transcript_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"}'

/translate/async에 JSON 요청을 하는 경우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_codeHTTP 상태는 작업 자체가 완료되면 생성되었습니다.
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 에 해당하지 않은 모든 답은 실패한 배달으로 간주되며, 리디렉션은 따르지 않습니다.
  • 배달이 표시되기 전까지 약 5시간 21분 동안 계속되는 배달의 재 시도가 증가하고 (1, 5, 15분, 60분, 4시간) dead.
  • 결과는 GET /{op}/tasks/{task_id} 에서 읽을 수 있도록 유지됩니다. 따라서 생기는 실패로 인해 아무것도 잃지 않습니다.

URL에 대한 요구 사항

호출 URL는 https이며, 공개적으로 액세스 할 수 있으며 자격증도 포함되지 않습니다. 개인 네트워크의 주소는 거부됩니다.

  • 전송하는 링크 (file_urls,resume_urls,media_url) 는 공개 https 링크가어야 합니다. 공개 링크 또는 사전 서명된 저장 장치 URL (예를 들어, S3) 는 모두 작동합니다.
  • 리디렉션 링크는 거부됩니다.
  • 링크를 통해 녹음하는 시간은 1 GB과 2시간이 될 수 있습니다. 업로드된 파일은 각각 12개의 MB로 제한됩니다.

청구서

  • 작업은 최종 결과로 한 번, 그 동작의 한 요청으로 청구됩니다. 25개의 링크의 아싱크 분석은 $0.01를 지불합니다.
  • 실패한 작업 (죽은 링크, 읽을 수 없는 파일) 은 결코 충전되지 않습니다.
  • 기록 작업 (/summary/async,/transcribe/async) 는 작업이 받아들여지면 최대 2시간 동안 비용을 유지하도록 합니다. 그 예약에 대한 충분한 신용이 없으면, 요청은 400를 반환합니다. 임무가 실패하면 예약이 풀립니다.

가격 및 청구서를 참조.

작업에 의해 보관된 데이터

동기화 작업과 달리, 배경 작업은 결과를 저장하여 설문조사를 할 수 있으며 업로드 된 파일은 계정 아래에 저장됩니다. 데이터 처리 참조.

Updated