# Webhook Handlers

### Setting Up Handlers

```typescript
whatsapp.setWebhookHandlers({
  // Handle all incoming messages
  onMessage: async (message, metadata) => {
    console.log('New message:', message);
    console.log('From:', metadata.displayName);
    console.log('Phone:', metadata.waId);
  },

  // Handle message status updates
  onMessageStatus: async (status) => {
    console.log('Message status:', status.status);
    console.log('Message ID:', status.id);
  },

  // Handle voice messages
  onVoice: async (voice, metadata) => {
    console.log('Voice message received');
    console.log('Media ID:', voice.media?.id);
  },

  // Handle media (images, videos, documents)
  onMedia: async (media, metadata) => {
    console.log('Media type:', media.media?.type);
    console.log('Media ID:', media.media?.id);
    console.log('Caption:', media.media?.caption);
  },

  // Handle location messages
  onLocation: async (location, metadata) => {
    console.log('Location:', location.location);
    console.log('Coordinates:', {
      lat: location.location?.latitude,
      lng: location.location?.longitude
    });
  },

  // Handle contact messages
  onContact: async (contact, metadata) => {
    console.log('Contacts:', contact.contacts);
  },

  // Handle interactive messages (buttons, lists)
  onInteractive: async (interactive, metadata) => {
    console.log('Interactive type:', interactive.interactive?.type);
    console.log('Button reply:', interactive.interactive?.button_reply);
  },

  // Handle reactions
  onReaction: async (reaction, metadata) => {
    console.log('Reaction:', reaction.reaction?.emoji);
    console.log('To message:', reaction.reaction?.message_id);
  },

  // Handle errors
  onError: async (error) => {
    console.error('Error:', error);
  },

  // Handle unknown events
  onUnknown: async (event) => {
    console.log('Unknown event:', event);
  }
});
```

### Metadata Object

```typescript
interface MessageMetadata {
  phoneNumberId?: string;      // Your phone number ID
  displayPhoneNumber?: string;  // Your display number
  displayName?: string;         // Sender's name
  waId?: string;               // Sender's WhatsApp ID
  timestamp?: string;          // Message timestamp
  messageId?: string;          // Message ID
}
```

---