Inicio rápido
Pon en marcha la verificación facial en tu aplicación en menos de 5 minutos.
1. Obtén tus credenciales
Después de que Surt te proporcione credenciales de acceso:
- Se crea una clave API para tu organización
- Crea un flujo de trabajo en tu panel para obtener un
workflow_id
Tu clave API va en el encabezado Authorization de cada solicitud al backend. Nunca la expongas en código del lado del cliente. Consulta Autenticación para más detalles.
2. Genera un token de portal
Llama a la API de Surt desde tu backend para crear un token de portal:
curl --location 'https://api.surt.com/faceguard/session/portal' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"workflow_id": "YOUR_WORKFLOW_ID",
"customer": {
"customer_id": "your_user_id",
"email": "user@example.com",
"first_name": "John",
"last_name": "Doe"
}
}'
La respuesta contiene un token de portal JWT. Pasa este token a tu frontend.
Los tokens de portal expiran a los 30 minutos. Genera un nuevo token para cada intento de verificación.
3. Integra FaceGuard
Opción A: Paquete NPM (recomendado)
npm install @surtai/faceguard
import { FaceGuard } from '@surtai/faceguard';
const result = await FaceGuard.verify({ token: 'YOUR_PORTAL_TOKEN' });
if (result.status === 'approved') {
// Conceder acceso
} else if (result.status === 'rejected') {
// Denegar acceso o reintentar con un nuevo token
}
El SDK detecta automáticamente el dispositivo: cámara a pantalla completa en móvil, modal con código QR en escritorio.
Opción B: iframe
<div style="position: fixed; inset: 0; z-index: 9999; background: #0D141A;">
<iframe
src="https://faceguard.surt.com/intro?token=YOUR_PORTAL_TOKEN"
allow="camera"
style="width: 100%; height: 100%; border: none;"
></iframe>
</div>
Opción C: React Native WebView
import { SafeAreaView } from 'react-native';
import { WebView } from 'react-native-webview';
<SafeAreaView style={{ flex: 1, backgroundColor: '#0D141A' }}>
<WebView
source={{ uri: `https://faceguard.surt.com/intro?token=${token}` }}
onMessage={(event) => {
const data = JSON.parse(event.nativeEvent.data);
if (data.action === 'close') {
console.log('Resultado:', data.reason, data.confidence);
}
}}
mediaPlaybackRequiresUserAction={false}
allowsInlineMediaPlayback={true}
mediaCapturePermissionGrantType="grant"
style={{ flex: 1 }}
/>
</SafeAreaView>
4. Gestiona el resultado
Callbacks del SDK
const fg = FaceGuard.init({
token: 'YOUR_PORTAL_TOKEN',
onSuccess: (result) => console.log('Aprobado', result.confidence),
onFailed: (result) => console.log('Rechazado', result.confidence),
onCancel: () => console.log('Usuario canceló'),
onError: (error) => console.log('Error', error.message),
});
Eventos postMessage (iframe / WebView)
window.addEventListener('message', (e) => {
if (e.data?.action === 'close') {
switch (e.data.reason) {
case 'approved': // Cara verificada - confidence: 0-100
case 'rejected': // La cara no coincidió - confidence: 0-100
case 'canceled': // El usuario cerró FaceGuard
case 'error': // Algo salió mal - mensaje de error
}
}
});
Usa el modo sandbox durante el desarrollo. Contacta con Surt para obtener credenciales de sandbox.
Próximos pasos
- Paquete NPM: documentación completa del SDK
- Integración iFrame: guía detallada de integración web
- Referencia de API: documentación completa de los endpoints