Ir al contenido

Reenviar Invitación

Regenera el enlace de invitación para asesores que no han aceptado.

  1. Ve a Configuración → Asesores → Enviadas.
  2. Localiza la invitación con estado “Pendiente”.
  3. Clic en el icono de “Enviar” (flecha) — se reenvía automáticamente.
  • Toast de confirmación: “Invitación reenviada a [email]”.
  • Fecha de envío actualizada en la lista.
  • Fecha de expiración renovada (+7 días desde ahora).
  • Asesor recibe nuevo email con enlace actualizado.
  • Asesor perdió el email original
  • Invitación próxima a expirar (menos de 2 días)
  • Asesor reporta enlace no funcional
  • Email original fue a spam

Nota: El enlace anterior queda invalidado automáticamente al reenviar.

Ver implementación técnica

Edge Function: send-advisor-invitation (con isResend: true)

Lógica:

if (existingInvitation.status === 'pending') {
if (!isResend) {
throw new Error('Ya existe una invitación pendiente...');
}
// Regenerar token y fechas
const newToken = crypto.randomUUID();
const expiresAt = new Date();
expiresAt.setDate(expiresAt.getDate() + 7);
const { data: updatedInvitation } = await supabase
.from('advisor_invitations')
.update({
token: newToken,
expires_at: expiresAt.toISOString(),
sent_at: new Date().toISOString(),
updated_at: new Date().toISOString(),
permissions: permissions || existingInvitation.permissions,
is_existing_user: isExistingUser,
})
.eq('id', existingInvitation.id)
.select()
.single();
}

Cambios en la invitación:

CampoValor anteriorValor nuevo
tokenUUID antiguoUUID nuevo (regenerado)
sent_atFecha originalNOW()
expires_atFecha antiguaNOW() + 7 días
updated_atNOW()

Query de diagnóstico:

-- Historial de reenvíos (via updated_at)
SELECT id, email, sent_at, updated_at,
CASE
WHEN updated_at > sent_at + INTERVAL '1 minute'
THEN 'Reenviada'
ELSE 'Original'
END as tipo
FROM advisor_invitations
WHERE status = 'pending'
ORDER BY updated_at DESC;