インサイト・ダッシュボードとAPI

OpenTok Insights API は、 GraphQL API. Insights API および Insights ダッシュボードを使用すると、 OpenTok のプロジェクトやセッションに関する情報を取得できます。

インサイト・ダッシュボード

注: をクリックしてください。 これ データ保持とレイテンシーに関する情報はこちらをご覧ください。

「Insights Dashboard」ウィジェットは、プロジェクトレベルのデータを提供します。これにアクセスするには、 ご自身のアカウントにログインして Vonage Video API アカウント そして、OpenTokプロジェクトを選択します。 この画面には、「使用状況」、「品質」、「エラー」の3つのタブに加え、日付範囲、場所、 およびエンドポイントのフィルターが用意されています。

[使用状況] タブには、プロジェクトで生成されたさまざまな種類の議事録が表示されます。 議事録が生成された場所を示すマップを確認したり、必要に応じて複数のフィルターを組み合わせて適用したりすることができます。

[品質] タブには、プロジェクト内のストリームに関するビデオビットレートと遅延のヒストグラムが表示されます。

[エラー] タブには、接続、パブリッシャー、およびサブスクライバーのエラー率が表示されます。

各タブのデータは、上部で行った選択に基づいてフィルタリングされます。

インサイトAPI、ベースURL、認証

インサイトAPIは GraphQL API これにより、 プロジェクトレベルおよびセッションレベルでセッションのメタデータを調査することができます。 GraphQLは、HTTPを介してデータにアクセスする一般的なRESTアプローチに代わるものです。 2012年にFacebookによって開発され、2015年にオープンソース化されました。 ぜひご覧ください GraphQLスタートガイド をご覧ください。

APIの基本URLは以下の通り:

https://insights.opentok.com/graphql

すべてのリクエストはHTTP POSTとして送信され、認証には X-OPENTOK-AUTH.

GraphiQLでAPIスキーマを探る

へのナビゲート https://insights.opentok.com/ お使いの ブラウザを使用すると、Insightsのインスタンスに遷移します。 グラフィQL、GraphQL APIスキーマを 確認できるツールです。このツールはAPIリクエストを送信できるため、 利用するにはログインする必要があります。

このツールには5つの窓ガラスがある:

  • ツールの右上には 資料 ボタン。 これをクリックすると、スキーマのドキュメントが表示されたペインが開きます。 ドキュメント内の各フィールドおよびオブジェクト型には、説明が記載されています。 これをクリックして、スキーマを確認してください。

  • ページの左側には「クエリ」ペインがあります。 このペインでは、 APIに対して実行するクエリを作成できます。「ドキュメント」ペインと 「クエリ」ペインを行き来することで、必要な情報のみに 絞り込んだ正確なクエリを作成できます。ログイン済みのため、 クエリ実行のための認証は自動的に行われます。

  • 「クエリ」ペインの下には、「クエリ変数」ペインがあります。必須ではありませんが、 このペインを使用して、クエリの変数を指定することができます。たとえば、 このペインでは次のような変数を定義できます:

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

    次に、クエリーペインで、宣言された変数を参照する:

    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
            }
          }
        }
      }
    }
    
  • 「クエリ」ペインの右側には「応答」ペインがあります。ツール内の「実行」ボタンを クリックすると、「クエリ」ペインのクエリが実行され、「応答」ペインに 結果が表示されます。これは、プログラムでクエリを実行した場合に得られる 応答と同じものです。

  • 最後に 歴史 クエリペインの上にあるボタンをクリックすると、 最近のクエリの履歴を表示できます。表示された項目のいずれかをクリックすると、そのデータが クエリペインとクエリ変数ペインに反映されます。

注: 望ましい結果を得るためには、必ず以下を含めるようにしてください。 groupBy クエリ内で。

プロジェクトデータの取得

注釈

  • こちらをクリックしてください これ データ保持とレイテンシーに関する情報はこちらをご覧ください。
  • Insightsでは現在、1つのクエリで複数のAPIキーを指定することはできません。複数のプロジェクトやAPIキーに関する情報を取得するには、プロジェクトごとに個別のInsightsクエリを実行してください。AccountのプロジェクトレベルのAPIキーおよびシークレットをプログラムで取得するには、以下のドキュメントをご参照ください。 プロジェクトに関する情報の入手. この方法を使用すると、 アカウントレベルのAPIキーとシークレット …を取得できます。 プロジェクト詳細オブジェクト 単一のプロジェクトに対して、またはAccount内のすべてのプロジェクトに対して。

