Glowb Dev Docs
테스트 데이터 세팅

캠페인 + 가이드라인 생성

캠페인을 만들고 가이드라인까지 채웁니다. 공동작업자·브랜드 계정 태그·협찬 레이블을 켜고 끌 수 있습니다.

캠페인 + 가이드라인 생성

캠페인 생성을 그대로 수행한 뒤, MongoDB guidelines 에 가이드라인 본문을 저장하고 guidelineStatusCOMPLETED 로 올립니다. 모집을 시작할 수 있는 상태가 됩니다.

HTTP 요청

POST /ai/test-setup/campaign-with-guideline
Content-Type: application/json

Request Body

캠페인 생성의 모든 필드에 영상 마케팅 옵션 3종이 추가됩니다. 전부 선택값이며, 안 보내면 세 옵션 모두 꺼진 상태로 생성됩니다.

{
  "snsType": "TIKTOK",
  "nation": "KR",
  "collaborator":    { "enabled": true, "accountName": "@glowb_test" },
  "brandAccountTag": { "enabled": true, "accountName": "@glowb_test",
                       "tagMethods": ["PERSON_TAG", "CAPTION_TAG"] },
  "sponsorLabel":    { "enabled": true, "accountName": "@glowb_test" }
}
필드타입설명
collaboratorObject공동작업자 추가
collaborator.enabledBoolean사용 여부 (기본 false)
collaborator.accountNameString계정명 (@ 포함, 기본 @glowb_test)
brandAccountTagObject브랜드 계정 태그
brandAccountTag.enabledBoolean사용 여부 (기본 false)
brandAccountTag.accountNameString계정명 (@ 포함)
brandAccountTag.tagMethodsArray<String>PERSON_TAG(사람 태그) / CAPTION_TAG(캡션 작성). 중복 선택 가능
sponsorLabelObject협찬 레이블 추가
sponsorLabel.enabledBoolean사용 여부 (기본 false)
sponsorLabel.accountNameString계정명 (@ 포함)

enabled: false 이거나 필드를 아예 안 보내면 가이드라인의 upload_requirementsenabled: false 로 저장됩니다. 계정명은 @ 를 떼고 저장되며, 공동작업자·브랜드 계정 태그가 하나의 account_name 을 공유합니다(둘 다 켜면 공동작업자 계정명이 쓰입니다).

응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "캠페인 + 가이드라인 생성 완료",
  "data": {
    "collabNo": 3202,
    "title": "자동생성-3202",
    "businessId": "202604Q",
    "snsType": "TIKTOK",
    "nation": "KR",
    "currency": "KRW",
    "doubleReview": true,
    "deliveryType": "DELIVERY",
    "campaignSubStep": "CREATOR_RECRUIT",
    "guidelineStatus": "COMPLETED",
    "uploadRequirements": {
      "collaborator": { "enabled": true },
      "account_name": "glowb_test",
      "narration_required": true,
      "brand_tag": { "enabled": true, "tag_methods": ["PERSON_TAG", "CAPTION_TAG"] },
      "sponsor_label": { "enabled": true, "replace_ad_tag": true },
      "is_ai_suggested": null
    }
  }
}

uploadRequirements 는 가이드라인에 실제로 저장된 값을 그대로 돌려줍니다. 꺼진 옵션은 enabled: false 로 내려갑니다.

저장되는 가이드라인 본문

AI를 태우지 않고 뷰티 프리셋을 씁니다. 실제 생성은 수 분이 걸리고 트렌드 컨셉이 3개 미만이면 폴백 없이 502로 실패하기 때문입니다.

V4 스키마(snake_case)로 저장해야 합니다. GET /ai/guideline/{collabNo} 는 저장된 문서를 매핑 없이 그대로 돌려줍니다. 구 GuidelineRequestDto 형태(basicInfo·contentDetailInfo·marketingInfo)로 넣으면 화면이 아무 필드도 못 찾아 빈 가이드라인으로 보입니다.

{
  "selected_concept": { "type": "viral", "label": "자기 전 5분 턱선 루틴", "index": 1 },
  "concept_one_liner": "...",
  "shots": {
    "beginning": [{ "code": "HOOK", "scene": "...", "scene_json": "<Lexical 상태 JSON>" }],
    "middle": [
      { "code": "TEXTURE_SHOT", "scene": "...", "scene_json": "..." },
      { "code": "USAGE_SHOT",   "scene": "...", "scene_json": "..." },
      { "code": "TIP_SHOT",     "scene": "...", "scene_json": "..." }
    ],
    "ending": [{ "code": "PURCHASE_GUIDE_END", "scene": "...", "scene_json": "..." }]
  },
  "required_appeal_points": ["..."],
  "optional_appeal_points": ["..."],
  "hashtags": ["홈케어디바이스", "턱선관리", "EMS마사지기", "글로우비"],
  "upload_requirements": {
    "collaborator": { "enabled": true },
    "account_name": "glowb_test",
    "narration_required": true,
    "brand_tag": { "enabled": true, "tag_methods": ["PERSON_TAG", "CAPTION_TAG"] },
    "sponsor_label": { "enabled": true, "replace_ad_tag": true },
    "is_ai_suggested": null
  },
  "brand_tag_methods": ["PERSON_TAG", "CAPTION_TAG"],
  "sponsor_label_text": "glowb_test",
  "caution_guide": "...", "caution_guide_json": "<Lexical 상태 JSON>",
  "creator_preference": "...", "product_link_share": { "enabled": false, "method": "dm", "link": "" }
}

읽을 때 헷갈리기 쉬운 세 가지를 짚어 둡니다.

  • 마케팅 옵션 3종은 upload_requirements 안에 있습니다. marketingInfo.videoMarketingOptions 는 구 스키마 자리라 V4 화면이 읽지 않습니다.
  • 계정명은 @ 를 뗀 값으로 저장됩니다(@glowb_testglowb_test). 실제 V4 데이터가 그렇습니다.
  • scene_json 은 프런트 에디터(Lexical)의 상태 JSON 입니다. scene 본문만 넣고 이걸 빼면 에디터가 빈 화면이 됩니다.

촬영 옵션 코드(TEXTURE_SHOT·USAGE_SHOT·TIP_SHOT)는 GuidelineShotOptionCatalogBEAUTY 코드와 일치해야 프런트가 라벨을 그립니다. 프리셋을 수정할 때 임의 코드를 넣지 마세요.

컨셉 후보 3개는 data 가 아니라 세션 필드 concepts 에 따로 저장됩니다.

에러 응답

에러도 HTTP 는 200 이고, body 의 status 필드로 판정합니다.

body status상황
404snsTypeINSTAGRAM/TIKTOK 이 아님
500MongoDB 에 같은 collabNo 문서가 중복 존재 (non unique result)

API 테스트

On this page