Glowb Dev Docs
Admin APIAdmin Dashboard API

POST /ai/admin/dashboard/{campaignNo}/price-negotiations

협업 단가 전송

협업 단가 전송 (벌크)

선택된 크리에이터들에게 단가 제안을 전송합니다.

  • CampaignApplication이 없으면 자동 생성(ADMIN_ADDED)되고, PriceNegotiation이 PENDING 상태로 생성됩니다.
  • 각 크리에이터별로 독립적으로 처리되며, 일부 실패 시에도 나머지는 정상 처리됩니다.

중복 방지 정책

동일 크리에이터에게 중복 전송을 방지하기 위해 다음 조건을 확인합니다:

  • PENDING 상태: 이미 협상 진행 중이면 재요청 불가
  • ACCEPT 상태: 이미 수락된 협상이 있으면 재요청 불가
  • REJECT 상태: 거절된 경우에만 재협상 가능

HTTP 요청

POST /ai/admin/dashboard/{campaignNo}/price-negotiations
Authorization: Bearer {access_token}
Content-Type: application/json

Path Parameters

파라미터타입필수설명
campaignNoLong캠페인 번호

Request Body

필드타입필수설명
itemsArray단가 제안 목록
items[].applicationIdLong조건부기존 신청 ID (있으면 우선 사용)
items[].influenceNoInteger조건부인플루언서 번호 (applicationId 없을 때 필수)
items[].proposedPriceLong제안 단가 (원)

요청 예시

{
  "items": [
    {
      "applicationId": 123,
      "proposedPrice": 500000
    },
    {
      "influenceNo": 456,
      "proposedPrice": 300000
    }
  ]
}

응답

성공 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "3명에게 단가 제안이 전송되었습니다.",
  "data": {
    "success": true,
    "successApplicationIds": [123, 124, 125],
    "phoneNotFoundApplicationIds": [125],

    "failedItems": [],
    "message": "3명에게 단가 제안이 전송되었습니다. (전화번호 없음: 1명)"
  }
}

일부 실패 응답 (200 OK)

{
  "status": 200,
  "code": null,
  "message": "2명 성공, 1명 실패",
  "data": {
    "success": false,
    "successApplicationIds": [123, 124],
    "phoneNotFoundApplicationIds": [],
    "failedItems": [
      {
        "applicationId": 125,
        "influenceNo": null,
        "failureCode": "CREATE_FAILED",
        "failureMessage": "이미 협상 진행 중입니다. 크리에이터의 응답을 기다려주세요."
      }
    ],
    "message": "2명 성공, 1명 실패"
  }
}

에러 응답 예시

중복 협상 (PENDING 상태)

failedItems에 포함되는 형태:

{
  "failureCode": "CREATE_FAILED",
  "failureMessage": "이미 협상 진행 중입니다. 크리에이터의 응답을 기다려주세요."
}

수락된 협상 재시도 (ACCEPT 상태)

failedItems에 포함되는 형태:

{
  "failureCode": "CREATE_FAILED",
  "failureMessage": "이미 수락된 협상이 있습니다. 새로운 협상을 시작할 수 없습니다."
}

존재하지 않는 신청

failedItems에 포함되는 형태:

{
  "failureCode": "APPLICATION_NOT_FOUND",
  "failureMessage": "존재하지 않는 신청입니다."
}

캠페인 불일치

failedItems에 포함되는 형태:

{
  "failureCode": "CAMPAIGN_MISMATCH",
  "failureMessage": "캠페인이 일치하지 않습니다."
}

응답 필드 설명

필드타입설명
successBoolean전체 성공 여부 (모든 항목 성공 시 true)
successApplicationIdsArray<Long>성공한 신청 ID 목록
phoneNotFoundApplicationIdsArray<Long>전화번호가 없는 신청 ID 목록 (SMS 발송 불가)
failedItemsArray실패한 항목 목록
failedItems[].applicationIdLong실패한 신청 ID
failedItems[].influenceNoInteger실패한 인플루언서 번호
failedItems[].failureCodeString실패 코드
failedItems[].failureMessageString실패 사유

API 테스트

On this page