Communications log @if(session('log_success'))
{{ session('log_success') }}
@endif @if(session('log_error'))
{{ session('log_error') }}
@endif {{-- Stats summary cards --}}
Total
{{ number_format($stats['total']) }}
{{ number_format($stats['by_channel']['email'] ?? 0) }} · {{ number_format($stats['by_channel']['sms'] ?? 0) }}
Queued / Sending
{{ number_format($stats['queued']) }}
Delivered
{{ number_format($stats['delivered']) }}
{{ $stats['delivery_rate'] }}% of sent
Opens
{{ number_format($stats['opened']) }}
{{ $stats['open_rate'] }}% of delivered
Clicks
{{ number_format($stats['clicked']) }}
{{ $stats['click_rate'] }}% of delivered
Bounces
{{ number_format($stats['bounced']) }}
{{ $stats['bounce_rate'] }}% bounce rate
Failed / Suppressed
{{ number_format($stats['failed'] + $stats['suppressed']) }}
{{-- Filter row --}}
{{-- Results table --}}
@forelse($messages as $m) @empty @endforelse
When Channel Subject / preview Recipient Sender Template By / Origin Status
{{ $m->created_at?->format('Y-m-d') }}
{{ $m->created_at?->format('H:i:s') }}
{{ \Illuminate\Support\Str::limit($m->subject ?: $m->body_text, 70) ?: '—' }}
@if($m->failure_reason)
{{ \Illuminate\Support\Str::limit($m->failure_reason, 100) }}
@endif
{{ $m->recipient_name ?? '—' }}
{{ $m->recipient_email ?? $m->recipient_phone }}
@php $linkedUrl = $m->messageableUrl(); $linkedLabel = $m->messageableLabel(); @endphp @if($linkedLabel) @if($linkedUrl) {{ $linkedLabel }} @else {{ $linkedLabel }} @endif @endif
{{ $m->sender_display ?: $m->sender_value ?: '—' }} {{ $m->template?->name ?? '—' }} @if($m->creator) {{ $m->creator->name }} @endif @if($m->origin_type)
{{ $m->origin_type->label() }}
@endif
{{ $m->status?->label() }}
No communications match these filters.
{{-- Detail drawer --}} @if($detail)
{{ $detail->subject ?: \Illuminate\Support\Str::limit($detail->body_text, 60) ?: 'Message #' . $detail->id }}
{{ $detail->status?->label() }} · {{ $detail->created_at?->format('Y-m-d H:i:s') }} · ID #{{ $detail->id }}
{{-- Metadata --}}
Recipient
{{ $detail->recipient_name ?? '—' }}
{{ $detail->recipient_email ?? $detail->recipient_phone }}
Sender
{{ $detail->sender_display ?? '—' }}
{{ $detail->sender_value }}
@if($detail->reply_to)
Reply-to: {{ $detail->reply_to }}
@endif
Template
{{ $detail->template?->name ?? '—' }}
Origin
{{ $detail->origin_type?->label() ?? '—' }}
@if($detail->creator)
by {{ $detail->creator->name }}
@endif
Provider
{{ $detail->provider?->label() ?? '—' }}
@if($detail->provider_message_id)
{{ $detail->provider_message_id }}
@endif
Linked record
@php $detailUrl = $detail->messageableUrl(); $detailLabel = $detail->messageableLabel(); @endphp @if($detailLabel) @if($detailUrl) {{ $detailLabel }} @else
{{ $detailLabel }}
@endif @else
@endif
{{-- Lifecycle timestamps --}}
@foreach([ 'queued_at' => 'Queued', 'sent_at' => 'Sent', 'delivered_at' => 'Delivered', 'opened_at' => 'Opened', 'failed_at' => 'Failed', ] as $col => $label) @if($detail->{$col}) {{ $label }}: {{ $detail->{$col}?->format('Y-m-d H:i:s') }} @endif @endforeach
@if($detail->failure_reason)
Failure: {{ $detail->failure_reason }}
@endif {{-- Tabs: content / events / payload --}}
@if($detail->subject)
Subject {{ $detail->subject }}
@endif @if($detail->body_html)
HTML body
{!! $detail->body_html !!}
@endif @if($detail->body_text)
Plain text body
{{ $detail->body_text }}
@endif @if($detail->attachments->isNotEmpty())
Attachments
    @foreach($detail->attachments as $a)
  • {{ $a->filename }} ({{ $a->mime }}) {{ number_format(($a->size ?? 0) / 1024, 1) }} KB
  • @endforeach
@endif
@if($detail->events->isEmpty())
No provider events received yet.
@else
    @foreach($detail->events->sortByDesc('occurred_at') as $event)
  • {{ $event->event_type->label() }}
    {{ $event->occurred_at?->format('Y-m-d H:i:s') }} @if($event->mapped_status) · status → {{ $event->mapped_status->label() }} @endif
    @if($event->provider_event_id)
    {{ $event->provider_event_id }}
    @endif @if(!empty($event->payload))
    payload
    {{ json_encode($event->payload, JSON_PRETTY_PRINT) }}
    @endif
  • @endforeach
@endif
@if(empty($detail->rendered_placeholders))
No placeholders were resolved.
@else @foreach($detail->rendered_placeholders as $token => $value) @endforeach
TokenResolved value
{{ $token }} {{ $value !== '' ? $value : '(empty)' }}
@endif
@if(empty($detail->provider_payload))
No provider payload stored.
@else
{{ json_encode($detail->provider_payload, JSON_PRETTY_PRINT) }}
@endif
@canany(['communications.send.email', 'communications.send.sms']) @if($detail->template && $detail->messageable) @endif @endcanany
@endif