Technical reference
리치 출력 프로토콜
어시스턴트 출력은 몇 가지 전용 채널을 통해 전송/렌더링 지시어를 전달합니다.
- 첨부 파일 전송을 위한 구조화된
mediaUrl/mediaUrls필드. - 오디오 표시 힌트를 위한
[[audio_as_voice]]. - 답장 메타데이터를 위한
[[reply_to_current]]/[[reply_to:<id>]]. - Control UI의 리치 렌더링을 위한
[embed ...].
구조화된 미디어 필드와 [[...]] 태그는 전송 메타데이터입니다. [embed ...]는 별도의 웹 전용 리치 렌더링 경로이며 미디어 별칭이 아닙니다.
미디어 첨부 파일
원격 첨부 파일은 공개 https: URL이어야 합니다. http:, local loopback, 링크 로컬, 비공개 및 내부 호스트 이름은 첨부 파일 지시어로 거부되며, 서버 측 미디어 가져오기 기능은 여기에 자체 네트워크 보호 조치를 추가로 적용합니다.
로컬 첨부 파일에는 절대 경로, 작업 공간 상대 경로 또는 홈 상대 ~/ 경로를 사용할 수 있습니다. 전송되기 전에 에이전트 파일 읽기 정책과 미디어 유형 검사를 거쳐야 합니다.
일반 Markdown 이미지 구문()은 기본적으로 텍스트로 유지됩니다. Markdown 이미지를 미디어 답장으로 처리하려는 채널은 아웃바운드 어댑터에서 이 동작을 활성화합니다. Telegram은 이를 활성화하므로 이 미디어 첨부 파일로 변환됩니다.
블록 스트리밍이 활성화된 경우 미디어는 구조화된 페이로드 필드를 통해 전달되어야 합니다. 동일한 미디어 URL이 스트리밍된 블록과 최종 어시스턴트 페이로드에 다시 나타나면 OpenClaw는 이를 한 번만 전송하고 최종 페이로드에서 중복 항목을 제거합니다.
[embed ...]
[embed ...]는 Control UI에서 에이전트가 사용할 수 있는 유일한 리치 렌더링 구문입니다. 자체 닫힘 예시는 다음과 같습니다.
[embed ref="cv_123" title="Status" /]규칙:
- 새 출력에는 더 이상
[view ...]를 사용할 수 없습니다. - 임베드 쇼트코드는 어시스턴트 메시지 영역에서만 렌더링됩니다.
- URL 기반 임베드만 렌더링됩니다.
ref="..."또는url="..."을 사용하세요. - 블록 형식의 인라인 HTML 임베드 쇼트코드는 렌더링되지 않습니다.
- 웹 UI는 표시되는 텍스트에서 쇼트코드를 제거하고 임베드를 인라인으로 렌더링합니다.
저장된 렌더링 형식
정규화되어 저장된 어시스턴트 콘텐츠 블록은 구조화된 canvas 항목입니다.
{ "type": "canvas", "preview": { "kind": "canvas", "surface": "assistant_message", "render": "url", "viewId": "cv_123", "url": "/__openclaw__/canvas/documents/cv_123/index.html", "title": "Status", "preferredHeight": 320 }}present_view는 인식되지 않습니다. 저장되거나 렌더링되는 리치 블록은 항상 이 canvas 형식을 사용합니다.