クライアントで通話レコーディングを管理する

重要

このドキュメントで説明されている機能は、現在、パブリック プレビュー段階にあります。 このプレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

通話レコーディングは、Azure Communication Services で行った通話をユーザーが記録できるようにする機能です。 ここでは、クライアント側でレコーディングを管理する方法について説明します。 この機能を使用するためには、あらかじめサーバー側のレコーディングをセットアップする必要があります。

前提条件

SDK のインストール

npm install コマンドを使用して、JavaScript 用の Azure Communication Services 通話と共通の各 SDK をインストールします。

npm install @azure/communication-common --save
npm install @azure/communication-calling --save

必要なオブジェクトを初期化する

CallClient インスタンスは、ほとんどの呼び出し操作に必要です。 新しい CallClient インスタンスを作成しましょう。 Logger インスタンスなどのカスタム オプションを使用して構成できます。

CallClient インスタンスを用意したら、CallClient インスタンスで createCallAgent メソッドを呼び出すことで、CallAgent インスタンスを作成できます。 このメソッドでは、非同期的に CallAgent インスタンス オブジェクトが返されます。

createCallAgent メソッドでは、CommunicationTokenCredential が引数として使用されます。 これは、ユーザー アクセス トークンを受け取ります。

CallClient インスタンスで getDeviceManager メソッドを使用して、deviceManager にアクセスできます。

const { CallClient } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential} = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");

// Set the logger's log level
setLogLevel('verbose');

// Redirect log output to wherever desired. To console, file, buffer, REST API, etc...
AzureLogger.log = (...args) => {
    console.log(...args); // Redirect log output to console
};

const userToken = '<USER_TOKEN>';
callClient = new CallClient(options);
const tokenCredential = new AzureCommunicationTokenCredential(userToken);
const callAgent = await callClient.createCallAgent(tokenCredential, {displayName: 'optional Azure Communication Services user name'});
const deviceManager = await callClient.getDeviceManager()

通話を記録する

Note

この API は開発者向けにプレビューとして提供されており、寄せられたフィードバックにもとづいて変更される場合があります。 この API は運用環境で使用しないでください。 この API を使用するには、Azure Communication Services Calling Web SDK の "ベータ" リリースを使用してください。

通話記録は、コア Call API の拡張機能です。 まず、Calling SDK から呼び出し機能をインポートする必要があります。

import { Features} from "@azure/communication-calling";

その後、呼び出しインスタンスから記録機能 API オブジェクトを取得することができます。

const callTransferApi = call.feature(Features.Recording);

次に、通話が記録されているかどうかを確認するために、callRecordingApiisRecordingActive プロパティを調べます。 Boolean を返します。

const isRecordingActive = callRecordingApi.isRecordingActive;

また、変更の記録をサブスクライブすることもできます。

const isRecordingActiveChangedHandler = () => {
    console.log(callRecordingApi.isRecordingActive);
};

callRecordingApi.on('isRecordingActiveChanged', isRecordingActiveChangedHandler);

SDK のインストール

プロジェクト レベルの build.gradle を見つけて、buildscript および allprojects の下のリポジトリの一覧に mavenCentral() を追加します

buildscript {
    repositories {
    ...
        mavenCentral()
    ...
    }
}
allprojects {
    repositories {
    ...
        mavenCentral()
    ...
    }
}

次に、お使いのモジュール レベルの build.gradle で、次の行を dependencies セクションに追加します

dependencies {
    ...
    implementation 'com.azure.android:azure-communication-calling:1.0.0'
    ...
}

必要なオブジェクトを初期化する

CallAgent インスタンスを作成するには、CallClient インスタンスで createCallAgent メソッドを呼び出す必要があります。 これにより、CallAgent インスタンス オブジェクトが非同期に返されます。 createCallAgent メソッドが引数として受け取る CommunicationUserCredential には、アクセス トークンがカプセル化されています。 DeviceManager にアクセスするには、最初に callAgent インスタンスを作成してから、CallClient.getDeviceManager メソッドを使用して DeviceManager を取得する必要があります。

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an Activity for instance
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential).get();
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();

呼び出し元の表示名を設定するには、この代替メソッドを使用します。

String userToken = '<user token>';
CallClient callClient = new CallClient();
CommunicationTokenCredential tokenCredential = new CommunicationTokenCredential(userToken);
android.content.Context appContext = this.getApplicationContext(); // From within an Activity for instance
CallAgentOptions callAgentOptions = new CallAgentOptions();
callAgentOptions.setDisplayName("Alice Bob");
DeviceManager deviceManager = callClient.getDeviceManager(appContext).get();
CallAgent callAgent = callClient.createCallAgent(appContext, tokenCredential, callAgentOptions).get();

