Skip to content

Commit 869338d

Browse files
author
Vinothini Dharmaraj
committed
Merge branch 'callautomation/release/ga4' of https://github.com/Azure/azure-sdk-for-net into callautomation/release/ga4
2 parents 0cf9206 + 95094dc commit 869338d

File tree

6 files changed

+43
-106
lines changed

6 files changed

+43
-106
lines changed

sdk/communication/Azure.Communication.CallAutomation/CHANGELOG.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Release History
22

3-
## 1.3.0-beta.2 (Unreleased)
3+
## 1.3.0 (Unreleased)
44

55
### Features Added
66

@@ -9,18 +9,17 @@
99
### Bugs Fixed
1010

1111
### Other Changes
12+
- Added CreateCallFailed event to signify when create call API fails to establish a call
13+
- Added AnswerFailed event to signify when answer call API fails to answer a call
1214

1315
## 1.3.0-beta.1 (2024-08-02)
1416

1517
### Features Added
1618

1719
- Support multiple play sources for Play and Recognize
1820
- Support for PlayStarted event in Play/Recognize
19-
- Support for the real time transcription
20-
- Monetization for real-time transcription and audio streaming
2121
- Hold and Unhold the participant
2222
- Support to manage the rooms/servercall/group call using connect API
23-
- Support for the audio streaming
2423
- Expose original PSTN number target from incoming call event in call connection properties
2524
- Support for VoIP to PSTN transfer scenario
2625

sdk/communication/Azure.Communication.CallAutomation/src/CallAutomationClientOptions.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class CallAutomationClientOptions : ClientOptions
1616
/// <summary>
1717
/// The latest version of the CallAutomation service.
1818
/// </summary>
19-
internal const ServiceVersion LatestVersion = ServiceVersion.V2024_06_15_Preview;
19+
internal const ServiceVersion LatestVersion = ServiceVersion.V2024_09_15;
2020

2121
internal string ApiVersion { get; }
2222

@@ -36,6 +36,7 @@ public CallAutomationClientOptions(ServiceVersion version = LatestVersion)
3636
ServiceVersion.V2023_10_15 => "2023-10-15",
3737
ServiceVersion.V2024_04_15 => "2024-04-15",
3838
ServiceVersion.V2024_06_15_Preview => "2024-06-15-preview",
39+
ServiceVersion.V2024_09_15 => "2024-09-15",
3940
_ => throw new ArgumentOutOfRangeException(nameof(version)),
4041
};
4142
}
@@ -64,7 +65,12 @@ public enum ServiceVersion
6465
/// <summary>
6566
/// Latest BETA4 (1.3.0-beta) preview of the CallAutomation service.
6667
/// </summary>
67-
V2024_06_15_Preview = 4
68+
V2024_06_15_Preview = 4,
69+
70+
/// <summary>
71+
/// Latest GA4 (1.3.0) of the CallAutomation service.
72+
/// </summary>
73+
V2024_09_15 = 5
6874
#pragma warning restore CA1707 // Identifiers should not contain underscores
6975
}
7076
}

