@extends('root') @section('title', 'WhatsApp Integration') @section('content')
{{-- Page Header - User Friendly --}}

Integrasi WhatsApp Business

Kelola nomor WhatsApp bisnis Anda dan hubungkan akun untuk mengirim pesan ke pelanggan.

{{-- Success Banner untuk Self Service upgrade --}} @if(session('package_upgraded') || request('upgraded')) @endif {{-- Success Message dengan Detail WABA --}} @if(session('success')) @endif {{-- Error Message dengan Detail --}} @if(session('error')) @endif {{-- Meta Not Configured Warning --}} @if(!$isMetaConfigured)
Facebook Login for Business belum dikonfigurasi. Hubungi administrator untuk mengaktifkan fitur integrasi WhatsApp.
@endif {{-- Connect WhatsApp Business - Prominent CTA untuk Shared/Dedicated (belum Self Service) --}} @if(($oauthStatus['allowed'] ?? true) && $isMetaConfigured && $integrationStatus['package_type'] !== 'self_service')
Hubungkan WhatsApp Business
Upgrade ke Self Service dalam beberapa langkah

Hubungkan akun WhatsApp Business Anda melalui Facebook. Proses aman dan otomatis—nomor bisnis Anda siap digunakan untuk chat dengan pelanggan.

Nomor bisnis milik Anda Proses otomatis via Meta Token disimpan aman

Paket otomatis berubah setelah terhubung

@endif
Ringkasan Akun Anda

Tipe Paket

{{ $integrationStatus['package_type_label'] }}

Mode Integrasi

{{ ucfirst($integrationStatus['integration_mode']) }}

Pembayaran

@if($integrationStatus['platform_handles_billing']) Dikelola Platform @else Meta Direct @endif
{{-- Facebook Login Card: hanya tampil untuk Self Service (prominent CTA sudah di atas untuk Shared/Dedicated) --}} @if(($oauthStatus['allowed'] ?? true) && $isMetaConfigured && $integrationStatus['package_type'] === 'self_service')
Self Service Aktif

Anda menggunakan nomor bisnis sendiri. Token disimpan aman di platform.

@endif {{-- Activation Status Card (Hidden as per new requirement) --}}
Status Aktivasi WhatsApp Business
{{-- Content akan diisi via JavaScript --}}
@if($integrationStatus['package_type'] === 'shared') Nomor WhatsApp (Shared Pool) @else Nomor WhatsApp Terhubung @endif

@if($integrationStatus['package_type'] === 'shared') Nomor yang tersedia untuk mengirim pesan ke pelanggan @else Daftar nomor bisnis yang terhubung ke akun Anda @endif

@if($integrationStatus['package_type'] === 'self_service' && $isMetaConfigured) @endif
{{-- Package Shared: Tampilkan list WABA shared pool yang aktif --}} @if($integrationStatus['package_type'] === 'shared')
Menggunakan Shared Pool

Pesan Anda dikirim melalui nomor WhatsApp bersama yang dikelola platform. Tidak perlu menghubungkan nomor sendiri—langsung bisa kirim pesan.

@if($isMetaConfigured) Upgrade ke Self Service @endif
@if($sharedWabas->isNotEmpty())
@foreach($sharedWabas as $waba) @endforeach
Akun WABA Nomor WhatsApp Status
{{ $waba->account_name ?: 'WhatsApp Business' }}
ID: {{ $waba->waba_id }}
{{ $waba->phone_number ?: '-' }} Aktif
@else

Tidak ada nomor shared pool yang aktif saat ini.

Hubungi administrator untuk mengaktifkan nomor.

@endif {{-- Package Dedicated/Self Service: Tampilkan WABA terhubung --}} @elseif($wabas->isEmpty())
Belum Ada Nomor Terhubung

@if($integrationStatus['package_type'] === 'self_service') Hubungkan nomor WhatsApp Business Anda untuk mulai mengirim pesan ke pelanggan dari Inbox. @else Hubungkan nomor WhatsApp Business Anda untuk upgrade ke Self Service dan gunakan nomor bisnis sendiri. @endif

@if($isMetaConfigured)

Proses aman dan dipandu oleh Meta

