@php /** Controller payload: $broadcast, $recipients, $header, $templatePreview, * $deviceLabel, $devicePhone, $chartData, $failureRows, $events */ $statusKey = strtolower((string) $broadcast->status); $statusBadge = match ($statusKey) { 'completed' => 'bg-wa-green/15 text-wa-deep border border-wa-green/30', 'completed_with_errors' => 'bg-accent-amber/15 text-ink-800 border border-accent-amber/30', 'processing' => 'bg-accent-amber/15 text-ink-800 border border-accent-amber/30', 'scheduled' => 'bg-paper-100 text-ink-700 border border-paper-200', 'failed' => 'bg-accent-coral/15 text-accent-coral border border-accent-coral/30', default => 'bg-paper-50 text-ink-700 border border-paper-200', }; $rowStatusClass = fn($s) => match ($s) { 'read' => 'bg-wa-green/10 text-wa-deep border border-wa-green/30', 'delivered' => 'bg-wa-mint/50 text-wa-deep border border-wa-green/30', 'sent' => 'bg-paper-100 text-ink-700 border border-paper-200', 'failed' => 'bg-accent-coral/15 text-accent-coral border border-accent-coral/30', default => 'bg-paper-50 text-ink-500 border border-paper-200', }; $fmt = fn($iso) => $iso ? \Illuminate\Support\Carbon::parse($iso)->format('M j, H:i:s') : '—'; @endphp
Broadcasts / Analytics / #{{ $broadcast->id }}
{{ $broadcast->name }}
{{ ucfirst(str_replace('_', ' ', $statusKey ?: 'draft')) }} @if (($header['failed'] ?? 0) > 0) @endif @if (in_array($statusKey, ['scheduled', 'failed'], true))
@csrf @method('DELETE')
@endif
@php $bProv = strtolower((string) ($broadcast->provider ?? '')); $bProvBadge = match ($bProv) { 'baileys' => ['Unofficial API', 'bg-ink-900/5 text-ink-700 border border-ink-200'], 'waba' => ['WABA', 'bg-wa-mint/40 text-wa-deep border border-wa-deep/20'], 'twilio' => ['Twilio', 'bg-[#F22F46]/10 text-[#A12534] border border-[#F22F46]/25'], default => null, }; @endphp
{{ __('Broadcast') }} @if ($bProvBadge) {{ $bProvBadge[0] }} @endif {{ $broadcast->created_at?->format('M j, Y H:i') ?? '—' }} @if ($deviceLabel) {{ $deviceLabel }} · {{ $devicePhone }} @endif

{{ __('Broadcast analytics') }}

{{ __('Per-recipient delivery, read, and failure timeline for this template send.') }}

{{ __('Sent') }}
{{ number_format($header['sent']) }}
{{ $header['sent_pct'] }}% of audience
{{ __('Delivered') }}
{{ number_format($header['delivered']) }}
{{ $header['delivered_pct'] }}% delivery rate
{{ __('Read') }}
{{ number_format($header['read']) }}
{{ $header['read_pct'] }}% of delivered
{{ __('Audience') }}
{{ number_format($header['total']) }}
{{ __('total recipients') }}
{{ __('Queued') }}
{{ number_format($header['queued']) }}
{{ __('awaiting send') }}
{{ __('Failed') }}
{{ number_format($header['failed']) }}
{{ $header['failed_pct'] }}% failure rate
{{-- ─── OVERVIEW TAB ─── --}}
{{ __('Delivery curve') }}

{{ __('Sent, delivered, read over time') }}

Sent Delivered Read
{{ __('Status mix') }}

{{ __('Where each message landed') }}

{{ __('Conversion funnel') }}

{{ __('From send to read') }}

@php $funnel = [ ['label' => 'Audience', 'count' => $header['total'], 'pct' => 100, 'cls' => 'bg-ink-900'], [ 'label' => 'Sent', 'count' => $header['sent'], 'pct' => $header['sent_pct'], 'cls' => 'bg-wa-deep', ], [ 'label' => 'Delivered', 'count' => $header['delivered'], 'pct' => $header['delivered_pct'], 'cls' => 'bg-wa-teal', ], [ 'label' => 'Read', 'count' => $header['read'], 'pct' => $header['read_pct'], 'cls' => 'bg-accent-amber', ], [ 'label' => 'Failed', 'count' => $header['failed'], 'pct' => $header['failed_pct'], 'cls' => 'bg-accent-coral', ], ]; @endphp
@foreach ($funnel as $f)
{{ $f['label'] }} {{ number_format($f['count']) }} / {{ $f['pct'] }}%
@endforeach
@if ($templatePreview) @endif
{{-- ─── RECIPIENTS TAB ─── --}} {{-- ─── FAILURES TAB ─── --}} {{-- ─── EVENTS TAB ─── --}}
{{-- Server-rendered chart payload — the user-broadcasts-show JS reads window.WA_BROADCAST_DATA and ApexCharts the overview tab. --}}