Panel de control de Insights y API

La API de OpenTok Insights es una API GraphQL. Puedes utilizar la API de Insights y el panel de control de Insights para obtener información sobre tus proyectos y sesiones de OpenTok.

El panel de información

Nota: Haz clic aquí aquí para obtener información sobre la retención de datos y la latencia.

El widget «Insights Dashboard» ofrece datos a nivel de proyecto. Puedes acceder a él iniciando sesión en tu Cuenta API de Video de Vonage y seleccionando un proyecto de OpenTok. Contiene tres pestañas: «Uso», «Calidad» y «Errores», así como filtros por intervalo de fechas, ubicación y puntos finales.

La pestaña «Uso» muestra los distintos tipos de actas que se han generado en el proyecto. Puedes ver un mapa con la ubicación donde se generaron las actas y aplicar varios filtros a tu gusto.

La pestaña «Calidad» muestra un histograma de la tasa de bits de vídeo y la latencia de las transmisiones del proyecto.

La pestaña «Errores» muestra la tasa de error de las conexiones, los editores y los suscriptores.

Los datos de cada pestaña se filtran según las selecciones realizadas en la parte superior.

API Insights, URL base y autenticación

La API de Insights es una API GraphQL que te permite explorar los metadatos de tus sesiones tanto a nivel de proyecto como de sesión. GraphQL es una alternativa al enfoque REST habitual para acceder a datos a través de HTTP. Fue desarrollado por Facebook en 2012 y se convirtió en código abierto en 2015. Echa un vistazo a Guía de introducción a GraphQL para saber más.

La URL base de la API es:

https://insights.opentok.com/graphql

Todas las solicitudes se realizan mediante POST HTTP y se autentican mediante X-OPENTOK-AUTH.

Exploración del esquema de la API con GraphiQL

Navegar hasta https://insights.opentok.com/ Al utilizar tu navegador, accederás a la instancia de Insights de GraphiQL, una herramienta que te permite explorar el esquema de la API de GraphQL. Dado que la herramienta puede realizar solicitudes a la API, debes haber iniciado sesión para poder utilizarla.

Hay cinco ventanas en esta herramienta:

  • En la esquina superior derecha de la herramienta, verás un Docs botón. Al hacer clic en él, se abre un panel con la documentación del esquema. Cada campo y tipo de objeto de la documentación incluye una descripción. Navega por ella para explorar el esquema.

  • En la parte izquierda de la página se encuentra el panel «Consulta». En este panel puedes crear consultas para ejecutarlas en la API. Alternar entre el panel «Documentación» y el panel «Consulta» te permite crear la consulta precisa que necesitas para obtener únicamente la información que te interesa. Como has iniciado sesión, la autenticación para realizar consultas ya está gestionada automáticamente.

  • Debajo del panel «Consulta» se encuentra el panel «Variables de consulta». Aunque no es obligatorio, puedes utilizarlo para especificar variables para tu consulta. Por ejemplo, puedes definir las siguientes variables en este panel:

    {
      "PROJECT_ID": 100,
      "START_TIME": "2019-01-01T08:00:00.000Z"
    }
    

    A continuación, en el panel Consulta, haga referencia a las variables declaradas:

    query ($PROJECT_ID: Int!, $START_TIME: Date!) {
      project(projectId: $PROJECT_ID) {
        projectData(
          start: $START_TIME,
          interval: AUTO,
          sdkType: [JS, IOS, ANDROID],
          groupBy: [SDK_TYPE]
        ) {
          resources {
            sdkType
            intervalStart
            intervalEnd
            usage {
              streamedPublishedMinutes
              streamedSubscribedMinutes
            }
          }
        }
      }
    }
    
  • A la derecha del panel «Consulta» se encuentra el panel «Respuesta». Al hacer clic en el botón «Ejecutar» de la herramienta, se ejecutará la consulta del panel «Consulta» y el panel «Respuesta» mostrará los resultados. Se trata de la misma respuesta que se obtendría si se realizara la consulta mediante programación.

  • Por último, haz clic en el Historia botón situado encima del panel de consultas para ver el historial de tus consultas recientes. Al hacer clic en uno de los elementos que se muestran, el panel de consultas y el panel de variables de consulta se rellenan con esos datos.

