labvanced logoLabVanced
  • Research
    • Publications
    • Researcher Interviews
    • Use Cases
      • Behavioral Psychology
      • Personality & Social Psychology
      • Cognitive & Neuro Psychology
      • Developmental & Educational Psychology
      • Clinical & Health Psychology
      • Sports & Movement Psychology
      • Marketing & Consumer Psychology
    • Labvanced Blog
  • Technology
    • Feature Overview
    • Desktop App
    • Phone App
    • Precise Timing
    • Experimental Control
    • Eye Tracking
    • Multi User Studies
    • More ...
      • Questionnaires
      • Artificial Intelligence (AI) Integration
      • Mouse Tracking
      • Data Privacy & Security
  • Learn
    • Guide
    • Videos
    • Walkthroughs
    • FAQ
    • Release Notes
    • Documents
    • Classroom
  • Experiments
    • Public Experiment Library
    • Labvanced Sample Studies
  • Pricing
    • Pricing Overview
    • License Configurator
    • Single License
    • Research Group
    • Departments & Consortia
  • About
    • About Us
    • Contact
    • Downloads
    • Careers
    • Impressum
    • Disclaimer
    • Privacy & Security
    • Terms & Conditions
  • Appgo to app icon
  • Logingo to app icon
Learn
Guía
Videos
Tutoriales
Preguntas Frecuentes
Notas de la Versión
Aula
  • 中國人
  • Deutsch
  • Français
  • Español
  • English
Guía
Videos
Tutoriales
Preguntas Frecuentes
Notas de la Versión
Aula
  • 中國人
  • Deutsch
  • Français
  • Español
  • English
  • Guía
    • COMENZANDO

      • Objetos
      • Eventos
      • Variables
      • Asistente de Tareas
      • Sistema de Pruebas
      • Diseño del Estudio
        • Tareas
        • Bloques
        • Sesiones
        • Grupos
    • TEMAS DESTACADOS

      • Aleatorización y Balance
      • Seguimiento Ocular
      • Aplicación de escritorio
      • Estudios de Muestra
      • Reclutamiento de Participantes
      • Acceso a la API
        • REST API
        • API de Webhook
        • API de WebSocket
      • Otros Temas

        • Tempos de Estímulo Preciso
        • Estudios Multi Usuario
        • Seguimiento de Cabeza en Labvanced | Guía
    • TABS PRINCIPALES DE LA APP

      • Visión General: Pestañas Principales
      • Tablero
      • Mis Estudios
      • Estudios Compartidos
      • Mis Archivos
      • Biblioteca de Experimentos
      • Mi Cuenta
      • Mi Licencia
    • TABS DEL ESTUDIO

      • Visión General: Pestañas Específicas del Estudio
      • Diseño del Estudio
        • Tareas
        • Bloques
        • Sesiones
        • Grupos
      • Editor de Tareas
        • Funciones Principales y Configuraciones
        • El Sistema de Ensayos
        • Marcos de Canvas y Página
        • Objetos
        • Tablas de Propiedades de Objetos
        • Variables
        • Tablas de Variables del Sistema
        • El Sistema de Eventos
        • Aleatorización de Ensayos
        • Funciones del Editor de Texto
        • Seguimiento ocular en una tarea
        • Seguimiento de la Cabeza en una Tarea
        • Estudios de Múltiples Usuarios
      • Configuración del Estudio
        • Configuración de Inicio y Ajustes Principales
        • Configuración de Navegadores y Dispositivos
        • Configuración de Características del Experimento
      • Descripción
        • Más detalles sobre la información de descripción
        • Imágenes, Enlaces y Referencias en Descripciones
      • Variables
      • Medios
      • Traducir
      • Ejecutar
      • Publicar y Grabar
        • Requisitos para Publicar un Estudio en Labvanced
        • Reclutamiento de Participantes y Crowdsourcing
        • Selección y Confirmación de Licencias
        • Después de Publicar Su Estudio de Labvanced
      • Compartir
      • Participantes
      • Vista de Datos y Exportar
        • Vista de Datos y Selección de Variables y Tareas (Versión ANTIGUA)
        • Accediendo a Grabaciones (Versión ANTERIOR)
  • Videos
    • Visión General del Video
    • Comenzando en Labvanced
    • Creando Tareas
    • Videos de Elementos
    • Eventos y Variables
    • Temas Avanzados
  • Guías
    • Introducción
    • Tarea de Stroop
    • Tarea de Decisión Léxica
    • Tarea de Indicación Visual de Posner
    • Paradigma de Parpadeo de Ceguera por Cambio
    • Estudio de Seguimiento Ocular
    • Estudio de Seguimiento Ocular en Infantes
    • Estudio de Captura de Atención con Seguimiento de Ratón
    • Presentación Visual Serial Rápida
    • Estudio de ChatGPT
    • Demostración de Seguimiento Ocular: SVGs como AOIs
    • Demostración Multi-Usuario: Mostrar los Punteros de los Sujetos
    • Controlador de Gamepad / Joystick - Configuración Básica
    • Estudio de Aplicación de Escritorio con Integración de EEG
  • Preguntas Frecuentes
    • Características
    • Seguridad y Privacidad de Datos
    • Licencias
    • Precisión de Labvanced
    • Uso Programático y API
    • Uso de Labvanced Offline
    • Solución de Problemas
    • Preguntas sobre la Creación de Estudios
  • Notas de la Versión
  • Aula

