Skip to content

Commit 67c0149

Browse files
Merge pull request #273853 from rahulva-msft/rahulva/ga3
GA3 BYOS updates.
2 parents 2f5865c + 23bb154 commit 67c0149

File tree

9 files changed

+151
-28
lines changed

9 files changed

+151
-28
lines changed

articles/communication-services/concepts/call-automation/call-recording/bring-your-own-storage.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ ms.service: azure-communication-services
1313

1414
# Bring your own Azure storage overview
1515

16-
[!INCLUDE [Private Preview Disclaimer](../../../../communication-services/includes/private-preview-include-section.md)]
17-
18-
1916
Bring Your Own Azure Storage for Call Recording allows you to specify an Azure blob storage account for storing call recording files. Bring your own Azure storage enables businesses to store their data in a way that meets their compliance requirements and business needs. For example, end-users could customize their own rules and access to the data, enabling them to store or delete content whenever they need it. Bring your own Azure Storage provides a simple and straightforward solution that eliminates the need for developers to invest time and resources in downloading and exporting files.
2017

2118
The same Azure Communication Services Call Recording APIs are used to export recordings to your Azure Blob Storage Container. While starting recording for a call, specify the container path where the recording needs to be exported. Upon recording completion, Azure Communication Services automatically fetches and uploads your recording to your storage.
@@ -29,8 +26,8 @@ Bring your own Azure storage uses [Azure Managed Identities](/entra/identity/man
2926

3027
## Known issues
3128

32-
- Azure Communication Services will also store your files in a built-in storage for 48 hours even if the exporting is successful.
33-
- Randomly, recording files are duplicated during the exporting process. Make sure you delete the duplicated file to avoid extra storage costs in your storage account.
29+
- Azure Communication Services will also store your files in a built-in storage for 24 hours even if the exporting is successful.
30+
- For Pause on Start Recording the meta data file would have an incorrect pause duration in relation to the recording file.
3431

3532

3633
## Next steps

articles/communication-services/concepts/voice-video-calling/call-recording.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ For example, you can record 1:1 or 1:N audio and video calls:
2525
![Diagram showing a call that it's being recorded.](../media/call-recording-client.png)
2626

2727
But also, you can use Call Recording to record complex PSTN or VoIP inbound and outbound calling workflows managed by [Call Automation](../call-automation/call-automation.md).
28-
Regardless of how you established the call, Call Recording allows you to produce mixed or unmixed media files that are stored for 48 hours on a built-in temporary storage. You can retrieve the files and take them to the long-term storage solution of your choice. Call Recording supports all Azure Communication Services data regions.
28+
Regardless of how you established the call, Call Recording allows you to produce mixed or unmixed media files that are stored for 24 hours on a built-in temporary storage. You can retrieve the files , move it your own Azure Blob Store [Bring Your Own Storage](../../quickstarts\call-automation\call-recording\bring-your-own-storage.md) or a storage solution of your choice. Call Recording supports all Azure Communication Services data regions.
2929

3030

3131
![Diagram showing call recording architecture.](../media/call-recording-with-call-automation.png)
@@ -70,7 +70,7 @@ A `recordingId` is returned when recording is started, which is then used for fo
7070
Call Recording use [Azure Event Grid](../../../event-grid/event-schema-communication-services.md) to provide you with notifications related to media and metadata.
7171

7272
> [!NOTE]
73-
> Azure Communication Services provides short term media storage for recordings. **Recordings will be available to download for 48 hours.** After 48 hours, recordings will no longer be available.
73+
> Azure Communication Services provides short term media storage for recordings. **Recordings will be available to download for 24 hours.** After 24 hours, recordings will no longer be available.
7474
7575

7676
An Event Grid notification `Microsoft.Communication.RecordingFileStatusUpdated` is published when a recording is ready for retrieval, typically a few minutes after the recording process has completed (for example, meeting ended, recording stopped). Recording event notifications include `contentLocation` and `metadataLocation`, which are used to retrieve both recorded media and a recording metadata file.

articles/communication-services/quickstarts/call-automation/call-recording/bring-your-own-storage.md

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
ms.author: dbasantes
33
title: Azure Communication Services Call Recording Bring Your Own Storage
44
titleSuffix: An Azure Communication Services document
5-
description: Private Preview quickstart for Bring your own storage
5+
description: Quickstart for Bring your own storage
66
author: dbasantes
77
services: azure-communication-services
88
ms.date: 03/17/2023
@@ -14,25 +14,21 @@ ms.custom: mode-api, devx-track-extended-java
1414
---
1515
# Call recording: Bring your own Azure storage quickstart
1616

17-
[!INCLUDE [Private Preview](../../../includes/private-preview-include-section.md)]
18-
1917
This quickstart gets you started with Bring your own Azure storage for Call Recording. To start using Bring your own Azure Storage functionality, make sure you're familiar with the [Call Recording APIs](../../voice-video-calling/get-started-call-recording.md).
2018

21-
You need to be part of the Azure Communication Services TAP program. It's likely that you’re already part of this program, and if you aren't, sign-up using https://aka.ms/acs-tap-invite. Bring your own Azure Storage uses Managed Identities, to access to this functionality for Call Recording, submit your Azure Communication Services Resource IDs by filling this - [Registration form](https://forms.office.com/r/njact5SiVJ). You need to fill the form every time you need a new resource ID allow-listed.
22-
23-
## Pre-requisite: Setting up Managed Identity and RBAC role assignments
19+
## Pre-requisite: Setting up Managed Identity and Role Based Access Controls(RBAC) role assignments
2420

2521
### 1. Enable system assigned managed identity for Azure Communication Services
2622

2723
![Diagram showing a communication service resource with managed identity disabled](../media/byos-managed-identity-1.png)
2824

2925
1. Open your Azure Communication Services resource. Navigate to *Identity* on the left.
30-
2. System Assigned Managed Identity is disabled by default. Enable it and click on *Save*
26+
2. Enabled System Assigned Managed Identity and click on *Save*.
3127
3. Once completed, you're able to see the Object principal ID of the newly created identity.
3228

3329
![Diagram showing a communication service resource with managed identity enabled](../media/byos-managed-identity-2.png)
3430

35-
4. Now that identity has been successfully created, click on *Azure role assignments* to start adding role assignments.
31+
4. Once the identity has been successfully created, click on *Azure role assignments* to start adding role assignments.
3632

3733
### 2. Add role assignment
3834

@@ -67,7 +63,7 @@ Use the server call ID received during initiation of the call.
6763

6864
### Notification on successful export
6965

70-
Use an [Azure Event Grid](../../../../event-grid/overview.md) web hook, or other triggered action, to notify your services when the recorded media is ready and have been exported to the external storage location.
66+
Use an [Azure Event Grid](../../../../event-grid/overview.md) web hook, or other triggered action, to notify your services when the recorded media is ready and exported to the external storage location.
7167

7268
Refer to this example of the event schema.
7369

@@ -77,7 +73,7 @@ Refer to this example of the event schema.
7773
"topic": "string", // /subscriptions/{subscription-id}/resourceGroups/{group-name}/providers/Microsoft.Communication/communicationServices/{communication-services-resource-name}
7874
"subject": "string", // /recording/call/{call-id}/serverCallId/{serverCallId}
7975
"data": {
80-
"storageType": "string", // acsstorage, blobstorage etc.
76+
"storageType": "string", // AzureBlob etc.
8177
"recordingId": "string", // unique id for recording
8278
"recordingStorageInfo": {
8379
"recordingChunks": [
@@ -101,6 +97,13 @@ Refer to this example of the event schema.
10197
"eventTime": "string" // ISO 8601 date time for when the event was created
10298
}
10399
```
100+
### Folder Structure for Call Recording
101+
102+
Recordings are stored in the following format as shown in the diagram.
103+
- /YYYYMMDD/callId/first_8_of_recordingId + '-' + unique guid/[chunk-id]-acsmetadata.documentId.json
104+
- /YYYYMMDD/callId/first_8_of_recordingId + '-' + unique guid/[chunk-id]-audiomp3.documentId.mp3
105+
106+
![Diagram showing a Call Recording Folder structure](../media/call-recording-folder.png)
104107

105108
## Next steps
106109

133 KB
Loading

articles/communication-services/quickstarts/voice-video-calling/get-started-call-recording.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
---
2-
ms.author: dbasantes
3-
title: Azure Communication Services Call Recording refreshed API quickstart
2+
ms.author: rahulva
3+
title: Azure Communication Services Call Recording API quickstart
44
titleSuffix: An Azure Communication Services document
5-
description: Public Preview quickstart for Call Recording APIs
5+
description: Quickstart for Call Recording APIs
66
author: dbasantes
77
services: azure-communication-services
88
ms.date: 06/12/2023

articles/communication-services/quickstarts/voice-video-calling/includes/call-recording-samples/call-recording-csharp.md

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,38 @@ StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCal
6262
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
6363
.StartAsync(recordingOptions);
6464
```
65+
### 2.1. Start Recording - Bring Your Own Azure Blob Store
66+
Start Recording with your own Azure Blob Storage defined to store the recording file once recording is complete.
6567

66-
### 2.1. Only for Unmixed - Specify a user on channel 0
68+
```csharp
69+
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
70+
{
71+
RecordingContent = RecordingContent.Audio,
72+
RecordingChannel = RecordingChannel.Unmixed,
73+
RecordingFormat = RecordingFormat.Wav,
74+
RecordingStateCallbackUri = new Uri("<CallbackUri>"),
75+
RecordingStorage = RecordingStorage.CreateAzureBlobContainerRecordingStorage(new Uri("<YOUR_STORAGE_CONTAINER_URL>"))
76+
};
77+
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
78+
.StartAsync(recordingOptions);
79+
```
80+
## 2.2. Start recording session with Pause mode enabled using 'StartAsync' API
81+
> [!NOTE]
82+
> **Recordings will need to be resumed for recording file to be generated.**
83+
```csharp
84+
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<ServerCallId>"))
85+
{
86+
RecordingContent = RecordingContent.Audio,
87+
RecordingChannel = RecordingChannel.Unmixed,
88+
RecordingFormat = RecordingFormat.Wav,
89+
PauseOnStart = true,
90+
RecordingStateCallbackUri = new Uri("<CallbackUri>");
91+
};
92+
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
93+
.StartAsync(recordingOptions);
94+
```
95+
96+
### 2.3. Only for Unmixed - Specify a user on channel 0
6797
To produce unmixed audio recording files, you can use the `AudioChannelParticipantOrdering` functionality to specify which user you want to record on channel 0. The rest of the participants are assigned to a channel as they speak. If you use `RecordingChannel.Unmixed` but don't use `AudioChannelParticipantOrdering`, Call Recording assigns channel 0 to the first participant speaking.
6898

6999
```csharp
@@ -79,7 +109,7 @@ StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCal
79109
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording().StartAsync(recordingOptions);
80110
```
81111

82-
### 2.2. Only for Unmixed - Specify channel affinity
112+
### 2.4. Only for Unmixed - Specify channel affinity
83113

84114
```csharp
85115
var channelAffinity = new ChannelAffinity(new CommunicationUserIdentifier("<ACS_USER_MRI>")) { Channel = 0};

articles/communication-services/quickstarts/voice-video-calling/includes/call-recording-samples/call-recording-java.md

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,38 @@ Response<RecordingStateResult> response = callAutomationClient.getCallRecording(
6666

6767
```
6868

69-
### 2.1. Only for Unmixed - Specify a user on channel 0
69+
### 2.1. Start Recording - Bring Your Own Azure Blob Store
70+
Start Recording session with your own Azure Blob Storage to store the recording file once recording is complete.
71+
72+
```java
73+
StartRecordingOptions recordingOptions = new StartRecordingOptions(callLocator)
74+
.setRecordingChannel(RecordingChannel.MIXED)
75+
.setRecordingContent(RecordingContent.AUDIO_VIDEO)
76+
.setRecordingFormat(RecordingFormat.MP4)
77+
.setRecordingStorage(new AzureBlobContainerRecordingStorage("<YOUR_STORAGE_CONTAINER_URL>"));
78+
79+
// //start recording
80+
RecordingStateResult result = callRecording.start(recordingOptions);
81+
```
82+
83+
### 2.2. Start recording session with Pause mode enabled using 'StartAsync' API
84+
> [!NOTE]
85+
> **Recordings will need to be resumed for recording file to be generated.**
86+
```java
87+
StartRecordingOptions recordingOptions = new StartRecordingOptions(new ServerCallLocator("<serverCallId>"))
88+
.setRecordingChannel(RecordingChannel.UNMIXED)
89+
.setRecordingFormat(RecordingFormat.WAV)
90+
.setRecordingContent(RecordingContent.AUDIO)
91+
.setRecordingStateCallbackUrl("<recordingStateCallbackUrl>")
92+
.setPauseOnStart(true)
93+
.setAudioChannelParticipantOrdering(List.of(new CommunicationUserIdentifier("<participantMri>")));
94+
95+
Response<RecordingStateResult> response = callAutomationClient.getCallRecording()
96+
.startWithResponse(recordingOptions, null);
97+
98+
```
99+
100+
### 2.3. Only for Unmixed - Specify a user on channel 0
70101
To produce unmixed audio recording files, you can use the `AudioChannelParticipantOrdering` functionality to specify which user you want to record on channel 0. The rest of the participants will be assigned to a channel as they speak. If you use `RecordingChannel.Unmixed` but don't use `AudioChannelParticipantOrdering`, Call Recording will assign channel 0 to the first participant speaking.
71102

72103
```java
@@ -82,7 +113,7 @@ Response<RecordingStateResult> response = callAutomationClient.getCallRecording(
82113

83114
```
84115

85-
### 2.2. Only for Unmixed - Specify channel affinity
116+
### 2.4. Only for Unmixed - Specify channel affinity
86117
```java
87118
ChannelAffinity channelAffinity = new ChannelAffinity()
88119
.setParticipant(new PhoneNumberIdentifier("RECORDING_ID"))

articles/communication-services/quickstarts/voice-video-calling/includes/call-recording-samples/call-recording-javascript.md

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,45 @@ var options: StartRecordingOptions =
6565
var response = await callAutomationClient.getCallRecording().start(options);
6666
```
6767

68-
### 2.1. Only for Unmixed - Specify a user on channel 0
68+
### 2.1. Start Recording - Bring Your Own Azure Blob Store
69+
Start Recording with your own Azure Blob Storage defined to store the recording file once recording is complete.
70+
71+
```javascript
72+
const recordingStorageKind: RecordingStorageKind = "azureBlobStorage"
73+
const recordingStorage: RecordingStorage = {
74+
recordingStorageKind: recordingStorageKind,
75+
recordingDestinationContainerUrl: "<YOUR_STORAGE_CONTAINER_URL>"
76+
}
77+
var options: StartRecordingOptions = {
78+
callLocator: callLocator,
79+
recordingContent: "audio",
80+
recordingChannel:"unmixed",
81+
recordingFormat: "wav",
82+
recordingStateCallbackEndpointUrl: "<CallbackUri>",
83+
recordingStorage: recordingStorage
84+
};
85+
var response = await callAutomationClient.getCallRecording().start(options);
86+
```
87+
## 2.2. Start recording session with Pause mode enabled using 'StartAsync' API
88+
> [!NOTE]
89+
> **Recordings will need to be resumed for recording file to be generated.**
90+
```javascript
91+
var locator: CallLocator = { id: "<ServerCallId>", kind: "serverCallLocator" };
92+
93+
var options: StartRecordingOptions =
94+
{
95+
callLocator: locator,
96+
recordingContent: "audio",
97+
recordingChannel:"unmixed",
98+
recordingFormat: "wav",
99+
pauseOnStart: true
100+
recordingStateCallbackEndpointUrl: "<CallbackUri>",
101+
audioChannelParticipantOrdering:[{communicationUserId: "<ACS_USER_MRI>"}]
102+
};
103+
var response = await callAutomationClient.getCallRecording().start(options);
104+
```
105+
106+
### 2.3. Only for Unmixed - Specify a user on channel 0
69107
To produce unmixed audio recording files, you can use the `AudioChannelParticipantOrdering` functionality to specify which user you want to record on channel 0. The rest of the participants will be assigned to a channel as they speak. If you use `RecordingChannel.Unmixed` but don't use `AudioChannelParticipantOrdering`, Call Recording will assign channel 0 to the first participant speaking.
70108

71109
```javascript
@@ -83,7 +121,7 @@ var options: StartRecordingOptions =
83121
var response = await callAutomationClient.getCallRecording().start(options);
84122
```
85123

86-
### 2.2. Only for Unmixed - Specify channel affinity
124+
### 2.4. Only for Unmixed - Specify channel affinity
87125

88126
```javascript
89127
var options: StartRecordingOptions =

articles/communication-services/quickstarts/voice-video-calling/includes/call-recording-samples/call-recording-python.md

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,31 @@ response = call_automation_client.start_recording(call_locator=ServerCallLocator
5959
recording_state_callback_url = "<CallbackUri>")
6060
```
6161

62-
### 2.1. Only for Unmixed - Specify a user on channel 0
62+
### 2.1. Start Recording - Bring Your Own Azure Blob Store
63+
Start Recording with your own Azure Blob Storage defined to store the recording file once recording is complete.
64+
65+
```python
66+
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
67+
recording_content_type = RecordingContent.Audio,
68+
recording_channel_type = RecordingChannel.Unmixed,
69+
recording_format_type = RecordingFormat.Wav,
70+
recording_state_callback_url = "<CallbackUri>",
71+
recording_storage = AzureBlobContainerRecordingStorage(container_url="<YOUR_STORAGE_CONTAINER_URL>"))
72+
```
73+
## 2.2. Start recording session with Pause mode enabled using 'StartAsync' API
74+
> [!NOTE]
75+
> **Recordings will need to be resumed for recording file to be generated.**
76+
77+
```python
78+
response = call_automation_client.start_recording(call_locator=ServerCallLocator(server_call_id),
79+
recording_content_type = RecordingContent.Audio,
80+
recording_channel_type = RecordingChannel.Unmixed,
81+
recording_format_type = RecordingFormat.Wav,
82+
pause_on_start = true,
83+
recording_state_callback_url = "<CallbackUri>")
84+
```
85+
86+
### 2.3. Only for Unmixed - Specify a user on channel 0
6387
To produce unmixed audio recording files, you can use the `AudioChannelParticipantOrdering` functionality to specify which user you want to record on channel 0. The rest of the participants will be assigned to a channel as they speak. If you use `RecordingChannel.Unmixed` but don't use `AudioChannelParticipantOrdering`, Call Recording will assign channel 0 to the first participant speaking.
6488

6589
```python
@@ -71,7 +95,7 @@ response = call_automation_client.start_recording(call_locator=ServerCallLocato
7195
audio_channel_participant_ordering=[CommunicationUserIdentifier(id="<ACS_USER_MRI>")])
7296
```
7397

74-
### 2.2. Only for Unmixed - Specify channel affinity
98+
### 2.4. Only for Unmixed - Specify channel affinity
7599

76100
```python
77101
_channel_affinity = ChannelAffinity(target_participant=CommunicationUserIdentifier("<ACS_USER_MRI>"), channel=0)

0 commit comments

Comments
 (0)