Visitor image uploads — let customers send screenshots

When enabled, the widget shows a paperclip button next to the chat input. Visitors can attach an image (PNG, JPEG, HEIC) up to 5 MB; Wilow resizes to 2048 px max dimension, strips EXIF, and includes the image in the next chat turn. Wilow picks up details the visitor can't easily describe in words — "my receipt looks like this", "which cable do I need", "this error message".

When it helps

Turn it on if visitors routinely ask questions that are easier to show than describe: "is this the right part?", "what does this error mean?", "I got this receipt from you guys". The vision pass can read numbers on packaging, transcribe short error strings, identify product variants, and tell one similar-looking object from another.

Skip it if your product is purely conversational (no photos, no receipts, no screenshots matter). Image turns count as one message each, same as text, but tend to lead to longer follow-up exchanges — if visitors upload regularly, expect your monthly message count to rise.

How to enable / disable it

Two gates apply, both must be on for visitors to see the paperclip:

  1. Workspace gate — must be enabled for your workspace. Once we turn it on, the feature unlocks on the next config fetch (≤ 60 s); turning it off hides it the same way.
  2. Account toggleWidget → Privacy → Allow visitors to upload images. On by default once the feature is enabled for your workspace. Flip it off and the paperclip disappears for new visitors at the next config fetch.

Disabling the toggle does not delete anything. In-flight uploads (already POSTed but not yet attached to a turn) finish normally. Stored attachments referenced by past conversations stay where they are. Only the future paperclip + upload endpoint are affected.

What visitors see

A paperclip icon appears in the input row. Tapping it opens the device's native file picker (constrained to images). After selection, the widget shows a preview with a cancel / confirm pair so the visitor can back out if they picked the wrong file. Confirm ships the image; upload failure (network error, oversized, unsupported format) surfaces an inline error inside the chat pane.

On mobile, the picker opens the camera as well as the gallery.

What Wilow does with the image

  1. Client-side: the widget decodes, re-encodes to JPEG at up to 2048 px on the long edge, quality 85. This trims 10 MB phone photos to ~200 KB.
  2. Server-side: we content-sniff the bytes to confirm it's actually an image (not a renamed .exe), strip EXIF for privacy, and store the re-encoded JPEG.
  3. The next chat turn includes the image as a vision input alongside the text. Wilow's answer can reference what's in the picture.

EXIF stripping means GPS coordinates, device info, and capture timestamps don't end up in your storage. Intentional — visitors didn't opt in to sharing those.

Common questions

  • How do I disable images? Widget → Privacy → toggle Allow visitors to upload images off. The paperclip disappears for new visitors at the next config fetch.
  • Why is the paperclip not showing? Either the workspace gate isn't on (talk to us), or Allow visitors to upload images is off in Widget → Privacy, or the browser cache hasn't refreshed yet.
  • Are uploads counted against my message cap? Yes — one image turn = one message, same as text. See usage and quotas.

Pitfalls

  • Non-image uploads rejected. We only accept image/* MIME types, double-checked server-side by content sniff. A .pdf renamed to .jpg gets bounced.
  • HEIC support. Supported by Wilow directly. Older browsers that can't render HEIC previews will show the file name instead of a thumbnail; the upload still works.
  • Cap consumption. Image turns count as one message each, but conversations with images tend to be longer — more clarifications, more follow-ups. Watch the Usage page if you've enabled this and traffic ramps.
  • Don't use for contracts. If visitors need to send legal documents (receipts, invoices, proofs), route them to a secure upload form instead — chat transcripts are readable by your team and retained per your data settings.
  • Handoff transcripts include images. If the visitor uploaded something and then triggered handoff, the image shows up inline in the handoff email / ticket webhook payload (base64-encoded). Tell whoever handles handoffs that this can happen.