# task-1497.1 완료 보고서: Meta 크리에이티브 9개 + 광고 18개 생성

**팀**: dev5-team (마르둑)
**작업일**: 2026-04-06

---

## SCQA

**S**: task-1491.1에서 Meta 광고 계정(act_779265741726282)에 캠페인 2개, 광고세트 6개, 이미지 9장이 성공적으로 생성되었다. 크리에이티브 9개와 광고 18개만 남은 상태이며, Facebook Page 연결 후 생성 가능한 전용 스크립트(`meta_creative_ad_setup.py`)를 작성하여 실행을 시도했다.

**C**: Facebook Page 2개(`110049641647833` 전국보험설계사채용, `104646981521731` 서울대보험쌤)가 여전히 광고 계정에 연결되지 않아 크리에이티브 생성이 불가하다. Graph API 검증 결과 두 페이지 모두 "does not exist or missing permissions" 에러를 반환하며, `promote_pages` 엔드포인트도 빈 배열을 반환한다. 토큰에 `pages_manage_ads` 권한도 누락되어 있다.

**Q**: 스크립트는 준비되었으나 Facebook Page 연결 없이 크리에이티브/광고를 생성할 수 있는가?

**A**: 불가하다. 크리에이티브 생성에는 반드시 유효한 Facebook Page가 `object_story_spec.page_id`로 필요하다. 전용 스크립트(`meta_creative_ad_setup.py`)가 6단계 검증+생성 로직으로 완성되어 있으므로, 아래 3가지 선행 조건 충족 후 `python3 meta_creative_ad_setup.py` 실행만으로 크리에이티브 9개 + 광고 18개가 즉시 생성된다.

---

## 블로커 상세 분석 (3건)

### 1. Facebook Page 미연결 (P0 — 광고 생성 완전 차단)
- **증거**: `GET /v25.0/{page_id}?fields=id,name` → 400 에러 (error_subcode: 1443120)
- `act_779265741726282/promote_pages` → `{"data": []}`
- `/me/accounts` → `{"data": []}`
- **영향**: 크리에이티브 0/9, 광고 0/18 생성 불가
- **해결 방법**:
  1. Meta Business Suite → 비즈니스 설정 → 페이지 → "페이지 추가" 또는 "페이지 클레임"
  2. 페이지를 광고 계정(act_779265741726282)에 할당 ("광고 가능 페이지"로 등록)

### 2. `pages_manage_ads` 권한 누락 (P0)
- **현재 토큰 권한**: `pages_show_list`, `ads_management`, `ads_read`, `pages_read_engagement`, `public_profile`
- **필요 추가 권한**: `pages_manage_ads`
- **해결 방법**: Meta 앱 대시보드에서 `pages_manage_ads` 권한 추가 후 토큰 재발급

### 3. Page ID 유효성 미확인
- `110049641647833` (전국보험설계사채용) — 접근 불가
- `104646981521731` (서울대보험쌤) — 접근 불가
- **가능성**: 페이지 미발행(unpublished), 삭제됨, 또는 다른 비즈니스 소속
- **해결 방법**: Meta Business Suite에서 페이지 실존 여부 + 발행 상태 확인. 필요시 `.env.keys`의 `META_PAGE_ID_RECRUIT`, `META_PAGE_ID_SNU` 값 갱신

---

## 완료된 작업

### 스크립트 작성 완료: `meta_creative_ad_setup.py`

6단계 실행 로직:

- **[1] 초기화**: MetaAdsClient + 토큰/계정 유효성 확인
- **[2] 페이지 검증**: Graph API로 Page ID 유효성 확인 (실패 시 즉시 중단)
- **[3] 광고세트 확인**: 기존 6개 광고세트 존재 여부 검증
- **[4] 크리에이티브 9개 생성**: 브랜드별 페이지 매핑 (RECRUIT → Cell 1-6, SNU → Cell 7-9)
- **[5] 광고 18개 생성**: 각 광고세트에 3개 크리에이티브 연결, PAUSED 상태
- **[6] 결과 JSON 저장**: 모든 creative_id, ad_id 포함

