Painel de insights e API
A API OpenTok Insights é uma API GraphQL. Você pode usar a API do Insights e o Painel do Insights para obter informações sobre seus projetos e sessões do OpenTok.
O Painel de Insights
Observação: Clique aqui aqui para obter informações sobre retenção de dados e latência.
O widget do Painel de Insights fornece dados no nível do projeto. Você pode acessá-lo fazendo login na sua Account da Video API da Vonage e selecionando um projeto do OpenTok. Ele contém três guias: Uso, Qualidade e Erros, além de filtros para intervalo de datas, localização e endpoints.
A aba “Utilização” mostra os diferentes tipos de atas geradas pelo projeto. Você pode ver um mapa indicando onde as atas foram geradas e aplicar vários filtros simultaneamente, conforme desejar.
A aba “Qualidade” exibe um histograma da taxa de bits e da latência dos vídeos transmitidos no projeto.
A guia “Erros” apresenta a taxa de erros das conexões, dos editores e dos assinantes.
Os dados de cada aba são filtrados de acordo com as seleções feitas na parte superior.
API do Insights, URL base e autenticação
A API do Insights é uma API GraphQL que permite que você explore os metadados das suas sessões nos níveis de projeto e sessão. O GraphQL é uma alternativa à abordagem REST tradicional para acessar dados via HTTP. Ele foi desenvolvido pelo Facebook em 2012 e tornou-se de código aberto em 2015. Confira Guia de introdução ao GraphQL para saber mais.
A URL base da API é:
https://insights.opentok.com/graphql
Todas as solicitações são feitas como POSTs HTTP e autenticadas por meio de X-OPENTOK-AUTH.
Explorando o esquema da API com o GraphiQL
Acessando https://insights.opentok.com/ Ao usar seu navegador, você é direcionado para a instância do Insights do GraphiQL, uma ferramenta que permite explorar o esquema da API GraphQL. Como a ferramenta pode fazer solicitações à API, é necessário estar conectado para utilizá-la.
Existem cinco painéis nesta ferramenta:
-
No canto superior direito da ferramenta, você verá um Documentos botão. Ao clicar nele, é exibido um painel com a documentação do esquema. Cada campo e tipo de objeto na documentação contém uma descrição. Navegue por ela para explorar o esquema.
-
No lado esquerdo da página está o painel “Consulta”. Nesse painel, você pode criar consultas para serem executadas na API. Alternar entre o painel “Documentação” e o painel “Consulta” permite que você crie a consulta exata de que precisa para obter apenas as informações necessárias. Como você está conectado, a autenticação para realizar consultas já está resolvida para você.
-
Abaixo do painel “Consulta” está o painel “Variáveis da consulta”. Embora não seja obrigatório, você pode usá-lo para especificar variáveis para sua consulta. Por exemplo, você pode definir as seguintes variáveis neste painel:
Copiar{ "PROJECT_ID": 100, "START_TIME": "2019-01-01T08:00:00.000Z" }Em seguida, no painel “Consulta”, faça referência a quaisquer variáveis declaradas:
Copiarquery ($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 } } } } } -
À direita do painel “Consulta” está o painel “Resposta”. Ao clicar no botão “Executar” na ferramenta, a consulta exibida no painel “Consulta” será executada, e o painel “Resposta” exibirá os resultados. Essa é a mesma resposta que você obteria se fizesse a consulta programaticamente.
-
Por fim, clique no História botão acima do painel de consulta para visualizar o histórico de suas consultas recentes. Ao clicar em um dos elementos exibidos, o painel de consulta e o painel de variáveis de consulta são preenchidos com esses dados.
Observação: Para obter os resultados desejados, certifique-se de incluir groupBy na sua consulta.
Obtenção de dados do projeto
Notas:
- Clique aqui aqui para obter informações sobre retenção de dados e latência.
- Atualmente, o Insights não oferece suporte a várias chaves de API na mesma consulta. Faça uma consulta separada no Insights para cada projeto, a fim de obter informações sobre vários projetos/chaves de API. Para obter programaticamente chaves de API e segredos no nível do projeto para um Account, consulte nossa documentação em obter informações sobre projetos. Com esse método, os usuários com um chave e segredo da API no nível da Account pode obter o objeto de detalhes do projeto para um único projeto ou para todos os projetos da Account.
O projectData O campo do objeto do projeto retorna o ProjectData objeto,
que fornece dados agregados de relatórios no nível do projeto.
Você deve incluir um start data da consulta. Esse valor pode ser uma string no formato ISO-8601
(como, por exemplo, "2019-10-15T23:43:34.023Z") ou um valor do tipo Int
que represente um carimbo de data/hora da época. Números inteiros com até 10 dígitos representam
segundos da época. Números inteiros com mais de 10 dígitos representam milissegundos da época.
O ProjectData O objeto inclui um resources propriedade, que é uma
matriz de Metric objetos. Você tem a opção de filtrar e agrupar os dados
por tipo de SDK, versão do SDK, país, região, navegador ou versão do navegador.
Além disso, você tem a opção de alterar o Interval em que você deseja
segmentar os dados (seja DAILY, WEEKLY, ou MONTHLY). Observe que
se você definir o Interval, você verá apenas os intervalos de tempo para os quais há dados.
Atualmente, todos os dados desse objeto são atualizados todas as noites; portanto, você não verá
alterações em tempo real nos dados.
Observação: A filtragem por região, SDK e navegador não está disponível para participantes e atas de arquivamento.
O Metric O objeto inclui informações sobre o país, a região (estado dos EUA, se
aplicável), o tipo e a versão do SDK do OpenTok, bem como o navegador e a versão do navegador
(se aplicável) para os resultados. O Metric O objeto também inclui as seguintes
propriedades:
-
usage— Informações sobre as atas publicadas em streaming, as atas assinadas em streaming, o uso do arquivo, o uso da transmissão, o uso do SIP, e o uso separado por níveis de editor -
quality— Informações sobre a qualidade do vídeo -
errors— As taxas de falha na conexão com sessões, na publicação e na assinatura
A consulta a seguir solicita resultados do ProjectData que incluam minutos transmitidos publicados e minutos transmitidos assinados para clientes que utilizam os SDKs do 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
}
}
}
}
}
Observe que, ao definir o start Se definir o parâmetro como 0, você consultará
os resultados a partir dos registros mais antigos disponíveis.
Importante — problema conhecido: Os dados relativos ao nome e à versão do navegador estão nulos ou vazios em alguns resultados diários anteriores a 14 de setembro de 2023. Os valores estão incluídos a partir de 14 de setembro de 2023.
Obtenção de dados de sessão (análises avançadas)
Observação: Clique aqui aqui para obter informações sobre retenção de dados e latência.
Importante: As consultas de dados de sessão estão disponíveis para Clientes do Advanced Insights apenas.
O sessionData campo do project O objeto retorna o SessionData objeto.
Esse objeto inclui dois campos: sessions e sessionSummaries.
Informações detalhadas sobre a sessão
O sessions field retorna um Sessions objeto. Passe os IDs de sessão como
o sessionIds argumento (um array de strings correspondentes). O Sessions objeto
inclui um resources propriedade, que é uma matriz de Session objetos.
O Session O objeto possui as seguintes propriedades:
-
mediaMode— O modo de mídia para a sessão. Trata-se de"routed"para sessões encaminhadas pelo OpenTok Media Router ou"relayed"para streaming direto ponto a ponto. -
publisherMinutes— O número total de minutos transmitidos por todos os editores na sessão. Observe que incluir esse campo retardará a exibição dos resultados da consulta. -
subscriberMinutes— O número total de minutos transmitidos para todos os assinantes na sessão. Observe que incluir esse campo retardará a exibição dos resultados da consulta. -
participantMinutes— O número total de minutos, dividido por níveis de editor, em todas as reuniões da sessão. -
meetings— Uma variedade deMeetingobjetos. Uma sessão do OpenTok pode ter várias reuniões. Quando o primeiro cliente se conecta à sessão, a primeira reunião é iniciada. A reunião termina quando não há nenhuma conexão na sessão por pelo menos 10 minutos. Quando um cliente se conecta novamente, uma nova reunião é iniciada. Cada objeto Meeting inclui as seguintes propriedades:-
subscriberMinutes— O número total de minutos dos participantes na reunião. -
publisherMinutes— O número total de minutos dos editores na reunião. -
participantMinutes— O número total de minutos, dividido por níveis de editores, na reunião. -
connections— Uma matriz de objetos Connection que define cada cliente conectado à sessão (durante a reunião). As propriedades do objeto Connection incluem informações sobre o Client SDK do cliente OpenTok utilizado, o navegador utilizado (para clientes web), informações sobre emissores e assinantes, e muito mais. -
publishers— Uma matriz de objetos Publisher. As propriedades do objeto Publisher incluem informações sobre o fluxo do editor, os assinantes do fluxo, estatísticas do fluxo e muito mais. (As estatísticas do fluxo estão incluídas no complemento Advanced Insights. Consulte Obtendo estatísticas de transmissão.) -
subscribers— Matriz de objetos `Subscriber`, que fornecem detalhes sobre cada assinante. As propriedades do objeto `Subscriber` incluem informações sobre o fluxo dos assinantes, estatísticas do fluxo e muito mais. (As estatísticas do fluxo estão incluídas no complemento Advanced Insights. Consulte Obtendo estatísticas de transmissão.) -
createdAtedestroyedAt— Horários de início e término da reunião.
Observação: Se todos os usuários forem desconectados de uma reunião e uma nova conexão com a sessão for estabelecida dentro do prazo de 10 minutos, será criada uma nova reunião com o mesmo ID de reunião da primeira. No entanto, se a nova conexão for estabelecida após 10 minutos, a nova reunião receberá um ID de reunião exclusivo.
-
Exemplo de consulta aos detalhes de uma sessão
A consulta a seguir solicita alguns detalhes do editor sobre duas sessões do 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
}
}
}
}
}
}
}
}
}
}
Obtendo estatísticas de transmissão
Observação: As estatísticas de transmissão estão disponíveis para Clientes do Advanced Insights apenas.
O resources A propriedade do objeto MeetingPublishers é uma matriz de objetos Publisher.
E o objeto Publisher inclui o objeto PublisherStreamStatsCollection.
Esse objeto é uma coleção de recursos, e sua resources A propriedade é uma matriz de
objetos PublisherStats. Cada objeto PublisherStats inclui estatísticas da transmissão do
emissor, coletadas periodicamente (a cada 30 segundos) durante o período em que o emissor está
transmitindo. Essas estatísticas incluem dados sobre a latência de áudio e vídeo, a taxa de bits de áudio e vídeo,
a taxa de perda de pacotes de áudio e vídeo, a resolução do vídeo, os codecs de áudio e vídeo,
e se a transmissão incluía áudio e vídeo no momento do instantâneo das estatísticas de transmissão.
A consulta a seguir solicita as estatísticas periódicas de taxa de bits de áudio e vídeo para os editores em uma sessão do 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
}
}
}
}
}
}
}
}
}
}
}
Da mesma forma, o resources A propriedade do objeto MeetingSubscribers é uma matriz
de objetos Subscriber, e cada um deles inclui uma coleção de recursos chamada SubscriberStreamStatsCollection,
que contém estatísticas de transmissão semelhantes para um assinante.
Informações resumidas da sessão
Observação: O resumo da sessão está disponível para Clientes do Advanced Insights apenas.
O sessionSummaries field é uma matriz de SessionSummary objetos (um para
cada sessão que corresponda à consulta). O objeto SessionSummary inclui
um resources propriedade, que é uma matriz de MeetingSummary itens
(um para cada reunião da sessão). O MeetingSummary O objeto inclui
informações sobre o número total e simultâneo de transmissões, conexões
e participantes na reunião.
Tanto o SessionSummary objeto e MeetingSummary os objetos incluem publisherMinutes,
subscriberMinutes, e participantMinutes propriedades. Elas informam o número total de minutos
transmitidos para todos os emissores e assinantes na sessão ou reunião. Incluindo participantMinutes
relatórios e atas separados por níveis de editores na sessão ou reunião. Observe que a inclusão de
publisherMinutes, subscriberMinutes, ou participantMinutes em uma consulta retardará a exibição dos resultados.
A consulta a seguir solicita uma parte 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 qualidade do SIP
A consulta a seguir fornece apenas as estatísticas mínimas de qualidade do 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 fornece informações básicas sobre o SIP, sem estatí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 obter as estatísticas completas de qualidade do SIP, utilize a seguinte 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 resposta
Os objetos de resposta seguem o esquema do GraphQL e estão no formato JSON, mas
incluem apenas os campos que você especificar em suas solicitações. O curl
O exemplo acima resultará em um objeto de resposta semelhante ao seguinte:
{
"data":{
"project":{
"projectData":{
"resources":[
{
"usage":{
"streamedSubscribedMinutes":3189
}
}
]
}
}
}
}
A maneira mais fácil de ter uma prévia do que você pode esperar é adicionando diferentes filtros, grupos e campos ao Insights do GraphiQL Explorer, e observar a resposta.
Como usar a paginação em consultas
Tanto o projectData() e sessionData() As APIs aceitam opções de paginação
para todos os métodos que retornam listas (matrizes). Todos esses métodos implementam
um ResourceCollection interface que contém as seguintes propriedades opcionais:
-
first(opcional) — O número de entradas a serem retornadas por página. O limite é de 10 para Reuniões e de 1.000 para todas as outras coleções de recursos. O número padrão de entradas retornadas é de 10 para Reuniões e de 50 para todas as outras coleções de recursos. -
endCursor(opcional) — O cursor de string usado para especificar a página atual (deslocamento). Obtenha o valor desse cursor a partir dopageInfopropriedade para cada lista retornada. Se você não especificar umaendCursorvalor, uma consulta retornará a primeira página de resultados correspondente (o início da lista).
O pageInfo O objeto (retornado para cada lista) inclui as seguintes propriedades:
-
hasNextPage— Propriedade booleana que indica se há mais páginas disponíveis. -
endCursor— A string a ser passada para obter a próxima página.
Por exemplo, a consulta a seguir retorna informações de paginação juntamente com os primeiros 10
resultados correspondentes ProjectData recursos:
{
project(projectId: 12345678) {
projectData(
start: "2024-05-01T07:00:00.000Z",
first: 10,
interval: MONTHLY,
) {
pageInfo {
hasNextPage
endCursor
}
resources {
usage {
streamedPublishedMinutes
}
}
}
}
}
A resposta inclui informações de paginação:
{
"data": {
"project": {
"projectData": {
"pageInfo": {
"hasNextPage": true,
"endCursor": "aW5zaWdodHMtcmVzb3VyY2U6MTA=="
},
"resources": [
{
"usage": {
"streamedPublishedMinutes": 56554.83333333332
}
},
...
Use o endCursor valor desta resposta ("aW5zaWdodHMtcmVzb3VyY2U6MTA==")
como o endCursor dados de entrada utilizados na consulta para obter a próxima página de
registros correspondentes:
{
project(projectId: 12345678) {
projectData(
start: 0,
first: 10,
interval: MONTHLY,
endCursor: "aW5zaWdodHMtcmVzb3VyY2U6MTA=="
) {
pageInfo {
hasNextPage
endCursor
}
resources {
usage {
streamedPublishedMinutes,
streamedSubscribedMinutes
}
}
}
}
}
Retenção de dados e latência
Insights / Painel de Insights
Retenção de dados:
-
Agregação diária: 90 dias
-
Agregação mensal: 12 meses
Notas:
- Os dados de agregação diária são calculados com base no período das 00h00 às 23h59 (PST/PDT).
- O período de retenção dos dados agregados diariamente para a API do Insights e o Painel do Insights foi atualizado para 90 dias (antes eram 60 dias) a partir de 12 de agosto de 2021. Os dados agregados diariamente relativos às sessões de vídeo após essa data ficarão disponíveis por 90 dias.
Latência esperada: 36 a 48 horas
Análises Avançadas
Retenção de dados: 21 dias
Observação: O período de retenção é baseado na data e hora de criação de uma reunião dentro da sessão.
Latência esperada: 5 minutos
Observação: Uma sessão pode conter várias reuniões. Uma nova reunião é agendada quando a sessão fica inativa por 10 minutos. Consulte nossa documentação sobre Sessões x Reuniões para mais informações.
Códigos de erro
Os erros são incluídos na resposta, em um errors matriz, como a seguinte:
"errors": [
{
"message": "You must provide a valid project ID.",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"project"
],
"errorCode": 1008
}
]
A tabela a seguir lista os códigos de erro e suas descrições. Consulte o
message propriedade do erro para obter mais detalhes.
| Código de erro | Descrição do erro |
|---|---|
| 1000 | Chave de API inválida fornecida. |
| 1001 | Não foi fornecida nenhuma autenticação válida. |
| 1002 | Intervalo de datas inválido. |
| 1003 | Parâmetro inválido. É permitido apenas um intervalo de datas. |
| 1004 | Parâmetros inválidos. |
| 1005 | Parâmetro inválido. |
| 1006 | Parâmetro inválido. O valor deve ser um número inteiro. |
| 1007 | Parâmetro inválido para especificar o número da versão do SDK do OpenTok. O formato exigido é 0.0.0. |
| 1008 | É necessário fornecer um ID de projeto válido. |
| 1009 | Parâmetro inválido. |
| 1010 | Foi passado um parâmetro inválido. O parâmetro aceita apenas um valor. |
| 1011 | Token inválido. |
| 1012 | Erro interno do servidor. |
| 1013 | Falta um parâmetro obrigatório. |
| 1014 | A consulta especificada requer o Análises Avançadas complemento. |
| 1015 | O ID do projeto especificado não foi encontrado. |
| 1016 | A sessão expirou. |
| 1017 | A sessão especificada não foi encontrada. |
| 1018 | É necessário fornecer pelo menos um ID de sessão na matriz de entrada. |
| 1019 | O token não corresponde à chave da API. |
| 1020 | Não foi possível validar o token. |
| 1021 | Você não está autorizado a visualizar os dados deste projeto. |
| 1022 | Erro de digitação. Veja os detalhes no message string. |
Enviando solicitações POST para a API GraphQL da OpenTok
Todas as solicitações GraphQL do OpenTok são enviadas para https://insights.opentok.com/graphql.
Defina o content-type para application/json.
Todas as solicitações exigem autenticação por meio de um X-OPENTOK-AUTH cabeçalho. Defina este
cabeçalho como um token JWT com project como o ist e o ID do projeto OpenTok
como o iss. Assine o token com o segredo do projeto OpenTok.
Veja Autenticação.
O corpo da solicitação POST conterá um objeto JSON
com uma chave e um valor. A chave será query, e o valor
será a string GraphQL no formato JSON (como esta, por exemplo) que você criar usando a
ferramenta GraphiQL).
O seguinte curl O comando realiza uma consulta GraphQL para obter os minutos transmitidos
dos canais assinados:
Substitua os valores para o YOUR_OT_JWT e YOUR_OT_PROJECT_API_KEY variáveis.
Para obtê-las, consulte o Autenticação da API REST
documentação e faça login na sua Account da Video API da Vonage.
O exemplo acima resultará em um objeto de resposta semelhante ao seguinte:
{
"data":{
"project":{
"projectData":{
"resources":[
{
"usage":{
"streamedSubscribedMinutes":3189
}
}
]
}
}
}
}
Cálculo dos minutos dos participantes
Qual é o método mais preciso para calcular as horas dos participantes em um determinado período, no contexto do faturamento?
Para saber o número exato de minutos gerados em um intervalo de tempo, use os Dados do Projeto. Ao utilizar resumos de sessões para especificar um intervalo de tempo na consulta, os resultados incluem todas as sessões criadas dentro desse intervalo de tempo. Se uma sessão for reutilizada, os resultados incluirão todas as sessões que contenham pelo menos uma reunião criada dentro do intervalo de tempo especificado, exibindo o número total de minutos de toda a sessão e não apenas desse intervalo.
Ou seja, ao utilizar uma consulta de resumo de sessão, no caso de reutilização de uma sessão durante o intervalo especificado, os minutos não se referem apenas a esse período específico, mas a toda a sessão, o que pode incluir resultados que estejam fora do intervalo de tempo.
Ao utilizar a consulta de dados do projeto, os resultados incluem dados diários das 00h00 PST às 00h00 PST do dia seguinte. É importante levar em conta que a consulta deve começar às 00h00 PST; caso contrário, ela sempre retornará um dia a mais de dados do que o esperado.
Por exemplo, considere estas duas consultas de dados do projeto:
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
)
Para essas duas consultas, os resultados incluem apenas 1 dia de dados nos resultados.
Nesse caso, o ajuste do fuso horário efetivamente desloca “2023-12-30T08:00:00.00Z” para o início do dia 30 de dezembro no horário PST (meia-noite PST). Como a hora de término no fuso horário PST é a meia-noite do dia 31, os resultados incluem apenas um dia.
Mas considere esta consulta aos dados do projeto:
projectData(
start: "2023-30-30T07:00:00.00Z",
end: "2023-01-31T08:00.00.00Z"
interval: AUTO
)
A consulta retornará dados dos dias 30 e 31 de dezembro de 2023.
O carimbo de data e hora “2023-12-30T07:00:00.00Z” está no formato (UTC); no fuso horário PST, isso nos dará “2023-12-29T11:00:00.00PST”, o que corresponde ao dia 29 de dezembro. Devido à diferença de fuso horário em relação ao PST, quando a solicitação inclui dados de “2023-12-30T07:00:00.00Z” (UTC), ela abrange efetivamente o período de 30 a 31 de dezembro, incluindo, portanto, ambos os dias no resultado.
Portanto, os resultados incluirão dados referentes aos dias 30 e 31 de dezembro 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 esses motivos, é melhor utilizar o nível da reunião para obter um resultado mais 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
}
}
}
}
}
}
}
}
Outras dúvidas
É possível pesquisar um ID de sessão sem incluir um ID de projeto na consulta:
{
project(sessionIds: "2_MX4xMDB-fjE3MTMyMTMwNDQ1NDV-Z29CLzhyejNha1N2M2RaV255Sno1RTZNfn5-") {
sessionData {
sessions {
resources {
mediaMode
sessionId
meetings {
totalCount
pageInfo {
hasNextPage
endCursor
}
resources {
meetingId
createdAt
destroyedAt
}
}
}
}
}
}
}
Você pode usar o 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
}
}
}
}
}
Você pode filtrar as conexões por localização e navegador:
{
project(sessionIds: "2_MX4xMDB-fjE3MTMyMTMwNDQ1NDV-Z29CLzhyejNha1N2M2RaV255Sno1RTZNfn5-") {
sessionData {
sessions {
resources {
meetings {
resources {
connections(country: "US") {
totalCount
}
}
}
}
}
}
}
}
Você pode definir um audioCodec filtro (para PCMU, VP8, OPUS, TELEPHONE, ou OTHER), ou definir um videoCodec filtro (para VP8, H264, VP9, RTX, ou 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
}
}
}
}
}
}
}
}
}
}
}
Você pode definir um mediaMode filtrar por 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
}
}
}
}
}
}
}
Aplicativo de exemplo e mais consultas de exemplo
O exemplo-de-painel-de-insights O projeto no GitHub é um aplicativo Node que utiliza a API OpenTok Insights para exibir graficamente informações sobre projetos do OpenTok. Ele também inclui várias consultas de exemplo em GraphQL.