Admin APIAdmin Dashboard API
POST /ai/admin/dashboard/{campaignNo}/recommend-reasons/regenerate
추천사 재생성 (리스트 관리)
추천사 재생성 (리스트 관리)
선택한 신청자들의 추천사만 AI로 재생성합니다. 적합도 점수(matchScore)는 변경하지 않습니다.
customPrompt를 입력하면 해당 지시사항을 최우선으로 반영하여 추천사를 다시 생성합니다. 비워두면 일반 재생성과 동일하게 동작합니다.- 추천사가 생성·변경될 때마다
TB_RECOMMEND_REASON_HISTORY에 이전값/새값/변경유형/변경자(어드민 계정)/프롬프트가 이력으로 남습니다. - 동기 처리입니다. 선택 인원수 × AI 생성 시간(수 초)만큼 응답이 걸리므로, 프론트에서는 한 번에 소수 인원(≤10명 권장)으로 호출하고 로딩 상태를 표시해야 합니다.
캠페인의 이미지 분석(product_details)이 없는 경우 AI 서버가 재생성을 거부합니다(422).
이 경우 POST /ai/report/campaign/{campaignNo}/analyze-images로 이미지 분석을 먼저 수행해야 합니다.
HTTP 요청
POST /ai/admin/dashboard/{campaignNo}/recommend-reasons/regenerate
Authorization: Bearer {access_token}
Content-Type: application/jsonPath Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | long | 예 | 캠페인 번호 |
Request Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
applicationIds | List<Long> | 예 | 재생성할 신청 ID 목록 (리스트 관리 조회 응답의 applicationId) |
customPrompt | String | 아니오 | 추천사 생성 시 우선 반영할 추가 지시사항 (최대 1,000자) |
요청 예시
{
"applicationIds": [35, 42],
"customPrompt": "제품 기능 설명보다 브랜드 무드와 감성적인 일상 연출 가능성을 중심으로 작성해 주세요."
}응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "2명 추천사 재생성 요청 완료",
"data": {
"requestedCount": 2,
"skippedNames": []
}
}SNS 링크가 없어 재생성할 수 없는 신청자는 skippedNames에 이름이 담기고 message에도 표기됩니다. 처리 중
에러가 난 신청자는 "이름(에러:사유)" 형식으로 담깁니다.
{
"status": 200,
"code": null,
"message": "1명 추천사 재생성 요청 완료 / SNS 링크 없음: 홍길동",
"data": {
"requestedCount": 1,
"skippedNames": ["홍길동"]
}
}에러 응답
| 상태 코드 | 설명 |
|---|---|
400 | applicationIds가 비어 있음 |
401 | 인증 실패 (ADMIN 권한 필요) |