클라이언트에 통화 대화 내용 기록 상태 표시
통화 내용을 기록하기 전에 모든 참여자의 동의를 받아야 합니다. Microsoft Teams를 사용하면 사용자가 모임나 통화 중에 대화 내용을 기록할 수 있습니다. 전사가 시작되면 이벤트를 받게 됩니다. 통화 또는 모임에 참가하기 전에 전사가 시작되었는지 전사 상태를 확인할 수 있습니다. 모임 또는 통화에 필요한 경우 전사에 대한 명시적 동의를 제공할 수 있으며 이미 수집한 것입니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- 배포된 Communication Services 리소스. Communication Services 리소스 만들기
- 호출 클라이언트를 사용하도록 설정하는 사용자 액세스 토큰입니다. 자세한 내용은 액세스 토큰 만들기 및 관리를 참조하세요.
- 선택 사항: 빠른 시작을 완료하여 애플리케이션에 음성 통화를 추가합니다.
지원
다음 표에서는 Azure Communication Services에서 통화 내용 기록 지원에 대해 정의합니다.
ID 및 호출 형식
다음 표에서는 특정 통화 형식과 ID에 대한 대화 내용 기록 지원을 보여 줍니다.
Identities | Teams 모임 | 방 | 1:1 통화 | 그룹 통화 | 1:1 Teams Interop 통화 | 그룹 Teams Interop 통화 |
---|---|---|---|---|---|---|
Communication Services 사용자 | ✔️ | ✔️ | ✔️ | |||
Microsoft 365 사용자 | ✔️ | ✔️ | ✔️ |
작업
다음 표에서는 개별 ID 유형에 대한 SDK 호출에서 개별 API의 지원을 보여 줍니다.
작업 | Communication Services 사용자 | Microsoft 365 사용자 |
---|---|---|
대화 내용 기록이 시작된 이벤트 가져오기 | ✔️ | ✔️ |
대화 내용 기록 상태 가져오기 | ✔️ | ✔️ |
대화 내용 기록 시작 또는 중지 | ||
명시적 동의가 필요한지 여부 알아보기 | ✔️[1] | ✔️[1] |
전사되는 것에 대한 명시적 동의 제공 | ✔️[1] | ✔️[1] |
[1] 이 기능은 Teams 모임 및 그룹 Teams 상호 운용성 호출에서만 사용할 수 있습니다.
SDK
다음 표에서는 개별 Azure Communication Services SDK에서 지원되는 대화 내용 기록 기능을 보여 줍니다.
플랫폼 | 웹 | 웹 UI | iOS | iOS UI | Android | Android UI | Windows |
---|---|---|---|---|---|---|---|
지원됨 | ✔️ | ✔️[1] | ✔️[1] | ✔️[1] | ✔️[1] | ✔️[1] | ✔️[1] |
[1] 이러한 SDK는 명시적 동의를 지원하지 않습니다.
SDK 설치
npm install
명령을 사용하여 다음과 같은 JavaScript용 Azure Communication Services Common 및 통화 SDK를 설치합니다.
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
필수 개체 초기화
대부분의 호출 작업에는 CallClient
인스턴스가 필요합니다. 새 CallClient
인스턴스를 만들 때 Logger
인스턴스와 같은 사용자 지정 옵션을 사용하여 이 새 인스턴스를 구성할 수 있습니다.
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 console, file, buffer, REST API, or whatever location you want
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()
Microsoft 인프라에 대한 SDK 연결을 가장 잘 관리하는 방법
Call Agent
인스턴스는 통화를 관리하는 데 도움이 됩니다(통화 참여 또는 시작). 작동하려면 통화 SDK가 Microsoft 인프라에 연결하여 수신 전화에 대한 알림을 가져오고 기타 호출 세부 정보를 조정해야 합니다. 사용자의 Call Agent
에는 두 가지 상태가 있을 수 있습니다.
연결됨 - Call Agent
connectionStatue 값이 Connected
이면 클라이언트 SDK가 연결되어 있고 Microsoft 인프라로부터 알림을 받을 수 있음을 의미합니다.
연결 끊김 - Disconnected
의 Call Agent
connectionStatue 값은 SDK가 제대로 연결되지 못하게 하는 문제가 있음을 나타냅니다. Call Agent
를 다시 만들어야 합니다.
invalidToken
: 토큰이 만료되었거나 유효하지 않은 경우Call Agent
인스턴스가 이 오류와 함께 연결 끊기됩니다.connectionIssue
: Microsoft 인프라에 연결하는 클라이언트에 문제가 있는 경우 여러 번 다시 시도한 후Call Agent
에서connectionIssue
오류를 노출합니다.
connectionState
속성의 현재 값을 검사하여 로컬 Call Agent
가 Microsoft 인프라에 연결되어 있는지 확인할 수 있습니다. 활성 통화 중에 connectionStateChanged
이벤트를 수신 대기하여 Call Agent
가 연결됨에서 연결 끊김 상태로 변경되는지 확인할 수 있습니다.
const connectionState = callAgentInstance.connectionState;
console.log(connectionState); // it may return either of 'Connected' | 'Disconnected'
const connectionStateCallback = (args) => {
console.log(args); // it will return an object with oldState and newState, each of having a value of either of 'Connected' | 'Disconnected'
// it will also return reason, either of 'invalidToken' | 'connectionIssue'
}
callAgentInstance.on('connectionStateChanged', connectionStateCallback);
Warning
Microsoft Teams의 변경 내용으로 인해 버전 1.21 이하에서 JavaScript를 호출하는 SDK가 Teams 대화 내용 기록을 중단하고 Teams 사용자가 대화 내용 기록을 시작할 수 없도록 차단합니다. 통화 및 모임에서 Teams의 대화 내용 기록을 활용하려면 통화 SDK를 최소 1.22 버전으로 업그레이드해야 합니다.
통화록
Transcription
은 클래스 Call
의 확장 기능입니다. 먼저 대화 내용 기록 기능 API 개체를 가져와야 합니다.
const callTranscriptionFeature = call.feature(Features.Transcription);
isTranscriptionActive
속성에서 대화 내용 기록 상태를 확인할 수 있습니다. 값이 true
로 설정되면, 대화 내용 기록이 활성화됩니다.
const isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive;
대화 내용 기록 상태가 변경될 때 트리거되는 이벤트를 구독할 수 있습니다.
const isTranscriptionActiveChangedHandler = () => {
console.log(callTranscriptionFeature.isTranscriptionActive);
};
callTranscriptionFeature.on('isTranscriptionActiveChanged', isTranscriptionActiveChangedHandler);
다음 코드를 사용하여 이벤트 구독을 취소할 수 있습니다.
callTranscriptionFeature.off('isTranscriptionActiveChanged', isTranscriptionActiveChangedHandler);
명시적 동의
Teams 모임 또는 통화가 녹음/녹화에 대한 명시적 동의를 요구하도록 구성된 경우 사용자가 기록하거나 기록할 수 있도록 사용자로부터 명시적 동의를 수집해야 합니다. 모임에 참가할 때 사전에 동의하거나 녹음/녹화가 시작될 때 사후적으로 동의를 제공할 수 있습니다. 명시적 동의가 주어질 때까지 참가자의 오디오, 비디오 및 화면 공유는 전사 중에 비활성화됩니다.
모임 대화 내용에 속성에 의한 명시적 동의가 필요한지 확인할 수 있습니다 isTeamsConsentRequired
. 값이 설정된 true
경우 명시적 동의가 필요합니다 call
.
const isTranscriptionConsentRequired = callTranscriptionFeature.isTeamsConsentRequired;
전사에 대한 사용자의 동의를 이미 얻은 경우 메서드를 grantTeamsConsent()
호출하여 서비스에 대한 명시적 동의를 나타낼 수 있습니다. 이 동의는 한 call
세션에만 유효하며 사용자는 모임에 다시 참가하는 경우 다시 동의를 제공해야 합니다.
callTranscriptionFeature.grantTeamsConsent();
전사가 활성 상태이고 명시적 동의가 필요하지만 아직 제공되지 않은 경우 오디오, 비디오 또는 화면 공유를 사용하도록 설정하려는 시도가 실패합니다. 클래스의 ParticipantCapabilities
속성에서 기능을 확인하여 이 상황을 인식할 수 있습니다 unmuteMic
turnVideoOn
shareScreen
.reason
이러한 기능은 기능 call.feature(Features.Capabilities)
에서 찾을 수 있습니다. 이러한 기능은 사용자가 명시적 동의를 제공해야 하므로 이유를 ExplicitConsentRequired
반환합니다.
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();
Warning
Azure Communication Services 호출 Android SDK의 버전 1.1.0 및 베타 릴리스 버전 1.1.0-beta.1까지는 isTranscriptionActive
및 addOnIsTranscriptionActiveChangedListener
가 Call
개체의 일부입니다. 새 베타 릴리스의 경우 해당 API는 아래 설명과 같이 Call
의 확장 기능으로 이동되었습니다.
통화 대화 내용 기록은 핵심 Call
개체의 확장 기능입니다. 먼저 대화 내용 기록 기능 개체를 가져와야 합니다.
TranscriptionCallFeature callTranscriptionFeature = call.feature(Features.TRANSCRIPTION);
그런 다음, 통화 대화 내용이 기록되고 있는지 확인하려면 callTranscriptionFeature
의 isTranscriptionActive
속성을 검사합니다. boolean
를 반환합니다.
boolean isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive();
또한 대화 내용 기록의 변경 사항을 구독할 수 있습니다.
private void handleCallOnIsTranscriptionChanged(PropertyChangedEvent args) {
boolean isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive();
}
callTranscriptionFeature.addOnIsTranscriptionActiveChangedListener(handleCallOnIsTranscriptionChanged);
시스템 설정
다음 단계에 따라 시스템을 설정합니다.
Xcode 프로젝트 만들기
Xcode에서 새 iOS 프로젝트를 만들고 단일 보기 앱 템플릿을 선택합니다. 이 문서에서는 SwiftUI 프레임워크를 사용하므로 언어를 Swift로 설정하고 인터페이스를 SwiftUI로 설정해야 합니다.
이 문서에서는 테스트를 만들지 않을 것입니다. 테스트 포함 확인란을 선택 취소합니다.
CocoaPods를 사용하여 패키지 및 종속성 설치
다음 예제와 같이 애플리케이션에 대한 Podfile을 만듭니다.
platform :ios, '13.0' use_frameworks! target 'AzureCommunicationCallingSample' do pod 'AzureCommunicationCalling', '~> 1.0.0' end
pod install
를 실행합니다.Xcode로
.xcworkspace
를 엽니다.
마이크에 대한 액세스 요청
디바이스의 마이크에 액세스하려면 앱의 정보 속성 목록을 NSMicrophoneUsageDescription
(으)로 업데이트해야 합니다. 연결된 값을 시스템에서 사용자의 액세스를 요청하는 데 사용하는 대화 상자에 포함된 문자열로 설정합니다.
프로젝트 트리의 Info.plist 항목을 마우스 오른쪽 단추로 클릭한 다음 Open As>Source Code를 선택합니다. 최상위 <dict>
섹션에 다음 줄을 추가한 다음, 파일을 저장합니다.
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for VOIP calling.</string>
앱 프레임워크 설정
프로젝트의 ContentView.swift
파일을 엽니다. AzureCommunicationCalling
라이브러리를 가져오려면 파일 상단에 import
선언을 추가합니다. 추가로 AVFoundation
을 가져옵니다. 코드의 오디오 권한 요청에 필요합니다.
import AzureCommunicationCalling
import AVFoundation
CallAgent 초기화
CallAgent
에서 CallClient
인스턴스를 만들려면 초기화된 후 비동기적으로 callClient.createCallAgent
개체를 반환하는 CallAgent
메서드를 사용해야 합니다.
호출 클라이언트를 만들려면 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)
}
직접 만든 CommunicationTokenCredential
개체를 CallClient
에 전달하고 표시 이름을 설정합니다.
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")
}
})
Warning
Azure Communication Services 통화 iOS SDK의 버전 1.1.0 및 베타 릴리스 버전 1.1.0-beta.1까지는 isTranscriptionActive
가 Call
개체의 일부이고 didChangeTranscriptionState
는 CallDelegate
대리자의 일부입니다. 새 베타 릴리스의 경우 해당 API는 아래 설명과 같이 Call
의 확장 기능으로 이동되었습니다.
통화 대화 내용 기록은 핵심 Call
개체의 확장 기능입니다. 먼저 대화 내용 기록 기능 개체를 가져와야 합니다.
let callTranscriptionFeature = call.feature(Features.transcription)
그런 다음, 통화 대화 내용이 기록되고 있는지 확인하기 위해 callTranscriptionFeature
의 isTranscriptionActive
속성을 검사합니다. Bool
를 반환합니다.
let isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive;
이벤트 didChangeTranscriptionState
를 사용하여 클래스에 TranscriptionCallFeatureDelegate
대리자를 구현하여 전사 변경 내용을 구독할 수도 있습니다.
callTranscriptionFeature.delegate = self
// didChangeTranscriptionState is a member of TranscriptionCallFeatureDelegate
public func transcriptionCallFeature(_ transcriptionCallFeature: TranscriptionCallFeature, didChangeTranscriptionState args: PropertyChangedEventArgs) {
let isTranscriptionActive = callTranscriptionFeature.isTranscriptionActive
}
시스템 설정
다음 단계에 따라 시스템을 설정합니다.
Visual Studio 프로젝트 만들기
유니버설 Windows 플랫폼 앱의 경우 Visual Studio 2022에서 새 빈 앱(유니버설 Windows) 프로젝트를 만듭니다. 프로젝트 이름을 입력한 다음 10.0.17763.0보다 버전이 높은 Windows SDK를 아무거나 선택합니다.
WinUI 3 앱의 경우, 빈 앱, 패키지됨(데스크톱의 WinUI 3) 템플릿으로 새 프로젝트를 만들어 한 페이지 짜리 WinUI 3 앱을 설정합니다. Windows 앱 SDK 버전 1.3 이상이 필요합니다.
NuGet 패키지 관리자를 사용하여 패키지와 종속성 설치
Calling SDK API와 라이브러리는 NuGet 패키지를 통해 공개적으로 사용할 수 있습니다.
호출 SDK NuGet 패키지를 찾고, 다운로드하고, 설치하려면 다음을 수행합니다.
- 도구>NuGet 패키지 관리자>솔루션용 NuGet 패키지 관리를 선택해 NuGet 패키지 관리자를 엽니다.
- 찾아보기를 선택한 다음 검색 상자에 Azure.Communication.Calling.WindowsClient를 입력합니다.
- 시험판 포함 확인란이 선택되어 있는지 확인합니다.
- Azure.Communication.Calling.WindowsClient 패키지를 선택한 다음, Azure.Communication.Calling.WindowsClient 1.4.0-beta.1 이상 버전을 선택합니다.
- 오른쪽 창에서 Azure Communication Services 프로젝트에 해당하는 확인란을 선택합니다.
- 설치를 선택합니다.
통화 대화 내용 기록은 핵심 Call
개체의 확장 기능입니다. 먼저 대화 내용 기록 기능 개체를 가져와야 합니다.
TranscriptionCallFeature transcriptionFeature = call.Features.Transcription;
그런 다음, 통화 대화 내용이 기록되고 있는지 확인하려면 transcriptionFeature
의 IsTranscriptionActive
속성을 검사합니다. boolean
를 반환합니다.
boolean isTranscriptionActive = transcriptionFeature.isTranscriptionActive;
또한 대화 내용 기록의 변경 사항을 구독할 수 있습니다.
private async void Call__OnIsTranscriptionActiveChanged(object sender, PropertyChangedEventArgs args)
boolean isTranscriptionActive = transcriptionFeature.IsTranscriptionActive();
}
transcriptionFeature.IsTranscriptionActiveChanged += Call__OnIsTranscriptionActiveChanged;