flex 구성원·조직도
플레이그라운드에서 수집 →채널 코드 flex_member · 수집 환경 windows
요청 파라미터
아래 값들을 POST /api/v1/collect 의 params 객체에 담아 보냅니다.
| 키 | 타입 | 필수 | 기본 | 설명 |
|---|---|---|---|---|
| server | text | — | — | 비우면 허브가 지금 flex 수집이 가능한 서버(온라인 · flex 로그인됨 · 대기 작업 적은 순) 중 하나를 골라 배정하고, 응답의 server 로 알려줌. 특정 서버로 보내려면 그 서버 ID(예: win-flex-01, GET /flex-servers 로 조회) |
| scope | enum | — | all | all=구성원 items + channel_info.departments 부서 트리 · members=구성원 items 만 · departments=부서가 items(extra.kind=department) |
| include_leave | bool | — | true | false 면 휴직 중(재직 상태 LEAVE_OF_ABSENCE)인 구성원을 빼고 부서 인원·부서장 집계에서도 뺌. 휴직 예정자는 근무 중이라 항상 포함 |
| include_contact | bool | — | false | 이메일·휴대폰 번호(extra.email / extra.phone) 포함 — 개인정보, 필요할 때만. 조직도만(departments)엔 해당 없음 |
요청 예시
응답 (202 Accepted)
요청은 즉시 큐에 적재되고 request_id 를 돌려줍니다. 실제 수집은 워커가 비동기로 처리합니다.
결과 조회 — GET /requests/{id}
같은 API 키로 request_id 를 조회합니다. 상태에 따라 응답이 달라집니다.
결과(items)는 요청별로 보관되므로 같은 글이 다른 요청(다른 키워드·재수집)에 겹쳐도 이 요청의 결과는 그대로입니다 —
여러 요청에 걸친 중복 정리는 post_id로 호출 쪽에서 하세요.
보존 기간은 완료 후 7일입니다. 이 채널은 '지금 상태'가 중요한 데이터라 짧게 보관합니다 — 결과는 받은 즉시 저장하세요.
보존 기간이 지나면 items 는 빈 배열이고 items_expired: true, items_keep_days 가 함께 옵니다(status 는 그대로 done).
진행 중 (pending / running)
아직 끝나지 않았으면 progress 로 진행 상황만 옵니다(items 없음).
완료 (done)
status 가 done 이면 data.items[] 에 결과가 담깁니다.
실패 시엔 status: "failed" 와 error 가 옵니다.
실패 (failed)
status 가 failed 면 error 에 사유가 옵니다(items 없음).
일시적 실패는 자동 재시도되며, 위 응답은 마지막 시도 기준입니다.
최상위 data에는 항상 request_id·channel·status·external_ref·result_count·started_at·finished_at·duration_ms·duration_sec·created_at·updated_at이 포함되고, 상태에 따라 items(done)·progress+elapsed_ms(진행 중)·error(failed/cancelled)가 추가됩니다. duration_*는 허브가 잰 수집 소요 시간(시작~종료) — 자세히는 비동기 & 콜백. 요청을 잘못 시작했다면 취소 API로 중단할 수 있습니다.
결과 필드 (items[])
| 필드 | 설명 |
|---|---|
| post_id | 구성원 사용자 ID(flex userIdHash, 동료 휴가의 extra.user_id 와 같은 값). scope=departments 면 부서 ID |
| url | flex 프로필 주소(로그인한 구성원만 열람). 부서 항목은 null |
| title / body | title=표시 이름(닉네임), 부서 항목은 부서명 / body=null |
| author | 실명. 부서 항목은 부서장 표시 이름(여럿이면 쉼표, 없으면 null) |
| posted_at | 작성 시각 (ISO8601, KST) — 구성원·부서는 null |
| views / comment_count | null / null |
| recommends | null |
| source | 주 부서명. 부서 항목은 부서 경로 |
| extra.kind | member · (scope=departments 이면) department |
| extra.name / display_name / english_name | 실명 · 표시 이름 · 영문 이름 |
| extra.statuses / on_leave / leave_scheduled | 재직 상태 배열(IN_EMPLOY·LEAVE_OF_ABSENCE·LEAVE_OF_ABSENCE_SCHEDULED·RESIGNATION_SCHEDULED·IN_APPRENTICESHIP) · 휴직 중(LEAVE_OF_ABSENCE) · 휴직 예정 |
| extra.primary_department / primary_department_id / department_path | 주 부서 · 부서 ID · 최상위부터의 부서 경로( > 구분) |
| extra.job_title / job_rank / job_roles / job_groups / job_levels | 직책 · 직급 · 직무 · 직군 · 레벨 |
| extra.is_head | 부서장(리더) 여부 |
| extra.positions | 겸직 포함 소속 목록 |
| extra.about_me | 자기소개 |
| extra.email / phone | include_contact=true일 때만 |
| extra.(부서 항목) department_id / name / parent_id / parent_name / path / depth / display_order / visible | 부서 ID · 이름 · 상위 부서 · 경로 · 깊이(최상위 0) · 조직도 표시 순서 · 조직도 표시 여부 |
| extra.(부서 항목) member_count / total_count / heads | 직속 인원(겸직 포함) · 하위 부서 포함 고유 인원 · 부서장 [{user_id, name, display_name, job_title, on_leave}] — include_leave=false 면 휴직자 빼고 셈 |
| extra.source_kind | flex_member |
- 수집 서버 자동 선택 —
server는 선택입니다. 비우면 허브가 지금 flex 수집이 가능한 서버(온라인 · flex 로그인됨 · 대기 작업 적은 순) 중 하나를 골라 배정하고 202 응답의server로 알려줍니다. 가능한 서버가 없으면 409no_flex_server(이유 포함). 특정 서버로 보내려면GET /flex-servers의 서버 이름을 넣으세요 — 그 서버가 오프라인이면 409server_offline, flex 로그인이 풀리고 자동 로그인까지 실패한 상태면 409account_login_required(추가 인증 화면이면account_blocked), flex 수집기가 없는 서버면 422not_flex_server. 배정은 요청 시점에 고정되므로 고른 서버가 그 뒤 꺼지면 그 요청은 실패로 끝납니다(다시 요청하면 살아 있는 서버로 갑니다). - 범위(
scope) —all(기본):items= 구성원, 부서 트리는 완료 응답 최상위channel_info.departments[]로 1회 ·members: 구성원만(channel_info에 회사 정보만) ·departments: 부서가items(부서 1개 = 1건,extra.kind=department, 조직도 순서 — 상위 → 하위, 형제는 flex 표시 순서). - 휴직자(
include_leave) — 기본 포함.false면 재직 상태가 휴직(LEAVE_OF_ABSENCE)인 구성원을 빼고, 부서 인원·부서장 집계에서도 뺍니다. 판정은 flex 재직 상태값이며 조직도의 "휴직" 같은 부서 이름과는 무관합니다. 휴직 예정자는 아직 근무 중이라 항상 포함됩니다. 뺀 인원 수는 관리자 화면의summary.on_leave_excluded. channel_info의 부서 트리 항목은{id, name, parent_id, parent_name, path, depth, display_order, visible, member_count, total_count, heads}—parent_id로 트리를 만들고,visible=false는 flex 조직도에서 숨긴 부서입니다. 인원은 가져온 구성원으로 센 값이라 flex 조직도 화면의 숫자와 같습니다(휴직자 제외 시 그만큼 적음).- 퇴사자는 포함하지 않습니다(flex 구성원 화면의 "전체" 와 같은 범위). 이메일·휴대폰은 개인정보라 기본으로 빼고,
include_contact=true일 때만 담습니다.
결과 수신(폴링·콜백) 방식은 비동기 & 콜백을 참고하세요.