通話を記録する

警告

Azure Communication Services Calling Android SDK のバージョン 1.1.0 およびベータ リリース バージョン 1.1.0-beta.1 までは、isRecordingActive および addOnIsRecordingActiveChangedListenerCall オブジェクトの一部になっています。 新しいベータ リリースでは、これらの API は、以下に説明するように Call の拡張機能として移動されています。

Note

この API は開発者向けにプレビューとして提供されており、寄せられたフィードバックにもとづいて変更される場合があります。 この API は運用環境で使用しないでください。 この API を使用するには、Azure Communication Services Calling Android SDK の "ベータ" リリースを使用してください

通話レコーディングは、コア Call オブジェクトの拡張機能です。 まず、レコーディング機能オブジェクトを取得する必要があります。

RecordingCallFeature callRecordingFeature = call.feature(Features.RECORDING);

次に、通話が記録されているかどうかを確認するために、callRecordingFeatureisRecordingActive プロパティを調べます。 boolean を返します。

boolean isRecordingActive = callRecordingFeature.isRecordingActive();

また、変更の記録をサブスクライブすることもできます。

private void handleCallOnIsRecordingChanged(PropertyChangedEvent args) {
	boolean isRecordingActive = callRecordingFeature.isRecordingActive();
}

callRecordingFeature.addOnIsRecordingActiveChangedListener(handleCallOnIsRecordingChanged);

アプリケーションから記録を開始する場合は、まず「通話録音の概要」に従って通話記録を設定する手順を実行してください。

サーバーで通話録音を設定したら、Android アプリケーションで通話から ServerCallId 値を取得し、それをサーバーに送信して録音プロセスを開始する必要があります。 ServerCallId 値は、getInfo() を使用してクラス オブジェクト内に見つけることができる CallInfo クラスの getServerCallId() を使用して見つけることができます。

try {
    String serverCallId = call.getInfo().getServerCallId().get();
    // Send serverCallId to your recording server to start the call recording.
} catch (ExecutionException | InterruptedException e) {

} catch (UnsupportedOperationException unsupportedOperationException) {

}

サーバーから録音が開始されると、イベント handleCallOnIsRecordingChanged がトリガーされ、callRecordingFeature.isRecordingActive() の値が true になります。

通話録音を停止する場合は、通話録音を開始するのと同じように、ServerCallId を取得し、これを録音サーバーに送信して、録音サーバーが通話録音を停止できるようにする必要があります。

try {
    String serverCallId = call.getInfo().getServerCallId().get();
    // Send serverCallId to your recording server to stop the call recording.
} catch (ExecutionException | InterruptedException e) {

} catch (UnsupportedOperationException unsupportedOperationException) {

}

サーバーから録音が停止されると、イベント handleCallOnIsRecordingChanged がトリガーされ、callRecordingFeature.isRecordingActive() の値が false になります。

システムを設定する

Xcode プロジェクトを作成する

Xcode で、新しい iOS プロジェクトを作成し、 [単一ビュー アプリ] テンプレートを選択します。 このクイックスタートでは SwiftUI フレームワークを使用します。そのため、 [言語][Swift] に、 [ユーザー インターフェイス][SwiftUI] に設定する必要があります。

このクイックスタートでは、単体テストと UI テストは作成しません。 [Include Unit Tests](単体テストを含める)[Include UI Tests](UI テストを含める) のテキスト ボックスは自由にオフにしてかまいません。

Screenshot that shows the window for creating a project within Xcode.

CocoaPods でパッケージと依存関係をインストールする

  1. 次のようにして、アプリケーションのポッドファイルを作成します。

    platform :ios, '13.0'
    use_frameworks!
    target 'AzureCommunicationCallingSample' do
        pod 'AzureCommunicationCalling', '~> 1.0.0'
    end
    
  2. pod install を実行します。

  3. Xcode で .xcworkspace を開きます。

マイクへのアクセスを要求する

デバイスのマイクにアクセスするには、アプリの情報プロパティ リストを NSMicrophoneUsageDescription で更新する必要があります。 関連付けられた値を string に設定します。これは、ユーザーからのアクセスを求めるためにシステムによって使用されるダイアログに含められます。

プロジェクト ツリーの Info.plist のエントリを右クリックし、 [Open As](形式を指定して開く)>[Source Code](ソース コード) の順に選択します。 最上位の <dict> セクションに以下の行を追加してから、ファイルを保存します。

