Tableau de bord « Insights » et API
L'API OpenTok Insights est une API GraphQL. Vous pouvez utiliser l'API Insights et le tableau de bord Insights pour obtenir des informations sur vos projets et sessions OpenTok.
Le tableau de bord « Insights »
Remarque : Veuillez cliquer sur ici pour obtenir des informations sur la conservation des données et la latence.
Le widget « Tableau de bord Insights » fournit des données au niveau du projet. Vous pouvez y accéder en vous connectant à votre Compte Video API de Vonage et en sélectionnant un projet OpenTok. Il comporte trois onglets : « Utilisation », « Qualité » et « Erreurs », ainsi que des filtres par plage de dates, lieu et points de terminaison.
L'onglet « Utilisation » présente les différents types de comptes rendus générés par le projet. Vous pouvez consulter une carte indiquant les lieux où ces comptes rendus ont été générés et appliquer plusieurs filtres à votre guise.
L'onglet « Qualité » affiche un histogramme représentant le débit binaire vidéo et la latence des flux du projet.
L'onglet « Erreurs » indique le taux d'erreur des connexions, des éditeurs et des abonnés.
Les données de chaque onglet sont filtrées en fonction des sélections effectuées en haut de la page.
API Insights, URL de base et authentification
L'API Insights est une API GraphQL qui vous permet d'explorer les métadonnées de vos sessions au niveau du projet et de la session. GraphQL est une alternative à l'approche REST classique pour accéder aux données via HTTP. Il a été développé par Facebook en 2012 et mis en open source en 2015. Découvrez Guide de démarrage de GraphQL pour en savoir plus.
L'URL de base de l'API est la suivante :
https://insights.opentok.com/graphql
Toutes les requêtes sont effectuées via des requêtes HTTP POST et authentifiées à l'aide de X-OPENTOK-AUTH.
Explorer le schéma de l'API avec GraphiQL
Naviguer vers https://insights.opentok.com/ En utilisant votre navigateur, vous accédez à l'instance Insights de GraphiQL, un outil qui vous permet d'explorer le schéma de l'API GraphQL. Cet outil pouvant effectuer des requêtes API, vous devez être connecté pour l'utiliser.
Cet outil comporte cinq fenêtres :
-
Dans le coin supérieur droit de l'outil, vous verrez apparaître une icône Docs bouton. En cliquant dessus, vous ouvrez un volet contenant la documentation du schéma. Chaque champ et chaque type d'objet de la documentation est accompagné d'une description. Parcourez-la pour explorer le schéma.
-
Sur le côté gauche de la page se trouve le volet « Requête ». Dans ce volet, vous pouvez créer des requêtes à exécuter via l'API. En basculant entre le volet « Documentation » et le volet « Requête », vous pouvez formuler la requête précise dont vous avez besoin pour obtenir uniquement les informations qui vous intéressent. Comme vous êtes connecté, l'authentification nécessaire à l'exécution des requêtes est gérée automatiquement.
-
Sous le volet « Requête » se trouve le volet « Variables de requête ». Bien que cela ne soit pas obligatoire, vous pouvez l'utiliser pour définir des variables pour votre requête. Par exemple, vous pouvez définir les variables suivantes dans ce volet :
Copie{ "PROJECT_ID": 100, "START_TIME": "2019-01-01T08:00:00.000Z" }Ensuite, dans le volet Requête, faites référence à toutes les variables déclarées :
Copiequery ($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 } } } } } -
À droite du volet « Requête » se trouve le volet « Réponse ». En cliquant sur le bouton « Exécuter » de l'outil, vous lancerez la requête figurant dans le volet « Requête », et le volet « Réponse » affichera les résultats. Il s'agit de la même réponse que celle que vous obtiendriez si vous aviez effectué la requête par programmation.
-
Enfin, cliquez sur le bouton L'histoire bouton situé au-dessus du volet de requête pour afficher l'historique de vos requêtes récentes. Lorsque vous cliquez sur l'un des éléments affichés, le volet de requête et le volet des variables de requête s'affichent avec ces données.
Remarque : Pour obtenir les résultats souhaités, veillez à inclure groupBy dans votre requête.
Obtention des données du projet
Notes :
- Veuillez cliquer sur ici pour obtenir des informations sur la conservation des données et la latence.
- À l'heure actuelle, Insights ne prend pas en charge l'utilisation de plusieurs clés API dans une même requête. Veuillez effectuer une requête Insights distincte pour chaque projet afin d'obtenir des informations concernant plusieurs projets ou clés API. Pour récupérer par programmation les clés API et les secrets au niveau des projets pour un Account, veuillez consulter notre documentation sur obtenir des informations sur les projets. Grâce à cette méthode, les utilisateurs disposant d'un clé API et secret au niveau de l'Account peut obtenir le objet « Détails du projet » pour un seul projet ou pour l'ensemble des projets de l'Account.
Les projectData Le champ de l'objet projet renvoie la ProjectData objet,
qui fournit des données de rapport agrégées au niveau du projet.
Vous devez inclure un start date de la requête. Cette valeur peut être une chaîne au format ISO-8601
(par exemple "2019-10-15T23:43:34.023Z") ou une valeur de type Int
représentant un horodatage de l'époque. Les nombres entiers de 10 chiffres ou moins représentent
les secondes de l'époque. Les nombres entiers de plus de 10 chiffres représentent les millisecondes de l'époque.
Les ProjectData comprend un objet resources propriété, qui est un
tableau de Metric objets. Vous avez la possibilité de filtrer et de regrouper les données
par type de SDK, version du SDK, pays, région, navigateur ou version du navigateur.
De plus, vous avez la possibilité de modifier le Interval dans lequel vous souhaitez
segmenter les données (soit DAILY, WEEKLYou MONTHLY). Notez que
si vous définissez le Interval, vous ne verrez que les intervalles de temps pour lesquels des données sont disponibles.
Actuellement, toutes les données associées à cet objet sont mises à jour chaque nuit ; vous ne verrez donc pas
les modifications en temps réel.
Remarque : Le filtrage par région, SDK et navigateur n'est pas disponible pour les procès-verbaux des participants et des archives.
Les Metric Cet objet contient des informations sur le pays, la région (État américain, le cas
échéant), le type et la version du SDK OpenTok, ainsi que le navigateur et sa version
(le cas échéant) pour les résultats. Le Metric Cet objet comprend également les
propriétés suivantes :
-
usage— Informations sur les minutes diffusées en streaming, les minutes souscrites en streaming, l'utilisation des archives, l'utilisation des diffusions, l'utilisation du protocole SIP, ainsi que l'utilisation ventilée par niveau d'éditeur -
quality- Informations sur la qualité vidéo -
errors— Les taux d'échec liés à la connexion aux sessions, à la publication et à l'abonnement
La requête suivante permet d'obtenir des résultats ProjectData comprenant les minutes diffusées en streaming et les minutes souscrites en streaming pour les clients utilisant les SDK OpenTok pour JavaScript, Android et 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
}
}
}
}
}
Il convient de noter qu'en définissant le start Si vous définissez ce paramètre sur 0, vous obtiendrez
les résultats en commençant par les enregistrements les plus anciens disponibles.
Important - problème connu : Les données relatives au nom et à la version du navigateur sont nulles ou vides dans certains résultats quotidiens antérieurs au 14 septembre 2023. Les valeurs sont incluses à partir du 14 septembre 2023.
Obtention des données de session (Advanced Insights)
Remarque : Veuillez cliquer sur ici pour obtenir des informations sur la conservation des données et la latence.
Important : Les requêtes de données de session sont disponibles pour Clients d'Advanced Insights seulement.
Les sessionData du champ project renvoie l'objet SessionData objet.
Cet objet comporte deux champs : sessions et sessionSummaries.
Informations détaillées sur la session
Les sessions renvoie un champ Sessions objet. Transmettez les identifiants de session sous la forme
de sessionIds (un tableau de chaînes de caractères correspondantes). L'argument Sessions objet
comprend un resources qui est un tableau de Session objets.
Le Session possède les propriétés suivantes :
-
mediaMode- Le mode média de la session. Il s'agit de"routed"pour les sessions acheminées via le routeur multimédia OpenTok ou"relayed"pour la diffusion en continu directe de pair à pair. -
publisherMinutes— Nombre total de minutes diffusées en streaming pour l'ensemble des éditeurs au cours de la session. Notez que l'inclusion de ce champ ralentira l'affichage des résultats de la requête. -
subscriberMinutes— Nombre total de minutes diffusées en streaming pour l'ensemble des abonnés au cours de la session. Notez que l'inclusion de ce champ ralentira l'affichage des résultats de la requête. -
participantMinutes— Le nombre total de minutes, ventilé par catégorie d'éditeur, pour l'ensemble des réunions de la session. -
meetings- Un tableau deMeetingobjets. Une session OpenTok peut comporter plusieurs réunions. Lorsque le premier client se connecte à la session, la première réunion commence. La réunion prend fin lorsqu’il n’y a plus aucune connexion active dans la session depuis au moins 10 minutes. Lorsqu’un client se reconnecte, une nouvelle réunion commence. Chaque objet « Meeting » comprend les propriétés suivantes :-
subscriberMinutes— Le nombre total de minutes d'abonnés au cours de la réunion. -
publisherMinutes— Le nombre total de minutes des éditeurs au cours de la réunion. -
participantMinutes— Le nombre total de minutes, ventilé par catégorie d'éditeurs, au cours de la réunion. -
connections— Un tableau d'objets Connection définissant chaque client connecté à la session (pendant la réunion). Les propriétés de l'objet Connection comprennent des informations sur le Client SDK OpenTok utilisé, le navigateur utilisé (pour les clients Web), des informations sur les éditeurs et les abonnés, et bien plus encore. -
publishers— Un tableau d'objets Publisher. Les propriétés de l'objet Publisher contiennent des informations sur le flux de l'éditeur, les abonnés au flux, les statistiques du flux, etc. (Les statistiques du flux sont incluses dans le module complémentaire Advanced Insights. Voir Obtenir des statistiques sur les flux.) -
subscribers— Tableau d'objets « Subscriber » fournissant des détails sur chaque abonné. Les propriétés de l'objet « Subscriber » comprennent des informations sur le flux de l'abonné, les statistiques du flux, etc. (Les statistiques du flux sont incluses dans le module complémentaire « Advanced Insights ». Voir Obtenir des statistiques sur les flux.) -
createdAtetdestroyedAt— Les horodatages correspondant au début et à la fin de la réunion.
Remarque : Si tous les utilisateurs sont déconnectés d'une réunion et qu'une nouvelle connexion à la session est établie dans les 10 minutes, une nouvelle réunion sera créée avec le même identifiant que la première. Toutefois, si la nouvelle connexion est établie après 10 minutes, la nouvelle réunion recevra un numéro d'identification unique.
-
Exemple de requête détaillée de session
La requête suivante permet d'obtenir certaines informations relatives à l'éditeur concernant deux sessions 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
}
}
}
}
}
}
}
}
}
}
Obtenir des statistiques sur les flux
Remarque : Les statistiques sur les flux sont disponibles pour Clients d'Advanced Insights seulement.
Les resources La propriété de l'objet MeetingPublishers est un tableau d'objets Publisher.
Et l'objet Publisher contient un objet PublisherStreamStatsCollection.
Cet objet est une collection de ressources, et son resources La propriété est un tableau d’
objets PublisherStats. Chaque objet PublisherStats contient les statistiques de diffusion de l’
éditeur, relevées périodiquement (toutes les 30 secondes) pendant la durée de la
diffusion de l’éditeur. Ces statistiques comprennent des données sur la latence audio et vidéo, le débit binaire audio et vidéo,
le taux de perte de paquets audio et vidéo, la résolution vidéo, les codecs audio et vidéo,
ainsi que la présence ou non de flux audio et vidéo au moment de la capture des statistiques de diffusion.
La requête suivante permet d'obtenir les statistiques périodiques sur les débits audio et vidéo des éditeurs participant à une session 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
}
}
}
}
}
}
}
}
}
}
}
De même, le resources La propriété de l'objet `MeetingSubscribers` est un tableau
d'objets `Subscriber`, et chacun d'entre eux contient une collection de ressources `SubscriberStreamStatsCollection`,
qui regroupe des statistiques de flux similaires pour un abonné.
Résumé de la session
Remarque : Le résumé de la session est disponible pour Clients d'Advanced Insights seulement.
Les sessionSummaries est un tableau de SessionSummary objets (un pour
chaque session correspondant à la requête). L'objet SessionSummary comprend
un resources qui est un tableau de MeetingSummary objets
(un pour chaque réunion de la session). Le MeetingSummary Cet objet contient
des informations sur le nombre total et simultané de flux, de connexions
et d'abonnés participant à la réunion.
Les deux SessionSummary et MeetingSummary Les objets comprennent publisherMinutes,
subscriberMinuteset participantMinutes propriétés. Celles-ci indiquent le nombre total de minutes
diffusées pour l'ensemble des diffuseurs et des abonnés participant à la session ou à la réunion. Notamment participantMinutes
présente les comptes rendus classés par niveau d'éditeur au sein de la session ou de la réunion. Notez que l'inclusion de
publisherMinutes, subscriberMinutesou participantMinutes dans une requête ralentira les résultats.
La requête suivante demande des informations partielles SessionSummary les résultats :
{
project(projectId: 12345678) {
sessionData {
sessionSummaries (
start: "2019-05-01T07:00:00.000Z",
) {
resources {
sessionId
meetings {
resources {
maxConcurrentStreams
maxConcurrentStreams
maxConcurrentSubscribers
totalStreams
totalConnections
}
}
}
}
}
}
}
Mesures de la qualité SIP
La requête suivante ne fournit que les statistiques minimales de qualité 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
}
}
}
}
}
}
}
}
}
}
}
}
Cette requête fournit des informations de base sur le protocole SIP sans statistiques :
project(projectId: 12345678) {
sessionData {
sessions(sessionIds: [
"1_MX4xMDB-fjE1Mzg4NzA0MjExNDd-VjRuSWhpn4"
]) {
resources {
meetings {
resources {
connections {
resources {
sipCalls(first: 10) {
resources {
sipCallId
connectionId
conferenceId
createdAt
}
}
}
}
}
}
}
}
}
}
Pour récupérer les statistiques complètes sur la qualité SIP, utilisez la requête suivante :
{
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
}
}
}
}
}
}
}
}
}
}
}
}
Objets de réponse
Les objets de réponse respectent le schéma GraphQL et sont au format JSON, mais ils
ne contiennent que les champs que vous spécifiez dans vos requêtes. Le curl
L'exemple ci-dessus donnera lieu à un objet de réponse similaire à celui-ci :
{
"data":{
"project":{
"projectData":{
"resources":[
{
"usage":{
"streamedSubscribedMinutes":3189
}
}
]
}
}
}
}
Le moyen le plus simple d'avoir un aperçu du résultat est d'ajouter différents filtres, groupes et champs à la Insights GraphiQL Explorer, et en observant la réaction.
Utilisation de la pagination dans les requêtes
Les deux projectData() et sessionData() Les API prennent en charge les options de pagination
pour toutes les méthodes qui renvoient des listes (tableaux). Toutes ces méthodes implémentent
une ResourceCollection qui contiennent les propriétés optionnelles suivantes :
-
first(facultatif) — Nombre d'entrées à renvoyer par page. La limite est fixée à 10 pour les réunions et à 1 000 pour toutes les autres collections de ressources. Par défaut, le nombre d'entrées renvoyées est de 10 pour les réunions et de 50 pour toutes les autres collections de ressources. -
endCursor(facultatif) — Le curseur de chaîne utilisé pour spécifier la page (décalage) actuelle. Récupérez la valeur de ce curseur à partir dupageInfopropriété pour chaque liste renvoyée. Si vous ne spécifiez pas deendCursorvaleur, une requête renverra la première page de résultats correspondante (le début de la liste).
Les pageInfo (renvoyé pour chaque liste) comprend les propriétés suivantes :
-
hasNextPage- Propriété booléenne qui indique s'il y a plus de pages disponibles. -
endCursor- La chaîne à passer pour obtenir la page suivante.
Par exemple, la requête suivante renvoie les informations de pagination ainsi que les 10 premiers
résultats correspondants ProjectData ressources :
{
project(projectId: 12345678) {
projectData(
start: "2024-05-01T07:00:00.000Z",
first: 10,
interval: MONTHLY,
) {
pageInfo {
hasNextPage
endCursor
}
resources {
usage {
streamedPublishedMinutes
}
}
}
}
}
La réponse contient des informations sur la pagination :
{
"data": {
"project": {
"projectData": {
"pageInfo": {
"hasNextPage": true,
"endCursor": "aW5zaWdodHMtcmVzb3VyY2U6MTA=="
},
"resources": [
{
"usage": {
"streamedPublishedMinutes": 56554.83333333332
}
},
...
Utiliser le endCursor de cette réponse ("aW5zaWdodHMtcmVzb3VyY2U6MTA==")
en tant que endCursor données saisies dans la requête pour obtenir la page suivante des
enregistrements correspondants :
{
project(projectId: 12345678) {
projectData(
start: 0,
first: 10,
interval: MONTHLY,
endCursor: "aW5zaWdodHMtcmVzb3VyY2U6MTA=="
) {
pageInfo {
hasNextPage
endCursor
}
resources {
usage {
streamedPublishedMinutes,
streamedSubscribedMinutes
}
}
}
}
}
Conservation des données et temps de latence
Aperçus / Tableau de bord des aperçus
Conservation des données :
-
Agrégation quotidienne : 90 jours
-
Agrégation mensuelle : 12 mois
Notes :
- Les données d'agrégation quotidiennes sont calculées sur la base de 00:00 - 23:59 PST/PDT.
- La période de conservation de l'agrégation quotidienne pour Insights API et Insights Dashboard a été mise à jour à 90 jours (au lieu de 60 jours) à compter du 12 août 2021. Les données agrégées quotidiennement pour les sessions vidéo après cette date seront disponibles pendant 90 jours.
Temps de latence prévu : 36 à 48 heures
Perspectives avancées
Conservation des données : 21 jours
Remarque : La période de conservation est basée sur l'heure de création d'une réunion au sein de la session.
Temps de latence prévu : 5 minutes
Remarque : Une session unique peut avoir plusieurs réunions. Une nouvelle réunion est définie lorsque la session n'est pas utilisée pendant 10 minutes. Veuillez vous référer à notre documentation sur Sessions ou réunions pour plus d'informations.
Codes d'erreur
Les erreurs sont incluses dans la réponse, dans un fichier errors comme dans le cas suivant :
"errors": [
{
"message": "You must provide a valid project ID.",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"project"
],
"errorCode": 1008
}
]
Le tableau ci-dessous répertorie les codes d'erreur et leurs descriptions. Consultez le
message de l'erreur pour plus de détails.
| Code d'erreur | Description de l'erreur |
|---|---|
| 1000 | La clé API fournie n'est pas valide. |
| 1001 | Aucune authentification valide n'a été fournie. |
| 1002 | Plage de dates non valide. |
| 1003 | Paramètre non valide. Un seul intervalle de dates est autorisé. |
| 1004 | Paramètres non valides. |
| 1005 | Paramètre non valide. |
| 1006 | Paramètre non valide. La valeur doit être un entier. |
| 1007 | Paramètre non valide pour la spécification du numéro de version du SDK OpenTok. Le format requis est 0.0.0. |
| 1008 | Vous devez indiquer un identifiant de projet valide. |
| 1009 | Paramètre non valide. |
| 1010 | Le paramètre transmis n'est pas valide. Le paramètre n'accepte qu'une seule valeur. |
| 1011 | Jeton non valide. |
| 1012 | Erreur de serveur interne. |
| 1013 | Un paramètre obligatoire est manquant. |
| 1014 | La requête spécifiée nécessite l'utilisation de l'option Perspectives avancées complémentaire. |
| 1015 | L'identifiant de projet indiqué est introuvable. |
| 1016 | La session a expiré. |
| 1017 | La session spécifiée n'a pas été trouvée. |
| 1018 | Vous devez fournir au moins un identifiant de session dans le tableau d'entrée. |
| 1019 | Le jeton ne correspond pas à la clé API. |
| 1020 | Impossible de valider le jeton. |
| 1021 | Vous n'êtes pas autorisé(e) à consulter les données de ce projet. |
| 1022 | Erreur de type. Voir les détails dans le message chaîne de caractères. |
Envoi de requêtes POST vers l'API GraphQL d'OpenTok
Toutes les requêtes GraphQL d'OpenTok sont envoyées à https://insights.opentok.com/graphql.
Régler le content-type à application/json.
Toutes les requêtes nécessitent une authentification à l'aide d'un X-OPENTOK-AUTH En-tête. Définissez cet
en-tête sur un jeton JWT avec project en tant que ist et l'identifiant du projet OpenTok
en tant que iss. Signez le jeton avec la clé secrète du projet OpenTok.
Voir Authentification.
Le corps de la requête POST contiendra un objet JSON
comportant une clé et une valeur. La clé sera query, et la valeur
sera la chaîne GraphQL de type JSON (comme celle-ci) que vous aurez créée à l'aide de l'
outil GraphiQL).
Le texte suivant curl La commande effectue une requête GraphQL pour obtenir les minutes diffusées en continu auxquelles l'utilisateur est abonné :
minutes :
Remplacer les valeurs de la YOUR_OT_JWT et YOUR_OT_PROJECT_API_KEY variables.
Pour les obtenir, consultez la Authentification via l'API REST
consultez la documentation et connectez-vous à votre Compte Video API de Vonage.
L'exemple ci-dessus donnera lieu à un objet de réponse similaire à celui-ci :
{
"data":{
"project":{
"projectData":{
"resources":[
{
"usage":{
"streamedSubscribedMinutes":3189
}
}
]
}
}
}
}
Calcul du nombre de minutes des participants
Quelle est la méthode la plus précise pour calculer les minutes des participants sur une période donnée dans le cadre de la facturation ?
Pour connaître le nombre exact de minutes générées au cours d'une plage horaire, utilisez les données du projet. Lorsque vous utilisez les résumés de session pour définir une plage horaire dans la requête, les résultats incluent toutes les sessions créées au cours de cet intervalle. Si une session est réutilisée, les résultats incluent toutes les sessions contenant au moins une réunion créée au cours de l'intervalle de temps spécifié, en affichant le nombre total de minutes pour l'ensemble de la session et non pas uniquement pour cet intervalle.
En d'autres termes, lorsque l'on utilise une requête de synthèse de session, si l'on réutilise une session au cours de l'intervalle indiqué, les minutes ne correspondent pas uniquement à cette période spécifique, mais à l'ensemble de la session, ce qui peut inclure des résultats ne relevant pas de la plage horaire indiquée.
Lorsque vous utilisez la requête de données de projet, les résultats incluent les données quotidiennes comprises entre 00 h 00 PST et 00 h 00 PST du jour suivant. Vous devrez peut-être tenir compte du fait que la requête doit débuter à 00 h 00 PST ; sinon, elle renverra toujours un jour de données de plus que prévu.
Prenons, par exemple, ces deux requêtes portant sur les données d'un projet :
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
)
Pour ces deux requêtes, les résultats sont les suivants : seulement 1 jour de données dans les résultats.
Dans ce cas, l'ajustement du fuseau horaire décale effectivement « 2023-12-30T08:00:00.00Z » au début du 30 décembre en heure du Pacifique (minuit, heure du Pacifique). Comme l'heure de fin en PST correspond à minuit le 31, les résultats ne couvrent qu'une seule journée.
Mais prenons l'exemple de cette requête sur les données du projet :
projectData(
start: "2023-30-30T07:00:00.00Z",
end: "2023-01-31T08:00.00.00Z"
interval: AUTO
)
La requête renverra les données des 30 et 31 décembre 2023.
L'horodatage « 2023-12-30T07:00:00.00Z » est exprimé en UTC ; en PST, cela donne « 2023-12-29T11:00:00.00PST », ce qui correspond au 29 décembre. En raison du décalage horaire avec le PST, lorsque la requête inclut des données datées du « 2023-12-30T07:00:00.00Z » (UTC), elle couvre en réalité la période du 30 au 31 décembre, incluant ainsi ces deux jours dans le résultat.
Les résultats incluront donc les données des 30 et 31 décembre 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
}
}
}
}
}
Pour ces raisons, il est préférable d'utiliser le niveau de la réunion afin d'obtenir un résultat plus précis :
{
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
}
}
}
}
}
}
}
}
Questions supplémentaires
Vous pouvez rechercher un identifiant de session sans inclure un identifiant de projet dans une requête :
{
project(sessionIds: "2_MX4xMDB-fjE3MTMyMTMwNDQ1NDV-Z29CLzhyejNha1N2M2RaV255Sno1RTZNfn5-") {
sessionData {
sessions {
resources {
mediaMode
sessionId
meetings {
totalCount
pageInfo {
hasNextPage
endCursor
}
resources {
meetingId
createdAt
destroyedAt
}
}
}
}
}
}
}
Vous pouvez utiliser le not opérateur pour 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
}
}
}
}
}
Vous pouvez filtrer les connexions en fonction de la localisation et du navigateur :
{
project(sessionIds: "2_MX4xMDB-fjE3MTMyMTMwNDQ1NDV-Z29CLzhyejNha1N2M2RaV255Sno1RTZNfn5-") {
sessionData {
sessions {
resources {
meetings {
resources {
connections(country: "US") {
totalCount
}
}
}
}
}
}
}
}
Vous pouvez définir un audioCodec filtre (pour PCMU, VP8, OPUS, TELEPHONEou OTHER), ou définir un videoCodec filtre (pour VP8, H264, VP9, RTXou 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
}
}
}
}
}
}
}
}
}
}
}
Vous pouvez définir un mediaMode filtre à ROUTED ou 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
}
}
}
}
}
}
}
Application d'exemple et autres exemples de requêtes
Les exemple-de-tableau-de-bord-d'analyses Ce projet sur GitHub est une application Node qui utilise l'API OpenTok Insights pour afficher sous forme graphique des informations sur les projets OpenTok. Il comprend également plusieurs exemples de requêtes GraphQL.