File: /var/www/vhost/disk-apps/demo.sports-crowd.com/app/Http/Controllers/WhatsAppWebhookController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class WhatsAppWebhookController extends Controller
{
// Verificación inicial del webhook (GET)
public function verify(Request $request)
{
$verifyToken = 'sportscrowd'; // mismo que pusiste en Meta
$mode = $request->get('hub_mode');
$token = $request->get('hub_verify_token');
$challenge = $request->get('hub_challenge');
if ($mode === 'subscribe' && $token === $verifyToken) {
return response($challenge, 200);
}
return response('Forbidden', 403);
}
// Recepción de notificaciones (POST)
public function receive(Request $request)
{
$data = $request->all();
// Puedes guardar logs para revisar
Log::info('Webhook WhatsApp:', $data);
// Procesar cambios de estado
if (isset($data['entry'][0]['changes'][0]['value']['statuses'])) {
foreach ($data['entry'][0]['changes'][0]['value']['statuses'] as $status) {
$messageId = $status['id']; // ID del mensaje enviado (wamid...)
$recipient = $status['recipient_id'];
$statusName = $status['status']; // sent | delivered | read | failed
$timestamp = $status['timestamp'];
// Guardar en DB o actualizar estado del mensaje
Log::info("Mensaje $messageId a $recipient está en estado $statusName en $timestamp");
}
}
return response('EVENT_RECEIVED', 200);
}
}