Nota: Para obtener los resultados deseados, asegúrate de incluir groupBy en tu consulta.

Obtención de datos del proyecto

Notas:

  • Haz clic en aquí para obtener información sobre la retención de datos y la latencia.
  • Actualmente, Insights no admite varias claves API en la misma consulta. Realiza una consulta de Insights por separado para cada proyecto si deseas obtener información sobre varios proyectos o claves API. Para obtener mediante programación las claves API y los secretos a nivel de proyecto de una Account, consulta nuestra documentación sobre obtener información sobre proyectos. Con este método, los usuarios con un clave y secreto de la API a nivel de Account puede obtener el objeto de detalles del proyecto para un único proyecto o para todos los proyectos de la Account.

El projectData El campo del objeto del proyecto devuelve el ProjectData objeto, que proporciona datos de informes agregados a nivel de proyecto.

Debe incluir un start fecha de la consulta. Este valor puede ser una cadena en formato ISO-8601 (como, por ejemplo, "2019-10-15T23:43:34.023Z") o un valor de tipo Int que represente una marca de tiempo de la época. Los números enteros de 10 dígitos o menos representan los segundos de la época. Los números enteros de más de 10 dígitos representan los milisegundos de la época.

El ProjectData El objeto incluye un resources propiedad, que es una matriz de Metric objetos. Tienes la opción de filtrar y agrupar los datos por tipo de SDK, versión de SDK, país, región, navegador o versión del navegador. Además, tienes la opción de cambiar el Interval en la que quieras segmentar los datos (ya sea DAILY, WEEKLY, o MONTHLY). Ten en cuenta que si configuras el Interval, solo verás los intervalos de tiempo para los que hay datos. Actualmente, todos los datos de este objeto se actualizan cada noche, por lo que no verás cambios en tiempo real en los datos.

Nota: El filtrado por región, SDK y navegador no está disponible para los minutos de participante y archivo.

El Metric El objeto incluye información sobre el país, la región (estado de EE. UU., si procede), el tipo y la versión del SDK de OpenTok, así como el navegador y la versión del navegador (si procede) para los resultados. El Metric El objeto también incluye las siguientes propiedades:

  • usage — Información sobre las actas publicadas en streaming, las actas suscritas en streaming, el uso del archivo, el uso de la retransmisión, el uso de SIP, y el uso desglosado por niveles de editor

  • quality - Información sobre la calidad del vídeo

  • errors — Las tasas de error en la conexión a sesiones, la publicación y la suscripción

La siguiente consulta solicita resultados de ProjectData que incluyan las actas publicadas en streaming y las actas suscritas en streaming para los clientes que utilizan los SDK de OpenTok para JavaScript, Android e iOS:

{
  project(projectId: 12345678) {
    projectData(
      start: "2019-05-01T07:00:00.000Z",
      interval: MONTHLY,
      sdkType: [JS, ANDROID, IOS],
      groupBy: SDK_TYPE
    ) {
      resources {
        intervalStart,
        intervalEnd,
        usage {
          streamedPublishedMinutes,
          streamedSubscribedMinutes
        }
      }
    }
  }
}

Ten en cuenta que al configurar el start Si estableces el parámetro en 0, se realizarán consultas para obtener los resultados a partir de los primeros registros disponibles.

Importante - problema conocido: Los datos relativos al nombre y la versión del navegador son nulos o están vacíos en algunos resultados diarios anteriores al 14 de septiembre de 2023. Se incluyen valores a partir del 14 de septiembre de 2023.

Obtención de datos de sesión (Advanced Insights)

Nota: Haz clic aquí aquí para obtener información sobre la retención de datos y la latencia.

Importante: Las consultas de datos de sesión están disponibles para Clientes de Advanced Insights sólo.

El sessionData campo de la project devuelve el objeto SessionData objeto. Este objeto incluye dos campos: sessions y sessionSummaries.

Información detallada de la sesión

