캠페인 + 가이드라인 생성
캠페인을 만들고 가이드라인까지 채웁니다. 공동작업자·브랜드 계정 태그·협찬 레이블을 켜고 끌 수 있습니다.
캠페인 + 가이드라인 생성
캠페인 생성을 그대로 수행한 뒤, MongoDB guidelines 에 가이드라인 본문을 저장하고 guidelineStatus 를 COMPLETED 로 올립니다. 모집을 시작할 수 있는 상태가 됩니다.
HTTP 요청
POST /ai/test-setup/campaign-with-guideline
Content-Type: application/jsonRequest 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" }
}| 필드 | 타입 | 설명 |
|---|---|---|
collaborator | Object | 공동작업자 추가 |
collaborator.enabled | Boolean | 사용 여부 (기본 false) |
collaborator.accountName | String | 계정명 (@ 포함, 기본 @glowb_test) |
brandAccountTag | Object | 브랜드 계정 태그 |
brandAccountTag.enabled | Boolean | 사용 여부 (기본 false) |
brandAccountTag.accountName | String | 계정명 (@ 포함) |
brandAccountTag.tagMethods | Array<String> | PERSON_TAG(사람 태그) / CAPTION_TAG(캡션 작성). 중복 선택 가능 |
sponsorLabel | Object | 협찬 레이블 추가 |
sponsorLabel.enabled | Boolean | 사용 여부 (기본 false) |
sponsorLabel.accountName | String | 계정명 (@ 포함) |
enabled: false 이거나 필드를 아예 안 보내면 가이드라인의 upload_requirements 에 enabled: 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_test→glowb_test). 실제 V4 데이터가 그렇습니다. scene_json은 프런트 에디터(Lexical)의 상태 JSON 입니다.scene본문만 넣고 이걸 빼면 에디터가 빈 화면이 됩니다.
촬영 옵션 코드(TEXTURE_SHOT·USAGE_SHOT·TIP_SHOT)는 GuidelineShotOptionCatalog 의 BEAUTY 코드와 일치해야 프런트가 라벨을 그립니다. 프리셋을 수정할 때 임의 코드를 넣지 마세요.
컨셉 후보 3개는 data 가 아니라 세션 필드 concepts 에 따로 저장됩니다.
에러 응답
에러도 HTTP 는 200 이고, body 의 status 필드로 판정합니다.
body status | 상황 |
|---|---|
404 | snsType 이 INSTAGRAM/TIKTOK 이 아님 |
500 | MongoDB 에 같은 collabNo 문서가 중복 존재 (non unique result) |