について projectData プロジェクトオブジェクトのフィールドは、 ProjectData オブジェクト。 これは、プロジェクトレベルでの集計レポートデータを提供します。

を含めなければならない。 start クエリの日付。この値は、ISO-8601 形式の文字列(例: "2019-10-15T23:43:34.023Z") または、エポックタイムスタンプを表す Int 型の値 です。10 桁以下の整数は エポック秒を表します。10 桁を超える整数はエポックミリ秒を表します。

について ProjectData オブジェクトには resources プロパティ。これは の配列であり、 Metric オブジェクト。データを、SDKの種類、SDKのバージョン、国、地域、ブラウザ、またはブラウザのバージョンごとに フィルタリングしたりグループ化したりすることができます。 さらに、以下の設定を変更することも可能です。 Interval データをセグメント分けしたい場合 (いずれか DAILY, WEEKLYあるいは MONTHLY). なお、 もし Interval, データが存在する時間間隔のみが表示されます。 現在、このオブジェクト下のすべてのデータは毎晩更新されるため、 データの変更がリアルタイムで反映されることはありません。

注: 地域、SDK、およびブラウザのフィルタリングは、参加者とアーカイブ議事録では利用できません。

について Metric このオブジェクトには、結果に関する国、地域(該当する場合は米国の州)、 OpenTok SDK の種類とバージョン、およびブラウザとブラウザのバージョン (該当する場合)に関する情報が含まれています。この Metric このオブジェクトには、以下の プロパティも含まれています:

  • usage — ストリームごとの公開済み議事録、 ストリームの購読済み議事録、アーカイブの利用状況、放送の利用状況、SIPの利用状況、 およびパブリッシャーのティア別に分類された利用状況に関する情報

  • quality - ビデオ品質に関する情報

  • errors — セッションへの接続、パブリッシュ、 およびサブスクライブの失敗率

以下のクエリは、OpenTokのJavaScript、Android、およびiOS SDKを使用しているクライアントについて、 ストリーミング配信された議事録とストリーミング購読された議事録を含むProjectDataの結果を 取得するものです:

{
  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
        }
      }
    }
  }
}

を設定することで start このパラメータを 0 に設定すると、 利用可能な最も古いレコードから順に結果を照会します。

重要 - 既知の問題: 2023年9月14日以前の毎日の結果の一部において、ブラウザ名およびブラウザバージョンのデータがnullまたは空となっています。2023年9月14日以降の結果には、これらの値が含まれています。

セッションデータの取得(Advanced Insights)

注: をクリックしてください。 これ データ保持とレイテンシーに関する情報はこちらをご覧ください。

重要だ: セッション・データのクエリーは、次のような場合に利用できる。 アドバンスド・インサイトのお客様 だけである。

について sessionData のフィールドにある。 project オブジェクトは SessionData オブジェクト。 このオブジェクトには、2つのフィールドが含まれています: sessions そして sessionSummaries.

セッション詳細情報

