OPWS Developers

방송 컨텐츠

개요

oe.contents.*는 방송 컨텐츠의 조회·생성·수정을 제공합니다. 삭제는 제공하지 않습니다. 생성 시 원문(한국어)을 넣으면 서버가 번역·음성 합성을 수행합니다.

시작하기 전에

방송 컨텐츠를 다루기 전에 아래를 준비하세요.

  • 파트너 앱에 CONTENT capability grant 가 있어야 합니다. 없으면 CapabilityDenied 에러가 발생합니다.
  • 생성할 때 번역 언어를 선택해야 합니다. 선택지는 oe.languages.list()로 채우기를 권장합니다.

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

컨텐츠 목록 조회 — oe.contents.list()

이 앱에 노출된 컨텐츠 목록을 조회합니다. 현장 노출분과 이 앱이 직접 만든 컨텐츠를 함께 반환합니다.

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.contents.list(opts?)CONTENT없음 — capability 만으로 게이트되고, 이후 노출된 컨텐츠 집합으로 필터됩니다Promise<ContentView[]>

요청 — 필터 파라미터

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

응답

ContentView[] — 각 항목의 필드는 아래 "컨텐츠 상세 조회" 절의 응답 표와 같습니다.

예제

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

const filtered = await oe.contents.list({ search: "환영" });

대표 에러

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

컨텐츠 상세 조회 — oe.contents.get()

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.contents.get(handle)CONTENThandle 이 resolve 되고 읽기 권한 grant 가 있어야 함Promise<ContentView>

요청

이름타입설명기본값필수
handlestring조회할 컨텐츠 handle-O

응답

이름타입설명
handlestring컨텐츠 handle
titlestring제목
scopeTypestring공유 범위 — 파트너 자작 또는 현장 노출분 등
languagesstring[] | undefined재생 순서 언어 코드 목록
bodystring | null | undefined원문 — 이 앱이 만든 컨텐츠만 값이 채워지고, 현장 노출분은 null 입니다
durationSecondsnumber | null | undefined언어별 합성 길이 합(초). 합성이 끝나기 전에는 null 입니다

예제

ts
const content = await oe.contents.get(contentHandle);
console.log(content.title, content.durationSeconds);

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 CONTENT capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요
TargetUnresolved404handle 을 해석할 수 없거나 읽기 권한이 없음컨텐츠 handle 이 유효한지 확인하세요

컨텐츠 생성 — oe.contents.create()

제목과 한국어 원문, 번역 언어 목록을 전달하면 서버가 언어별 번역·음성 합성을 수행합니다.

기본 정보

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

요청

이름타입설명기본값필수
titlestring컨텐츠 제목-O
textstring원문 텍스트(한국어)-O
languagesstring[]번역·합성할 언어 코드 목록(원문 ko 포함)-O

응답

ContentView — 필드는 위 "컨텐츠 상세 조회" 절의 응답 표와 같습니다.

예제

ts
const created = await oe.contents.create({
  title: "환영 안내",
  text: "방문을 환영합니다",
  languages: ["ko", "en", "ja"],
});

합성은 비동기입니다. durationSecondsnull 이 아니게 되면 합성이 끝난 것입니다.

ts
async function waitForSynthesis(handle: string) {
  const deadline = Date.now() + 30_000;
  while (Date.now() < deadline) {
    const detail = await oe.contents.get(handle);
    if (detail.durationSeconds != null) return;
    await new Promise((resolve) => setTimeout(resolve, 2000));
  }
}

await waitForSynthesis(contentHandle);

참고: 합성이 끝나지 않은 컨텐츠를 방송하면 ContentNotReady 에러가 발생할 수 있습니다.

대표 에러

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

컨텐츠 수정 — oe.contents.update()

제목 변경과 번역 언어 추가만 가능합니다. 원문과 기존 언어는 변경할 수 없습니다.

기본 정보

메서드앱 capability참조 handle 조건반환 타입
oe.contents.update(handle, input)CONTENThandle 이 이 앱이 소유한 컨텐츠로 resolve 되어야 함Promise<ContentView>

요청

이름타입설명기본값필수
titlestring컨텐츠 제목-O
addLanguagesstring[]추가할 번역 언어 목록. 기존 언어에 더해지며 제거는 지원하지 않음-X

응답

ContentView — 필드는 위 "컨텐츠 상세 조회" 절의 응답 표와 같습니다.

예제

ts
await oe.contents.update(contentHandle, {
  title: "환영 안내(신관)",
  addLanguages: ["zh"],
});

대표 에러

에러HTTP 상태원인해결 방법
CapabilityDenied403앱에 CONTENT capability grant 가 없음Open Echo 지원 채널로 grant 를 요청하세요
TargetUnresolved404handle 을 해석할 수 없음이 앱이 만든 컨텐츠인지 확인하세요

목록에 보이는 컨텐츠는 oe.broadcast.tts.fromContent()로 즉시 방송할 수 있습니다. 컨텐츠를 영속 생성하지 않고 즉석 문구를 한 번만 방송하려면 oe.broadcast.tts.send()를 사용하세요.

참고 코드

레퍼런스 앱의 방송 컨텐츠 화면 구현은 partner-app/src/features/contents/Contents.tsx에서 확인할 수 있습니다.

더보기