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:
Copia{ "PROJECT_ID": 100, "START_TIME": "2019-01-01T08:00:00.000Z" }A continuación, en el panel Consulta, haga referencia a las variables declaradas:
Copiaquery ($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 deMeetingobjetos. 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.) -
createdAtydestroyedAt— 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 lapageInfopropiedad para cada lista devuelta. Si no se especifica unendCursorvalor, 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
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
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:
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.