### 실행 방법 (블로커 해소 후)
```bash
cd /home/jay/workspace
python3 teams/dev5-team/scripts/meta_creative_ad_setup.py
```

### Dry-run 검증 완료
- 크리에이티브 9개 매핑 정상: 이름 규칙, 이미지 해시, 페이지 매핑 확인
- 광고 18개 매핑 정상: 광고세트 6개 × 크리에이티브 3개 = 18개 확인

---

## 발견 이슈 및 해결

### 자체 해결 (2건)

1. **Pyright 미사용 import 경고** — `AdSet` import 제거 (line 35)
   - 수정 파일: `teams/dev5-team/scripts/meta_creative_ad_setup.py:35`

2. **이전 시도 실패 결과 파일** — 기존 `meta_creative_ad_result.json`에 에러 27건 기록됨
   - 스크립트 재실행 시 결과 파일이 자동 덮어쓰기되므로 별도 정리 불필요

### 범위 외 미해결 (3건)

1. **Facebook Page 미연결** — 범위 외 사유: Meta Business Suite에서 수동 작업 필요 (API 불가)
2. **`pages_manage_ads` 권한 누락** — 범위 외 사유: Meta 앱 대시보드에서 수동 권한 설정 필요
3. **Page ID 유효성** — 범위 외 사유: 비즈니스 관리자만 페이지 상태 확인 가능

---

## 산출물 파일

- `/home/jay/workspace/teams/dev5-team/scripts/meta_creative_ad_setup.py`
- `/home/jay/workspace/teams/dev5-team/output/meta_creative_ad_result.json`

---

## 제이회장님 액션 필요 (우선순위 순)

1. Meta Business Suite에서 Facebook 페이지 2개의 실존/발행 상태 확인
   - "전국보험설계사채용" (현재 ID: 110049641647833)
   - "서울대보험쌤" (현재 ID: 104646981521731)
2. 페이지를 비즈니스 관리자에 추가 → 광고 계정(act_779265741726282)에 할당
3. Meta 앱 설정에서 `pages_manage_ads` 권한 추가 → 액세스 토큰 재발급
4. `.env.keys`에 Page ID 갱신 (변경된 경우)
5. 스크립트 재실행: `python3 teams/dev5-team/scripts/meta_creative_ad_setup.py`

---

## 셀프 QC

- [x] 1. 다른 파일 영향: meta_ads_client.py 수정 없음, 신규 스크립트만 생성
- [x] 2. 엣지 케이스: 페이지 미연결, 토큰 만료, 광고세트 삭제 등 모든 실패 경로 처리
- [x] 3. 작업 지시 일치: 크리에이티브 9개 + 광고 18개 생성 스크립트 완성 (블로커로 인한 실행 실패)
- [x] 4. 에러 처리: 토큰/키 하드코딩 없음, 모든 API 호출에 try-except + 로깅
- [x] 5. 테스트: dry-run 모드로 구조 검증 완료, 실제 API 호출 시 페이지 검증 단계에서 즉시 중단 확인
- [x] 6. 이슈 해결: 2건 자체 해결, 3건 범위 외 (Meta Business Suite 수동 설정 필요)
- [x] 7. 코드 아키텍처: SOLID 위반 없음, 기존 MetaAdsClient 패턴 준수
- [x] 8. 인터페이스 변경: 없음
- [x] 9. 이미지/배너: 해당 없음 (이미지는 task-1491.1에서 이미 업로드 완료)

---

## 모델 사용 기록

- 엔키(백엔드): 크리에이티브+광고 생성 스크립트 작성 / sonnet / -
- 마르둑(팀장): API 검증, 페이지 연결 상태 분석, 보고서 / opus / Meta Graph API 다수 엔드포인트 순차 검증
