Señalización en tiempo real
La Señalización en tiempo real es un sistema avanzado basado en eventos para manejar la comunicación asincrónica en flujos de trabajo automatizados. Esta arquitectura basada en señales permite una interacción perfecta entre scripts de automatización y sistemas externos, siendo el manejo de la autenticación multifactor (MFA) una de sus aplicaciones más críticas.
Descripción general
El sistema de Señalización en Tiempo Real proporciona un marco robusto para gestionar eventos asíncronos en flujos de trabajo de automatización. Aunque la verificación MFA es un caso de uso principal, la arquitectura flexible del sistema admite diversos escenarios basados en eventos.
La autenticación multifactor (MFA) es una característica de seguridad crítica que a menudo se convierte en un cuello de botella para los flujos de trabajo automatizados, provocando fallos o bloqueos de cuentas.
Por qué la gestión de MFA es crítica para la automatización:
✅ Garantizar acceso ininterrumpido: Gestionar códigos SMS inesperados, contraseñas de un solo uso por correo electrónico o autenticación TOTP sin interrumpir el flujo de trabajo
✅ Evitar fallos del flujo de trabajo: La automatización tradicional se bloquea cuando aparecen solicitudes de MFA, mientras que Agent Browser las maneja sin problemas
✅ Mantener sesiones estables: Las tareas de larga duración permanecen conectadas gracias a una gestión segura del estado de verificación
✅ Reducir el riesgo en cuentas: Un comportamiento de verificación similar al humano disminuye la probabilidad de activar alertas de seguridad
Más allá de MFA: Sistema universal de eventos
El sistema de señalización se extiende más allá de la autenticación para gestionar:
- Envíos de formularios y actualizaciones de estado
- Progreso de la tarea notificaciones
- Llamadas de retorno de API y webhooks
- Interacciones del usuario y cambios de estado
- Coordinación de procesos entre sistemas
- Supervisión en tiempo real y alertas
Solución completa de señalización:
- Verificación confiable de MFA (caso de uso principal)
- Gestión universal de eventos para necesidades de automatización
- Múltiples métodos de entrada para códigos y datos
- Procesamiento asíncrono (sin bloqueos)
- Soporte completo para CDP y API HTTP
- Compatibilidad universal con flujos de autenticación
APIs compatibles
Scrapeless admite interfaces CDP y HTTP para señalización en tiempo real:
| API | Método CDP | Endpoint HTTP | Descripción |
|---|---|---|---|
| Enviar señal | Signal.send | POST /signal/send | Enviar datos a un canal de eventos |
| Esperar señal | Signal.wait | GET /signal/wait | Esperar datos en un canal de eventos |
| Listar eventos | Signal.list | GET /signal/list | Listar todos los nombres de eventos pendientes |
| Obtener estadísticas | Signal.stats | GET /signal/stats | Recuperar estadísticas de la cola |
| Limpiar eventos | Signal.clear | DELETE /signal/clear | Limpiar eventos específicos o todos los eventos |
CDP APIs
Las APIs de señal CDP permiten enviar y recibir señales a través de canales de eventos en flujos de trabajo de automatización de navegadores. Más información
Signal.send
Envía datos de señal a un canal de evento especificado.
Formato de solicitud:
{
"method": "Signal.send",
"params": {
"event": "string",
"data": "object"
}
}Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| event | string | ✓ | Nombre del canal de evento |
| data | object | ✓ | Datos que se enviarán a través del canal |
Ejemplo:
await client.send('Signal.send', {
event: 'mfa_code',
data: { code: '123456', type: 'sms' }
});Signal.wait
Espera datos de señal en un canal de evento especificado.
Formato de solicitud:
{
"method": "Signal.wait",
"params": {
"event": "string",
"timeout": 60000
}
}Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| event | string | ✓ | Nombre del canal de evento en el que esperar |
| timeout | number | X | Tiempo máximo de espera en milisegundos (predeterminado: 60000) |
Ejemplo:
const result = await client.send('Signal.wait', {
event: 'mfa_code',
timeout: 60000
});
console.log('Received MFA code:', result.data);Signal.list
Lista todos los nombres de eventos pendientes en la cola.
Formato de solicitud:
{
"method": "Signal.list",
"params": {}
}Parámetros: Ninguno requerido
Ejemplo:
const list = await client.send('Signal.list');
console.log('Pending events:', list.events);
// Output: ["mfa_code", "captcha_result", "order_status"]
// Check for specific event
if (list.events.includes('mfa_code')) {
console.log('MFA code in queue');
}Signal.stats
Recupera estadísticas de la cola e información sobre suscriptores.
Formato de solicitud:
{
"method": "Signal.stats",
"params": {}
}Parámetros: Ninguno requerido
Campos de respuesta:
| Campo | Tipo | Descripción |
|---|---|---|
| events | number | Lista de todos los nombres de eventos pendientes |
| waiters | number | Información sobre suscriptores en espera |
Ejemplo:
const client = await page.target().createCDPSession();
// Get statistics
const stats = await client.send('Signal.stats');
console.log('Pending events:', stats.events);
console.log('Waiting subscribers:', stats.waiters);Signal.clear
Borra eventos especificados o todos los eventos de la cola.
Formato de solicitud:
{
"method": "Signal.clear",
"params": {
"event": "string (optional)"
}
}Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| event | string | X | Evento específico que se borrará. Si se omite, borra todos los eventos |
HTTP REST APIs
Para sistemas externos, los endpoints REST HTTP proporcionan una alternativa más sencilla a la configuración de conexión CDP. Esto elimina la necesidad de establecer conexiones WebSocket para cada transmisión de datos. Más información
Prefijo predeterminado del endpoint del navegador: https://browser.scrapeless.com/browser/{taskId}
POST /signal/send
Envía una señal mediante HTTP.
Formato de solicitud:
POST https://browser.scrapeless.com/browser/{taskId}/signal/send?x-api-token={API_KEY}
Content-Type: application/json
{
"event": "string",
"data": "object"
}Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| event | string | ✓ | Nombre del canal de evento |
| data | object | ✓ | Datos que se enviarán a través del canal |
Ejemplo:
curl -X POST 'https://browser.scrapeless.com/browser/{taskId}/signal/send?x-api-token={API_KEY}' \
-H 'Content-Type: application/json' \
-d '{
"event": "mfa_code",
"data": { "code": "123456", "type": "sms" }
}'GET /signal/wait
Espera una señal mediante una solicitud HTTP GET.
Formato de solicitud:
GET https://browser.scrapeless.com/browser/{taskId}/signal/wait?x-api-token={API_KEY}&event={event}&timeout={timeout}Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| event | string | ✓ | Nombre del canal de evento en el que esperar |
| timeout | number | X | Tiempo máximo de espera en milisegundos (predeterminado: 60000) |
Ejemplo:
# Wait for MFA code with 60 second timeout
curl -X GET 'https://browser.scrapeless.com/browser/{taskId}/signal/wait?x-api-token={API_KEY}&event=mfa_code&timeout=60000'GET /signal/list
Lista todos los nombres de eventos pendientes.
Formato de solicitud:
GET https://browser.scrapeless.com/browser/{taskId}/signal/list?x-api-token={API_KEY}Parámetros: Ninguno requerido
Ejemplo:
# List all pending events
curl -X GET 'https://browser.scrapeless.com/browser/{taskId}/signal/list?x-api-token={API_KEY}'GET /signal/stats
Recupera estadísticas de la cola.
Formato de solicitud:
GET https://browser.scrapeless.com/browser/{taskId}/signal/stats?x-api-token={API_KEY}Parámetros: Ninguno requerido
Ejemplo:
# Get queue statistics
curl -X GET 'https://browser.scrapeless.com/browser/{taskId}/signal/stats?x-api-token={API_KEY}'DELETE /signal/clear
Borra eventos de la cola.
Formato de solicitud:
DELETE https://browser.scrapeless.com/browser/{taskId}/signal/clear?x-api-token={API_KEY}
Content-Type: application/json
{
"event": "string (optional)"
}Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| event | string | X | Evento específico que se borrará. Si se omite, borra todos los eventos |
Ejemplo:
# Clear specific event
curl -X DELETE 'https://browser.scrapeless.com/browser/{taskId}/signal/clear?x-api-token={API_KEY}' \
-H 'Content-Type: application/json' \
-d '{"event": "mfa_code"}'
# Clear all events
curl -X DELETE 'https://browser.scrapeless.com/browser/{taskId}/signal/clear?x-api-token={API_KEY}'Mejores prácticas
Utilice tiempos de espera adecuados
Establezca valores de tiempo de espera según los retrasos esperados de verificación. Los tiempos típicos de entrega de autenticación multifactor (MFA) oscilan entre 10 y 60 segundos.
Manejo de errores
Verifique siempre los códigos de estado de la respuesta (200, 408, 400) para gestionar adecuadamente los casos de éxito, tiempo de espera y errores.
Supervisión de colas
Revise regularmente las estadísticas de la cola para detectar acumulaciones que puedan indicar problemas del sistema.
Nomenclatura de canales de eventos
Utilice nombres descriptivos para los canales de eventos (por ejemplo, mfa_code, email_verification, totp_token) para evitar confusiones en escenarios con múltiples eventos.
Procesamiento asincrónico
Aproveche el manejo de señales asincrónicas para evitar bloqueos del script mientras espera la entrada del usuario.
Limpieza de cola
Elimine los eventos obsoletos de la cola para mantener el rendimiento del sistema y prevenir problemas de memoria.
El sistema de señales está diseñado para funcionar perfectamente con interfaces CDP y HTTP, lo que le permite elegir el método más adecuado para su caso de uso específico. CDP proporciona comunicación en tiempo real y baja latencia, mientras que los endpoints REST HTTP ofrecen simplicidad para integraciones externas.
Ejemplo completo
const puppeteer = require('puppeteer-core');
(async () => {
const API_TOKEN = 'API Key';
const API_URL = 'https://api.scrapeless.com/api/v2/browser'; // Create session task API endpoint
try {
// Step 1: Get session taskId via HTTP API
const sessionResponse = await fetch(API_URL, {
method: 'GET',
headers: {'x-api-token': API_TOKEN},
});
const {taskId} = await sessionResponse.json();
console.log('Session created with task ID:', taskId);
// Step 2: Connect to browser by taskId
const browser = await puppeteer.connect({
browserWSEndpoint: `wss://api.scrapeless.com/browser/${taskId}`,
headers: {'x-api-token': API_TOKEN},
});
// Step 3: Navigate to page and wait for signal
const page = await browser.newPage();
await page.goto("https://example.com", {waitUntil: "domcontentloaded"});
const client = await page.createCDPSession();
console.log('Waiting for example event...');
const result = await client.send('Signal.wait', {
event: 'example_event',
timeout: 60000
});
console.log('Received example data:', result.data);
await browser.close();
} catch (error) {
console.error('Error occurred:', error);
}
})();El sistema de señalización en tiempo real de Scrapeless Agent Browser proporciona un marco robusto y flexible para gestionar la autenticación multifactor en flujos de trabajo automatizados. Al combinar interfaces CDP y HTTP con un sistema de cola de eventos inteligente, permite una integración perfecta de sistemas externos de verificación, manteniendo la seguridad y la fiabilidad.
Ya sea que esté desarrollando scripts de automatización simples o orquestaciones complejas de múltiples sistemas, la arquitectura asincrónica y no bloqueante del sistema de señales garantiza que sus flujos de trabajo se completen de manera confiable, incluso cuando se requiere verificación MFA.