# Button Messages

> Send WhatsApp interactive button messages with up to 3 quick-reply options. Drive higher response rates than free-form messages.

Button messages let users respond with a single tap, perfect for quick actions and surveys.

## Send Button Message

```typescript
const message = await client.messages.send({
  to: "+14155551234",
  text: "How would you rate our service?",
  channel: "whatsapp",
  messageType: "buttons",
  content: {
    buttons: [
      { id: "good", title: "Good" },
      { id: "average", title: "Average" },
      { id: "poor", title: "Poor" }
    ]
  }
});
```

```bash
curl -X POST https://api.zavu.dev/v1/messages \
  -H "Authorization: Bearer zv_live_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155551234",
    "text": "How would you rate our service?",
    "channel": "whatsapp",
    "messageType": "buttons",
    "content": {
      "buttons": [
        { "id": "good", "title": "Good" },
        { "id": "average", "title": "Average" },
        { "id": "poor", "title": "Poor" }
      ]
    }
  }'
```

## Specifications

| Property | Requirement |
|----------|-------------|
| Max buttons | 3 |
| Button ID | Max 256 chars, unique per message |
| Button title | Max 20 chars |
| Body text (`text`) | Required, max 1024 chars |

## Handling Button Responses

When a user taps a button, you receive a webhook:

```json
{
  "event": "message.received",
  "data": {
    "from": "+14155551234",
    "type": "button_reply",
    "button": {
      "id": "good",
      "title": "Good"
    }
  }
}
```

> **Tip:**
> Use meaningful IDs like `confirm_order` or `cancel_order` to make webhook handling easier.

## Use Cases

- Customer satisfaction surveys
- Order confirmations (Yes/No)
- Appointment scheduling options
- Quick response options
- A/B testing user preferences