について sessions フィールドは Sessions オブジェクト。セッションIDを として渡します。 sessionIds 引数(マッチする文字列の配列)。引数の Sessions オブジェクト には、 resources プロパティの配列である。 Session オブジェクト。 その Session オブジェクトは以下のプロパティを持つ:

  • mediaMode - セッションのメディアモード。これは "routed" OpenTok Media Router を経由してルーティングされるセッション、または "relayed" ピアツーピアによる直接ストリーミングのため。

  • publisherMinutes — セッション中の すべてのパブリッシャーにおけるストリーミング総時間(分)。このフィールドを含めると、 クエリの結果表示が遅くなることに注意してください。

  • subscriberMinutes — セッション中の すべての加入者によるストリーミングの合計分数。このフィールドを含めると、 クエリの結果表示が遅くなることに注意してください。

  • participantMinutes — セッション内のすべての会議について、 パブリッシャーの階層別に分類した合計分数。

  • meetings - の配列。 Meeting オブジェクト。OpenTokのセッションには 複数のミーティングを含めることができます。最初のクライアントが セッションに接続すると、最初のミーティングが開始されます。セッション内の接続が 10分以上ない状態が続くと、ミーティングは終了します。クライアントが 再度接続すると、新しいミーティングが開始されます。各Meetingオブジェクトには、 以下のプロパティが含まれます:

    • subscriberMinutes — 会議中の加入者の通話時間の合計 。

    • publisherMinutes — 会議におけるパブリッシャーの発言時間の 合計。

    • participantMinutes — 会議におけるパブリッシャーの階層別に分類した 合計分数。

    • connections — セッションに接続している各クライアント(会議中)を定義する Connection オブジェクトの配列です。Connection オブジェクトのプロパティには、 使用されている OpenTok Client SDK に関する情報、 使用されているブラウザ(Web クライアントの場合)、パブリッシャーおよびサブスクライバーに関する情報などが 含まれます。

    • publishers — Publisher オブジェクトの配列。Publisher オブジェクトのプロパティには、 パブリッシャーのストリームに関する情報、 そのストリームのサブスクライバー、ストリームの統計情報などが含まれます。(ストリームの 統計情報は、Advanced Insights アドオンに含まれています。詳しくは ストリーム統計の取得.)

    • subscribers — 各サブスクライバーに関する詳細情報を提供する、 Subscriber オブジェクトの配列です。Subscriber オブジェクトのプロパティには、 サブスクライバーのストリームやストリーム統計情報などが含まれます。(ストリーム 統計情報は「Advanced Insights」アドオンに含まれています。詳しくは ストリーム統計の取得.)

    • createdAt そして destroyedAt — 会議の開始時刻と終了時刻の タイムスタンプ。

    注: すべてのユーザーが会議から切断され、10分以内にセッションへの新しい接続が行われた場合、最初の会議と同じ会議IDで新しい会議が作成されます。ただし、新しい接続が10分以降に行われた場合、新しい会議は一意の会議IDを取得します。

セッション詳細クエリの例

次のクエリは、2つの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
									}
								}
							}
						}
					}
				}
			}
		}
	}	
}

ストリーム統計の取得

注: ストリーム統計は次のような場合に利用できる。 アドバンスド・インサイトのお客様 だけである。

について resources MeetingPublishers オブジェクトのプロパティは、Publisher オブジェクトの配列です。また、Publisher オブジェクトには PublisherStreamStatsCollection オブジェクトが含まれています。 このオブジェクトはリソースコレクションであり、その resources このプロパティは、 PublisherStats オブジェクトの配列です。各 PublisherStats には、その パブリッシャーのストリーミング中に定期的に(30 秒ごとに)取得された、 パブリッシャーのストリーミング統計情報が含まれています。 これらの統計情報には、オーディオおよびビデオのレイテンシ、オーディオおよびビデオの ビットレート、オーディオおよびビデオのパケット損失率、ビデオの解像度、オーディオおよびビデオのコーデック、 およびストリーム統計情報のスナップショット取得時点でストリームにオーディオとビデオが含まれていたかどうかに関するデータが含まれます。

以下のクエリは、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
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

同様に resources MeetingSubscribers オブジェクトのプロパティは、 Subscriber オブジェクトの配列であり、これらの各オブジェクトには SubscriberStreamStatsCollection というリソースコレクションが含まれており、そこには各サブスクライバーに関する同様のストリーム統計情報が含まれています。

セッション概要

注: セッションの要約は以下のサイトでご覧いただけます。 アドバンスド・インサイトのお客様 だけである。

について sessionSummaries フィールドは SessionSummary オブジェクト(クエリに一致する 各セッションにつき1つ)。SessionSummary オブジェクトには、 a resources プロパティの配列である。 MeetingSummary オブジェクト (セッション内の各会議につき1つ)。その MeetingSummary このオブジェクトには、 会議における総ストリーム数、同時ストリーム数、接続数、 および参加者の数に関する情報が含まれています。

両者とも SessionSummary オブジェクトと MeetingSummary を含む。 publisherMinutes, subscriberMinutesそして participantMinutes プロパティ。これらは、セッションまたは会議内のすべてのパブリッシャーおよびサブスクライバーについて、 ストリーミングされた合計分数を報告します。これには、 participantMinutes セッションまたは会議における、発行者レベルごとに分類された議事録を報告します。なお、以下を含めることに注意してください。 publisherMinutes, subscriberMinutesあるいは participantMinutes をクエリに使用すると、結果が遅くなります。

次のクエリは、部分的なリクエストです。 SessionSummary の結果だ:

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

SIP品質指標

以下のクエリは、最小限の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
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

このクエリは、統計なしでSIPの基本情報を提供する:

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

完全なSIPクオリティ統計を取得するには、以下のクエリを使用する:

 {
 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
                         }
                       }
                     }
                   }
                 }
               }
             }
           }
         }
       }
     }
   }