<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>

アプリのフレームワークを設定する

プロジェクトの ContentView.swift ファイルを開き、そのファイルの先頭に import 宣言を追加して AzureCommunicationCalling ライブラリをインポートします。 さらに、AVFoundation をインポートします。 これは、コード内のオーディオ アクセス許可要求に必要になります。

import AzureCommunicationCalling
import AVFoundation

CallAgent を初期化する

CallClient から CallAgent インスタンスを作成するには、初期化された後に CallAgent オブジェクトを非同期に返す callClient.createCallAgent メソッドを使用する必要があります。

通話クライアントを作成するには、CommunicationTokenCredential オブジェクトを渡す必要があります。

import AzureCommunication

let tokenString = "token_string"
var userCredential: CommunicationTokenCredential?
do {
    let options = CommunicationTokenRefreshOptions(initialToken: token, refreshProactively: true, tokenRefresher: self.fetchTokenSync)
    userCredential = try CommunicationTokenCredential(withOptions: options)
} catch {
    updates("Couldn't created Credential object", false)
    initializationDispatchGroup!.leave()
    return
}

// tokenProvider needs to be implemented by Contoso, which fetches a new token
public func fetchTokenSync(then onCompletion: TokenRefreshOnCompletion) {
    let newToken = self.tokenProvider!.fetchNewToken()
    onCompletion(newToken, nil)
}

CallClient に作成した CommunicationTokenCredential オブジェクトを渡し、表示名を設定します。

self.callClient = CallClient()
let callAgentOptions = CallAgentOptions()
options.displayName = " iOS Azure Communication Services User"

self.callClient!.createCallAgent(userCredential: userCredential!,
    options: callAgentOptions) { (callAgent, error) in
        if error == nil {
            print("Create agent succeeded")
            self.callAgent = callAgent
        } else {
            print("Create agent failed")
        }
})

通話を記録する

警告

Azure Communication Services Calling iOS SDK のバージョン 1.1.0 およびベータ リリース バージョン 1.1.0-beta.1 までは、isRecordingActiveCall オブジェクトの一部になっていて、didChangeRecordingStateCallDelegate デリゲートの一部になっています。 新しいベータ リリースでは、これらの API は、以下に説明するように Call の拡張機能として移動されています。

Note

この API は開発者向けにプレビューとして提供されており、寄せられたフィードバックにもとづいて変更される場合があります。 この API は運用環境で使用しないでください。 この API を使用するには、Azure Communication Services Calling iOS SDK の "ベータ" リリースを使用してください

通話記録は、コア Call オブジェクトの拡張機能です。 まず、レコーディング機能オブジェクトを取得する必要があります。

let callRecordingFeature = call.feature(Features.recording)

次に、通話が記録されているかどうかを確認するために、callRecordingFeatureisRecordingActive プロパティを調べます。 Bool を返します。

let isRecordingActive = callRecordingFeature.isRecordingActive;

イベント didChangeRecordingState を使用してクラスに RecordingCallFeatureDelegate デリゲートを実装することにより、録音の変更をサブスクライブすることもできます。

callRecordingFeature.delegate = self

// didChangeRecordingState is a member of RecordingCallFeatureDelegate
public func recordingCallFeature(_ recordingCallFeature: RecordingCallFeature, didChangeRecordingState args: PropertyChangedEventArgs) {
    let isRecordingActive = recordingFeature.isRecordingActive
}

アプリケーションから記録を開始する場合は、まず「通話録音の概要」に従って通話記録を設定する手順を実行してください。

サーバーで通話録音を設定したら、iOS アプリケーションで通話から ServerCallId 値を取得し、それをサーバーに送信して録音プロセスを開始する必要があります。 ServerCallId 値は、getInfo() を使用してクラス オブジェクト内に見つけることができる CallInfo クラスの getServerCallId() を使用して見つけることができます。

// Send serverCallId to your recording server to start the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }

サーバーから録音が開始されると、イベント didChangeRecordingState がトリガーされ、recordingFeature.isRecordingActive の値が true になります。

通話録音を停止する場合は、通話録音を開始するのと同じように、ServerCallId を取得し、これを録音サーバーに送信して、録音サーバーが通話録音を停止できるようにする必要があります。

// Send serverCallId to your recording server to stop the call recording.
let serverCallId = call.info.getServerCallId(){ (serverId, error) in }

サーバーから録音が停止されると、イベント didChangeRecordingState がトリガーされ、recordingFeature.isRecordingActive の値が false になります。

次のステップ