Webhook Handlers
Setting Up Handlers
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
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
}Source captured: 2026-10-11