OPWS Developers

디바이스 그룹

개요

oe.groups.*는 디바이스 그룹의 생성, 조회, 멤버십 편집(추가·제거), 삭제를 제공합니다. 그룹에 방송하면 그룹에 속한 대상 디바이스 전체가 방송 대상이 됩니다.

참고: oe.groups에는 수정(update) 메서드가 없습니다. 그룹명 변경은 지원하지 않으며, 그룹 내용 변경은 멤버십 편집(addMembers/removeMembers)으로만 가능합니다.

시작하기 전에

디바이스 그룹을 다루기 전에 아래를 준비하세요.

  • 파트너 앱에 DEVICE_GROUP capability grant 가 있어야 합니다. 없으면 CapabilityDenied 에러가 발생합니다.
  • 멤버십 편집에는 대상 디바이스의 handle 이 필요합니다. oe.targets.list()로 조회합니다.

참고: capability 는 부여 등급(READ·MANAGE)에 따라 사용할 수 있는 API 가 다릅니다. 메서드별 등급은 컨트롤 플레인 개요의 Capability 요약에서 확인하세요.

그룹 생성 — oe.groups.create()

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.groups.create(input)DEVICE_GROUP없음(신규 생성 — 참조 handle 없음)Promise<GroupView>

요청

이름타입설명기본값필수
namestring그룹 이름-O
descriptionstring그룹 설명-X

응답

GroupView — 필드는 아래 "그룹 상세 조회" 절의 응답 표와 같습니다.

예제

ts
const group = await oe.groups.create({ name: "1층 스피커" });

const lounge = await oe.groups.create({
  name: "2층 스피커",
  description: "2층 복도·라운지",
});

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 DEVICE_GROUP capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요

그룹 목록 조회 — oe.groups.list()

이 앱이 소유한 그룹 목록을 조회합니다.

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.groups.list(opts?)DEVICE_GROUP없음 — capability 만으로 게이트되고, 이후 이 앱이 소유한 그룹만 반환됩니다Promise<GroupView[]>

요청 — 필터 파라미터

이름타입설명기본값필수
searchstring그룹명 부분일치 필터(대소문자 무시)-X

응답

GroupView[] — 각 항목의 필드는 아래 "그룹 상세 조회" 절의 응답 표와 같습니다.

예제

ts
const all = await oe.groups.list();

const filtered = await oe.groups.list({ search: "1층" });

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 DEVICE_GROUP capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요

그룹 상세 조회 — oe.groups.get()

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.groups.get(handle)DEVICE_GROUPhandle 이 이 앱이 소유한 그룹으로 resolve 되어야 함(불일치 시 존재 은닉)Promise<GroupView>

요청

이름타입설명기본값필수
handlestring조회할 그룹 handle-O

응답

이름타입설명
handlestring그룹 handle
labelstring그룹 이름
memberCountnumber멤버 디바이스 수
statusstring | undefined그룹 상태
descriptionstring | null | undefined그룹 설명

예제

ts
const group = await oe.groups.get("grp_1f");
console.log(group.label, group.memberCount);

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 DEVICE_GROUP capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요
TargetUnresolved404handle 을 해석할 수 없음그룹 handle 이 유효한지 목록을 다시 조회해 확인하세요

멤버 추가 — oe.groups.addMembers()

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.groups.addMembers(handle, deviceHandles)DEVICE_GROUP그룹 handle 은 이 앱 소유여야 하고, deviceHandles 는 각 handle 이 디바이스로 resolve 되어야 함(all-or-none)Promise<void>

요청

이름타입설명기본값필수
handlestring대상 그룹 handle-O
deviceHandlesstring[]추가할 디바이스 handle 목록-O

응답

반환값이 없습니다(Promise<void>).

예제

ts
await oe.groups.addMembers("grp_1f", deviceHandles);

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 DEVICE_GROUP capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요
TargetUnresolved404그룹 handle 또는 deviceHandles 를 해석할 수 없음handle 이 유효한지 대상 목록을 다시 조회해 확인하세요

멤버 제거 — oe.groups.removeMembers()

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.groups.removeMembers(handle, deviceHandles)DEVICE_GROUP추가와 동일 — 그룹 소유 검증 + 각 deviceHandles 가 디바이스로 resolve 되어야 함Promise<void>

요청

이름타입설명기본값필수
handlestring대상 그룹 handle-O
deviceHandlesstring[]제거할 디바이스 handle 목록-O

응답

반환값이 없습니다(Promise<void>).

예제

ts
await oe.groups.removeMembers("grp_1f", deviceHandles);

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 DEVICE_GROUP capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요
TargetUnresolved404그룹 handle 또는 deviceHandles 를 해석할 수 없음handle 이 유효한지 대상 목록을 다시 조회해 확인하세요

그룹 멤버 조회 — oe.groups.members()

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.groups.members(handle)DEVICE_GROUPhandle 이 이 앱이 소유한 그룹으로 resolve 되어야 함Promise<DeviceView[]>

요청

이름타입설명기본값필수
handlestring조회할 그룹 handle-O

응답

이름타입설명
handlestring디바이스 handle
namestring디바이스 이름
statusstring디바이스 상태
onlineboolean | undefined조회 시점의 온라인 여부를 나타내는 정보 라벨. 방송 시점의 실제 상태를 보장하지 않으므로 대상 선택 제한 근거로 사용하지 마세요

예제

ts
const [targets, members] = await Promise.all([
  oe.targets.list(),
  oe.groups.members("grp_1f"),
]);

const memberHandles = new Set(members.map((m) => m.handle));
const available = targets.filter((d) => !memberHandles.has(d.handle));

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 DEVICE_GROUP capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요
TargetUnresolved404handle 을 해석할 수 없음그룹 handle 이 유효한지 확인하세요

그룹 삭제 — oe.groups.delete()

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.groups.delete(handle)DEVICE_GROUPhandle 이 이 앱이 소유한 그룹으로 resolve 되어야 함Promise<void>

요청

이름타입설명기본값필수
handlestring삭제할 그룹 handle-O

응답

반환값이 없습니다(Promise<void>).

예제

ts
await oe.groups.delete("grp_1f");

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 DEVICE_GROUP capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요
TargetUnresolved404handle 을 해석할 수 없음그룹 handle 이 유효한지 확인하세요

참고 코드

레퍼런스 앱의 디바이스 그룹 화면 구현은 partner-app/src/features/groups/Groups.tsx에서 확인할 수 있습니다.

더보기