Von Bedeutung
Azure Communication Services のこの機能は現在プレビュー中です。 プレビュー段階の機能は一般公開されており、新規および既存の Microsoft のすべてのお客様が使用できます。
このプレビュー バージョンはサービス レベル アグリーメントなしで提供されており、運用環境のワークロードに使用することは推奨されません。 特定の機能がサポートされていないか、機能が制約されている可能性があります。
詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。
この記事では、独立系ソフトウェア ベンダー (ISV) が Teams Phone 拡張機能 (TPE) のスコープに対して Teams Phone をプロビジョニングする方法について説明します。 この記事では、テナントが実装する必要がある Teams の操作があるため、ISV が顧客を誘導する方法についても説明します。
推定
- ISV の顧客は、Teams 管理センターにアクセスできます。
- ISV のお客様は、Microsoft 365 管理センターにアクセスできます。
- ISV には、Azure Communication Services のリソース設定を変更するためのアクセス権があります。
- Graph API を使用するために、CCaaS サービスへのアクセス権を Teams テナントに付与します。
- ISV では、.NET ACS Call Automation SDK バージョン 1.5.0-beta.1 が使用されています。
- ISV では、JavaScript ACS Call Automation SDK バージョン 1.5.0-beta.2 が使用されています。
- ISV では、JavaScript ACS クライアント SDK バージョン 1.36.1-beta.1 が使用されています。
簡単スタート
この記事の残りの部分では、CCaaS Developer と Teams Tenant という 2 つの異なるペルソナのクイック スタートについて説明します。 CCaaS 開発者は、Azure Communication Services を使用して CCaaS サービスを構築する ISV ペルソナです。 Teams テナントは、Teams Phone に管理している ISV の顧客であるペルソナです。
CCaaS 開発者: AppID (アプリケーション ID) をプロビジョニングする
ボットを作成する前に、アプリケーション ID を登録する必要があります。
Azure portal で、[ アプリの登録] を開きます。
[新規登録] を選択します。
必須フィールドに入力し、[ 登録] をクリックします。
ポータルでリソースが完了したら、[リソース に移動] をクリックします。
アプリケーション (クライアント) ID とディレクトリ (テナント) ID の値を記録します。
証明書とシークレットを開きます。 新しいクライアント シークレットを作成し、証明書とシークレット ID の値を記録します。
詳細については、「呼び出し元のボットの登録」を参照してください。
CCaaS 開発者: ボットを作成する
AppID
を作成すると、Teams Phone システムは、Graph で定義されている現在のプロセスを使用してボットを作成します。
または、次の手順を実行して、Azure CLI を使用してアプリケーション ID を作成した後でボットのみを作成することもできます。
Azure CLI をダウンロードします。
前のアプリ登録に使用した Azure アカウントでサインインします。
az login
まだインストールされていない場合は、
Az.BotService
インストールします。Install-Module Az.BotService -AllowClobber
次のコマンドを使用してボットをプロビジョニングします。 詳細については、「 Azure PowerShell を使用してボットを発行する - Azure AI Bot Service - Bot Service:
環境が既にプロビジョニングされている場合は、次の手順をスキップします。
Connect-AzAccount
Install-Module Az.Resources
Register-AzResourceProvider -ProviderNamespace Microsoft.BotService
必須:
New-AzBotService -ResourceGroupName <your RG name here> -Name "<name of Teams Phone bot>" -ApplicationId <your Application/ClientID from Entra> -Location <bot location> -Sku S1 -Description "<description of bot>"
例:
New-AzBotService -ResourceGroupName teamsphonetest-rg -Name "teamsPhoneBot" -ApplicationId aa123456-1234-1234-1234-aaa123456789 -Location "global" -Sku S1 -Description "My Teams Phone Test Bot"
この手順では、Teams を構成するときに、Webhook に任意の URL を指定できます。 https://mycompanydomain.com
などの有効な URL を入力します。
注
今後、この URL への依存関係は削除される予定です。
Teams 管理者: リソース アカウントをプロビジョニングする
Teams 管理者は、次のコマンドレットを実行する必要があります。 Teams 管理者は、コマンドレットを使用して Teams Phone の拡張性のために Teams リソース アカウントをプロビジョニングする必要があります。 Teams 管理センターは対象外であり、PowerShell 6.1.1 以降が必要です。
次のコマンドを実行して、Teams PowerShell にサインインし、最新バージョンに更新します。
例:
Connect-MicrosoftTeams
Update-Module MicrosoftTeams
New-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) コマンドレットを使用して、リソース アカウントを作成します。 このコマンドでは、Teams Phone の機能拡張に変更はありません。 ApplicationId パラメーターは、サードパーティのボット ID です。 Set-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) で定義されている Teams の一人称アプリケーション ID は、Teams Phone の拡張機能では機能しないため使用しないでください。 アプリケーション ID を Teams テナントに伝える方法については、CCaaS 開発者が行います。
例:
New-CsOnlineApplicationInstance -UserPrincipalName myteamsphoneresourceaccount@contoso.com -ApplicationId aa123456-1234-1234-1234-aaa123456789 -DisplayName "My Teams Phone Resource Account"
更新された Set-CSonlineApplicationInstance コマンドを使用して、リソース アカウントを Azure Communication Services リソースに割り当てます。 このコマンドは、その Azure Communication Services リソースへの呼び出しをルーティングします。 ACSResourceID
を Teams テナントに伝える方法については、CCaaS 開発者が行います。
例:
Set-CsOnlineApplicationInstance -Identity myteamsphoneresourceaccount@contoso.com -ApplicationId aa123456-1234-1234-1234-aaa123456789 -AcsResourceId bb567890-1234-1234-1234-bbb123456789
更新された Sync-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) コマンドを使用して、リソース アカウントをエージェント プロビジョニング サービスに同期します。 このコマンドは、その Azure Communication Services リソースへの呼び出しをルーティングします。 このコマンドでは、Teams Phone の機能拡張に変更はありません。
例:
Sync-CsOnlineApplicationInstance -ObjectId cc123456-5678-5678-1234-ccc123456789 -ApplicationId aa123456-1234-1234-1234-aaa123456789
必要に応じて、 Get-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) コマンドレットを使用して、プロビジョニングされたリソース アカウントを返すことができます。
Teams 管理者: 電話番号を取得してリソース アカウントに割り当てる
このエンドポイントへの通話を行うには、リソース アカウント (RA) に公衆交換電話網 (PSTN) 番号を割り当てる必要があります。 Teams の電話番号をプロビジョニングし、最近プロビジョニングした Teams リソース アカウントに割り当ててみましょう。
Teams 管理センターに移動します。
Teams 管理者ユーザーの資格情報でサインインします。
[ 電話番号 ] セクションに移動し、選択した Teams 電話番号 サービス の種類をプロビジョニングします。 詳細については、「 通話プラン - Microsoft Teamsのサービス電話番号を取得する」を参照してください。 プロビジョニングが完了したら、リソース アカウントに電話番号を割り当てる必要があります。
次のコマンドを実行して、Teams の電話番号をリソース アカウントに割り当てます。
Set-CsPhoneNumberAssignment -Identity <your-TeamsResourceAccount> -PhoneNumber <acquired-number> -PhoneNumberType <DirectRouting|CallingPlan|OperatorConnect>
電話番号の詳細がわからない場合は、次の
get
コマンドレットを実行して電話番号の詳細を取得します。Get-CsPhoneNumberAssignment -TelephoneNumber <acquired-number>
Teams ポータルでは、適切なライセンスの不足について警告を受け取りましたか? その場合は、リソース アカウントに適切なライセンスを割り当てる必要があります。
- Microsoft 365 管理センターに移動します。
- [ライセンス] に移動し、Microsoft Teams電話リソース アカウントをリソース アカウントに割り当てます。
また、リソース アカウントに割り当てられた電話番号を使用して発信 PSTN 通話を行う場合は、 Microsoft Teams通話プランを割り当てるのに適したタイミングです。
CCaaS 開発者: リソース アカウント情報を取得する
割り当てられているリソース アカウントと電話番号の一覧を取得するための新しい Graph API が導入されました。 Graph API では、Microsoft Entra ファースト パーティ applicationID
/ clientId
でオプションのフィルターがサポートされています。
認証:
Graph API では、Graph 認証で現在定義されている代理認証がサポートされています。
認可:
Microsoft Entra ID アプリケーションは、 Microsoft Graph のアクセス許可参照 TeamsResourceAccount.Read.All を要求する必要があります。 そのアクセス許可を割り当てるには、「 委任されたグラフのアクセス許可を割り当てる方法」の手順に従います。
Microsoft Entra アプリケーションには 、管理者の同意も必要です。
Microsoft Entra アプリケーションに適切な Graph アクセス許可を付与したら、そのアプリケーションにユーザーを割り当てる必要があります。 「アプリケーションへのユーザーとグループの割り当てを管理する」の手順に従います。
また、CCaaS 管理者は、Teams リソース アカウント情報にアクセスするための昇格されたアクセス許可も必要です。 Graph API は Teams リソース アカウント情報を取得しており、その情報は Teams 管理者が所有する資産であるため、Teams 管理者としての特権アクセスが必要です。詳細については、「 リソース アカウントを管理するためのアクセス許可」を参照してください。
クエリ定義:
https://graph.microsoft.com/beta/admin/teams/resourceAccounts
appId のフィルターを使用してリソース アカウントを取得する要求 URI (RURI) の例:
GET https://graph.microsoft.com/beta/admin/teams/resourceAccounts?$filter=appid eq 'aa123456-1234-1234-1234-aaa123456789'
成功した応答:
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#admin/teams/resourceAccounts",
"value": [
{
"id": "cc123456-5678-5678-1234-ccc123456789",
"userPrincipalName": "myteamsphoneresourceaccount@contoso.com",
"appId": "aa123456-1234-1234-1234-aaa123456789",
"displayName": "My RA Name",
"phoneNumber": "tel:+1234567890",
"acsResourceId": "bb567890-1234-1234-1234-bbb123456789"
}]
}
CCaaS 開発者: 着信通話の受信と応答
次の手順では、Teams の着信通話を受信して応答する方法を示します。
[前提条件]
- アクティブなサブスクリプションを持つ Azure アカウント。 無料でアカウントを作成できます。
- デプロイ済みの Communication Services リソース。 Communication Services のリソースを作成する。
- 構成済みの Event Grid エンドポイント: 着信の概念 - Azure Communication Services 概念ドキュメント | Microsoft Learn。
- リソース アカウントに割り当てられた Teams の電話番号。
- Azure Communication Services リソースに呼び出しを送信するためにプロビジョニングされた Teams リソース アカウント。
- 通話プランでプロビジョニングされた Teams リソース アカウント。
- Teams リソース アカウントから通話を受信するアクセス許可を持つ Azure Communication Services リソース。
- 開発トンネルを作成してホストします。
- (省略可能)音声が有効な電話ライセンスを持つMicrosoft Teams ユーザーを作成します。 Teams ユーザーを通話に追加するには、Teams 電話ライセンスが必要です。 Microsoft Teamsビジネス オプションの詳細をご覧ください。 詳細については、「 組織内で Teams 電話を設定する」を参照してください。
- 「ユーザーの Teams 電話にアクセスする」の定義に従って、Teams クライアントとは別にクライアントとサーバーの同意を完了します。
注
Azure Communication Services リソースの場合は、データの場所が Teams テナントの場所と一致し、データ境界の規制に準拠していることを確認します。 Get organization を使用して、テナント組織に関するプログラム的な詳細を取得できます
Azure 開発トンネルをセットアップしてホストする
Azure 開発トンネルを使用すると、インターネット上でホストされているローカル Web サービスを共有できます。 コマンドを実行して、ローカル開発環境をパブリック インターネットに接続します。 開発トンネルは永続的なエンドポイント URL を作成し、匿名アクセスを有効にします。 このエンドポイントを使用して、Azure Communication Services Call Automation サービスからのイベントの呼び出しについてアプリケーションに通知します。
devtunnel create --allow-anonymous
devtunnel port create -p 8080
devtunnel host
または、指示に従って 、Visual Studio で Azure 開発トンネルを設定します。
コール自動化のコールバックイベントを処理する
app.MapPost("/api/callbacks", async (CloudEvent[] cloudEvents, ILogger < Program > logger) => {
foreach(var cloudEvent in cloudEvents) {
logger.LogInformation($"Event received: {JsonConvert.SerializeObject(cloudEvent)}");
CallAutomationEventBase parsedEvent = CallAutomationEventParser.Parse(cloudEvent);
logger.LogInformation($"{parsedEvent?.GetType().Name} parsedEvent received for call connection id: {parsedEvent?.CallConnectionId}");
var callConnection = callAutomationClient.GetCallConnection(parsedEvent.CallConnectionId);
var callMedia = callConnection.GetCallMedia();
if (parsedEvent is CallConnected) {
//Handle Call Connected Event
}
}
});
着信呼び出しイベントを処理し、通話に応答する
app.MapPost("/api/incomingCall", async (
[FromBody] EventGridEvent[] eventGridEvents,
ILogger<Program> logger) =>
{
foreach (var eventGridEvent in eventGridEvents)
{
// Handle system events
if (eventGridEvent.TryGetSystemEventData(out object eventData))
{
// Handle the subscription validation event.
if (eventData is SubscriptionValidationEventData subscriptionValidationEventData)
{
var responseData = new SubscriptionValidationResponse
{
ValidationResponse = subscriptionValidationEventData.ValidationCode
};
return Results.Ok(responseData);
}
}
var jsonObject = Helper.GetJsonObject(eventGridEvent.Data);
var fromPhoneNumber = new PhoneNumberIdentifier(Helper.GetFrom(jsonObject));
var toPhoneNumber = new PhoneNumberIdentifier(Helper.GetTo(jsonObject));
var incomingCallContext = Helper.GetIncomingCallContext(jsonObject);
var callbackUri = new Uri(new Uri(devTunnelUri), $"/api/callbacks");
var options = new AnswerCallOptions(incomingCallContext, callbackUri);
AnswerCallResult answerCallResult = await callAutomationClient.AnswerCallAsync(options);
logger.LogInformation($"Answered call for connection id: {answerCallResult.CallConnection.CallConnectionId}");
//Use EventProcessor to process CallConnected event
var answer_result = await answerCallResult.WaitForEventProcessorAsync();
if (answer_result.IsSuccess)
{
logger.LogInformation($"Call connected event received for connection id: {answer_result.SuccessResult.CallConnectionId}");
var callConnectionMedia = answerCallResult.CallConnection.GetCallMedia();
}
}
return Results.Ok();
});
着信通話通知の形式は次のとおりです。 スキーマに変更はありません。 ただし、 to:rawid
には Teams リソース アカウント GUID の ID が反映されるようになりました。
Teams リソース アカウント識別子とカスタム コンテキスト (VoIP および SIP) を使用した着信呼び出しイベントのサンプル:
{
"to": {
"kind": "unknown",
"rawId": "28:orgid:cc123456-5678-5678-1234-ccc123456789"
},
"from": {
"kind": "phoneNumber",
"rawId": "4:+12065551212",
"phoneNumber": {
"value": "+12065551212"
}
},
"serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkudGVhbXMubWljcm9zb2Z0LmNvbS9hcGkvdjIvZXAvY29udi11c3dlLTAyLXNkZi1ha3MuY29udi5za3lwZS5jb20vY29udi9fVERMUjZVS3BrT05aTlRMOHlIVnBnP2k9MTAtNjAtMTMtMjE2JmU9NjM4NTMwMzUzMjk2MjI3NjY1",
"callerDisplayName": "+12065551212",
"customContext":
{
"voipHeaders":
{
"X-myCustomVoipHeaderName": "myValue"
},
"incomingCallContext": "<CALL_CONTEXT VALUE>",
"correlationId": "2e0fa6fe-bf3e-4351-9beb-568add4f5315"
}
CCaaS 開発者: メディアに直接アクセスする方法
Call Automation SDK に付属する組み込みの PlayTo、認識、記録のオプションが CCaaS サービスのニーズを満たしていない場合、CCaaS 開発者はメディアに直接アクセスできます。 AnswerCallOptions
オブジェクトをインスタンス化するときに、REST + Websocket 通知メカニズムを介して呼び出し用のメディアにアクセスできます。 呼び出しが確立されると、メディアは WebSocket 通知を介して、 MediaStreamingOptions
オブジェクトに指定された URL にフローします。 次のコード スニペットの例を参照してください。
次のオプションは、Teams Phone の機能拡張に固有のオプションではなく、Teams Phone 以外の機能拡張フローでも使用できます。
var mediaStreamingOptions = new MediaStreamingOptions(
new Uri("wss://mywebsocket.azure.com/client/hubs/media?accesstoken={access_token}"),
MediaStreamingTransport.WebSocket,
MediaStreamingContent.Audio,
MediaStreamingAudioChannel.Mixed,
);
var answerCallOptions = new AnswerCallOptions(incomingCallContext, callbackUri: new Uri(callConfiguration.AppCallbackUrl)) {
MediaStreamingOptions = mediaStreamingOptions
};
var response = await callingServerClient.AnswerCallAsync(answerCallOptions);
次のコードは、ストリーミング データ オブジェクトのスキーマ定義です。 オーディオ パケットは base64 でエンコードされ、CCaaS は data
属性の値をデコードして、パルス コード変調 (PCM) バイトを取得する必要があります。
{
"kind": <string>, // What kind of data this is, e.g. AudioMetadata, AudioData.
"audioData":{
"data": <string>, // Base64 Encoded audio buffer data
"timestamp": <string>, // In ISO 8601 format (yyyy-mm-ddThh:mm:ssZ)
"participantRawID": <string>,
"silent": <boolean> // Indicates if the received audio buffer contains only silence.
}
}
CCaaS クライアント開発者: デュアル ペルソナとして認証する方法
開発者は、Teams テナント ID とクライアント ID を取得する必要があります。 開発者は、この取得を実装する必要があります。 クライアント アプリケーションがテナント ID とクライアント ID を取得すると、開発者はユーザーにプロンプトを表示する手段を実装します。 詳細については、「 InteractiveBrowserCredential クラス (Azure.Identity)」を参照してください。
ユーザーの操作が完了し、認証が成功すると、トークンが返され、Azure Communication Services トークンを返す AzureCommunicationTokenCredential クラスに 渡されます。
Azure Communication Services トークンを解析して CommunicationUserIdentifier インターフェイスを取得する |Microsoft Learn。
「Microsoft Entra ユーザー トークンを取得できる資格情報を作成する」で定義されているコード サンプルを参照してください。
CCaaS クライアント開発者: Teams 電話機能拡張呼び出しエージェントを構築する方法
開発者は、呼び出し元のクライアントをインスタンス化し、 createTeamsCallAgent メソッドを 呼び出します。 詳細については、「 CallClient クラス」を参照してください。
...
//Auth and get token
...
this._teamsCallAgent = await this._callClient.createTeamsCallAgent(this.tokenCredential);
CCaaS クライアント開発者: 送信 OBO 呼び出しを行う方法
開発者は、代わりに呼び出しを行う必要がある On-Behalf-Of (OBO) ID リソース アカウントを取得する必要があります。 次の記事では、送信 OBO 呼び出しを行う方法について説明します。
OBO ID が取得されたら、onBehalfOfOptions
メソッドまたは StartTeamsGroupCallOptions()
メソッドでStartTeamsCallOptions()
を設定する必要があります。 詳細については、 StartTeamsGroupCallOptions インターフェイス または StartTeamsCallOptions インターフェイスを参照してください。
通話オプションを設定したら、startCall()
で メソッドを使用します。
...
...
const isMultipleParticipants = Array.isArray(userIds) && userIds.length > 1;
this._previousTeamsCall = this._currentTeamsCall;
var onBehalfOfOptions: SDK.OnBehalfOfOptions | undefined;
if (this.elements.onBehalfOfUserInput.value !== null && this.elements.onBehalfOfUserInput.value !== "" ) {
var onBehalfOfUser = myFunctionToGetIdofResourceAccount();
if (isMicrosoftTeamsAppIdentifier(onBehalfOfUser)) {
onBehalfOfOptions = onBehalfOfUser ? { userId: onBehalfOfUser } : undefined;
if (onBehalfOfOptions) {
console.log("OBO options provided with app Id: " + (onBehalfOfUser as MicrosoftTeamsAppIdentifier).teamsAppId);
}
} else {
console.error("OBO option ignored, MicrosoftTeamsAppIdentifier type expected");
}
}
if (isMultipleParticipants) {
const participants = userIds as (MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier)[];
(this._placeCallOptions as SDK.StartTeamsGroupCallOptions).onBehalfOfOptions = onBehalfOfOptions;
call = this._teamsCallAgent.startCall(participants, this._placeCallOptions as SDK.StartTeamsGroupCallOptions);
} else {
const participant = userIds[0] as (MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier);
(this._placeCallOptions as SDK.StartTeamsCallOptions).onBehalfOfOptions = onBehalfOfOptions;
call = this._teamsCallAgent.startCall(participant, this._placeCallOptions as SDK.StartTeamsCallOptions);
}
...
...
CCaaS 開発者: サーバーによって Teams Phone 拡張機能呼び出しエージェントに対処する方法
デュアル ペルソナ ID を使用してエージェントとしてサインインした後、その Teams Phone 機能拡張呼び出しエージェントを、そのデュアル ペルソナ ID を使用して確立された通話に追加できます。
次の例は、Azure Communication Services リソース 0269be4d-5be0-4770-bf9c-a1bf50ee78d5
にスコープが設定されたテナント87d349ed-44d7-43e1-9a83-5f2406dee5bd
、Microsoft Entra ID 識別子e5b7f628-ea94-4fdc-b3d9-1af1fe231111
を持つ Teams Phone 拡張機能呼び出しエージェントを追加する要求を示しています。
//Call is already established
...
...
var target = new TeamsExtensionUserIdentifier("0269be4d-5be0-4770-bf9c-a1bf50ee78d5", "87d349ed-44d7-43e1-9a83-5f2406dee5bd","e5b7f628-ea94-4fdc-b3d9-1af1fe231111");
await callConnection.AddParticipantAsync(new AddParticipantOptions(new CallInvite(target))
{
InvitationTimeoutInSeconds = 60,
OperationContext = "addParticipantAsync"
});
...
...
CCaaS 開発者: サーバーによる Teams 電話機能拡張呼び出しに PSTN ユーザーを追加する方法
Teams 電話機能拡張通話を確立したら、電話番号を使用して PSTN ユーザーを通話に追加できます。
次の例は、電話番号が +12065551212
された Teams 電話機能拡張通話に PSTN ユーザーを追加する要求を示しています。
//Call is already established
...
...
var target = new PhoneNumberIdentifier("+12065551212");
await callConnection.AddParticipantAsync(new AddParticipantOptions(new CallInvite(target, null))
{
InvitationTimeoutInSeconds = 60,
OperationContext = "addParticipantAsync"
});
...
...
CCaaS 開発者: サーバーによる Teams 電話機能拡張呼び出しを PSTN エンドポイントに転送する方法
Teams 電話機能拡張呼び出しを確立したら、電話番号を指定して PSTN ユーザーに転送できます。
次の例は、確立された通話を、電話番号が +12065551212
PSTN ユーザーに転送する要求を示しています。
//Call is already established
...
...
var target = new PhoneNumberIdentifier("+12065551212");
await callConnection.TransferCallToParticipantAsync(new TransferToParticipantOptions(target)
{
OperationContext = "transferParticipantAsync"
});
...
...
CCaaS 開発者: StartRecordingOptions でセッションの記録を開始する方法
Teams Phone 拡張機能の場合は、通話の開始時に受信した CallConnectionId を記録セッションの開始時に使用する必要があります。
- RecordingContent を使用して、記録コンテンツ タイプを渡します。 AUDIO を使用します。
- RecordingChannel を使用して、記録チャネルの種類を渡します。 MIXED または UNMIXED を使用します。
- RecordingFormat を使用して、記録の形式を渡します。 WAV を使用します。
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
StartRecordingOptions recordingOptions = new StartRecordingOptions("<callConnectionId>")
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
注
接続 ID で開始された記録は非同期 (204 応答コード) で開始され、状態の変更の記録は、Microsoft.Communication.RecordingStateChanged
で受信RecordingStateCallbackUri
コールバック イベントによって更新されます。
さらに、記録を開始できなかった場合は、Microsoft.Communication.StartRecordingFailed
で受信された新しいコールバック イベントRecordingStateCallbackUri
介して報告されます。
アルファ SDK
- Automation C# SDK を呼び出す
- Automation Java SDK を呼び出す
- Automation Python SDK を呼び出す
- Automation JavaScript SDK を呼び出す
- クライアント SDK