151 lines
4.9 KiB
Markdown
151 lines
4.9 KiB
Markdown
---
|
|
name: rpa-orchestrator
|
|
description: "GUARDiA ITSM RPA 봇 오케스트레이터. ITSM 반복 업무 자동화, RPA 작업 등록/실행/스케줄링, 입력 Validation 학습, 실행 이력 조회를 총괄한다. 다음 상황에서 반드시 사용: (1) 'RPA', '봇 자동화', '자동 처리', '반복 작업 자동화' 요청; (2) 'validation 학습', '입력 규칙 학습', 'API 스키마 학습' 요청; (3) 'RPA 작업 등록', 'RPA 실행', 'RPA 스케줄' 요청; (4) 'SR 자동 접수', 'SSL 만료 자동 알림', '정기 점검 자동화' 요청; (5) 'RPA 이력', 'RPA 실행 결과', 'RPA 현황' 조회; (6) 다시 실행, 업데이트, 수정, 보완, 재실행 요청."
|
|
---
|
|
|
|
# GUARDiA ITSM RPA 오케스트레이터
|
|
|
|
RPA 봇(자동화)과 Validation 학습을 조율하는 통합 워크플로우.
|
|
**실행 모드: 파이프라인 (에이전트 팀)** — validation-learner → rpa-bot → 기존 에이전트 연동.
|
|
|
|
---
|
|
|
|
## 에이전트 팀 구성
|
|
|
|
| 에이전트 | 역할 |
|
|
|---------|------|
|
|
| validation-learner | ITSM API 스키마 스캔 → validation 규칙 DB 저장 |
|
|
| rpa-bot | 학습 규칙 참조 → ITSM API 자동 호출 실행 |
|
|
| incident-responder | RPA 실행 실패 → 인시던트 자동 생성 |
|
|
|
|
---
|
|
|
|
## Phase 0: 컨텍스트 확인
|
|
|
|
사용자 요청 분류:
|
|
- **학습 요청** ("validation 학습해줘", "API 스키마 학습") → Phase 1만 실행
|
|
- **실행 요청** ("RPA 실행", "자동 처리") → Phase 2 실행 (학습 규칙이 없으면 Phase 1 선행)
|
|
- **등록 요청** ("RPA 작업 추가", "봇 등록") → Phase 3 실행
|
|
- **조회 요청** ("RPA 현황", "실행 이력") → `GET /api/rpa/tasks`, `GET /api/rpa/executions`
|
|
|
|
---
|
|
|
|
## Phase 1: Validation 학습
|
|
|
|
`validation-learner` 서브 에이전트 호출.
|
|
|
|
```
|
|
# 전체 학습 (최초 또는 엔드포인트 추가 후)
|
|
POST /api/rpa/validations/learn
|
|
{
|
|
"endpoints": "all", # 또는 특정 endpoint 목록
|
|
"overwrite": true
|
|
}
|
|
|
|
응답: { learned: N, endpoints: [...] }
|
|
```
|
|
|
|
학습 순서:
|
|
1. FastAPI OpenAPI 스펙 수집: `GET /api/openapi.json`
|
|
2. 각 `POST`/`PUT` 엔드포인트의 `requestBody.schema` 파싱
|
|
3. 필드별 rules 추출 → `tb_rpa_validation` upsert
|
|
4. 학습 결과 요약 출력
|
|
|
|
---
|
|
|
|
## Phase 2: RPA 작업 실행
|
|
|
|
`rpa-bot` 에이전트 호출. 실행 전 반드시 validation 확인.
|
|
|
|
```
|
|
# 단발성 즉시 실행
|
|
POST /api/rpa/execute
|
|
{
|
|
"task_type": "SR_CREATE" | "SR_STATUS_UPDATE" | "SHELL_EXEC" | "SSL_CHECK",
|
|
"payload": { ... }, # 입력 데이터 (validation 학습 규칙 준수 필수)
|
|
"dry_run": false # true 시 검증만, API 호출 없음
|
|
}
|
|
|
|
# 스케줄 작업 실행 (등록된 태스크)
|
|
POST /api/rpa/tasks/{task_id}/run
|
|
```
|
|
|
|
**실행 흐름:**
|
|
```
|
|
payload 입력
|
|
→ validation 검증 (tb_rpa_validation 규칙)
|
|
→ 실패: 오류 필드 + 위반 규칙 상세 반환 (실행 중단)
|
|
→ 성공: API 호출
|
|
→ 성공: tb_rpa_execution 기록 (SUCCESS)
|
|
→ 실패: 재시도 3회 → incident-responder 인시던트 생성
|
|
```
|
|
|
|
---
|
|
|
|
## Phase 3: RPA 작업 등록/관리
|
|
|
|
```
|
|
# 작업 등록
|
|
POST /api/rpa/tasks
|
|
{
|
|
"task_name": "SSL 만료 30일 전 SR 자동 생성",
|
|
"task_type": "SR_CREATE",
|
|
"schedule": "0 9 * * *", # cron: 매일 09:00
|
|
"payload_template": {
|
|
"sr_type": "INQUIRY",
|
|
"priority": "HIGH",
|
|
"title": "SSL 인증서 만료 예정 점검",
|
|
"description": "{{server_name}} SSL 만료일 {{ssl_expire_date}}"
|
|
},
|
|
"is_active": true
|
|
}
|
|
|
|
# 목록 조회
|
|
GET /api/rpa/tasks?page=1&size=20&is_active=true
|
|
|
|
# 실행 이력
|
|
GET /api/rpa/executions?task_id={id}&status=FAILED
|
|
```
|
|
|
|
---
|
|
|
|
## Phase 4: 결과 보고
|
|
|
|
실행 완료 후 요약:
|
|
- 실행된 RPA 작업 목록
|
|
- 성공/실패 건수
|
|
- 실패 원인 (validation 오류 or API 오류)
|
|
- 생성된 SR/인시던트 ID 목록
|
|
|
|
---
|
|
|
|
## 주요 API 엔드포인트
|
|
|
|
| Method | Path | 설명 |
|
|
|--------|------|------|
|
|
| POST | /api/rpa/validations/learn | Validation 학습 트리거 |
|
|
| GET | /api/rpa/validations | 학습된 규칙 목록 |
|
|
| POST | /api/rpa/tasks | RPA 작업 등록 |
|
|
| GET | /api/rpa/tasks | 작업 목록 |
|
|
| PUT | /api/rpa/tasks/{id} | 작업 수정 |
|
|
| DELETE | /api/rpa/tasks/{id} | 작업 삭제 |
|
|
| POST | /api/rpa/tasks/{id}/run | 즉시 실행 |
|
|
| POST | /api/rpa/execute | 단발성 즉시 실행 |
|
|
| GET | /api/rpa/executions | 실행 이력 |
|
|
| GET | /api/rpa/executions/{id} | 실행 상세 |
|
|
|
|
---
|
|
|
|
## 테스트 시나리오
|
|
|
|
**정상 흐름:**
|
|
1. `POST /api/rpa/validations/learn` → 전체 학습
|
|
2. `POST /api/rpa/execute` with `dry_run: true` → validation 통과 확인
|
|
3. `POST /api/rpa/execute` with `dry_run: false` → 실제 SR 생성
|
|
4. `GET /api/rpa/executions` → 실행 이력 확인
|
|
|
|
**에러 흐름:**
|
|
1. 필수 필드 누락 → `validation 오류: title 필드 필수` 반환
|
|
2. enum 오류 → `sr_type 허용값: DEPLOY|RESTART|LOG|INQUIRY|OTHER` 반환
|
|
3. API 5xx → 3회 재시도 → incident-responder 인시던트 생성
|