Glowb Dev Docs
SaaS API콘텐츠 검수

GET /ai/influence/contents/ai-review/script/{reviewId}

AI 스크립트 검수 결과 조회

AI 스크립트 검수 결과 조회

1차 제출물(SCRIPT_VIDEO)에 대한 AI 스크립트 검수 결과를 검수 라운드(reviewId) 단위로 조회합니다.

해당 회차에서 제출된 모든 SCRIPT_VIDEO 항목을 묶어 1건의 검수 결과로 저장하므로, itemId가 아닌 reviewId로 조회합니다.

검수 진행 조건 및 시점

  • 가이드라인 버전이 v4인 캠페인에서만 AI 스크립트 검수가 진행됩니다.
  • 일괄 제출(PUT /ai/influence/contents/review/{reviewId}/submit) 직후 비동기로 검수가 시작되며, 평균 30~60초 소요됩니다.
  • 검수가 끝나기 전에 조회하면 datanull로 반환됩니다. (잠시 후 다시 조회)

HTTP 요청

GET /ai/influence/contents/ai-review/script/{reviewId}
Authorization: Bearer {access_token}

Path Parameters

파라미터타입필수설명
reviewIdlong검수 라운드 ID

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "검수 결과 조회 완료",
  "data": {
    "collabNo": 1234,
    "applicationId": 5678,
    "reviewId": 910,
    "contentType": "SCRIPT_VIDEO",
    "overallStatus": "PARTIAL",
    "checkedAt": "2026-05-14T10:30:00Z",
    "contentDetailResult": {
      "categoryCode": "BEAUTY",
      "basicShots": {
        "beginning": [
          {
            "code": "HOOK",
            "expected": {},
            "result": {
              "status": "PASS",
              "confidence": 0.90,
              "evidence": [
                {
                  "type": "script_text",
                  "sceneIndex": 0,
                  "description": "피부 고민 토로하며 훅 시작",
                  "text": "요즘 피부가 너무 건조해서 고민이었는데요"
                }
              ],
              "comment": "가이드라인의 훅 요구사항에 맞게 피부 고민을 제시하고 있음"
            }
          }
        ],
        "middle": [
          {
            "code": "TEXTURE_SHOT",
            "expected": {},
            "result": { "status": "UNCERTAIN", "confidence": 0.45, "evidence": [], "comment": "제형 묘사가 불명확" }
          }
        ],
        "ending": [
          {
            "code": "PURCHASE_GUIDE_END",
            "expected": {},
            "result": { "status": "FAIL", "confidence": 0.80, "evidence": [], "comment": "구매 유도 마무리 장면 없음" }
          }
        ]
      }
    },
    "marketingInfoResult": {
      "requiredPoints": [
        {
          "text": "SPF50+ PA++++ 자외선 차단",
          "result": {
            "status": "PASS",
            "matchType": "PARAPHRASE",
            "matchedText": "SPF50에 PA++++ 자외선 차단까지 되거든요",
            "evidence": [
              { "type": "script_text", "sceneIndex": 1, "description": "나레이션 언급", "text": "이 크림 SPF50에 PA++++ 자외선 차단까지 되거든요" }
            ],
            "comment": "씬2 나레이션에서 거의 동일한 표현으로 언급"
          }
        },
        {
          "text": "24시간 지속력",
          "result": { "status": "FAIL", "matchType": "NOT_FOUND", "matchedText": null, "evidence": [], "comment": "스크립트 전체에서 미발견" }
        }
      ],
      "optionalPoints": [
        {
          "text": "비건 인증",
          "result": { "status": "FAIL", "matchType": "NOT_FOUND", "matchedText": null, "evidence": [], "comment": "언급 없음" }
        }
      ]
    },
    "cautionResult": [
      {
        "text": "다이어트 대신 '가벼워진다' 라는 우회적 표현 사용 권장",
        "result": {
          "status": "FAIL",
          "evidence": [
            { "type": "script_text", "sceneIndex": 2, "description": "금지 표현 '다이어트' 직접 사용", "text": "다이어트 효과가 확실한 제품이에요" }
          ],
          "comment": "'다이어트'를 직접 사용하고 있어 우회 표현으로 변경 필요"
        }
      }
    ],
    "errors": [],
    "meta": {
      "modelVersion": "gemini2",
      "processingTimeMs": 48000
    }
  }
}

