Skip to main content

Send a Message

result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:      zavudev.String("+14155551234"),
	Text:    zavudev.String("Your verification code is 123456"),
	Channel: zavudev.String("sms"), // optional: sms, whatsapp, email
	Metadata: map[string]string{
		"userId": "user_123",
	},
	IdempotencyKey: zavudev.String("unique-key"), // optional: prevent duplicates
})
if err != nil {
	panic(err)
}

fmt.Println(result.Message.ID)     // msg_xxx
fmt.Println(result.Message.Status) // queued

Send with Sender

Specify which sender profile to use:
result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:         zavudev.String("+14155551234"),
	Text:       zavudev.String("Hello!"),
	ZavuSender: zavudev.String("snd_abc123"),
})

Send with Template

Send a WhatsApp template message:
result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:          zavudev.String("+14155551234"),
	MessageType: zavudev.String("template"),
	Content: &zavudev.MessageContent{
		TemplateID: zavudev.String("tpl_abc123"),
		TemplateVariables: map[string]string{
			"1": "John",
			"2": "12345",
		},
	},
})

Send WhatsApp Media

Image

result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:          zavudev.String("+14155551234"),
	MessageType: zavudev.String("image"),
	Text:        zavudev.String("Check out this product!"),
	Content: &zavudev.MessageContent{
		MediaURL: zavudev.String("https://example.com/image.jpg"),
	},
})

Document

result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:          zavudev.String("+14155551234"),
	MessageType: zavudev.String("document"),
	Content: &zavudev.MessageContent{
		MediaURL: zavudev.String("https://example.com/invoice.pdf"),
		Filename: zavudev.String("invoice.pdf"),
	},
})

Video

result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:          zavudev.String("+14155551234"),
	MessageType: zavudev.String("video"),
	Text:        zavudev.String("Watch this!"),
	Content: &zavudev.MessageContent{
		MediaURL: zavudev.String("https://example.com/video.mp4"),
	},
})

Send Interactive Messages

Buttons

result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:          zavudev.String("+14155551234"),
	MessageType: zavudev.String("buttons"),
	Text:        zavudev.String("How would you rate your experience?"),
	Content: &zavudev.MessageContent{
		Buttons: []zavudev.InteractiveButton{
			{ID: "great", Title: "Great!"},
			{ID: "okay", Title: "It was okay"},
			{ID: "poor", Title: "Not good"},
		},
	},
})

List

result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:          zavudev.String("+14155551234"),
	MessageType: zavudev.String("list"),
	Text:        zavudev.String("Select an option:"),
	Content: &zavudev.MessageContent{
		ListButton: zavudev.String("View Options"),
		Sections: []zavudev.ListSection{
			{
				Title: "Products",
				Rows: []zavudev.ListRow{
					{ID: "prod_1", Title: "Product A", Description: zavudev.String("$10.00")},
					{ID: "prod_2", Title: "Product B", Description: zavudev.String("$20.00")},
				},
			},
		},
	},
})

Send Email

result, err := client.Messages.Send(context.TODO(), zavudev.MessageSendParams{
	To:       zavudev.String("user@example.com"),
	Channel:  zavudev.String("email"),
	Subject:  zavudev.String("Your order has shipped"),
	Text:     zavudev.String("Hi John, your order #12345 has shipped."),
	HTMLBody: zavudev.String("<h1>Order Shipped</h1><p>Your order #12345 has shipped.</p>"),
	ReplyTo:  zavudev.String("support@example.com"),
})

Get Message Status

result, err := client.Messages.Get(context.TODO(), "msg_abc123")
if err != nil {
	panic(err)
}

fmt.Println(result.Message.Status) // queued, sending, sent, delivered, failed

List Messages

// List all messages
result, err := client.Messages.List(context.TODO(), zavudev.MessageListParams{})

// With filters
result, err := client.Messages.List(context.TODO(), zavudev.MessageListParams{
	Status:  zavudev.String("delivered"),
	Channel: zavudev.String("sms"),
	Limit:   zavudev.Int(100),
})

// Pagination
var cursor *string
for {
	result, err := client.Messages.List(context.TODO(), zavudev.MessageListParams{
		Cursor: cursor,
		Limit:  zavudev.Int(50),
	})
	if err != nil {
		panic(err)
	}

	for _, message := range result.Items {
		fmt.Println(message.ID)
	}

	if result.NextCursor == nil {
		break
	}
	cursor = result.NextCursor
}

Send Reaction

React to a WhatsApp message:
result, err := client.Messages.React(context.TODO(), "msg_abc123", zavudev.ReactionParams{
	Emoji: zavudev.String("\U0001F44D"),
})