Agora RESTful APIを使う

Agora PHP

Agora Analytics(Beta)をバシバシ叩いて調査していく。

Agora RESTfulの準備

ブラウザ画面の右上のログインユーザーからRESTful APIの設定をクリックする。

Agora RESTful

Agora RESTful APIには、いくつかの特徴がある。

  • RESTfulAPIはHTTPSのみをサポートします。
  • HTTPリクエストを送信する前に、Agoraから提供されたカスタマーIDとカスタマーシークレットを使用してBase64でエンコードされたクレデンシャルを生成し、そのクレデンシャルをAuthorizationリクエストヘッダーのパラメーターに渡す必要があります。

AgoraのKeyとSecretを生成し、 txtをダウンロードしておく。(紛失しないように注意!)
ここで作成するKeySecretは、AppId,Certificateとは別物です。RESTful APIを使用するため専用のようです。

Agora RESTful secret

Basic HTTP認証を使い、API Call

ここでの例は、Laravelを使用しているのでPHPを使用しています。基本的に、Java,Go,PHP,node.js,C#,Pythonのサンプルコードが記載されているようです。

まず、.envに設定する。

AGORA_APP_ID=
AGORA_CERTIFICATE=
AGORA_CUSTMOR_KRY=
AGORA_CUSTMOR_SECRET=
# 後で追記した
AGORA_PROJECT_ID=
AGORA_PROJECT_NAME=

Agora RESTful APIを呼び出すメソッド(LaravelのController)。
ここには書いていないが動的キーを生成したりしている。(try ~ catchは、とりあえず書いている。)

public function getProjects(Request $request)
{
  try {
    $this->execAgoraRestful();
  } catch (\Exception $e) {
    return ['error' => $e->getMessage()];
  }
}

Agora RESTful APIを実行するメソッド

/**
 * Agora RESTful APIを試す
 */
public function getProjects()
{
  try {
    // HTTP basic authentication example in PHP using the RTC Server RESTful API
    // Customer ID
    $customerKey = env('AGORA_CUSTMOR_KRY');
    // Customer secret
    $customerSecret = env('AGORA_CUSTMOR_SECRET');
    // Concatenate customer key and customer secret
    $credentials = $customerKey . ":" . $customerSecret;

    // Encode with base64
    $base64Credentials = base64_encode($credentials);
    // Create authorization header
    $arr_header = "Authorization: Basic " . $base64Credentials;

    $curl = curl_init();
    // Send HTTP request
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://api.agora.io/dev/v1/projects',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'GET',

      CURLOPT_HTTPHEADER => array(
        $arr_header,
        'Content-Type: application/json'
      ),
    ));

    $response = curl_exec($curl);

    if($response === false) {
        echo "Error in cURL : " . curl_error($curl);
    }

    curl_close($curl);

    Log::info((string) $response);
    // echo $response;
  } catch (\Exception $e) {
      return ['error' => $e->getMessage()];
  }
}

ここで使用されたAPIは、dev/v1/projectsです。そのほかのAPIは、Server RESTful APIに記載されています。「Try it out」からAPIを試してみることもできます。

$arr_header = "Authorization: Basic " . $base64Credentials;

というパラメータをつけてHTTPリクエストを送ることで認証しています。
先ほど実行したAPIからPROJECT_IDが返ってきます。これはAPP_IDとは異なるようです。

プロジェクトを指定して取得するAPIは、
https://api.agora.io/dev/v1/project?id={PROJECT_ID}&name={PROJECT_NAME}ですが、ここにはAPP_IDではなく、PROJECT_IDを渡します。

トークン認証もありますが、使用例がよくわかっていないので、様子見です。(トークン認証は、動的キーとUIDが必要になります。)

例) GET/dev/v3/usage

一部抜粋

$projectID = env('AGORA_PROJECT_ID');

// 現在の月初と月末を取得
$from_date = date("Y-m-01");
$to_date = date("Y-m-t");

// Send HTTP request
curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.agora.io/dev/v3/usage?project_id=$projectID&from_date=$from_date&to_date=$to_date&business=default",
));

Agora Analytics RESTful API (Beta)

Agora Analytics RESTful API (Beta)を試してみます。ここまではこの為の準備です。
目的としては、UID毎の通話時間を割り出したいです。

ユーザーの通話時間の取得方法については、How do I get the user's call duration?こちらに書いてありました。

ユーザー毎の通話時間を割り出す

ユーザーの通話時間の取得方法については2つあるようです。

  • Agora RTCSDKを使用する
  • Agora Analyticsを使用する

Agora RTCSDKはブラウザで使用するのでネットワーク切れなど不安があります。然るにAgora AnalyticsのCall Searchを使用して、取得する方法で行きます。
また、Call Search APIには、過去3日間の制限などがあるので確認してください。

しかし、Call Search APIのレスポンスに「You cannot consume this service as you are not invited, please contact Agora support」を表示されるので、Agoraのサポートに連絡中です。

もしかしたら、Agora RTCSDKで通話中に計測するのが良いかもしれません。なので少し実装してみます。

Agora RTCSDK

Report Call Statisticsに詳細が記載されています。

Vue.jsですが、このような形で取得できます。DBに加算していけば良いかと思います。

async leave () {
  const clientStats = this.rtc.client.getRTCStats()
  console.log('clientStats', clientStats)

  // Leave the channel.
  await this.rtc.client.leave()
},

資料