API de Webhook

Uso: ​El caso de uso principal de la API de Webhook de Almacenamiento de Datos Externos de Labvanced es transferir datos de participantes en “tiempo real” a un servidor externo / remoto, en lugar de alojar los datos grabados en los servidores de Labvanced.

NOTA: ​Contrario a muchos casos de uso de API, lo que se describe aquí NO es cómo llamar a la API / endpoints de Labvanced (tal funcionalidad no existe por ahora), sino más bien cómo debe configurar/implementar su backend, de modo que nuestra plataforma pueda llamar automáticamente a los endpoints que usted ha implementado para enviar los datos de los participantes directamente a su backend/base de datos en lugar del nuestro.

Disponibilidad: ​Esta funcionalidad está disponible únicamente para los titulares de licencias de laboratorio de Labvanced.

1. Configuración de la API de Webhook

Para utilizar la API de Webhook, primero se debe activar la opción de “almacenamiento de datos externos” en “Configuraciones del Estudio” del respectivo estudio de Labvanced en la sección de “Características del Experimento”.

1.1 Parámetros:

  • Dirección IP: Ingrese su dirección IP estática donde su servidor externo está funcionando / disponible públicamente.
  • Puerto: El puerto que se debe usar para enviar los datos.
  • Ruta URL​: La ruta URL que se debe agregar después del puerto. Esto es particularmente útil para “espaciar” sus proyectos / datos entrantes, de modo que los datos de diferentes experimentos se envíen a una ruta URL diferente. La ruta URL es opcional, pero recomendamos encarecidamente usarla.

2. Crear el Servidor / Script para Recibir los Datos de la API de Webhook

Basado en su configuración en el paso 1, debe implementar un servidor que esté disponible en la dirección IP, puerto y ruta URL especificados. Una versión simplificada / ejemplo de tal servidor está disponible en nuestra página de Github aquí.

2.1 Formato de datos: Los datos se envían en formato JSON para todas las rutas excepto para la ruta “/file_upload”. La ruta “/file_upload” (utilizada para subir archivos binarios como videos o audios grabados) está codificada como “multipart/form-data”, así que asegúrese de analizar los datos entrantes correctamente como JSON o multipart/form-data / datos binarios.