El sessions El campo devuelve un Sessions objeto. Pasa los ID de sesión como el sessionIds (una matriz de cadenas coincidentes). La dirección Sessions objeto incluye un resources propiedad, que es una matriz de Session objetos. El Session tiene las siguientes propiedades:

  • mediaMode — El modo multimedia de la sesión. Se trata de "routed" para las sesiones que se canalizan a través del OpenTok Media Router o "relayed" para la transmisión directa entre pares.

  • publisherMinutes — El número total de minutos retransmitidos por todos los editores durante la sesión. Ten en cuenta que incluir este campo ralentizará los resultados de la consulta.

  • subscriberMinutes — El número total de minutos transmitidos para todos los suscriptores durante la sesión. Ten en cuenta que incluir este campo ralentizará los resultados de la consulta.

  • participantMinutes — El número total de minutos, desglosado por niveles de editor, en todas las reuniones de la sesión.

  • meetings - Una matriz de Meeting objetos. Una sesión de OpenTok puede tener varias reuniones. Cuando el primer cliente se conecta a la sesión, comienza la primera reunión. La reunión finaliza cuando no hay ninguna conexión en la sesión durante al menos 10 minutos. Cuando un cliente se conecta de nuevo, comienza una nueva reunión. Cada objeto «Meeting» incluye las siguientes propiedades:

    • subscriberMinutes — El número total de minutos de los suscriptores en la reunión.

    • publisherMinutes — El número total de minutos de intervención de los editores en la reunión.

    • participantMinutes — El número total de minutos desglosados por niveles de editor en la reunión.

    • connections — Una matriz de objetos «Connection» que definen cada cliente conectado a la sesión (durante la reunión). Las propiedades del objeto «Connection» incluyen información sobre el Client SDK de OpenTok utilizado, el navegador utilizado (para clientes web), información sobre emisores y suscriptores, y mucho más.

    • publishers — Una matriz de objetos Publisher. Las propiedades del objeto Publisher incluyen información sobre el flujo del editor, los suscriptores del flujo, las estadísticas del flujo y mucho más. (Las estadísticas del flujo se incluyen en el complemento Advanced Insights. Véase Obtener estadísticas de flujos.)

    • subscribers — Matriz de objetos «Subscriber», que proporciona detalles sobre cada suscriptor. Las propiedades del objeto «Subscriber» incluyen información sobre el flujo de los suscriptores, las estadísticas del flujo y mucho más. (Las estadísticas del flujo se incluyen en el complemento «Advanced Insights». Véase Obtener estadísticas de flujos.)

    • createdAt y destroyedAt — Las marcas de tiempo correspondientes al inicio y al final de la reunión.

    Nota: Si todos los usuarios se desconectan de una reunión y se realiza una nueva conexión a la sesión en los 10 minutos siguientes, se creará una nueva reunión con el mismo ID de reunión que la primera. Sin embargo, si la nueva conexión se realiza después de 10 minutos, la nueva reunión obtendrá un ID de reunión único.

Ejemplo de consulta detallada de sesión

La siguiente consulta solicita algunos datos del editor sobre dos sesiones de OpenTok:

{
	project(projectId: 12345678) {
	  sessionData {
			sessions(sessionIds: [
				"1_MX4xMDB-fjE1Mzg4NzA0MjExNDd-VjRuSWhpn4",
				"2_MX4xMDB-fjE1Mzg4NzA0OTQzOTN-RFFxeXfcn4"
			]) {
				resources {
					sessionId
					meetings {
						totalCount
						resources {
							createdAt
							publisherMinutes
							destroyedAt
							publishers {
								resources {
									createdAt
									destroyedAt
									connectionId
									stream {
									  streamId
									}
								}
							}
						}
					}
				}
			}
		}
	}	
}

Obtener estadísticas de flujos

Nota: Las estadísticas de la transmisión están disponibles para Clientes de Advanced Insights sólo.

El resources La propiedad del objeto MeetingPublishers es una matriz de objetos Publisher. Y el objeto Publisher incluye el objeto PublisherStreamStatsCollection. Este objeto es una colección de recursos, y su resources La propiedad es una matriz de objetos PublisherStats. Cada objeto PublisherStats incluye estadísticas de la transmisión del emisor, recopiladas periódicamente (cada 30 segundos) durante el transcurso de la transmisión del emisor. Estas estadísticas incluyen datos sobre la latencia de audio y vídeo, la tasa de bits de audio y vídeo, la tasa de pérdida de paquetes de audio y vídeo, la resolución de vídeo, los códecs de audio y vídeo, y si la transmisión incluía audio y vídeo en el momento en que se tomó la instantánea de las estadísticas de la transmisión.

