Image & Media Support — 2025-12-05
WhatsApp channel은 Baileys Web을 통해 실행됩니다. 이 문서는 전송, Gateway 및 Agent 답장에 대한 현재 미디어 처리 규칙을 다룹니다.
목표
- openclaw message send --media를 통해 선택적 캡션과 함께 미디어 전송
- 웹 인박스의 자동 답장이 텍스트와 함께 미디어를 포함할 수 있도록 허용
- 유형별 제한을 합리적이고 예측 가능하게 유지
CLI 인터페이스
- openclaw message send --media <path-or-url> [--message <caption>]
- --media 선택 사항; 캡션은 미디어 전용 전송을 위해 비워둘 수 있습니다.
- --dry-run은 해결된 페이로드를 출력합니다; --json은 { channel, to, messageId, mediaUrl, caption }을 발행합니다.
WhatsApp Web channel 동작
- 입력: 로컬 파일 경로 또는 HTTP(S) URL
- 흐름: Buffer로 로드하고 미디어 종류를 감지한 후 올바른 페이로드 구축:
- 이미지: JPEG로 크기 조정 및 재압축(최대 2048px) agents.defaults.mediaMaxMb(기본 5MB) 목표, 6MB로 제한
- 오디오/음성/비디오: 16MB까지 통과; 오디오는 음성 메모로 전송(ptt: true)
- 문서: 그 외 모든 것, 최대 100MB, 가능한 경우 파일 이름 보존
- WhatsApp GIF 스타일 재생: gifPlayback: true(CLI: --gif-playback)로 MP4 전송하여 모바일 클라이언트가 인라인으로 반복 재생
- MIME 감지는 매직 바이트를 우선하고, 그 다음 헤더, 그 다음 파일 확장자
- 캡션은 --message 또는 reply.text에서 가져옵니다; 빈 캡션 허용
- 로깅: 비상세 모드는 ↩️/✅를 표시; 상세 모드는 크기 및 소스 경로/URL 포함
자동 답장 파이프라인
- getReplyFromConfig는 { text?, mediaUrl?, mediaUrls? }를 반환합니다.
- 미디어가 있는 경우 웹 발신자는 openclaw message send와 동일한 파이프라인을 사용하여 로컬 경로 또는 URL을 해결합니다.
- 여러 미디어 항목이 제공되면 순차적으로 전송됩니다.
명령으로의 인바운드 미디어 (Pi)
- 웹 인바운드 메시지에 미디어가 포함된 경우 OpenClaw는 임시 파일에 다운로드하고 템플릿 변수를 노출합니다:
- {{MediaUrl}} 인바운드 미디어를 위한 의사 URL
- {{MediaPath}} 명령 실행 전에 작성된 로컬 임시 경로
- 세션별 Docker 샌드박스가 활성화된 경우 인바운드 미디어가 샌드박스 작업 공간에 복사되고 MediaPath/MediaUrl이 media/inbound/<filename>과 같은 상대 경로로 다시 작성됩니다.
- 미디어 이해(tools.media.* 또는 공유 tools.media.models를 통해 구성된 경우)는 템플릿 전에 실행되며 Body에 [Image], [Audio], [Video] 블록을 삽입할 수 있습니다.
- 오디오는 {{Transcript}}를 설정하고 슬래시 명령이 여전히 작동하도록 명령 파싱을 위해 전사를 사용합니다.
- 비디오 및 이미지 설명은 명령 파싱을 위해 캡션 텍스트를 보존합니다.
- 기본적으로 첫 번째 일치하는 이미지/오디오/비디오 첨부 파일만 처리됩니다; 여러 첨부 파일을 처리하려면 tools.media.<cap>.attachments를 설정하세요.
제한 및 오류
아웃바운드 전송 제한 (WhatsApp 웹 전송)
- 이미지: 재압축 후 ~6MB 제한
- 오디오/음성/비디오: 16MB 제한; 문서: 100MB 제한
- 초과 크기 또는 읽을 수 없는 미디어 → 로그에 명확한 오류 표시 및 답장 건너뜀
미디어 이해 제한 (전사/설명)
- 이미지 기본값: 10MB (tools.media.image.maxBytes)
- 오디오 기본값: 20MB (tools.media.audio.maxBytes)
- 비디오 기본값: 50MB (tools.media.video.maxBytes)
- 초과 크기 미디어는 이해를 건너뛰지만 답장은 원래 본문으로 계속 진행됩니다.
테스트 참고 사항
- 이미지/오디오/문서 케이스에 대한 전송 + 답장 흐름 커버
- 이미지 재압축(크기 제한) 및 오디오 음성 메모 플래그 검증
- 다중 미디어 답장이 순차적 전송으로 확장되는지 확인