4 mejoras en canales de comunicación con el cliente
1. Reintentos automáticos (Telegram Job): usa autoAplicarRecarga para ejecutar la compra pendiente automáticamente al confirmar el pago, sin botón extra. 2. Pagar servicio directo con Bre-B sin recargar saldo previamente (ambos canales): botón 'Pagar con Bre-B directo' en el flujo de compra con saldo insuficiente. 3. Mensaje de gracias + bloque de credenciales fácil de copiar al entregar servicio: Telegram usa bloque de código (tiene botón Copy nativo), Chat Web muestra el texto completo de gracias con copia por campo y botón 'Copiar todo'. 4. Botón copiar llave Bre-B: ya existía en Chat Web, confirmado sin cambio. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
932a9b43c7
commit
1245d255bb
@@ -2,8 +2,6 @@
|
||||
|
||||
namespace App\Jobs;
|
||||
|
||||
use App\Models\recarga;
|
||||
use App\Models\Saldo;
|
||||
use App\Models\SolicitudRecarga;
|
||||
use App\Models\User;
|
||||
use App\Services\PagoValidadorService;
|
||||
@@ -56,7 +54,7 @@ class ValidarPagoTelegramJob implements ShouldQueue
|
||||
);
|
||||
|
||||
if ($resultado['estado'] === 'confirmado') {
|
||||
$this->aplicarYNotificar($bot, $state, $cacheKey, $solicitud, $usuarioId);
|
||||
$bot->autoAplicarRecarga($this->chatId, $state, $solicitud, $solicitud->monto);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -86,63 +84,4 @@ class ValidarPagoTelegramJob implements ShouldQueue
|
||||
}
|
||||
}
|
||||
|
||||
private function aplicarYNotificar(
|
||||
TelegramBotService $bot,
|
||||
array $state,
|
||||
string $cacheKey,
|
||||
SolicitudRecarga $solicitud,
|
||||
int $usuarioId
|
||||
): void {
|
||||
$user = User::with('saldo')->find($usuarioId);
|
||||
$saldo = $user->saldo ?? Saldo::create(['usuario_id' => $usuarioId, 'valor' => 0]);
|
||||
$monto = $solicitud->monto;
|
||||
$nuevoSaldo = $saldo->valor + $monto;
|
||||
|
||||
$saldo->update(['valor' => $nuevoSaldo]);
|
||||
|
||||
recarga::create([
|
||||
'usuario_id' => $usuarioId,
|
||||
'saldo_id' => $saldo->id,
|
||||
'monto' => $monto,
|
||||
'valor_recarga' => $monto,
|
||||
'status' => 'Confirmado',
|
||||
'reference' => 'breb-bot-' . $solicitud->id,
|
||||
]);
|
||||
|
||||
$solicitud->confirmar();
|
||||
|
||||
$pp = $state['data']['pending_purchase'] ?? null;
|
||||
unset($state['data']['pago_pendiente'], $state['data']['solicitud_recarga_id'], $state['data']['pending_purchase']);
|
||||
Cache::put($cacheKey, $state, now()->addSeconds(self::STATE_TTL));
|
||||
|
||||
$bot->send($this->chatId,
|
||||
"✅ *¡Tu recarga de \$" . number_format($monto) . " fue aplicada exitosamente!*\n"
|
||||
. "Tu nuevo saldo es *\$" . number_format($nuevoSaldo) . "*"
|
||||
);
|
||||
|
||||
if ($pp && ($pp['type'] ?? '') === 'tarifa') {
|
||||
$bot->sendWithKeyboard(
|
||||
$this->chatId,
|
||||
"🛒 Tienes una compra pendiente: *{$pp['servicio']}* — \$" . number_format($pp['valor']) . "\nPresiona para completarla:",
|
||||
[[['text' => "Comprar {$pp['servicio']}", 'callback_data' => 'buy_start|' . $pp['tarifa_id']]]]
|
||||
);
|
||||
} elseif ($pp && ($pp['type'] ?? '') === 'promo') {
|
||||
$bot->sendWithKeyboard(
|
||||
$this->chatId,
|
||||
"🛒 Tienes una compra pendiente: *{$pp['nombre']}* — \$" . number_format($pp['valor']) . "\nPresiona para completarla:",
|
||||
[[['text' => "Comprar {$pp['nombre']}", 'callback_data' => 'promo_saldo|' . $pp['promo_id']]]]
|
||||
);
|
||||
} else {
|
||||
$bot->sendWithKeyboard($this->chatId, "¿En qué más te puedo ayudar?", [
|
||||
[
|
||||
['text' => '📺 Ver Servicios', 'callback_data' => 'svc_list'],
|
||||
['text' => '🎁 Promociones', 'callback_data' => 'promo_list'],
|
||||
],
|
||||
[
|
||||
['text' => '🔑 Mis Credenciales', 'callback_data' => 'creds'],
|
||||
['text' => '📋 Historial', 'callback_data' => 'history'],
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user