La siguiente consulta solicita las estadísticas periódicas sobre la velocidad de transmisión de audio y vídeo de los emisores en una sesión de OpenTok:

{
  project(projectId: 12345678) {
    sessionData {
      sessions(sessionIds: [
        "1_MX4xMDB-fjE1Mzg4NzA0MjExNDd-VjRuSWhpn4",
      ]) {
        resources {
          sessionId
          meetings {
            resources {
              createdAt
              publishers {
                resources {
                  createdAt
                  connectionId
                  stream {
                    streamId
                  }
                  streamStatsCollection {
                    resources {
                      createdAt
                      audioBitrateKbps
                      videoBitrateKbps
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Del mismo modo, el resources La propiedad del objeto `MeetingSubscribers` es una matriz de objetos `Subscriber`, y cada uno de ellos incluye una colección de recursos denominada `SubscriberStreamStatsCollection`, que contiene estadísticas de transmisión similares para un suscriptor.

Información resumida de la sesión

Nota: El resumen de la sesión está disponible para Clientes de Advanced Insights sólo.

El sessionSummaries «field» es una matriz de SessionSummary objetos (uno por cada sesión que coincida con la consulta). El objeto SessionSummary incluye un resources propiedad, que es una matriz de MeetingSummary objetos (uno por cada reunión de la sesión). El MeetingSummary El objeto incluye información sobre el número total y simultáneo de transmisiones, conexiones y participantes en la reunión.

Tanto el SessionSummary y MeetingSummary los objetos incluyen publisherMinutes, subscriberMinutesy participantMinutes propiedades. Estas indican el número total de minutos transmitidos para todos los emisores y suscriptores de la sesión o reunión. Incluyen participantMinutes muestra las actas clasificadas por niveles de editor en la sesión o reunión. Ten en cuenta que al incluir publisherMinutes, subscriberMinutes, o participantMinutes en una consulta ralentizará los resultados.

La siguiente consulta solicita datos parciales SessionSummary resultados:

{
    project(projectId: 12345678) {
   	 sessionData {
   		 sessionSummaries (
   			 start: "2019-05-01T07:00:00.000Z",
   		 ) {
   			 resources {
   				 sessionId
   				 meetings {
   					 resources {
   						 maxConcurrentStreams
   						 maxConcurrentStreams
   						 maxConcurrentSubscribers
   						 totalStreams
   						 totalConnections
   					 }
   				}
   			}
   		}
   	}
   }
}

Métricas de calidad SIP

La siguiente consulta solo proporciona las estadísticas mínimas de calidad SIP:

project(projectId: 12345678) {
    sessionData {
      sessions(sessionIds: [
        "1_MX4xMDB-fjE1Mzg4NzA0MjExNDd-VjRuSWhpn4"
       ]) {
        resources {
          meetings {
            resources {
              connections {
                resources {
                  sipCalls(first: 1) {
                    resources {
                      sipCallStatsCollection {
                        totalCount
                        resources {
                          audioCodec
                          audioLatencyMs
                          videoCodec
                          videoLatencyMs
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

Esta consulta proporciona información básica sobre SIP sin estadísticas:

project(projectId: 12345678) {
    sessionData {
      sessions(sessionIds: [
        "1_MX4xMDB-fjE1Mzg4NzA0MjExNDd-VjRuSWhpn4"
       ]) {
        resources {
          meetings {
            resources {
              connections {
                resources {
                  sipCalls(first: 10) {
                    resources {
                      sipCallId
                      connectionId
                      conferenceId
                      createdAt
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

Para recuperar las estadísticas completas de Calidad SIP, utilice la siguiente consulta:

 {
 project(projectId: 12345678) {
     sessionData {
       sessions(sessionIds: [
        "1_MX4xMDB-fjE1Mzg4NzA0MjExNDd-VjRuSWhpn4"
       ]) {
         resources {
           meetings {
             resources {
               connections {
                 resources {
                   sipCalls(first: 1) {
                     resources {
                       sipCallId
                       connectionId
                       conferenceId
                       createdAt
                       sipCallStatsCollection {
                         totalCount
                         resources {
                           audioCodec
                           audioLatencyMs
                           audioSentBitrateKbps
                           audioSentPacketLoss
                           videoCodec
                           videoLatencyMs
                           videoSentBitrateKbps
                           videoSentPacketLoss
                         }
                       }
                     }
                   }
                 }
               }
             }
           }
         }
       }
     }
   }

Objetos de respuesta

Los objetos de respuesta se ajustan al esquema de GraphQL y están en formato JSON, pero solo incluyen los campos que especifiques en tus solicitudes. El curl El ejemplo anterior dará como resultado un objeto de respuesta similar al siguiente:

{  
  "data":{  
    "project":{  
      "projectData":{  
        "resources":[  
          {  
            "usage":{  
              "streamedSubscribedMinutes":3189
            }
          }
        ]
      }
    }
  }
}

La forma más sencilla de obtener una vista previa de lo que puedes esperar es añadiendo diferentes filtros, grupos y campos a la Análisis de GraphiQL Explorer, y observar la respuesta.

Paginación en las consultas

Tanto el projectData() y sessionData() Las API admiten opciones de paginación para todos los métodos que devuelven listas (matrices). Todos estos métodos implementan un ResourceCollection interfaz que contiene las siguientes propiedades opcionales:

  • first (opcional) — El número de entradas que se mostrarán por página. El límite es de 10 para las reuniones y de 1 000 para el resto de colecciones de recursos. El número predeterminado de entradas que se muestran es de 10 para las reuniones y de 50 para el resto de colecciones de recursos.

  • endCursor (opcional) — El cursor de cadena que se utiliza para especificar la página actual (desplazamiento). Obtén el valor de este cursor a partir de la pageInfo propiedad para cada lista devuelta. Si no se especifica un endCursor valor, una consulta devolverá la primera página de resultados que coincida (el inicio de la lista).

El pageInfo El objeto (que se devuelve para cada lista) incluye las siguientes propiedades:

  • hasNextPage — Propiedad booleana que indica si hay más páginas disponibles.

  • endCursor — La cadena que hay que pasar para obtener la página siguiente.

Por ejemplo, la siguiente consulta devuelve información de paginación junto con los primeros 10 resultados coincidentes ProjectData recursos:

{
  project(projectId: 12345678) {
    projectData(
      start: "2024-05-01T07:00:00.000Z",
      first: 10,
      interval: MONTHLY,
      
    ) {
      pageInfo {
        hasNextPage
        endCursor
      }
      resources {
        usage {
          streamedPublishedMinutes
        }
      }
    }
  }
}

La respuesta incluye información sobre la paginación:

{
  "data": {
    "project": {
      "projectData": {
        "pageInfo": {
          "hasNextPage": true,
          "endCursor": "aW5zaWdodHMtcmVzb3VyY2U6MTA=="
        },
        "resources": [
          {
            "usage": {
              "streamedPublishedMinutes": 56554.83333333332
            }
          },
					...

Utiliza el endCursor valor de esta respuesta ("aW5zaWdodHMtcmVzb3VyY2U6MTA==") como el endCursor datos introducidos en la consulta para obtener la siguiente página de registros coincidentes:

{
  project(projectId: 12345678) {
    projectData(
      start: 0,
      first: 10,
      interval: MONTHLY,
      endCursor: "aW5zaWdodHMtcmVzb3VyY2U6MTA=="
      
    ) {
      pageInfo {
        hasNextPage
        endCursor
      }
      resources {
        usage {
          streamedPublishedMinutes,
          streamedSubscribedMinutes
        }
      }
    }
  }
}

Retención de datos y latencia

Análisis / Panel de análisis

Conservación de datos:

  • Agregación diaria: 90 días

  • Agregación mensual: 12 meses

Notas:

  • Los datos agregados diarios se calculan sobre la base de 00:00 - 23:59 PST/PDT.
  • El periodo de retención de agregación diaria para Insights API e Insights Dashboard se actualizó a 90 días (de 60 días) a partir del 12 de agosto de 2021. Los datos diarios agregados de las sesiones de vídeo posteriores a esta fecha estarán disponibles durante 90 días.

Latencia prevista: 36 - 48 horas

Advanced Insights retention period

Información avanzada

Conservación de datos: 21 días

Nota: El plazo de conservación se basa en la fecha y hora de creación de una reunión dentro de la sesión.

Latencia prevista: 5 minutos

Advanced Insights retention period

Nota: Una misma sesión puede incluir varias reuniones. Se crea una nueva reunión cuando la sesión lleva 10 minutos inactiva. Consulte nuestra documentación sobre Sesiones vs. Reuniones para más información.

Códigos de error

Los errores se incluyen en la respuesta, en un formato errors matriz, como la siguiente:

"errors": [
  {
    "message": "You must provide a valid project ID.",
    "locations": [
      {
        "line": 2,
        "column": 3
      }
    ],
    "path": [
      "project"
    ],
    "errorCode": 1008
  }
]

En la siguiente tabla se enumeran los códigos de error y sus descripciones. Consulte el message del error para más detalles.

Código de error Descripción del error
1000 Se ha introducido una clave de API no válida.
1001 No se ha proporcionado una autenticación válida.
1002 Intervalo de fechas no válido.
1003 Parámetro no válido. Sólo se permite un intervalo de fechas.
1004 Parámetros no válidos.
1005 Parámetro no válido.
1006 Parámetro no válido. El valor debe ser un número entero.
1007 Parámetro no válido para especificar el número de versión del SDK de OpenTok. El formato requerido es 0.0.0.
1008 Debes introducir un ID de proyecto válido.
1009 Parámetro no válido.
1010 Parámetro no válido introducido. El parámetro sólo acepta un valor.
1011 Token no válido.
1012 Error interno del servidor.
1013 Falta un parámetro obligatorio.
1014 La consulta indicada requiere el Información avanzada complemento.
1015 No se ha encontrado el ID de proyecto indicado.
1016 La sesión ha expirado.
1017 No se ha encontrado la sesión especificada.
1018 Debe proporcionar al menos un ID de sesión en la matriz de entrada.
1019 El token no coincide con la clave de la API.
1020 No se ha podido validar el token.
1021 No tienes autorización para consultar los datos de este proyecto.
1022 Error de tipo. Consulta los detalles en el message cadena.

Realización de solicitudes POST a la API GraphQL de OpenTok

Todas las solicitudes GraphQL de OpenTok se envían a https://insights.opentok.com/graphql.

Fije el content-type a application/json.

Todas las solicitudes requieren autenticación mediante un X-OPENTOK-AUTH encabezado. Establece este encabezado con un token JWT que contenga project como el ist y el ID del proyecto de OpenTok como el iss. Firma el token con el secreto del proyecto OpenTok. Ver Autenticación.

El cuerpo de la solicitud POST contendrá un objeto JSON que incluirá una clave y un valor. La clave será query, y el valor será la cadena GraphQL con formato similar a JSON (como esta) que crees utilizando la herramienta GraphiQL).

Lo siguiente curl El comando realiza una consulta GraphQL para obtener los minutos de la suscripción en streaming: minutos:

YOUR_OT_PROJECT_API_KEY=12345678 # Enter your project API key YOUR_OT_JWT=ValidJwtToken # Enter a valid JWT token corresponding # to your project API key OT_START_DATE=$(($(date +%s)-864000)) # generates epoch time from 10 days ago # GraphQL query to obtain streamed subscribed minutes from the start date GRAPHQL_QUERY='{project (projectId:'${YOUR_OT_PROJECT_API_KEY}') { projectData( start:\"'$OT_START_DATE'\" ) { resources { usage { streamedSubscribedMinutes } } } } }' curl -X POST \ -H "Content-Type: application/json" \ -H "X-OPENTOK-AUTH:$YOUR_OT_JWT" \ -d '{"query":"$GRAPHQL_QUERY"}' \ 'https://insights.opentok.com/graphql'

Sustituye los valores de la YOUR_OT_JWT y YOUR_OT_PROJECT_API_KEY variables. Para obtenerlas, consulta el Autenticación de la API REST documentación e inicia sesión en tu Cuenta API de Video de Vonage.

El ejemplo anterior dará como resultado un objeto de respuesta similar al siguiente:

{  
  "data":{  
    "project":{  
      "projectData":{  
        "resources":[  
          {  
            "usage":{  
              "streamedSubscribedMinutes":3189
            }
          }
        ]
      }
    }
  }
}

Cálculo de los minutos de los participantes

¿Cuál es el método más preciso para calcular las horas de los participantes correspondientes a un periodo concreto a la hora de elaborar la facturación?

Para conocer el número exacto de minutos generados en un intervalo de tiempo, utiliza «Datos del proyecto». Cuando se utilizan resúmenes de sesiones para especificar un intervalo de tiempo en la consulta, los resultados incluyen todas las sesiones creadas dentro de ese intervalo de tiempo. Si se reutiliza una sesión, los resultados incluyen todas las sesiones que contengan al menos una reunión creada dentro del intervalo de tiempo especificado, mostrando el número total de minutos de toda la sesión y no solo de este intervalo.

Es decir, al utilizar una consulta de resumen de sesión, en caso de que se reutilice una sesión durante el intervalo indicado, los minutos no corresponden únicamente a ese periodo concreto, sino a toda la sesión, lo que puede incluir resultados que se encuentren fuera del intervalo de tiempo.

Al utilizar la consulta de datos del proyecto, los resultados incluyen datos diarios desde las 00:00 PST hasta las 00:00 PST del día siguiente. Es posible que debas tener en cuenta que la consulta debe comenzar a las 00:00 PST; de lo contrario, siempre devolverá un día más de datos de lo esperado.

Por ejemplo, fíjate en estas dos consultas de datos de proyectos:

projectData(
  start: "2023-12-30T08:00:00.00Z",
  end: "2023-12-31T08:00.00.00Z"
  interval: AUTO
)
projectData(
  start: "2023-12-30T08:00:00.00Z",
  end: "2023-12-31T03:00.00.00Z"
  interval: AUTO
)

En el caso de esas dos solicitudes, los resultados incluyen Datos de solo un día en los resultados.

En este caso, el ajuste de la zona horaria desplaza efectivamente «2023-12-30T08:00:00.00Z» al inicio del 30 de diciembre en hora del Pacífico (medianoche, hora del Pacífico). Dado que la hora de finalización en PST es la medianoche del día 31, los resultados solo incluyen un día.

Pero fíjate en esta consulta de datos del proyecto:

projectData(
  start: "2023-30-30T07:00:00.00Z",
  end: "2023-01-31T08:00.00.00Z"
  interval: AUTO
)

La consulta devolverá datos correspondientes al 30 y al 31 de diciembre de 2023.

La marca de tiempo «2023-12-30T07:00:00.00Z» está en (UTC); en PST, esto nos dará «2023-12-29T11:00:00.00PST», que corresponde al 29 de diciembre. Debido a la diferencia horaria con el PST, cuando la solicitud incluye datos de «2023-12-30T07:00:00.00Z» (UTC), en la práctica abarca el periodo comprendido entre el 30 y el 31 de diciembre, por lo que incluye ambos días en el resultado.

Por lo tanto, los resultados incluirán datos correspondientes a los días 30 y 31 de diciembre de 2023.

{
  project(projectId: XXXX) {
    projectData(
      start: "2022-11-28T15:57:07.529Z"
      interval: AUTO
    ) {
      resources {
        intervalStart
        intervalEnd
        sdkType
        usage {
          participantMinutes {
            from1To2Publishers
            from3To6Publishers
            from7To8Publishers
            from1To4Publishers
            from5To8Publishers
            from1To8Publishers
            from1To10Publishers
            from9To10Publishers
            from11To35Publishers
            from11To20Publishers
            from11To35Publishers
            from36PlusPublishers
            from21To35Publishers
            from36To40Publishers
            from41PlusPublishers
            from1To25Publishers
            from3To25Publishers
            from26To35Publishers
          }
          streamedPublishedMinutes
        }
      }
    }
  }
}

Por estas razones, es mejor utilizar el nivel de reunión para obtener un resultado más preciso:

{
  project(projectId: 47521921) {
    sessionData {
      sessionSummaries(start: "2019-05-01T07:00:00.000Z") {
        resources {
          sessionId
          meetings {
            resources {
              maxConcurrentStreams
              maxConcurrentStreams
              maxConcurrentSubscribers
              totalStreams
              totalConnections
              participantMinutes {
                from1To2Publishers
                from3To6Publishers
                from7To8Publishers
                from1To4Publishers
                from5To8Publishers
                from1To8Publishers
                from1To10Publishers
                from9To10Publishers
                from11To35Publishers
                from11To20Publishers
                from11To35Publishers
                from36PlusPublishers
                from21To35Publishers
                from36To40Publishers
                from41PlusPublishers
                from1To25Publishers
                from3To25Publishers
                from26To35Publishers
              }
            }
          }
        }
      }
    }
  }
}

Preguntas adicionales

Puedes buscar un ID de sesión sin incluir un ID de proyecto en la consulta:

{
  project(sessionIds: "2_MX4xMDB-fjE3MTMyMTMwNDQ1NDV-Z29CLzhyejNha1N2M2RaV255Sno1RTZNfn5-") {
    sessionData {
      sessions {
        resources {
          mediaMode
          sessionId
          meetings {
            totalCount
            pageInfo {
              hasNextPage
              endCursor
            }
            resources {
              meetingId
              createdAt
              destroyedAt
            }
          }
        }
      }
    }
  }
}

Puedes utilizar el not operador para projectData:

{
  project(projectId: 12345678) {
    projectData(
      start: "2024-04-10T11:37:06.147Z"
      interval: AUTO
      not: {
        sdkType:ANDROID
      }
    ) {
      resources {
        intervalStart
        intervalEnd
        sdkType
        sdkVersion
        browser
        usage {
          streamedPublishedMinutes
          streamedSubscribedMinutes
        }
      }
    }
  }
}

Puedes filtrar las conexiones por ubicación y navegador:

{
  project(sessionIds: "2_MX4xMDB-fjE3MTMyMTMwNDQ1NDV-Z29CLzhyejNha1N2M2RaV255Sno1RTZNfn5-") {
    sessionData {
      sessions {
        resources {
          meetings {
            resources {
              connections(country: "US") {
                totalCount
              }
            }
          }
        }
      } 
    }
  }
}

Puede establecer un audioCodec filtro (para PCMU, VP8, OPUS, TELEPHONE, o OTHER), o establecer un videoCodec filtro (para VP8, H264, VP9, RTX, o OTHER):

{
  project(sessionIds: "2_MX4xMDB-fjE3MTMyMTMwNDQ1NDV-Z29CLzhyejNha1N2M2RaV255Sno1RTZNfn5-") {
    sessionData {
      sessions {
        resources {
          sessionId
          meetings {
            resources {
              meetingId
              createdAt
              publishers {
                resources {
                  createdAt
                  connectionId
                  stream {
                    streamId
                  }
                  streamStatsCollection(filters: { videoCodec: VP8} ) {
                    resources {
                      createdAt
                      audioBitrateKbps
                      videoBitrateKbps
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Puedes configurar un mediaMode filtrar por ROUTED o RELAYED:

{
  project(sessionIds: "2_MX4xMDB-fjE3MTMyMTMwNDQ1NDV-Z29CLzhyejNha1N2M2RaV255Sno1RTZNfn5-") {
    sessionData {
      sessionSummaries (
        start: "2024-02-25T20:02:32.345Z"
        filters: { mediaMode: ROUTED } ) {
        resources {
          sessionId
          mediaMode
          meetings  {
            totalCount
            pageInfo {
              hasNextPage
              endCursor
            }
            resources {
              meetingId
              createdAt
              destroyedAt
            }
          }
        }
      }
    }
  }
}

Aplicación de ejemplo y más consultas de ejemplo

El ejemplo-de-cuadro-de-mando-de-análisis El proyecto de GitHub es una aplicación de Node que utiliza la API de OpenTok Insights para mostrar gráficamente información sobre los proyectos de OpenTok. También incluye varias consultas de ejemplo en GraphQL.