Send a File (voice / image / video)

Send up to 5 voice notes, images, videos or documents from a public URL, in numbered order, inside the channel's current messaging window.

Getting here

Automate → Workflows, open a workflow, click + on the canvas, then pick Send a File (voice / image / video) under Add Steps.

Before you start

  • An owner, admin or agent can add this step and save the workflow. Publishing that workflow — the thing that makes it run on live conversations — is an owner or admin action.
  • Building and running workflows depends on your plan; see pricing.
  • Nothing outside Inchat has to be connected. Files are uploaded through the step (Inchat hosts them) or pasted as a public https URL Meta can fetch.

Set up

  1. Open the workflow and click + where the file belongs.
  2. Pick Send a File (voice / image / video).
  3. Choose the type: Voice note / audio, Image, Video or Document.
  4. Upload the file, or paste a public URL — up to 5, sent in the order listed.
  5. Write a Caption, and for a document, the File name shown in the chat.
  6. Optional, under Advanced Settings: turn on Add Message Failure Branch for a path to run when the send fails.
  7. Save the step, then publish the workflow.

Fields

Media type
Voice note / audio, Image, Video or Document.
Default: Voice note / audio
Attachment(s)
Up to 5 files, sent as separate messages in the order listed.
Limits: Each one needs a public https URL Meta can fetch, or an upload through this step.
Caption
Text shown with the file. Only the first attachment's caption is used when several are attached.
File name
The name shown in the chat for a Document attachment, e.g. Company Profile.pdf.
Limits: Document type only.
Add Message Failure Branch
Adds an onFailure arm that runs instead of the steps that would otherwise follow, when this send fails.
Default: off
Limits: Without it, a failed send is recorded and the run moves on to the next step as if nothing happened.

How it works

  • On a windowed channel (WhatsApp, Messenger, Instagram) the step checks whether the customer's last message — or, on WhatsApp, their last call — was within the last 24 hours before it calls the channel's send API. Outside that window the send is refused and nothing reaches Meta.
  • With more than one attachment, each file is delivered as its own message in the order listed, and only the first attachment's caption is used — the rest are dropped, not queued as separate messages.
  • Whether that first caption rides inside the file's own message or goes out as a separate text message right after it depends on the channel and the media type: WhatsApp image, video and document attachments carry the caption inline; a WhatsApp voice note (the default media type) never can, and Messenger and Instagram never can for any attachment type — on all of those the caption is sent as its own follow-up message.
  • A voice note uploaded through this step's own uploader is transcoded to the mono OGG/Opus format WhatsApp requires. A pasted URL marked as a voice note is trusted as-is only when it already ends .ogg or .opus; a pasted MP3 or M4A marked as a voice note is refused before it reaches Meta rather than sent as a garbled or rejected file.
  • A pasted /api/media/<message>/<index> link — Inchat's own login-gated inbox proxy — is first tried for redemption: if it points at an attachment this workspace actually stored, it is swapped for a short-lived signed URL before the send, and goes through. Only a link that cannot be redeemed then hits the shape check below and fails.
  • Past that, the attachment URL is checked for its SHAPE only, before the send — https and well-formed. It is never actually fetched to confirm the file is really there: a well-formed https URL that is dead or private still passes this check, reaches Meta, and can fail at Meta's own download — a failure this step does not see, so it is logged as sent even though the customer received nothing.
  • A file uploaded through this step's own uploader is stored in a public bucket and gets a permanent public URL — nothing needs to be re-signed at send time.

When it fails

  • Messaging window closed: on WhatsApp, Messenger or Instagram, past the window, the send is refused before Graph is called. The execution log's line for this step reads Messaging window closed — free-form send blocked. Use a send_template step (approved WhatsApp / utility template) instead.
  • A pasted voice-note URL that is not .ogg/.opus: the step fails with Voice notes need a mono OGG/Opus file. Upload through this step (which converts it) or paste a .ogg/.opus URL.
  • A non-https or malformed URL fails the step before any send is attempted — but this check never fetches the URL, so a well-formed https link that is dead or private still passes it, reaches Meta, and can fail there instead, invisibly to this step's own logged outcome. A pasted /api/media/… link fails only when it cannot be redeemed to a file this workspace actually stored; a redeemable one is swapped for a signed URL and sends normally.
  • With more than one attachment, a failure partway through stops the rest of that step's files from sending — a later file is never sent after an earlier one in the same step failed or could not be confirmed.
  • With Add Message Failure Branch off, a failed send here does not stop the rest of the run — steps placed after it still happen, on a conversation that received no file (or fewer files than intended). With it on, the branch's own steps run instead, and nothing after the branch runs on this path.
  • When a file's delivery cannot be confirmed one way or the other, the run stops after this step even with no failure branch set — later steps are not attempted on a send whose outcome is unknown.

