alumno->refresh(); if ($this->alumno->opt_out) { return; } $telefono = $this->alumno->telefonoWhatsapp(); if (!$telefono) { WhatsappLog::create([ 'alumno_id' => $this->alumno->id, 'telefono' => 'sin_telefono', 'tipo' => 'error', 'mensaje' => 'Alumno sin teléfono registrado', 'payload' => ['promocion_id' => $this->promocion->id], ]); $this->actualizarPivot('fallido', null); return; } try { $mensajeId = $whatsapp->enviarPromocion($telefono, $this->promocion); } catch (\RuntimeException $e) { WhatsappLog::create([ 'alumno_id' => $this->alumno->id, 'telefono' => $telefono, 'tipo' => 'error', 'mensaje' => $e->getMessage(), 'payload' => ['promocion_id' => $this->promocion->id], ]); $this->actualizarPivot('fallido', null); return; } WhatsappLog::create([ 'alumno_id' => $this->alumno->id, 'telefono' => $telefono, 'tipo' => 'enviado', 'mensaje' => $this->promocion->titulo, 'payload' => ['promocion_id' => $this->promocion->id, 'whatsapp_id' => $mensajeId], ]); $this->actualizarPivot('enviado', $mensajeId); } private function actualizarPivot(string $status, ?string $mensajeId): void { $this->promocion->alumnos()->updateExistingPivot($this->alumno->id, [ 'status_envio' => $status, 'enviado_at' => now(), 'whatsapp_mensaje_id' => $mensajeId, ]); } }