Broadcasts allow you to send messages to multiple recipients in a single campaign.
Create Broadcast
$result = $client->broadcasts->create([
'name' => 'Black Friday Sale',
'channel' => 'sms',
'text' => 'Hi {{name}}, check out our Black Friday deals! Use code FRIDAY20 for 20% off.',
]);
echo $result->broadcast->id . "\n"; // brd_xxx
echo $result->broadcast->status . "\n"; // draft
WhatsApp Template Broadcast
$result = $client->broadcasts->create([
'name' => 'Order Confirmation Campaign',
'channel' => 'whatsapp',
'messageType' => 'template',
'content' => [
'templateId' => 'tpl_abc123',
],
]);
Email Broadcast
$result = $client->broadcasts->create([
'name' => 'Newsletter',
'channel' => 'email',
'emailSubject' => 'Your Weekly Update',
'text' => 'Hi {{name}}, here\'s what\'s new this week...',
]);
Get Broadcast
$result = $client->broadcasts->get([
'broadcastId' => 'brd_abc123',
]);
echo $result->broadcast->name . "\n";
echo $result->broadcast->status . "\n";
echo $result->broadcast->totalContacts . "\n";
List Broadcasts
$result = $client->broadcasts->list([]);
foreach ($result->items as $broadcast) {
echo $broadcast->id . " " . $broadcast->name . " " . $broadcast->status . "\n";
}
// Filter by status
$result = $client->broadcasts->list([
'status' => 'completed',
'limit' => 50,
]);
Update Broadcast
Update a broadcast in draft status:
$result = $client->broadcasts->update([
'broadcastId' => 'brd_abc123',
'name' => 'Updated Campaign Name',
'text' => 'New message content with {{name}}',
]);
Add contacts to a broadcast (max 1000 per request):
$result = $client->broadcasts->contacts->add([
'broadcastId' => 'brd_abc123',
'contacts' => [
[
'recipient' => '+14155551234',
'templateVariables' => [
'name' => 'John',
'order_id' => 'ORD-001',
],
],
[
'recipient' => '+14155555678',
'templateVariables' => [
'name' => 'Jane',
'order_id' => 'ORD-002',
],
],
],
]);
echo $result->added . "\n"; // 2
echo $result->duplicates . "\n"; // 0
echo $result->invalid . "\n"; // 0
$result = $client->broadcasts->contacts->list([
'broadcastId' => 'brd_abc123',
'status' => 'pending',
'limit' => 100,
]);
foreach ($result->items as $contact) {
echo $contact->recipient . " " . $contact->status . "\n";
}
$client->broadcasts->contacts->remove([
'broadcastId' => 'brd_abc123',
'contactId' => 'bcon_xyz789',
]);
Send Broadcast
Start sending immediately:
$result = $client->broadcasts->send([
'broadcastId' => 'brd_abc123',
]);
echo $result->broadcast->status . "\n"; // sending
Schedule for later:
$result = $client->broadcasts->send([
'broadcastId' => 'brd_abc123',
'scheduledAt' => '2024-01-15T10:00:00Z',
]);
echo $result->broadcast->status . "\n"; // scheduled
Reschedule Broadcast
Change the scheduled time for a broadcast in scheduled status:
$result = $client->broadcasts->reschedule([
'broadcastId' => 'brd_abc123',
'scheduledAt' => '2024-01-16T14:00:00Z',
]);
echo $result->broadcast->scheduledAt . "\n"; // 2024-01-16T14:00:00.000Z
You can only reschedule broadcasts that are in scheduled status. The new time must be in the future.
Get Progress
Monitor broadcast progress in real-time:
$result = $client->broadcasts->progress([
'broadcastId' => 'brd_abc123',
]);
echo $result->status . "\n"; // sending
echo $result->total . "\n"; // 5000
echo $result->delivered . "\n"; // 2350
echo $result->failed . "\n"; // 50
echo $result->percentComplete . "\n"; // 48.0
echo $result->estimatedCompletionAt . "\n";
Cancel Broadcast
$result = $client->broadcasts->cancel([
'broadcastId' => 'brd_abc123',
]);
echo $result->broadcast->status . "\n"; // cancelled
Cancelling a broadcast will skip pending contacts, but messages already queued may still be delivered.
Retry Review
Resubmit a rejected broadcast for AI review after editing content:
$result = $client->broadcasts->retryReview([
'broadcastId' => 'brd_abc123',
]);
echo $result->broadcast->status . "\n"; // pending_review
Maximum 3 review attempts are allowed per broadcast. After that, use escalate for manual review.
Escalate to Manual Review
Request manual review by the Zavu team for a rejected broadcast:
$result = $client->broadcasts->escalate([
'broadcastId' => 'brd_abc123',
]);
echo $result->broadcast->status . "\n"; // escalated
Delete Broadcast
Delete a broadcast in draft status:
$client->broadcasts->delete([
'broadcastId' => 'brd_abc123',
]);