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);