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
@@ -500,6 +500,7 @@ class PublicChat extends Component
|
||||
$action === 'historial.ver' => $this->verHistorial(),
|
||||
$action === 'perfil.ver' => $this->verPerfil(),
|
||||
$action === 'asesor.solicitar' => $this->solicitarAsesor(),
|
||||
$action === 'pago.directo.breb' => $this->pagarDirectoBreb($data),
|
||||
$action === 'pago.aplicar' => $this->aplicarRecargaValidada($data),
|
||||
$action === 'pago.reintentar' => $this->reintentarValidacionPago(),
|
||||
$action === 'pago.nombre_previo' => $this->usarNombrePrevio($data['nombre'] ?? ''),
|
||||
@@ -776,7 +777,6 @@ class PublicChat extends Component
|
||||
} else {
|
||||
$falta = $precio - (float) $this->saldoUsuario;
|
||||
|
||||
// Guardar compra pendiente para ejecutarla automáticamente tras recargar
|
||||
$this->flujoData = array_merge($this->flujoData, [
|
||||
'pending_purchase' => [
|
||||
'type' => 'tarifa',
|
||||
@@ -792,9 +792,10 @@ class PublicChat extends Component
|
||||
'conversation_id' => $this->convId,
|
||||
'tipo' => 'bot',
|
||||
'tipo_ui' => 'buttons',
|
||||
'contenido' => "{$tarifa->servicio->nombre} - {$detalle}\nPrecio: $" . number_format($precio) . "\n\nSaldo actual: $" . number_format($this->saldoUsuario) . " — te faltan $" . number_format($falta) . "\n\nRecarga para comprar:",
|
||||
'contenido' => "{$tarifa->servicio->nombre} - {$detalle}\nPrecio: $" . number_format($precio) . "\n\nSaldo actual: $" . number_format($this->saldoUsuario) . " — te faltan $" . number_format($falta) . "\n\n¿Cómo quieres pagar?",
|
||||
'payload' => ['botones' => [
|
||||
['label' => "💰 Recargar $" . number_format($falta) . " para comprar {$tarifa->servicio->nombre}", 'action' => 'recarga.iniciar', 'data' => []],
|
||||
['label' => "💳 Pagar con Bre-B directo ($" . number_format($precio) . ")", 'action' => 'pago.directo.breb', 'data' => ['tipo' => 'tarifa', 'tarifa_id' => $tarifaId, 'valor' => $precio]],
|
||||
['label' => "💰 Recargar saldo ($" . number_format($falta) . " faltantes)", 'action' => 'recarga.iniciar', 'data' => []],
|
||||
['label' => 'Volver', 'action' => 'servicios.listar', 'data' => []],
|
||||
]],
|
||||
'leido' => true,
|
||||
@@ -860,7 +861,7 @@ class PublicChat extends Component
|
||||
'conversation_id' => $this->convId,
|
||||
'tipo' => 'bot',
|
||||
'tipo_ui' => 'credenciales',
|
||||
'contenido' => 'Compra exitosa! Tus credenciales:',
|
||||
'contenido' => '¡Muchas gracias por tu compra! 🎉 Disfruta tu servicio. Si tienes algún inconveniente no dudes en escribirnos, estamos aquí para ayudarte.',
|
||||
'payload' => [
|
||||
'servicio' => $tarifa->servicio->nombre,
|
||||
'email' => $cuenta->correo,
|
||||
@@ -960,7 +961,6 @@ class PublicChat extends Component
|
||||
} else {
|
||||
$falta = $precio - (float) $this->saldoUsuario;
|
||||
|
||||
// Guardar compra pendiente para ejecutarla automáticamente tras recargar
|
||||
$this->flujoData = array_merge($this->flujoData, [
|
||||
'pending_purchase' => [
|
||||
'type' => 'promo',
|
||||
@@ -974,9 +974,10 @@ class PublicChat extends Component
|
||||
'conversation_id' => $this->convId,
|
||||
'tipo' => 'bot',
|
||||
'tipo_ui' => 'buttons',
|
||||
'contenido' => ($promo->nombre ?? 'Promocion') . "\n$" . number_format($precio) . "\n\nSaldo actual: $" . number_format($this->saldoUsuario) . " — te faltan $" . number_format($falta) . "\n\nRecarga para comprar:",
|
||||
'contenido' => ($promo->nombre ?? 'Promocion') . "\n$" . number_format($precio) . "\n\nSaldo actual: $" . number_format($this->saldoUsuario) . " — te faltan $" . number_format($falta) . "\n\n¿Cómo quieres pagar?",
|
||||
'payload' => ['botones' => [
|
||||
['label' => "💰 Recargar $" . number_format($falta) . " para comprar " . ($promo->nombre ?? 'Promo'), 'action' => 'recarga.iniciar', 'data' => []],
|
||||
['label' => "💳 Pagar con Bre-B directo ($" . number_format($precio) . ")", 'action' => 'pago.directo.breb', 'data' => ['tipo' => 'promo', 'promo_id' => $id, 'valor' => $precio]],
|
||||
['label' => "💰 Recargar saldo ($" . number_format($falta) . " faltantes)", 'action' => 'recarga.iniciar', 'data' => []],
|
||||
['label' => 'Volver', 'action' => 'promo.listar', 'data' => []],
|
||||
]],
|
||||
'leido' => true,
|
||||
@@ -1045,7 +1046,7 @@ class PublicChat extends Component
|
||||
'conversation_id' => $this->convId,
|
||||
'tipo' => 'bot',
|
||||
'tipo_ui' => 'credenciales',
|
||||
'contenido' => 'Promo activada! Tus credenciales:',
|
||||
'contenido' => '¡Muchas gracias por tu compra! 🎉 Disfruta tu servicio. Si tienes algún inconveniente no dudes en escribirnos, estamos aquí para ayudarte.',
|
||||
'payload' => [
|
||||
'servicio' => $promo->nombre ?? 'Promocion',
|
||||
'email' => $cuenta->correo,
|
||||
@@ -1059,6 +1060,55 @@ class PublicChat extends Component
|
||||
}
|
||||
|
||||
|
||||
// ─────────────────────────────────────────────────────────
|
||||
// Pago directo con Bre-B sin necesidad de saldo previo
|
||||
// ─────────────────────────────────────────────────────────
|
||||
|
||||
private function pagarDirectoBreb(array $data): void
|
||||
{
|
||||
$tipo = $data['tipo'] ?? 'tarifa';
|
||||
$valor = (int) ($data['valor'] ?? 0);
|
||||
|
||||
if ($valor <= 0) {
|
||||
$this->guardarMensajeBot($this->convId, "No se pudo iniciar el pago. Intenta de nuevo.");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($tipo === 'tarifa') {
|
||||
$tarifa = Tarifas::with('servicio')->find($data['tarifa_id'] ?? 0);
|
||||
if (! $tarifa) {
|
||||
$this->guardarMensajeBot($this->convId, "Plan no encontrado.");
|
||||
return;
|
||||
}
|
||||
$this->flujoData = array_merge($this->flujoData, [
|
||||
'pending_purchase' => [
|
||||
'type' => 'tarifa',
|
||||
'tarifa_id' => $data['tarifa_id'],
|
||||
'valor' => $valor,
|
||||
'servicio' => $tarifa->servicio->nombre,
|
||||
'dias' => $tarifa->dias,
|
||||
'pantallas' => $tarifa->pantallas,
|
||||
],
|
||||
]);
|
||||
} elseif ($tipo === 'promo') {
|
||||
$promo = Promociones::find($data['promo_id'] ?? 0);
|
||||
if (! $promo) {
|
||||
$this->guardarMensajeBot($this->convId, "Promoción no encontrada.");
|
||||
return;
|
||||
}
|
||||
$this->flujoData = array_merge($this->flujoData, [
|
||||
'pending_purchase' => [
|
||||
'type' => 'promo',
|
||||
'promo_id' => $data['promo_id'],
|
||||
'valor' => $valor,
|
||||
'nombre' => $promo->nombre ?? 'Promoción',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
$this->mostrarTransferencia($valor);
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────
|
||||
// Recarga de saldo
|
||||
// ─────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user