On this page

The VGraple CRM inbox renders every message type WhatsApp supports the way the customer actually saw or sent it, not as a generic "[media]" placeholder, so an agent can answer "what did you send us" honestly. This article covers what each type looks like and what you can do with it.
Message types and media: first 5 of 15 steps
- 1Open any conversation
- 2Images and videos
- 3Documents
- 4Voice notes and audio files
- 5Stickers
Before you start
- Viewing every message type ships on every plan; no setting turns any of it off.
- Sending media (images, video, audio, documents) from the composer requires the "Send messages" permission and only works inside the 24-hour window; outside it, use a template instead, since Meta does not allow free-form media sends once the window closes.
- Reacting to a message and quoting a reply both require the same "Send messages" permission as replying normally.
- Media rendering depends on Meta's CDN still hosting the file; very old media can show as expired even though the message itself is preserved.
Steps

Receiving and viewing message types
Open any conversation. Every message renders inline in the thread according to its type, no separate viewer needed for common formats.
Images and videos show inline, capped to a comfortable preview size; click one to open a full-screen lightbox with the caption, closable by clicking outside it or pressing Escape.
Documents show as a file chip with the filename and a download icon; clicking it downloads the file directly.
Voice notes and audio files show as an inline audio player with play controls.
Stickers render without the usual message bubble background, matching how WhatsApp itself displays them.
Locations show a map pin icon, the shared name and address if provided, the coordinates, and a "View on map" link that opens the location in Google Maps.
Contact cards show the shared contact's name, phone number, email and company if the customer included them.
Reactions appear as a small emoji badge on the corner of the reacted message, from either side of the conversation.
Quoted replies show a compact preview of the original message above the reply itself, resolved from the database so it displays correctly even if the original message is far outside the currently loaded page of the thread.
Sending media, reacting and quoting
- Click the attachment (paperclip) icon in the composer to choose a file: images, videos, audio, PDFs, and Word, Excel or PowerPoint documents are all accepted.
- Add a caption if you like, then send. The file uploads and appears in the thread once delivered.
- Record a voice note using the microphone icon instead, if you would rather speak your reply than type or attach a file.
- React to any message by hovering it and choosing an emoji; clicking your own existing reaction again removes it.
- Reply with a quote by selecting "Reply" on the message you want to quote before typing your response; the quoted snippet attaches automatically when you send.
- Delete a message with "Delete for me" (removes it from your own view) or "Delete for everyone" (shows "This message was deleted" to your whole team). Neither option unsends the message on the customer's phone, since the WhatsApp Cloud API has no recall endpoint; "for everyone" is a VGraple CRM-side placeholder only.
Why full rendering matters, not just logging
A thread that cannot show what a customer actually received or sent makes it impossible for an agent to answer a simple question honestly: "what did you get from us." Many WhatsApp tools log a message type as a generic "[media]" line and expect the agent to guess or dig elsewhere, which breaks down fast the moment a customer disputes what they were sent, or an agent needs to reference a photo from three days ago mid-conversation. VGraple CRM treats full-fidelity rendering as core to the inbox rather than a nice-to-have: a template shows every button and its header media exactly as delivered, a voice note plays without leaving the thread, and a quoted reply always resolves correctly even to a message far outside the currently loaded page.
Example
A D2C store's customer sends a photo of a damaged product with a voice note explaining the issue, then quotes the voice note two messages later asking "so will you replace this one." The agent sees the original photo inline, plays the voice note without downloading anything, and reads the quoted reply showing exactly which message the customer meant, all without asking the customer to repeat themselves.
This is also why "Delete for everyone" is explicitly labelled as a VGraple CRM-side action rather than a true unsend: the WhatsApp Cloud API gives businesses no way to recall a message from a customer's phone, so claiming otherwise would be misleading. What it does is keep your team's own record of a mistaken send accurate, showing a clear placeholder rather than leaving an error visible to every future agent who opens the thread.
What you will see
Every message type renders as close to what the customer's own WhatsApp app shows as the underlying data allows: a template message shows its full header media, body with variables filled in, footer and every button type exactly as delivered; a voice note plays inline rather than downloading as a generic file; a quoted reply always resolves its original text correctly regardless of how far back it sits in the conversation. Media that Meta's servers no longer host shows a clearly labelled "Media expired" placeholder with an icon matching the original type, rather than a broken image or a silent failure.
Settings and options
| Message type | Inbound (from customer) | Outbound (from your team) |
|---|---|---|
| Text (with bold, italic, strikethrough, monospace) | Renders with WhatsApp formatting | Composer supports the same formatting |
| Image, video | Inline preview, click for lightbox | Attach button, with optional caption |
| Document | File chip with download | Attach button, PDF and Office formats |
| Voice note, audio | Inline audio player | Attach button, or record with the microphone icon |
| Sticker | Renders without a bubble background | Not supported outbound |
| Location | Map pin, address, coordinates, map link | Not supported outbound today |
| Contact card | Name, phone, email, company | Not supported outbound today |
| Reaction | Emoji badge on the message corner | Hover any message to react |
| Quoted reply | Resolved from the database, always accurate | "Reply" on a message before sending |
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| A photo or document shows "Media expired" | Meta's CDN no longer hosts the file after its retention window passed | This is expected for old media; the message text and caption remain, only the file is gone |
| I cannot send an image or file to a customer | The 24-hour window is closed for that conversation | Send a template first to reopen the window, then attach the file |
| A quoted reply shows blank or wrong text | Rare; usually the original message was deleted after being quoted | Check whether the original message shows "This message was deleted" |
| My reaction is not visible to a teammate | They may be viewing a stale, disconnected inbox session | Ask them to refresh; realtime sync replays missed events automatically on reconnect |
| A location or contact card shows raw text instead of a rendered card | The inbound payload did not include the structured data Meta normally sends | This is uncommon; the message body still shows whatever text accompanied it |
Related reading
For everything about the composer switching to templates once the window closes, see sending a template from the inbox. For saved text responses you can insert quickly, see quick replies.