방송 컨텐츠
개요
oe.contents.*는 방송 컨텐츠의 조회·생성·수정을 제공합니다. 삭제는 제공하지 않습니다. 생성 시 원문(한국어)을 넣으면 서버가 번역·음성 합성을 수행합니다.
시작하기 전에
방송 컨텐츠를 다루기 전에 아래를 준비하세요.
- 파트너 앱에
CONTENTcapability grant 가 있어야 합니다. 없으면CapabilityDenied에러가 발생합니다. - 생성할 때 번역 언어를 선택해야 합니다. 선택지는
oe.languages.list()로 채우기를 권장합니다.
참고: capability 는 부여 등급(READ·MANAGE)에 따라 사용할 수 있는 API 가 다릅니다. 메서드별 등급은 컨트롤 플레인 개요의 Capability 요약에서 확인하세요.
컨텐츠 목록 조회 — oe.contents.list()
이 앱에 노출된 컨텐츠 목록을 조회합니다. 현장 노출분과 이 앱이 직접 만든 컨텐츠를 함께 반환합니다.
기본 정보
| 메서드 | 앱 capability | 참조 handle 조건 | 반환 타입 |
|---|---|---|---|
oe.contents.list(opts?) | CONTENT | 없음 — capability 만으로 게이트되고, 이후 노출된 컨텐츠 집합으로 필터됩니다 | Promise<ContentView[]> |
요청 — 필터 파라미터
| 이름 | 타입 | 설명 | 기본값 | 필수 |
|---|---|---|---|---|
search | string | 제목 부분일치 필터(대소문자 무시) | - | X |
응답
ContentView[] — 각 항목의 필드는 아래 "컨텐츠 상세 조회" 절의 응답 표와 같습니다.
예제
const all = await oe.contents.list();
const filtered = await oe.contents.list({ search: "환영" });
대표 에러
| 에러 | HTTP 상태 | 원인 | 해결 방법 |
|---|---|---|---|
CapabilityDenied | 403 | 앱에 CONTENT capability grant 가 없음 | Open Echo 지원 채널로 grant 를 요청하세요 |
컨텐츠 상세 조회 — oe.contents.get()
기본 정보
| 메서드 | 앱 capability | 참조 handle 조건 | 반환 타입 |
|---|---|---|---|
oe.contents.get(handle) | CONTENT | handle 이 resolve 되고 읽기 권한 grant 가 있어야 함 | Promise<ContentView> |
요청
| 이름 | 타입 | 설명 | 기본값 | 필수 |
|---|---|---|---|---|
handle | string | 조회할 컨텐츠 handle | - | O |
응답
| 이름 | 타입 | 설명 |
|---|---|---|
handle | string | 컨텐츠 handle |
title | string | 제목 |
scopeType | string | 공유 범위 — 파트너 자작 또는 현장 노출분 등 |
languages | string[] | undefined | 재생 순서 언어 코드 목록 |
body | string | null | undefined | 원문 — 이 앱이 만든 컨텐츠만 값이 채워지고, 현장 노출분은 null 입니다 |
durationSeconds | number | null | undefined | 언어별 합성 길이 합(초). 합성이 끝나기 전에는 null 입니다 |
예제
const content = await oe.contents.get(contentHandle);
console.log(content.title, content.durationSeconds);
대표 에러
| 에러 | HTTP 상태 | 원인 | 해결 방법 |
|---|---|---|---|
CapabilityDenied | 403 | 앱에 CONTENT capability grant 가 없음 | Open Echo 지원 채널로 grant 를 요청하세요 |
TargetUnresolved | 404 | handle 을 해석할 수 없거나 읽기 권한이 없음 | 컨텐츠 handle 이 유효한지 확인하세요 |
컨텐츠 생성 — oe.contents.create()
제목과 한국어 원문, 번역 언어 목록을 전달하면 서버가 언어별 번역·음성 합성을 수행합니다.
기본 정보
| 메서드 | 앱 capability | 참조 handle 조건 | 반환 타입 |
|---|---|---|---|
oe.contents.create(input) | CONTENT | 없음(신규 생성 — 참조 handle 없음) | Promise<ContentView> |
요청
| 이름 | 타입 | 설명 | 기본값 | 필수 |
|---|---|---|---|---|
title | string | 컨텐츠 제목 | - | O |
text | string | 원문 텍스트(한국어) | - | O |
languages | string[] | 번역·합성할 언어 코드 목록(원문 ko 포함) | - | O |
응답
ContentView — 필드는 위 "컨텐츠 상세 조회" 절의 응답 표와 같습니다.
예제
const created = await oe.contents.create({
title: "환영 안내",
text: "방문을 환영합니다",
languages: ["ko", "en", "ja"],
});
합성은 비동기입니다. durationSeconds 가 null 이 아니게 되면 합성이 끝난 것입니다.
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 상태 | 원인 | 해결 방법 |
|---|---|---|---|
CapabilityDenied | 403 | 앱에 CONTENT capability grant 가 없음 | Open Echo 지원 채널로 grant 를 요청하세요 |
컨텐츠 수정 — oe.contents.update()
제목 변경과 번역 언어 추가만 가능합니다. 원문과 기존 언어는 변경할 수 없습니다.
기본 정보
| 메서드 | 앱 capability | 참조 handle 조건 | 반환 타입 |
|---|---|---|---|
oe.contents.update(handle, input) | CONTENT | handle 이 이 앱이 소유한 컨텐츠로 resolve 되어야 함 | Promise<ContentView> |
요청
| 이름 | 타입 | 설명 | 기본값 | 필수 |
|---|---|---|---|---|
title | string | 컨텐츠 제목 | - | O |
addLanguages | string[] | 추가할 번역 언어 목록. 기존 언어에 더해지며 제거는 지원하지 않음 | - | X |
응답
ContentView — 필드는 위 "컨텐츠 상세 조회" 절의 응답 표와 같습니다.
예제
await oe.contents.update(contentHandle, {
title: "환영 안내(신관)",
addLanguages: ["zh"],
});
대표 에러
| 에러 | HTTP 상태 | 원인 | 해결 방법 |
|---|---|---|---|
CapabilityDenied | 403 | 앱에 CONTENT capability grant 가 없음 | Open Echo 지원 채널로 grant 를 요청하세요 |
TargetUnresolved | 404 | handle 을 해석할 수 없음 | 이 앱이 만든 컨텐츠인지 확인하세요 |
목록에 보이는 컨텐츠는 oe.broadcast.tts.fromContent()로 즉시 방송할 수 있습니다. 컨텐츠를 영속 생성하지 않고 즉석 문구를 한 번만 방송하려면 oe.broadcast.tts.send()를 사용하세요.
참고 코드
레퍼런스 앱의 방송 컨텐츠 화면 구현은 partner-app/src/features/contents/Contents.tsx에서 확인할 수 있습니다.