검수 결과 없음 (200 OK)

검수가 아직 끝나지 않았거나 해당 회차에 검수 결과가 없는 경우, datanull입니다.

{
  "status": 200,
  "code": null,
  "message": "검수 결과가 없습니다.",
  "data": null
}

응답 필드 (data)

필드타입설명
collabNolong캠페인 번호
applicationIdlong신청 ID
reviewIdlong검수 라운드 ID
contentTypestringSCRIPT_VIDEO
overallStatusstring종합 결과 (PASS / FAIL / PARTIAL)
checkedAtdatetime검수 완료 시각 (ISO 8601)
contentDetailResultobject영상 초/중/후 필수 장면 검수 결과
marketingInfoResultobject필수/선택 소구포인트 검수 결과
cautionResultarray<object>주의사항 위반 여부 검수 (없으면 빈 배열)
errorsarray<string>검수 중 발생한 에러 목록
metaobject모델 버전, 처리 시간 등 메타 정보

contentDetailResult

필드타입설명
categoryCodestring카테고리 코드 (예: BEAUTY)
basicShots.beginningarray<object>영상 도입부 필수 장면 결과
basicShots.middlearray<object>영상 본문 필수 장면 결과
basicShots.endingarray<object>영상 마무리 필수 장면 결과
basicShots.{section}[].codestring장면 코드 (HOOK, TEXTURE_SHOT 등)
basicShots.{section}[].result.statusstringPASS / FAIL / UNCERTAIN
basicShots.{section}[].result.confidencenumber신뢰도 (0.0 ~ 1.0)
basicShots.{section}[].result.evidencearray<object>판단 근거 (스크립트 인용)
basicShots.{section}[].result.commentstring판단 코멘트

marketingInfoResult

필드타입설명
requiredPoints[]array<object>필수 소구포인트별 검수 결과
requiredPoints[].textstring소구포인트 텍스트
requiredPoints[].result.statusstringPASS / FAIL / UNCERTAIN
requiredPoints[].result.matchTypestringEXACT / PARAPHRASE / NOT_FOUND
requiredPoints[].result.matchedTextstring매칭된 스크립트 문구 (없으면 null)
optionalPoints[]array<object>선택 소구포인트별 검수 결과
optionalPoints[].textstring소구포인트 텍스트
optionalPoints[].result.statusstringPASS / FAIL
optionalPoints[].result.matchTypestringEXACT / PARAPHRASE / NOT_FOUND
optionalPoints[].result.matchedTextstring매칭된 스크립트 문구 (없으면 null)

cautionResult

필드타입설명
textstring주의사항 항목 텍스트
result.statusstringPASS(위반 안 함) / FAIL(위반) / UNCERTAIN
result.evidencearray<object>위반 근거 (위반 시)
result.commentstring판단 코멘트

evidence (공통)

필드타입설명
typestringscript_text (스크립트 근거)
sceneIndexint근거가 위치한 씬 인덱스 (0부터 시작)
descriptionstring근거에 대한 설명
textstring실제 스크립트 텍스트 인용

meta

필드타입설명
modelVersionstring사용된 모델 (gemini2 = Gemini 2.5 Flash)
processingTimeMsnumber처리 소요 시간 (ms)

모든 검수 항목의 statusPASS / FAIL / UNCERTAIN으로 통일됩니다. (선택 소구포인트는 PASS / FAIL만) (단, overallStatusPASS / FAIL / PARTIAL)

API 테스트

On this page