@endif
@else
@foreach($wabas as $waba) @endforeach
Akun WABA Nomor WhatsApp Mode Integrasi Status Aksi
{{ $waba->account_name ?: 'WhatsApp Business' }}
ID: {{ $waba->waba_id }}
{{ $waba->phone_number ?: '-' }} @if($waba->phone_number_id)
Phone ID: {{ Str::limit($waba->phone_number_id, 20) }} @endif
@php $modeClass = match($waba->integration_mode?->value ?? 'pool') { 'oauth' => 'bg-purple', 'managed' => 'bg-success', default => 'bg-info', }; $modeLabel = match($waba->integration_mode?->value ?? 'pool') { 'oauth' => 'Self Service (OAuth)', 'managed' => 'Dedicated', default => 'Shared Pool', }; @endphp {{ $modeLabel }} @php // Use code_verification_status from raw_meta_response as primary source $codeVerificationStatus = null; $phoneStatus = null; $rawResponse = $waba->raw_meta_response ?? []; if (isset($rawResponse['phone']['code_verification_status'])) { $codeVerificationStatus = strtoupper($rawResponse['phone']['code_verification_status']); } if (isset($rawResponse['phone']['status'])) { $phoneStatus = strtoupper($rawResponse['phone']['status']); } // Determine final status based on code_verification_status if ($codeVerificationStatus === 'VERIFIED') { $finalStatus = 'verified'; $statusLabel = 'Verified'; } elseif ($codeVerificationStatus === 'UNVERIFIED') { $finalStatus = 'unverified'; $statusLabel = 'Unverified'; } elseif ($codeVerificationStatus === 'PENDING') { $finalStatus = 'pending'; $statusLabel = 'Pending'; } elseif ($phoneStatus === 'CONNECTED' || $phoneStatus === 'REGISTERED') { // If phone is connected/registered but no code_verification_status, show Registered $finalStatus = 'registered'; $statusLabel = 'Registered'; } elseif ($waba->phone_status === 'active' || $waba->phone_status === 'REGISTERED') { $finalStatus = 'registered'; $statusLabel = 'Registered'; } elseif ($waba->phone_status === 'pending' || $waba->phone_status === 'PENDING') { $finalStatus = 'pending'; $statusLabel = 'Pending'; } elseif (in_array($waba->status, ['error', 'rejected', 'banned'])) { $finalStatus = 'error'; $statusLabel = 'Error/Banned'; } elseif ($waba->status === 'syncing') { $finalStatus = 'syncing'; $statusLabel = 'Syncing...'; } elseif ($waba->status === 'active') { $finalStatus = 'active'; $statusLabel = 'Active'; } else { $finalStatus = 'pending'; $statusLabel = 'Pending'; } // Map to UI $statusClass = match($finalStatus) { 'verified', 'registered', 'active' => 'bg-success-subtle text-success', 'error' => 'bg-danger-subtle text-danger', 'syncing' => 'bg-info-subtle text-info', 'pending', 'unverified' => 'bg-warning-subtle text-warning', default => 'bg-secondary' }; $statusIcon = match($finalStatus) { 'verified', 'registered', 'active' => 'ti-circle-check', 'error' => 'ti-alert-octagon', 'syncing' => 'ti-refresh ti-spin', default => 'ti-clock' }; $statusTooltip = match($finalStatus) { 'verified' => 'Nomor WhatsApp Business sudah terverifikasi dan siap digunakan', 'registered' => 'Nomor WhatsApp Business sudah aktif dan siap digunakan', 'pending' => 'WhatsApp membutuhkan waktu untuk mengaktifkan nomor bisnis. Pesan akan tersedia setelah proses selesai.', 'unverified' => 'Nomor WhatsApp Business belum terverifikasi oleh Meta', default => '' }; @endphp {{ $statusLabel }} @if($codeVerificationStatus)
Code: {{ $codeVerificationStatus }}
@endif @if($finalStatus === 'active' && $waba->oauth_expires_at)
Expires: {{ $waba->oauth_expires_at->format('d M Y') }}
@endif @if($waba->phone_status === 'error')
Cek Meta Business Manager
@endif {{-- Webhook Status Badge --}} @if($waba->isOauth())
@if($waba->webhook_status === 'active' && $waba->is_subscribed) Webhook Active @elseif($waba->webhook_status === 'failed') Webhook Failed @elseif($waba->webhook_status === 'pending') Webhook Pending @endif
@endif
@if($waba->integration_mode?->value === 'oauth')
@if($waba->webhook_status !== 'active' || !$waba->is_subscribed) @endif
@else Dikelola Platform @endif
@if($integrationStatus['package_type'] === 'self_service')
Mode Self Service

Pesan dikirim melalui nomor bisnis Anda. Biaya dikenakan langsung oleh Meta ke Business Manager Anda.

@elseif($integrationStatus['package_type'] === 'dedicated')
Mode Dedicated

Nomor khusus yang dikelola platform untuk bisnis Anda. Biaya termasuk dalam paket langganan.

@endif @endif
{{-- Tips Bantuan - Collapsible --}}
Apa itu WABA?

WhatsApp Business Account adalah akun bisnis resmi untuk mengirim pesan ke pelanggan melalui WhatsApp.

Keamanan

Token akses disimpan dengan aman. Anda tidak perlu mengelola token secara manual.

@if(session('oauth_wabas')) @endif @endsection @push('scripts') {{-- Facebook SDK for JavaScript --}} @endpush @push('styles') @endpush