Code Examples
Practical examples for common Wazera integrations.
Order Confirmation
Send a WhatsApp message when an order is placed:
// app/Listeners/SendOrderConfirmation.php
use Wazera\Laravel\Facades\Wazera;
class SendOrderConfirmation
{
public function handle(OrderPlaced $event): void
{
$order = $event->order;
Wazera::sendTemplate([
'to' => $order->customer->phone,
'template' => 'order_confirmation',
'params' => [
'name' => $order->customer->name,
'order_id' => $order->id,
'total' => number_format($order->total, 2),
]
]);
}
}
Contact Sync After Registration
// app/Listeners/SyncNewUserToWazera.php
use Wazera\Laravel\Facades\Wazera;
class SyncNewUserToWazera
{
public function handle(Registered $event): void
{
Wazera::createContact([
'phone' => $event->user->phone,
'name' => $event->user->name,
'email' => $event->user->email,
'tags' => ['new-user', 'website'],
]);
}
}
Appointment Reminder (Scheduled Job)
// app/Console/Commands/SendAppointmentReminders.php
use Wazera\Laravel\Facades\Wazera;
class SendAppointmentReminders extends Command
{
protected $signature = 'reminders:send';
public function handle(): void
{
$appointments = Appointment::query()
->where('starts_at', '>', now())
->where('starts_at', '<', now()->addHours(24))
->where('reminder_sent', false)
->get();
foreach ($appointments as $appointment) {
Wazera::sendMessage([
'to' => $appointment->customer->phone,
'message' => "Reminder: You have an appointment tomorrow at {$appointment->starts_at->format('g:i A')}."
]);
$appointment->update(['reminder_sent' => true]);
}
$this->info("Sent {$appointments->count()} reminders.");
}
}
Queued Notification
// app/Jobs/SendWhatsAppNotification.php
use Wazera\Laravel\Facades\Wazera;
class SendWhatsAppNotification implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(
public string $phone,
public string $message,
) {}
public function handle(): void
{
Wazera::sendMessage([
'to' => $this->phone,
'message' => $this->message,
]);
}
public function retryAfter(): int
{
return 60;
}
public int $tries = 3;
}
Webhook Handler
// app/Http/Controllers/WazeraWebhookController.php
use Wazera\Laravel\Facades\Wazera;
class WazeraWebhookController extends Controller
{
public function handle(Request $request)
{
Wazera::verifyWebhookSignature($request);
match ($request->input('event')) {
'message.received' => $this->handleIncoming($request->input('data')),
'message.delivered' => $this->handleDelivered($request->input('data')),
'message.failed' => $this->handleFailed($request->input('data')),
default => null,
};
return response()->json(['ok' => true]);
}
private function handleIncoming(array $data): void
{
// Process incoming message
Log::info('Received WhatsApp message', $data);
}
private function handleDelivered(array $data): void
{
// Update message status
Message::where('wazera_id', $data['message_id'])
->update(['status' => 'delivered']);
}
private function handleFailed(array $data): void
{
Log::error('Message delivery failed', $data);
}
}
cURL Examples
Send Text Message
curl -X POST https://app.wazera.com/api/v1/messages/send \
-H "X-API-Key: wz_live_xxx" \
-H "Content-Type: application/json" \
-d '{"to": "201234567890", "message": "Hello!"}'
Create Contact
curl -X POST https://app.wazera.com/api/v1/contacts/create \
-H "X-API-Key: wz_live_xxx" \
-H "Content-Type: application/json" \
-d '{"phone": "201234567890", "name": "John Doe", "tags": ["customer"]}'
Check Message Status
curl https://app.wazera.com/api/v1/messages/msg_abc123/status \
-H "X-API-Key: wz_live_xxx"
JavaScript / Node.js
const axios = require('axios');
const wazera = axios.create({
baseURL: 'https://app.wazera.com/api/v1',
headers: { 'X-API-Key': process.env.WAZERA_API_KEY }
});
// Send message
const response = await wazera.post('/messages/send', {
to: '201234567890',
message: 'Hello from Node.js!'
});
console.log(response.data);