Naar hoofdinhoud gaan

Afbeeldingen & Media-ondersteuning — 2025-12-05

Het WhatsApp-kanaal draait via Baileys Web. Dit document beschrijft de huidige regels voor mediaverwerking voor verzenden, Gateway en agentantwoorden.

Doelen

  • Media verzenden met optionele bijschriften via openclaw message send --media.
  • Automatische antwoorden vanuit de webinbox toestaan om media naast tekst te bevatten.
  • Per-type limieten beheersbaar en voorspelbaar houden.

CLI-oppervlak

  • openclaw message send --media <path-or-url> [--message <caption>]
    • --media optioneel; het bijschrift kan leeg zijn voor alleen-media-verzendingen.
    • --dry-run toont de opgeloste payload; --json geeft { channel, to, messageId, mediaUrl, caption } uit.

Gedrag van het WhatsApp Web-kanaal

  • Invoer: lokaal bestandspad of HTTP(S)-URL.
  • Verloop: laden in een Buffer, mediatype detecteren en de juiste payload opbouwen:
    • Afbeeldingen: verkleinen en hercomprimeren naar JPEG (max. zijde 2048px) met doel agents.defaults.mediaMaxMb (standaard 5 MB), begrensd op 6 MB.
    • Audio/Spraak/Video: doorgeven tot 16 MB; audio wordt verzonden als een spraakbericht (ptt: true).
    • Documenten: al het overige, tot 100 MB, met bestandsnaam behouden indien beschikbaar.
  • WhatsApp GIF-achtige weergave: verzend een MP4 met gifPlayback: true (CLI: --gif-playback) zodat mobiele clients inline loopen.
  • MIME-detectie geeft de voorkeur aan magic bytes, daarna headers en vervolgens de bestandsextensie.
  • Bijschrift komt uit --message of reply.text; een leeg bijschrift is toegestaan.
  • Logging: niet-verbose toont ↩️/; verbose bevat grootte en bronpad/URL.

Auto-antwoord-pipeline

  • getReplyFromConfig retourneert { text?, mediaUrl?, mediaUrls? }.
  • Wanneer media aanwezig is, lost de webzender lokale paden of URL’s op met dezelfde pipeline als openclaw message send.
  • Meerdere media-items worden sequentieel verzonden indien opgegeven.

Inkomende media naar opdrachten (Pi)

  • Wanneer inkomende webberichten media bevatten, downloadt OpenClaw naar een tijdelijk bestand en stelt templating-variabelen beschikbaar:
    • {{MediaUrl}} pseudo-URL voor de inkomende media.
    • {{MediaPath}} lokaal tijdelijk pad dat wordt geschreven vóór het uitvoeren van de opdracht.
  • Wanneer een per-sessie Docker-sandbox is ingeschakeld, wordt inkomende media gekopieerd naar de sandbox-werkruimte en worden MediaPath/MediaUrl herschreven naar een relatief pad zoals media/inbound/<filename>.
  • Media-inzicht (indien geconfigureerd via tools.media.* of gedeelde tools.media.models) draait vóór templating en kan [Image], [Audio] en [Video]-blokken invoegen in Body.
    • Audio stelt {{Transcript}} in en gebruikt het transcript voor opdrachtparsing zodat slash-opdrachten blijven werken.
    • Video- en afbeeldingsbeschrijvingen behouden eventuele bijschrifttekst voor opdrachtparsing.
  • Standaard wordt alleen de eerste overeenkomende afbeelding/audio/video-bijlage verwerkt; stel tools.media.<cap>.attachments in om meerdere bijlagen te verwerken.

Limieten & Fouten

Uitgaande verzendlimieten (WhatsApp web send)
  • Afbeeldingen: ~6 MB limiet na hercompressie.
  • Audio/spraak/video: 16 MB limiet; documenten: 100 MB limiet.
  • Te grote of onleesbare media → duidelijke fout in logs en het antwoord wordt overgeslagen.
Limieten voor media-inzicht (transcriptie/beschrijving)
  • Afbeeldingen standaard: 10 MB (tools.media.image.maxBytes).
  • Audio standaard: 20 MB (tools.media.audio.maxBytes).
  • Video standaard: 50 MB (tools.media.video.maxBytes).
  • Te grote media slaan inzicht over, maar antwoorden gaan nog steeds door met de oorspronkelijke inhoud.

Notities voor Tests

  • Dek verzend- en antwoordstromen af voor gevallen met afbeeldingen/audio/documenten.
  • Valideer hercompressie voor afbeeldingen (groottebegrenzing) en de spraakbericht-vlag voor audio.
  • Zorg dat antwoorden met meerdere media uitwaaieren als sequentiële verzendingen.