Skip to main content
When users send messages to your WhatsApp Business number, Chirp delivers them to your application via webhooks.

Message Types

You can receive various types of incoming messages:

Webhook Payload Structure

When you receive a message webhook, the payload follows this structure:
Webhook Payload

Message Fields Reference

The source field indicates how the message was created:
  • cloud_api - Real-time message via WhatsApp Cloud API
  • business_app - Message sent via WhatsApp Business App (coexistence mode)
  • history_import - Historical message imported during coexistence onboarding (up to 6 months)

Message Type Payloads

Text Messages

Text Message

Media Messages (Image, Video, Audio, Document)

Image Message

Audio Messages

Audio messages have additional voice note detection:
Voice Note

Sticker Messages

Sticker Message

Location Messages

Location Message

Contact Messages

Contacts are shared in vCard format with full structured data:
Contacts Message

Reaction Messages

Reaction Message
An empty emoji string indicates the user removed their reaction.

Interactive Responses

When users click buttons or select list items:
Button Reply
List Reply

Order Messages (WhatsApp Commerce)

Order Message

System Messages

System messages notify you of account-level events:
Number Change Event

Reply Context

When a user replies to a specific message:
Reply with Context

Message Handler Example

Message Handler

Replying to Messages

To reply to an incoming message, use the sender’s number as the to field and optionally include replyTo with the message ID:
Reply to Message

24-Hour Messaging Window

When a user messages you, you have a 24-hour window to respond with any message type. After this window closes, you must use Template Messages to re-initiate contact.
The conversationWindow object in the webhook payload tells you:
  • expiresAt - When the window closes
  • originType - How the conversation started (user_initiated, business_initiated, referral_conversion)

Testing Incoming Messages

You have two options for testing incoming WhatsApp messages without sending a real one:
  • Browser-based Playground — open the Playground in your dashboard, pick a “User Phone Number”, and send. Your webhook fires in real-time.
  • API-based simulationPOST /v1/playground/whatsapp/inbound with a test API key. Useful for end-to-end tests, CI, and local development. Today this supports text messages only. See Simulating Inbound Messages.

Best Practices

  1. Respond quickly - Users expect fast responses on WhatsApp
  2. Acknowledge receipt - Send a quick reply or reaction to let users know you received their message
  3. Handle all types - Gracefully handle message types you don’t expect
  4. Download media promptly - Media URLs may expire; download files you need to keep
  5. Track conversations - Store conversation history for context
  6. Use reactions - React to messages with emoji for quick acknowledgment