応答オブジェクト

レスポンスオブジェクトはGraphQLスキーマに準拠し、JSON形式で返されますが、 リクエストで指定したフィールドのみが含まれます。その curl 上記の例を実行すると、次のようなレスポンスオブジェクトが返されます:

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

どのような結果になるかを事前に確認する最も簡単な方法は、 さまざまなフィルター、グループ、フィールドを インサイト GraphiQL Explorer, そしてその反応を観察する。

クエリでページネーションを使用する

両者とも projectData() そして sessionData() APIでは、リスト(配列)を返すすべてのメソッドに対して、 ページネーションオプションを受け付けます。これらのメソッドはすべて、 a ResourceCollection インタフェースのオプション・プロパティである:

  • first (オプション) — 1ページあたりに返すエントリの数。 上限は、会議の場合は10件、その他のすべてのリソースコレクションの場合は1000件です。 デフォルトの返されるエントリ数は、会議の場合は10件、その他のすべての リソースコレクションの場合は50件です。

  • endCursor (オプション) — 現在の ページ(オフセット)を指定するために使用される文字列カーソル。このカーソルの値は、 pageInfo 各 返されたリストに対するプロパティ。もし endCursor この値が設定されている場合、クエリは 検索結果の最初の一ページ(リストの先頭)を返します。

について pageInfo オブジェクト(各リストに対して返される)には、以下のプロパティが含まれる:

  • hasNextPage - 利用可能なページがまだあるかどうかを示すブール型プロパティ。

  • endCursor - 次のページを取得するために渡される文字列。

たとえば、次のクエリを実行すると、ページネーション情報とともに、一致した最初の 10 件の 結果が返されます。 ProjectData リソースがある:

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

レスポンスにはページネーション情報が含まれる:

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

を使用する。 endCursor このレスポンスから"aW5zaWdodHMtcmVzb3VyY2U6MTA==") として endCursor クエリで、一致するレコードの次のページを取得するために使用される 入力:

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

データ保持とレイテンシー

インサイト / インサイトダッシュボード

データの保持:

  • 毎日の集計:90日間

  • 月次集計:12ヶ月

注釈

  • 1日の集計データは、PST/PDTの00:00~23:59を基準に算出されています。
  • 2021年8月12日より、Insights APIとInsights Dashboardの日次集計の保存期間が60日から90日に更新されました。この日以降の動画セッションの日次集計データは、90日間ご利用いただけます。

予想されるレイテンシー 36~48時間

Advanced Insights retention period

高度な洞察

データの保持: 21日

注: 保存期間は、セッション内の会議の作成時刻に基づく。

予想されるレイテンシー 5分

Advanced Insights retention period

注: 一つのセッションは複数のミーティングを持つことができる。セッションが10分間使用されないと、新しいミーティングが設定されます。詳しくは セッションとミーティング をご覧ください。

エラーコード

エラーはレスポンスに含まれる。 errors 配列のようなものだ:

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

次の表に、エラーコードとその説明をまとめました。詳しくは、 message プロパティを参照してください。

エラーコード エラーの説明
1000 指定されたAPIキーが無効です。
1001 有効な認証が提供されなかった。
1002 無効な日付範囲です。
1003 パラメータが無効です。許可される日付間隔は 1 つだけです。
1004 パラメータが無効です。
1005 無効なパラメータです。
1006 パラメータが無効です。値は整数でなければなりません。
1007 OpenTok SDK のバージョン番号を指定するためのパラメータが無効です。必要な形式は 0.0.0 です。
1008 有効なプロジェクトIDを入力してください。
1009 無効なパラメータです。
1010 無効なパラメータが渡されました。パラメータは 1 つの値しか受け付けません。
1011 無効なトークンです。
1012 内部サーバーエラー。
1013 必須パラメータがない。
1014 指定されたクエリーには 高度な洞察 アドオン。
1015 指定されたプロジェクトIDが見つかりませんでした。
1016 セッションは終了しました。
1017 指定されたセッションが見つかりません。
1018 入力配列には、少なくとも1つのセッションIDを指定しなければならない。
1019 トークンがAPIキーと一致しません。
1020 トークンを検証できません。
1021 このプロジェクトのデータを閲覧する権限がありません。
1022 タイプエラー。詳細は message 文字列。

OpenTok GraphQL API への POST リクエストの実行

