HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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);
    }
}