sdk/communication/Azure.Communication.CallAutomation/tests/CallAutomationClients/CallAutomationClientTests.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class CallAutomationClientTests : CallAutomationTestBase
1515
[TestCaseSource(nameof(TestData_AnswerCall))]
1616
public async Task AnswerCallAsync_200OK(string incomingCallContext, Uri callbackUri)
1717
{
18-
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(200, CreateOrAnswerCallOrGetCallConnectionPayload);
18+
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(200, DummyPayload);
1919

2020
var response = await callAutomationClient.AnswerCallAsync(incomingCallContext, callbackUri).ConfigureAwait(false);
2121
Assert.NotNull(response);
@@ -27,7 +27,7 @@ public async Task AnswerCallAsync_200OK(string incomingCallContext, Uri callback
2727
[TestCaseSource(nameof(TestData_AnswerCall))]
2828
public void AnswerCall_200OK(string incomingCallContext, Uri callbackUri)
2929
{
30-
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(200, CreateOrAnswerCallOrGetCallConnectionPayload);
30+
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(200, DummyPayload);
3131

3232
var response = callAutomationClient.AnswerCall(incomingCallContext, callbackUri);
3333
Assert.NotNull(response);
@@ -39,7 +39,7 @@ public void AnswerCall_200OK(string incomingCallContext, Uri callbackUri)
3939
[TestCaseSource(nameof(TestData_AnswerCall))]
4040
public async Task AnswerCallWithOptionsAsync_200OK(string incomingCallContext, Uri callbackUri)
4141
{
42-
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(200, CreateOrAnswerCallOrGetCallConnectionWithMediaSubscriptionAndTranscriptionPayload);
42+
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(200, DummyPayload);
4343
AnswerCallOptions options = new AnswerCallOptions(incomingCallContext: incomingCallContext, callbackUri: callbackUri)
4444
{
4545
OperationContext = "operation_context"
@@ -55,7 +55,7 @@ public async Task AnswerCallWithOptionsAsync_200OK(string incomingCallContext, U
5555
[TestCaseSource(nameof(TestData_AnswerCall))]
5656
public void AnswerCallWithOptions_200OK(string incomingCallContext, Uri callbackUri)
5757
{
58-
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(200, CreateOrAnswerCallOrGetCallConnectionWithMediaSubscriptionAndTranscriptionPayload);
58+
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(200, DummyPayload);
5959
AnswerCallOptions options = new AnswerCallOptions(incomingCallContext: incomingCallContext, callbackUri: callbackUri)
6060
{
6161
};
@@ -182,7 +182,7 @@ public void RejectCall_404NotFound(string incomingCallContext, CallRejectReason
182182
[TestCaseSource(nameof(TestData_CreateCall))]
183183
public async Task CreateCallAsync_201Created(CallInvite target, Uri callbackUri)
184184
{
185-
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, CreateOrAnswerCallOrGetCallConnectionPayload);
185+
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, DummyPayload);
186186

187187
var options = new CreateCallOptions(target, callbackUri);
188188
var response = await callAutomationClient.CreateCallAsync(options).ConfigureAwait(false);
@@ -196,7 +196,7 @@ public async Task CreateCallAsync_201Created(CallInvite target, Uri callbackUri)
196196
[TestCaseSource(nameof(TestData_CreateCall))]
197197
public void CreateCall_201Created(CallInvite target, Uri callbackUri)
198198
{
199-
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, CreateOrAnswerCallOrGetCallConnectionPayload);
199+
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, DummyPayload);
200200

201201
var options = new CreateCallOptions(target, callbackUri);
202202
var response = callAutomationClient.CreateCall(options);
@@ -210,7 +210,7 @@ public void CreateCall_201Created(CallInvite target, Uri callbackUri)
210210
[TestCaseSource(nameof(TestData_CreateCall))]
211211
public async Task CreateCallWithOptionsAsync_201Created(CallInvite target, Uri callbackUri)
212212
{
213-
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, CreateOrAnswerCallOrGetCallConnectionWithMediaSubscriptionAndTranscriptionPayload);
213+
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, DummyPayload);
214214
CreateCallOptions options = new CreateCallOptions(
215215
callInvite: target,
216216
callbackUri: callbackUri)
@@ -228,7 +228,7 @@ public async Task CreateCallWithOptionsAsync_201Created(CallInvite target, Uri c
228228
[TestCaseSource(nameof(TestData_CreateCall))]
229229
public void CreateCallWithOptions_201Created(CallInvite target, Uri callbackUri)
230230
{
231-
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, CreateOrAnswerCallOrGetCallConnectionWithMediaSubscriptionAndTranscriptionPayload);
231+
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, DummyPayload);
232232
CreateCallOptions options = new CreateCallOptions(
233233
callInvite: target,
234234
callbackUri: callbackUri)
@@ -336,7 +336,7 @@ public void GetCallRecording()
336336
[TestCaseSource(nameof(TestData_CreateGroupCall))]
337337
public async Task CreateGroupCallAsync_201Created(IEnumerable<CommunicationIdentifier> targets, Uri callbackUri, PhoneNumberIdentifier callerIdNumber)
338338
{
339-
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, CreateOrAnswerCallOrGetCallConnectionWithMediaSubscriptionAndTranscriptionPayload);
339+
CallAutomationClient callAutomationClient = CreateMockCallAutomationClient(201, DummyPayload);
340340
CreateGroupCallOptions options = new(
341341
targets: targets,
342342
callbackUri: callbackUri)

sdk/communication/Azure.Communication.CallAutomation/tests/CallConnections/CallConnectionTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class CallConnectionTests : CallAutomationTestBase
4444
[Test]
4545
public async Task GetCallConnectionPropertiesAsync_200OK()
4646
{
47-
var callConnection = CreateMockCallConnection(200, CreateOrAnswerCallOrGetCallConnectionPayload);
47+
var callConnection = CreateMockCallConnection(200, DummyPayload);
4848

4949
var response = await callConnection.GetCallConnectionPropertiesAsync().ConfigureAwait(false);
5050

@@ -56,7 +56,7 @@ public async Task GetCallConnectionPropertiesAsync_200OK()
5656
[Test]
5757
public void GetCallConnectionProperties_200OK()
5858
{
59-
var callConnection = CreateMockCallConnection(200, CreateOrAnswerCallOrGetCallConnectionPayload);
59+
var callConnection = CreateMockCallConnection(200, DummyPayload);
6060

6161
var response = callConnection.GetCallConnectionProperties();
6262

sdk/communication/Azure.Communication.CallAutomation/tests/CallMedias/CallMediaAutomatedLiveTests.cs

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2300,58 +2300,6 @@ public async Task HoldUnholdParticipantInACallTest()
23002300
throw;
23012301
}
23022302
}
2303-
private async Task<(string CallerCallConnectionId, string TargetCallConnectionId)> CreateAndAnswerCallWithMediaOrTranscriptionOptions(
2304-
CallAutomationClient client,
2305-
CallAutomationClient targetClient,
2306-
CommunicationUserIdentifier target,
2307-
string uniqueId,
2308-
bool isOutboundValidation
2309-
)
2310-
{
2311-
try
2312-
{
2313-
// create call and assert response
2314-
var createCallOptions = new CreateCallOptions(new CallInvite(target), new Uri(TestEnvironment.DispatcherCallback + $"?q={uniqueId}"));
2315-
if (isOutboundValidation)
2316-
{
2317-
createCallOptions.CallIntelligenceOptions = new CallIntelligenceOptions()
2318-
{
2319-
CognitiveServicesEndpoint = new Uri(TestEnvironment.CognitiveServiceEndpoint)
2320-
};
2321-
}
2322-
CreateCallResult response = await client.CreateCallAsync(createCallOptions).ConfigureAwait(false);
2323-
var callerCallConnectionId = response.CallConnectionProperties.CallConnectionId;
2324-
Assert.IsNotEmpty(response.CallConnectionProperties.CallConnectionId);
2325-
2326-
// wait for incomingcall context
2327-
string? incomingCallContext = await WaitForIncomingCallContext(uniqueId, TimeSpan.FromSeconds(20));
2328-
Assert.IsNotNull(incomingCallContext);
2329-
2330-
// answer the call
2331-
var answerCallOptions = new AnswerCallOptions(incomingCallContext, new Uri(TestEnvironment.DispatcherCallback + $"?q={uniqueId}"));
2332-
if (!isOutboundValidation)
2333-
{
2334-
answerCallOptions.CallIntelligenceOptions = new CallIntelligenceOptions()
2335-
{
2336-
CognitiveServicesEndpoint = new Uri(TestEnvironment.CognitiveServiceEndpoint)
2337-
};
2338-
}
2339-
AnswerCallResult answerResponse = await targetClient.AnswerCallAsync(answerCallOptions);
2340-
2341-
var targetCallConnectionId = answerResponse.CallConnectionProperties.CallConnectionId;
2342-
// wait for callConnected
2343-
2344-
var connectedEvent = await WaitForEvent<CallConnected>(targetCallConnectionId, TimeSpan.FromSeconds(20));
2345-
Assert.IsNotNull(connectedEvent);
2346-
Assert.IsTrue(connectedEvent is CallConnected);
2347-
Assert.AreEqual(targetCallConnectionId, ((CallConnected)connectedEvent!).CallConnectionId);
2348-
return (callerCallConnectionId, targetCallConnectionId);
2349-
}
2350-
catch (Exception)
2351-
{
2352-
throw;
2353-
}
2354-
}
23552303

23562304
private async Task VerifyRecognizeFailedEventForMultipleSources(string callConnectionId,
23572305
CallAutomationClient client, List<PlaySource> playMultipleSources,

sdk/communication/Azure.Communication.CallAutomation/tests/Infrastructure/CallAutomationTestBase.cs

Lines changed: 21 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,27 @@ namespace Azure.Communication.CallAutomation.Tests.Infrastructure
1212
public class CallAutomationTestBase
1313
{
1414
protected const string ConnectionString = "endpoint=https://contoso.azure.com/;accesskey=ZHVtbXlhY2Nlc3NrZXk=";
15-
protected const string DummyPayload = "{{" +
16-
"\"callConnectionId\": \"someCallConnectionId\"," +
17-
"\"serverCallId\": \"someServerCallId\"," +
18-
"\"targets\": [" +
19-
"{{" +
20-
"\"rawId\":\"targetId\"," +
21-
"\"kind\":\"communicationUser\"," +
22-
"\"communicationUser\":{{\"id\":\"targetId\"}}" +
23-
"}}" +
24-
"]," +
25-
"\"sourceDisplayName\": \"displayName\"," +
26-
"\"source\":{{" +
27-
"\"rawId\":\"sourceId\"," +
28-
"\"kind\":\"communicationUser\"," +
29-
"\"communicationUser\":{{\"id\":\"sourceId\"}}" +
30-
"}}," +
31-
"\"callConnectionState\": \"connecting\"," +
32-
"\"subject\": \"dummySubject\"," +
33-
"\"callbackUri\": \"https://bot.contoso.com/callback\"," +
34-
"\"mediaStreamingSubscription\": {0}," +
35-
"\"transcriptionSubscription\": {1}" +
36-
"}}";
15+
protected const string DummyPayload = "{" +
16+
"\"callConnectionId\": \"someCallConnectionId\"," +
17+
"\"serverCallId\": \"someServerCallId\"," +
18+
"\"targets\": [" +
19+
"{" +
20+
"\"rawId\": \"targetId\"," +
21+
"\"kind\": \"communicationUser\"," +
22+
"\"communicationUser\": {\"id\": \"targetId\"}" +
23+
"}" +
24+
"]," +
25+
"\"sourceDisplayName\": \"displayName\"," +
26+
"\"source\": {" +
27+
"\"rawId\": \"sourceId\"," +
28+
"\"kind\": \"communicationUser\"," +
29+
"\"communicationUser\": {\"id\": \"sourceId\"}" +
30+
"}," +
31+
"\"callConnectionState\": \"connecting\"," +
32+
"\"subject\": \"dummySubject\"," +
33+
"\"callbackUri\": \"https://bot.contoso.com/callback\"" +
34+
"}";
35+
3736
protected const string DummyConnectPayload = "{" +
3837
"\"callConnectionId\": \"someCallConnectionId\"," +
3938
"\"serverCallId\": \"someServerCallId\"," +
@@ -50,21 +49,6 @@ public class CallAutomationTestBase
5049
protected const string DisplayName = "displayName";
5150
protected static readonly CallLocator _serverCallLocator = new ServerCallLocator(ServerCallId);
5251

53-
private const string NoneMediaStreamingSubscription = "null";
54-
private const string MediaSubscriptionId = "\"mediaSubscriptionId\"";
55-
private const string MediaStreamingSubscription = "{" +
56-
" \"id\": \"22c3a25a-aed5-47df-9ef9-5ba5c7b6d08e\"," +
57-
"\"state\": \"disabled\",\"subscribedContentTypes\": [" +
58-
"\"audio\"] }";
59-
private const string TranscriptionSubscription = "{" +
60-
"\"id\": \"81c66a1b-12eb-4d89-ab99-c9f0de59e893\"," +
61-
"\"state\": \"inactive\"," +
62-
"\"subscribedResultTypes\": [\"final\"]}";
63-
private const string NoneTranscriptionSubscription = "null";
64-
private const string DataSubscriptionId = "\"dataSubscriptionId\"";
65-
protected string CreateOrAnswerCallOrGetCallConnectionPayload = string.Format(DummyPayload, NoneMediaStreamingSubscription, NoneTranscriptionSubscription);
66-
protected string CreateOrAnswerCallOrGetCallConnectionWithMediaSubscriptionAndTranscriptionPayload = string.Format(DummyPayload, MediaStreamingSubscription, TranscriptionSubscription);
67-
6852
internal CallAutomationClient CreateMockCallAutomationClient(int responseCode, object? responseContent = null, HttpHeader[]? httpHeaders = null)
6953
{
7054
var mockResponse = new MockResponse(responseCode);

0 commit comments

Comments
 (0)