OPWS Developers

방송 템플릿

개요

oe.templates.*는 방송 템플릿을 관리합니다. 템플릿은 컨텐츠와 대상(그룹 또는 개별 디바이스 목록)을 묶은 재사용 가능한 방송 구성 단위이며, 예약 방송에 필수입니다.

시작하기 전에

방송 템플릿을 다루기 전에 아래를 준비하세요.

  • 파트너 앱에 TEMPLATE capability grant 가 있어야 합니다. 없으면 CapabilityDenied 에러가 발생합니다.
  • 템플릿 생성에는 컨텐츠와 대상이 필요합니다. 컨텐츠는 방송 컨텐츠에서, 대상은 디바이스 또는 디바이스 그룹에서 준비하세요.

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

템플릿 생성 — oe.templates.create()

컨텐츠와 대상을 묶어 템플릿을 만듭니다. 대상은 그룹(groupHandle) 또는 개별 디바이스 목록(deviceHandles) 중 정확히 하나의 모드로 지정합니다.

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.templates.create(input)TEMPLATE + CONTENT + (DEVICE×N 또는 DEVICE_GROUP)contentHandle 은 resolve 되고 실행 권한 grant 가 있어야 함. deviceHandles 는 각 handle 이 디바이스로 resolve 되어야 함(all-or-none). groupHandle 은 이 앱이 읽을 수 있는 그룹이어야 함Promise<TemplateView>

요청

이름타입설명기본값필수
namestring템플릿 이름-O
contentHandlestring방송에 사용할 컨텐츠 handle-O
groupHandlestring대상 그룹 handle-조건부
deviceHandlesstring[]대상 디바이스 handle 다중 지정-조건부
languageOrderstring언어 재생 순서(쉼표 구분, 예 "ko,en")-X

주의: groupHandledeviceHandles 는 동시에 지정할 수 없습니다. 둘 중 정확히 하나만 지정하세요.

참고: languageOrder 는 이 API에서는 쉼표로 구분한 문자열("ko,en")입니다. oe.broadcast.tts.fromContent()languageOrder는 배열(["ko", "en"])이므로 형식이 다릅니다.

응답

TemplateView — 필드는 아래 "템플릿 상세 조회" 절의 응답 표와 같습니다.

예제

ts
// 그룹 대상 템플릿
await oe.templates.create({
  name: "오전 안내 방송",
  contentHandle,
  groupHandle: "grp_1f",
  languageOrder: "ko,en",
});

// 개별 디바이스 대상 템플릿
await oe.templates.create({
  name: "1층 안내 방송",
  contentHandle,
  deviceHandles,
});

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 TEMPLATE 또는 CONTENT capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요
TargetUnresolved404contentHandle/groupHandle/deviceHandles 를 해석할 수 없거나 필요한 권한이 없음handle 이 유효한지, 필요한 권한이 있는지 확인하세요

템플릿 목록 조회 — oe.templates.list()

이 앱이 소유한 템플릿 목록을 조회합니다.

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.templates.list()TEMPLATE없음 — capability 만으로 게이트되고, 이후 이 앱이 소유한 템플릿만 반환됩니다Promise<TemplateView[]>

요청

입력 파라미터가 없습니다.

응답

TemplateView[] — 각 항목의 필드는 아래 "템플릿 상세 조회" 절의 응답 표와 같습니다.

예제

ts
const templates = await oe.templates.list();
for (const t of templates) {
  console.log(t.handle, t.name);
}

대표 에러

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

템플릿 상세 조회 — oe.templates.get()

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.templates.get(handle)TEMPLATEhandle 이 이 앱이 소유한 템플릿으로 resolve 되어야 함Promise<TemplateView>

요청

이름타입설명기본값필수
handlestring조회할 템플릿 handle-O

응답

이름타입설명
handlestring템플릿 handle
namestring템플릿 이름
contentHandlestring사용 중인 컨텐츠 handle
targetModestring대상 지정 방식(그룹 또는 개별 디바이스)
languageOrderstring | null | undefined언어 재생 순서
groupHandlestring | null | undefined대상 그룹 handle(그룹 모드일 때)
deviceHandlesstring[] | null | undefined대상 디바이스 handle 목록(개별 디바이스 모드일 때). 조회 시점의 실효 노출 기준으로 다시 계산되며, 노출이 사라진 디바이스는 제외됩니다

예제

ts
const template = await oe.templates.get("tpl_morning");
console.log(template.name, template.contentHandle);

대표 에러

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

템플릿 수정 — oe.templates.update()

이름과 언어 재생 순서만 변경할 수 있습니다. 컨텐츠와 대상은 수정할 수 없습니다.

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.templates.update(handle, input)TEMPLATEhandle 이 이 앱이 소유한 템플릿으로 resolve 되어야 함Promise<TemplateView>

요청

이름타입설명기본값필수
namestring템플릿 이름-O
languageOrderstring언어 재생 순서-X

응답

TemplateView — 필드는 위 "템플릿 상세 조회" 절의 응답 표와 같습니다.

예제

ts
await oe.templates.update("tpl_morning", {
  name: "오전 인사 방송",
  languageOrder: "ko",
});

대표 에러

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

템플릿 삭제 — oe.templates.delete()

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.templates.delete(handle)TEMPLATEhandle 이 이 앱이 소유한 템플릿으로 resolve 되어야 함Promise<void>

요청

이름타입설명기본값필수
handlestring삭제할 템플릿 handle-O

응답

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

예제

ts
await oe.templates.delete("tpl_morning");

대표 에러

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

참고: 이 템플릿을 참조하는 예약이 남아있으면 삭제할 수 없습니다. 먼저 참조 예약을 삭제하거나 다른 템플릿으로 교체하세요.

참고 코드

레퍼런스 앱의 방송 템플릿 화면 구현은 partner-app/src/features/templates/Templates.tsx에서 확인할 수 있습니다.

더보기