새로운 문서를 작성 중입니다.새 문서로 이동
ClawOps Docs
배치 발신 (캠페인)

결과 조회

배치 발신의 수신자별 결과 조회 방법. 상태·통화 ID·AMD 판정·콜 플로우 수집값(result) 필드와 callflow.ended webhook 으로 실시간 수신하기.

수신자별 결과 조회

curl "https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/call-batches/clx1a2b3c4d5e/tasks?status=done&page=1&pageSize=50" \
  -H "Authorization: Bearer $CLAWOPS_API_KEY"
{
  "tasks": [
    {
      "taskId": "clt9x8y7z6",
      "to": "01012345678",
      "status": "done",
      "attempt": 1,
      "dialRound": 1,
      "nextAttemptAt": null,
      "expectedDialAt": null,
      "callId": "CA1a2b3c4d5e6f",
      "disposition": "completed",
      "answeredBy": "human",
      "result": { "choice": "1", "preferred_time": "오후 2시" },
      "lastError": null,
      "messageKind": null,
      "messageStatus": null,
      "messageDeliveryStatus": null,
      "messageError": null
    }
  ]
}

쿼리 파라미터

파라미터타입필수설명
statusstring선택상태로 필터링 — pending · dialing · done · failed · canceled · expired
pageinteger선택페이지 번호. 기본 1
pageSizeinteger선택페이지 크기. 기본 50, 최대 500

응답 필드

파라미터타입필수설명
taskIdstring필수수신자 항목 ID
tostring필수수신 번호
statusstring필수pending · dialing · done · failed · canceled · expired
attemptinteger필수내부 발신 시도 횟수(통신 오류 재시도 포함). 사람이 읽는 "몇 번 걸었나"는 dialRound 입니다
dialRoundinteger필수실제로 벨이 울린 횟수이자 다음에 걸 차수의 인덱스입니다(0이면 다음이 1차). 발신 자체가 실패한 경우는 세지 않아, 설정한 차수가 망 장애로 소모되지 않습니다
nextAttemptAtstring선택재시도 대기가 풀리는 시각(정책상)
expectedDialAtstring선택발신 가능 시간대까지 반영한 실제 예상 발신 시각. 화면에 보여줄 값은 이쪽입니다
callIdstring선택발신된 통화 ID. 이 값으로 통화 상세·녹취·전사를 조회합니다. 재시도한 경우 마지막 통화의 ID 입니다
dispositionstring선택통화 종료 상태 — completed · failed · busy · no-answer
answeredBystring선택자동응답기 감지 결과(human · machine · unknown). 배치를 만들 때 MachineDetection 을 켠 경우에만 채워집니다
resultobject선택콜 플로우가 통화 중 수집한 변수
lastErrorstring선택마지막 실패 사유
messageKindstring선택미연결 문자 종류 — first(첫 통화 실패 후) · final(끝내 미연결)
messageStatusstring선택문자 처리 상태 — pending · queued · failed · skipped. queued 는 통신사에 넘겼다는 뜻이지 전달 성공이 아닙니다
messageDeliveryStatusstring선택통신사 리포트로 확정된 전달 상태 — queued · sent · failed. 실제 도달 여부는 이 값으로 판단하세요
messageErrorstring선택문자를 보내지 못한 사유

status 는 배치 관점의 처리 결과이고, disposition 은 통화 자체의 종료 상태입니다. 통화가 걸렸지만 상대가 받지 않은 경우 status: "failed" + disposition: "no-answer" 처럼 함께 나타납니다.

재시도 차수를 두면 대기 중인 수신자는 status: "pending" 이면서 dialRound 가 1 이상입니다 — 아직 한 번도 안 건 대기(dialRound: 0)와 구분됩니다.

disposition: "failed" 는 결번·망 오류를 한데 묶은 값입니다. 어떤 번호가 결번이라 다시 걸어도 소용없는지 가려내려면 callId통화 단건 조회hangupCause 를 보세요 — 통화 실패 사유 에 전체 목록과 재시도 판단 기준이 있습니다.

문자가 실제로 도달했는지는 messageStatus 가 아니라 messageDeliveryStatus 로 판단하세요. messageStatus: "queued" 는 통신사에 넘겼다는 뜻일 뿐이고, 발신번호가 문자용으로 등록되지 않은 경우 등은 리포트가 도착한 뒤에야 messageDeliveryStatus: "failed" 로 드러납니다.

콜 플로우 수집값 (result)

콜 플로우로 발신한 배치라면, 통화 중 수집한 값이 result 에 담깁니다. 설문 응답, 예약 확인 여부, 녹음 URL 등 캠페인의 실제 산출물입니다.

result콜 플로우(CallFlowId) 배치에서만 채워집니다. 매니지드 에이전트(AgentId) 나 VoiceML URL(Url) 로 발신한 배치는 비어 있습니다 — 이 경우 통화 전사· 요약 이나 직접 구성한 웹훅으로 결과를 받으세요.

녹음 값 듣기

녹음 블럭이 있으면 그 값은 녹음 파일의 URL 입니다. 만료되지 않으니 결과와 함께 보관해 두고, 필요할 때 API 키를 붙여 내려받으면 됩니다(녹음 조회 API). 콘솔에서는 배치 상세 화면의 결과 표에서 바로 재생할 수 있습니다.

curl -L -H "Authorization: Bearer $CLAWOPS_API_KEY" "$RECORDING_URL" -o answer.wav

녹음 블럭이 여러 개면 블럭마다 '녹음 저장' 이름을 다르게 주세요. 이름을 주지 않으면 모두 recording_url 하나를 써서 마지막 녹음만 남습니다. 통화 전체 녹음은 이 값이 아니라 통화 녹음 API 로 받는 별도 파일입니다.

통화 상세로 연결하기

callId 가 있으면 일반 통화와 똑같이 조회할 수 있습니다.

목적엔드포인트
통화 상세getCall
녹취 파일getRecording
받아쓰기(전사)getTranscript
통화 요약getSummary

폴링 대신 webhook 으로 받기

대량 배치에서 결과를 폴링하면 그만큼 요청이 늘어납니다. 콜 플로우 배치라면 callflow.ended webhook 을 등록해 두는 편이 낫습니다 — 통화 1건이 끝날 때마다 즉시 수집값이 도착합니다.

POST /v1/accounts/{accountId}/webhooks

{ "url": "https://my-app.com/callflow-webhook", "events": ["callflow.ended"] }

이 webhook 의 페이로드에는 배치 ID 가 들어 있지 않습니다. 배치와 연결하려면 CallId 를 기준으로 /tasks 응답의 callId 와 맞추거나, 배치 생성 시 Tasks[].Variables 에 자체 식별자를 넣어 두세요 (주입한 변수는 Variables 에 그대로 되돌아옵니다).

진행 요약만 필요할 때

수신자 전체를 훑지 않고 진행률만 보려면 배치 상세의 counts 를 사용하세요.

curl https://api.claw-ops.com/v1/accounts/AC1a2b3c4d/call-batches/clx1a2b3c4d5e \
  -H "Authorization: Bearer $CLAWOPS_API_KEY"
{ "status": "running", "counts": { "pending": 120, "dialing": 3, "done": 77, "failed": 5 } }