@extends('layouts.portal') @section('title', 'WhatsApp campaigns') @section('subtitle', 'Send an approved template to leads who agreed to receive WhatsApp updates. People who replied STOP are always excluded, and replies land in the shared inbox.') @section('actions') Inbox Templates @endsection @section('content')
Opted-in leads{{ number_format($optedIn) }}can receive campaigns
Approved templates{{ $templates->count() }}available to send
Connection{{ $ready ? 'Connected' : 'Not connected' }}{{ $ready ? 'Cloud API ready' : 'set it up in Integrations' }}

New campaign

Use {first_name}, {name} or {course} in values to personalise each message.
@csrf
@include('admin.whatsapp._template-picker', ['pickerId' => 'camp', 'personalise' => true]) @error('params')
{{ $message }}
@enderror
Who receives it
Lead stages
@foreach($stages as $k => $label)@endforeach
Leave all unticked for every stage.
@forelse($campaigns as $c) @php $pct = fn ($n) => $c->sent ? round($n / $c->sent * 100).'%' : '—'; @endphp @empty @endforelse
CampaignTemplateRecipientsSentDeliveredReadRepliedFailedStatus
{{ $c->name }}
{{ $c->created_at->format('d M Y H:i') }} · {{ $c->creator?->name }}
{{ $c->template }} {{ $c->total }} {{ $c->sent }} {{ $c->delivered }} {{ $pct($c->delivered) }} {{ $c->read }} {{ $pct($c->read) }} {{ $c->replied }} {{ $pct($c->replied) }} {{ $c->failed }} {{ ucfirst($c->status) }}

No campaigns yet.

@endsection @push('scripts')@endpush