OpenTokのGraphQLリクエストはすべて、以下の宛先に対して行われます。 https://insights.opentok.com/graphql.

を設定する。 content-type への application/json.

すべてのリクエストには、 X-OPENTOK-AUTH ヘッダー。この ヘッダーに、以下のJWTトークンを設定してください。 project として ist および OpenTok プロジェクト ID を iss. トークンに OpenTok プロジェクトのシークレットを署名します。 参照 認証.

POSTリクエストのボディには、1つのキーと1つの値を含むJSONオブジェクトが 含まれます。そのキーは query, そしてその値は (GraphiQLツールを使用して構築したような)JSON風のGraphQL文字列になります。

以下の通りである。 curl このコマンドは、ストリーミング配信されているサブスクライブ済みの minutesを取得するためにGraphQLクエリを実行します:

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'

の値を置き換える YOUR_OT_JWT そして YOUR_OT_PROJECT_API_KEY 変数。 これらを取得するには、 REST APIの認証 ドキュメントを確認し、ご自身の Vonage Video API アカウント.

上記の例を実行すると、次のようなレスポンスオブジェクトが返されます:

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

参加者の参加時間の算出

請求処理を行う際、特定の期間における参加者の参加時間を算出する最も正確な方法は何でしょうか?

特定の期間に生成された正確な分数を把握するには、「プロジェクトデータ」を使用してください。クエリでセッションの概要を使用して期間を指定する場合、結果にはその期間内に作成されたすべてのセッションが含まれます。 セッションが再利用されている場合、結果には、指定された時間間隔内に作成された会議が少なくとも1つ含まれるすべてのセッションが含まれ、この間隔だけでなく、セッション全体の合計分数が表示されます。

つまり、セッション要約クエリを使用する場合、指定された期間内にセッションを再利用すると、分単位の集計は当該期間のみならずセッション全体を対象とするため、時間範囲外の結果が含まれる可能性があります。

プロジェクトデータクエリを使用する場合、結果には太平洋標準時(PST)の00:00から翌日の00:00までの日次データが含まれます。クエリは太平洋標準時(PST)の00:00から開始する必要がある点にご注意ください。そうしないと、常に予想より1日分多いデータが返されてしまいます。

例えば、次の 2 つのプロジェクトデータクエリを考えてみましょう。

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
)

これら2つのリクエストの結果には、以下のものが含まれます。 データはたった1日分 の結果である。

この場合、タイムゾーンの調整により、「2023-12-30T08:00:00.00Z」は事実上、PSTの12月30日の初め(PSTの午前0時)にずらされます。 PSTでの終了時刻は31日の午前0時であるため、結果には1日分のみが含まれます。

しかし、次のプロジェクトデータクエリについて考えてみてください:

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

このリクエストでは、2023年12月30日および31日のデータが返されます。

タイムスタンプ「2023-12-30T07:00:00.00Z」は(UTC)表記です。これをPSTに変換すると、 「2023-12-29T11:00:00.00PST」となり、これは12月29日に相当します。 PSTとの時差のため、リクエストにUTCの「2023-12-30T07:00:00.00Z」のデータが含まれている場合、実質的には12月30日から12月31日までの期間をカバーすることになり、結果には両日が含まれることになります。

したがって、結果には2023年12月30日および31日のデータが含まれます。

{
  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
        }
      }
    }
  }
}

こうした理由から、より正確な結果を得るためには、ミーティングレベルを使用するほうがよいでしょう:

{
  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
              }
            }
          }
        }
      }
    }
  }
}

その他の問い合わせ

クエリにプロジェクトIDを含めずに、セッションIDを検索することができます:

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

を使用することができます。 not 演算子 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
        }
      }
    }
  }
}

場所とブラウザを使用して接続をフィルタリングすることができます:

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

を設定することができます。 audioCodec フィルター PCMU, VP8, OPUS, TELEPHONEあるいは OTHERを設定する。 videoCodec フィルター VP8, H264, VP9, RTXあるいは 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
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

を設定することができる。 mediaMode フィルタ ROUTED または 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
            }
          }
        }
      }
    }
  }
}

サンプルアプリとその他のサンプルクエリ

について インサイト・ダッシュボード・サンプル GitHub上のこのプロジェクトは、OpenTok Insights API を使用して OpenTok プロジェクトに関する情報をグラフィカルに表示する Node アプリケーションです。また、 いくつかの GraphQL クエリのサンプルも含まれています。