Limits

  • It does not reopen a closed WhatsApp/Messenger/Instagram window — that is what Send WhatsApp Template is for, and that step fills only a template's body variables — it has no way to attach a file.
  • It does not verify the file's content matches the media type you picked — a mismatched URL is Meta's rejection to make, not a check this step performs first.
  • Captions beyond the first attachment are dropped, not queued as separate messages — write one caption for the set, or use several Send a File steps if each file needs its own words.
  • The caption is inline with the file only for a WhatsApp image, video or document. On the default voice-note type, and on any attachment type on Messenger or Instagram, it always arrives as a second, separate message right after the file — not literally attached to it.
  • It sends to the conversation's own channel; it does not open a new thread with a number that has not messaged in — Start a WhatsApp Chat is for that.

Best practices

  • Upload through the step rather than pasting a URL when the file is a voice note — the upload path converts it, a pasted one has to already be the right format.
  • Keep a full 5-file set to genuinely sequential material (a numbered instruction set, a gallery) — a customer who wants one photo does not benefit from several more arriving right after it.
  • Pair this with Send a Message's own attachment field instead when the file is a single supporting image for a text message — Send a File is for a file (or set) that IS the message.

Use cases

  • Send a product photo gallery as up to 5 images in one step, right after Send Products shows the catalog list.
  • Send a voice note answering a common question, recorded once and reused for every contact that reaches this step.
  • Send a PDF quote or company profile as a Document, with the file name set to something the customer recognises when they open it later.

FAQ and troubleshooting

Why didn't my voice note send?
Either the messaging window was closed, or the file was not a mono OGG/Opus recording. Upload the recording through this step instead of pasting a link — the upload path converts it for you; a pasted link has to already end .ogg or .opus.
Can I send several files with different captions on each?
No — one caption applies, and only the first file carries it. Use separate Send a File steps if each file needs its own caption.
Does a failed file stop the rest of the workflow?
Depends on Add Message Failure Branch. Off (the default): a clearly failed send (bad URL, wrong voice-note format, closed window) is recorded and the run moves on to the next step as normal. On: the branch's own steps run instead, and nothing after the branch runs on this path. Either way, an unconfirmed send (delivery neither confirmed nor clearly failed) stops the run regardless of the toggle.
Can this step reach a customer whose WhatsApp window has closed?
No. Like Send a Message, it is refused outside the messaging window. Send WhatsApp Template reaches them with an approved template, but it fills only the template's body variables — it cannot send this step's files or fill a media header; Start a WhatsApp Chat sends an approved template on a thread it finds or creates the same way.

Related

  • Send a Message — Send free-form text — with several attachments if you need them, on the customer's own channel or a named one — inside the messaging window that channel currently has open.
  • Send WhatsApp Template — Reach a WhatsApp customer with an approved Meta template regardless of whether the messaging window is open, checked for approval and marketing consent before anything is sent.
  • Send Products (WhatsApp catalog) — Send WhatsApp product cards from the number's own Commerce Manager catalog — one product, a list of up to 30, swipeable cards, or the whole catalog — so the customer can add to cart from inside the chat.
  • Start a WhatsApp Chat (new number) — Open a WhatsApp thread with a number a flow just learned — a Messenger lead who typed it, a form, a webhook — using an approved template, since no messaging window is open yet on that number.
  • Workflows: how a flow runs — A workflow is one trigger, optional conditions and an ordered list of steps; only a published workflow runs, and this article explains how a run starts, forks, pauses, fails and stops.

Reading this with an AI assistant? Plain Markdown version.