2.2. Configuración de CORS: Al implementar su backend, debe implementar / permitir Compartición de Recursos de Origen Cruzado (CORS). En particular, debe establecer los siguientes encabezados: “Access-Control-Allow-Origin” (incluir ​https://www.labvanced.com/​), “Access-Control-Allow-Methods” (incluir POST y OPTIONS), “Access-Control-Allow-Headers” (incluir Content-Type).

2.3 Tipos de solicitudes: ​Todos los tipos de solicitudes son solicitudes POST ya que se utilizan para enviar datos. En este punto, un valor de retorno solo es necesario para la ruta “/file_upload”. Todas las demás rutas no necesitan un valor de retorno especial.

2.4 Tipos de solicitudes / rutas: ​Cada vez que un participante forma parte de un estudio, en total se enviarán 8 diferentes ​tipos​ de solicitudes POST a (su servidor externo). La ruta “/file_upload” solo se usará si su estudio incluye una acción para subir algunos datos binarios grabados (por ejemplo, audio o video). Cada tipo de solicitud POST tiene una ruta diferente (ruta URL), que se agregará a la ruta URL especificada en el paso 1. Además, cada tipo de solicitud tiene una estructura/carga diferente, lo cual debe tener en cuenta al analizar y almacenar los datos. Consulte los detalles en la sección 3.

3. Definiciones de Endpoints / Rutas de la API de Webhook:

A continuación, verá una explicación detallada de cada ruta / endpoint que se utiliza/llama cuando un participante toma parte en el experimento. Idealmente, sugerimos que implemente todos estos endpoints (excepto 3.1), y asegúrese de que todos los datos se analicen y almacenen adecuadamente en su base de datos.

¿Qué endpoints se utilizan, qué servidor se llama cuando?

  • El endpoint 3.1 “/startExpPlayer” se envía solo al servidor de Labvanced para cargar la definición del experimento / archivo JSON y estímulos asociados desde nuestro servidor.
  • Los endpoints 3.2, 3.3, 3.4, 3.7 y 3.8 se envían tanto al servidor de Labvanced (necesario para el equilibrio de grupos y el flujo general del experimento) como al servidor externo/su.
  • Los endpoints 3.5 y 3.6 solo se envían al servidor externo/su. Tenga en cuenta que todos los datos de prueba/participante se envían a través de la ruta 3.6, que por tanto es el endpoint más importante a implementar.
  • El endpoint 3.9 solo se envía al servidor externo/su y se llama cada vez que se ejecuta una “acción de carga” para subir datos binarios (audio o video).

3.1 Carga del experimento

  • Ruta: /startExpPlayer
  • Tipo: POST
  • Llamado cuando: El participante visita una cierta URL de experimento en labvanced.com. Función principal en el servidor de Lavanced: Inicializa la carga del experimento.
  • Carga útil: JSON con los siguientes campos:
Nombre del CampoDescripciónTipo de DatosRequerido
expIdIdentificador único para el estudioEnteroSÍ
isTestrunSi los datos se están grabando o noBooleanoNO
subject_codeIdentificador del sujeto a través del parámetro URLCadenaNO
tokenUn identificador único para participantes en estudios longitudinalesIdentificador de tokenNO
askSubjDataSi se debe mostrar una encuesta inicial, utilizada para poner a los sujetos en diferentes gruposBooleanoSÍ

NOTA: No es necesario implementarlo en servidores externos, ya que esto solo inicializa la carga del experimento desde el servidor de Labvanced al computador cliente.


3.2 Selección de grupo y sesión

  • Ruta: /startFirstPlayerSession
  • Tipo: POST
  • Llamado cuando: La ruta 3.1 “/startExpPlayer” devuelve exitosamente desde el servidor de Labvanced.
  • Función principal en el servidor de Lavanced: Se utiliza para asignar números de grupo y sesión a un sujeto (equilibrio del lado del servidor).
  • Carga útil: JSON con los siguientes campos:
Nombre del CampoDescripciónTipo de DatosRequerido
expIdIdentificador único para el estudioEnteroSÍ
expSessionNrIdentificador único para la sesión de grabación de este participante (contando hacia arriba)CadenaSÍ
subject_codeIdentificador del sujeto basado en el parámetro URLCadenaNO
tokenUn identificador único para participantes en estudios longitudinalesIdentificador de tokenNO
survey_dataJSON del cuestionario previo al estudio, campos descritos a continuación.JSONNO
survey_data.selectedGenderGénero seleccionado del participanteCadenaNO
survey_data.selectedAgeEdad seleccionada del participanteEnteroNO
survey_data.selectedCountryPaís/localización seleccionada del participanteCadenaNO
survey_data.selectedLanguageLengua (primaria) seleccionada del participanteCadenaNO
isTestrunSi los datos se están grabando o noBooleanoSÍ
runOnlyGroupNrSolo se utiliza para ejecutar pruebas de un cierto número de grupo sin grabaciones de datosEntero / FalsoNO
runOnlySessionNrSolo se utiliza para ejecutar pruebas de un cierto número de sesión sin grabaciones de datosEntero / FalsoNO
groupNrNúmero de grupo para este sujetoEnteroSÍ
sessionNrNúmero de sesión en un estudio longitudinalEnteroSÍ
group_nameEl nombre del grupo para este sujetoCadenaSÍ
session_nameEl nombre de la sesión para este sujetoCadenaSÍ
experiment_nameEl nombre del experimento (no el nombre de publicación)CadenaSÍ

3.3 ​Inicio del experimento

  • Ruta: /setPlayerSessionStartedTime
  • Tipo: POST
  • Llamado cuando: El participante presiona “Iniciar Experimento”.
  • Función en el servidor de Lavanced: Guarda el tiempo de inicio, la sesión y el nombre del grupo del experimento y comienza el experimento.
  • Carga útil: JSON con los siguientes campos:
Nombre del CampoDescripciónTipo de DatosRequerido
expIdIdentificador único para el estudioEnteroSÍ
expSessionNrIdentificador único para la sesión de grabación de este participante (contando hacia arriba)CadenaSÍ
start_timeHora de inicio del experimentoMarca de tiempo UNIXSÍ
sessionNrNúmero de sesión en un estudio longitudinalEnteroSÍ
groupNrNúmero de grupo para este sujetoEnteroSÍ
tokenUn identificador único para participantes en estudios longitudinalesIdentificador de tokenNO

3.4 Agregar información de metadatos

  • Ruta: /addMetaInfo
  • Tipo: POST
  • Llamado cuando: El participante presiona “Iniciar Experimento”.
  • Función en el servidor de Lavanced: Guarda la información meta en el servidor.
  • Carga útil: JSON con los siguientes campos:
Nombre del CampoDescripciónTipo de DatosRequerido
expIdIdentificador único para el estudioEnteroSÍ
expSessionNrIdentificador único para la sesión de grabación de este participante (contando hacia arriba)CadenaSÍ
var_dataEl JSON que contiene la información metaJSONSÍ
var_data.browserSpecEl navegador utilizado por el sujetoCadenaNO
var_data.versionSpecLa versión del navegador utilizado por el sujetoCadenaNO
var_data.systemSpecEl tipo de dispositivo / SO utilizado por el sujetoCadenaNO
var_data.agentSpecLa cadena completa del agente de usuarioCadenaNO
var_data.fullscreenIndica si el estudio siempre está en pantalla completaBooleanoNO
var_data.timeDelayMeanLa precisión media de la callback de JavaScript en milisegundosFlotanteNO
var_data.timeDelayStdLa desviación estándar de la precisión de la callback de JavaScript en milisegundosFlotanteNO
var_data.crowdsourcingCodeEl código de crowdsourcing / finalización para los sujetosCadenaNO
var_data.crowdsourcinSubjIdLa ID del trabajador de crowdsourcing / sujetoCadenaNO
var_data.subjCounterGlobalUn contador global de sujetos para el número de sujetos en el estudioEnteroNO
var_data.subjCounterPer GroupUn contador de sujetos por grupo en el estudioArray de EnterosNO
var_data.roleIdLa ID de rol única para estudios de múltiples usuarios del sujetoEnteroNO
var_data.multiUserGroupIdLa ID de grupo única global para estudios de múltiples usuariosUuidNO
var_data.displayedLanguageEl idioma de visualización seleccionado para estudios multilingüesCadenaNO
var_data.pixelDensityPerMMLa densidad de píxeles de la pantallaFlotanteNO
var_data.screenHeightLa altura de la pantalla en píxelesEnteroNO
var_data.screenWidthEl ancho de la pantalla en píxelesEnteroNO
var_data.windowHeightLa altura de la ventana / viewport en píxelesEnteroNO
var_data.windowWidthEl ancho de la ventana/viewport en píxelesEnteroNO

3.5 Grabar información sobre una tarea

  • Ruta: /recordStartTask
  • Tipo: POST
  • Llamado cuando: Inicia una nueva tarea en el flujo del experimento.
  • Función en el servidor de Lavanced: No se llama cuando se activan las solicitudes de API externas.
  • Carga útil: JSON con los siguientes campos:
Nombre del CampoDescripciónTipo de DatosRequerido
expIdIdentificador único para el estudioEnteroSÍ
expSessionNrIdentificador único para la sesión de grabación de este participante (contando hacia arriba)CadenaSÍ
blockNrNúmero de bloque actual (contador ascendente)EnteroSÍ
blockIdID única del bloque actualUuidSÍ
blockNameNombre del bloqueCadenaSÍ
taskNrNúmero de tarea actual (contador ascendente)EnteroSÍ
taskIdID de la tarea actual como se define en el editor (igual entre sujetos)UuidSÍ
recTaskIdID generada por el servidor para la tarea de grabación actual (diferente entre sujetos)EnteroSÍ
taskNameNombre de la tarea actualCadenaSÍ
start_timeHora de inicio de la tareaMarca de tiempo UNIXSÍ

3.6 Grabar datos de prueba

  • Ruta: /recordTrial
  • Tipo: POST
  • Llamado cuando: Se termina una prueba O se ejecuta una acción de grabación personalizada.
  • Función en el servidor de Lavanced: No se llama cuando se activan las solicitudes de API externas.
  • Carga útil: JSON con los siguientes campos:
Nombre del CampoDescripciónTipo de DatosRequerido
expIdIdentificador único para el estudioEnteroSÍ
expSessionNrIdentificador único para la sesión de grabación de este participante (contando hacia arriba)CadenaSÍ
recTaskIdID generada por el servidor para la tarea de grabación actual (diferente entre sujetos)EnteroSÍ
taskIdID de la tarea actual como se define en el editor (igual entre sujetos)UuidSÍ
trailNrNúmero de pruebaEnteroSÍ
recDataLos datos principales / todas las variables creadas por el usuario por prueba se almacenan aquíJSONSÍ

NOTA: Los datos exactos que se registran por prueba dependen del experimento específico y de la tarea. Una visión general para cada estudio está disponible en la pestaña "Variables" del experimento específico (ver captura de pantalla). Tenga en cuenta también que los nombres de las variables de la API externa se utilizarán como clave en la estructura JSON. Por lo tanto, asegúrese de que los nombres de las variables sean únicos. De lo contrario, sobrescribirá los datos. El sistema de Labvanced normalmente obliga al usuario a utilizar nombres de variable únicos.

Resumen de la pestaña Variables en Labvanced

3.7 Terminar el experimento con éxito

  • Ruta: /finishExpSession
  • Tipo: POST
  • Llamado cuando: El experimento se finaliza con éxito.
  • Función en el servidor de Lavanced: Termina el estudio y marca el conjunto de datos como completado (importante para el equilibrio).
  • Carga útil: JSON con los siguientes campos:
Nombre del CampoDescripciónTipo de DatosRequerido
expIdIdentificador único para el estudioEnteroSÍ
expSessionNrIdentificador único para la sesión de grabación de este participante (contando hacia arriba)CadenaSÍ
end_timeHora en que finalizó el experimentoMarca de tiempo UNIXSÍ
var_dataIgual que los datos var en la ruta “/addMetaInfo” (información actualizada)JSONSÍ
nextStartTimePróxima hora de inicio (solo para estudios longitudinales)Marca de tiempo UNIXNO
nextEndTimePróxima hora de finalización (solo para estudios longitudinales)Marca de tiempo UNIXNO
reminderTimeTiempo hasta la próxima hora de inicio (solo para estudios longitudinales)Cadena de tiempoNO
selectedEmailCorreo electrónico para enviar recordatorio de participación (solo para estudios longitudinales)Dirección de correo electrónicoNO
emailReminderCuándo enviar el recordatorio (solo para estudios longitudinales)CadenaNO

3.8 Terminar el experimento con fallo

  • Ruta: /errExpSession
  • Tipo: POST
  • Llamado cuando: El experimento es abortado con un error.
  • Función en el servidor de Lavanced: Aborta el estudio y marca el conjunto de datos como incompleto.
  • Carga útil: JSON con los siguientes campos:
Nombre del CampoDescripciónTipo de DatosRequerido
expIdIdentificador único para el estudioEnteroSÍ
expSessionNrIdentificador único para la sesión de grabación de este participante (contando hacia arriba)CadenaSÍ
err_msgEl mensaje de errorCadenaSÍ

3.9 Subir datos binarios (audio o video)

  • Ruta: /file_upload
  • Tipo: POST
  • Llamado cuando: Se ejecuta una acción de carga en el sistema de eventos asociada con algún objeto de grabación de audio o video. Función en el servidor de Lavanced: No se llama cuando se activan las solicitudes de API externas.
  • NOTA: El servidor debe enviar valores de retorno para esta ruta (explicado a continuación). Si esto no se hace, el desencadenador “onUploadComplete” no se ejecuta y el experimento no puede propagarse correctamente. También tenga en cuenta que los datos en esta ruta están codificados como “multipart/form-data” ya que incluye tanto datos binarios como no binarios.
  • Carga útil: JSON con los siguientes campos:
Nombre del CampoDescripciónTipo de DatosRequerido
expSessionNrIdentificador único para la sesión de grabación de este participante (contando hacia arriba)CadenaSÍ
newFileNameEl nombre de archivo sugerido para almacenar el archivo. El nombre del archivo incluye el nombre de variable asociada, y el número actual, bloque, tarea y prueba.CadenaSÍ
myFileEl archivo real / datos binariosBinarioSÍ

Respuesta Requerida:

Nombre del CampoDescripciónTipo de DatosRequerido
file_guidIdentificador Único Global (guid) para el archivo grabado. Este debe ser generado del lado del servidor y será guardado en la variable asociada con el archivo para que luego sea fácil entender de qué archivo provino qué objeto de grabación.UuidSÍ
file_nameEl nombre de archivo resultante que el servidor utilizó para guardar el archivo. Este puede ser (pero no tiene que ser) el mismo nombre de archivo sugerido por el cliente en la solicitud. Esto también se almacenará en la variable asociada.CadenaSÍ
Prev
REST API
Next
API de WebSocket