Skip to content

Commit 8a75bd3

Browse files
committed
Adding the async test for pii redaction
1 parent 562ffda commit 8a75bd3

File tree

2 files changed

+88
-2
lines changed

2 files changed

+88
-2
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"IncomingCall": {"to": {"kind": "communicationUser", "rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000029-63c7-d8d4-2e44-09bd4560b258", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000029-63c7-d8d4-2e44-09bd4560b258"}}, "from": {"kind": "communicationUser", "rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000029-63c7-d86c-2e44-09bd4560b257", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000029-63c7-d86c-2e44-09bd4560b257"}}, "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDUtcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi9WNVBJcEU0ZzFFYU5Rc2pWci1SWkl3P2k9MTAtMTI4LTIzLTI0MyZlPTYzODkwODg5NTUxODM3MjU0Nw==", "callerDisplayName": "REDACTED", "incomingCallContext": "REDACTED", "correlationId": "620dd31b-83b0-45cc-9e2d-ef7c4cc899ea"}, "ParticipantsUpdated": {"id": "8827b2ee-7d7d-4d7e-a5ad-9f1cffbb2a84", "source": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699", "type": "Microsoft.Communication.ParticipantsUpdated", "data": {"participants": [{"identifier": {"rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000029-63c7-d86c-2e44-09bd4560b257", "kind": "communicationUser", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000029-63c7-d86c-2e44-09bd4560b257"}}, "isMuted": false, "isOnHold": false}, {"identifier": {"rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000029-63c7-d8d4-2e44-09bd4560b258", "kind": "communicationUser", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000029-63c7-d8d4-2e44-09bd4560b258"}}, "isMuted": false, "isOnHold": false}], "sequenceNumber": 1, "resultInformation": {"code": 200, "subCode": 0, "message": ""}, "version": "2025-08-15-preview", "callConnectionId": "09006980-f0ba-4fce-b306-318e37271699", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDUtcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi9WNVBJcEU0ZzFFYU5Rc2pWci1SWkl3P2k9MTAtMTI4LTIzLTI0MyZlPTYzODkwODg5NTUxODM3MjU0Nw==", "correlationId": "620dd31b-83b0-45cc-9e2d-ef7c4cc899ea", "publicEventType": "Microsoft.Communication.ParticipantsUpdated"}, "time": "2025-08-19T19:55:09.5876368+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699"}, "CallConnected": {"id": "3cd0bef9-7ae3-418f-bd1d-cc44e63ab5b2", "source": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699", "type": "Microsoft.Communication.CallConnected", "data": {"version": "2025-08-15-preview", "resultInformation": {"code": 200, "subCode": 0, "message": ""}, "callConnectionId": "09006980-f0ba-4fce-b306-318e37271699", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDUtcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi9WNVBJcEU0ZzFFYU5Rc2pWci1SWkl3P2k9MTAtMTI4LTIzLTI0MyZlPTYzODkwODg5NTUxODM3MjU0Nw==", "correlationId": "620dd31b-83b0-45cc-9e2d-ef7c4cc899ea", "publicEventType": "Microsoft.Communication.CallConnected"}, "time": "2025-08-19T19:55:09.6836087+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699"}, "TranscriptionStarted": {"id": "4893a478-2a0b-43a1-8fd8-6b75492c6f64", "source": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699", "type": "Microsoft.Communication.TranscriptionStarted", "data": {"transcriptionUpdate": {"transcriptionStatus": "transcriptionStarted", "transcriptionStatusDetails": "subscriptionStarted"}, "version": "2025-08-15-preview", "resultInformation": {"code": 200, "subCode": 0, "message": "Action completed successfully."}, "callConnectionId": "09006980-f0ba-4fce-b306-318e37271699", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDUtcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi9WNVBJcEU0ZzFFYU5Rc2pWci1SWkl3P2k9MTAtMTI4LTIzLTI0MyZlPTYzODkwODg5NTUxODM3MjU0Nw==", "correlationId": "620dd31b-83b0-45cc-9e2d-ef7c4cc899ea", "publicEventType": "Microsoft.Communication.TranscriptionStarted"}, "time": "2025-08-19T19:55:09.8125289+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699"}, "TranscriptionUpdated": {"id": "8ee1be2e-ef0e-4623-bbd6-76baf28c40d2", "source": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699", "type": "Microsoft.Communication.TranscriptionUpdated", "data": {"transcriptionUpdate": {"transcriptionStatus": "transcriptionUpdated", "transcriptionStatusDetails": "transcriptionLocaleUpdated"}, "version": "2025-08-15-preview", "resultInformation": {"code": 200, "subCode": 0, "message": "Action completed successfully."}, "callConnectionId": "09006980-f0ba-4fce-b306-318e37271699", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDUtcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi9WNVBJcEU0ZzFFYU5Rc2pWci1SWkl3P2k9MTAtMTI4LTIzLTI0MyZlPTYzODkwODg5NTUxODM3MjU0Nw==", "correlationId": "620dd31b-83b0-45cc-9e2d-ef7c4cc899ea", "publicEventType": "Microsoft.Communication.TranscriptionUpdated"}, "time": "2025-08-19T19:55:15.7529366+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699"}, "TranscriptionStopped": {"id": "6be91261-2675-4be8-b4aa-583165085e92", "source": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699", "type": "Microsoft.Communication.TranscriptionStopped", "data": {"transcriptionUpdate": {"transcriptionStatus": "transcriptionStopped", "transcriptionStatusDetails": "subscriptionStopped"}, "version": "2025-08-15-preview", "resultInformation": {"code": 200, "subCode": 0, "message": "Action completed successfully."}, "callConnectionId": "09006980-f0ba-4fce-b306-318e37271699", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDUtcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi9WNVBJcEU0ZzFFYU5Rc2pWci1SWkl3P2k9MTAtMTI4LTIzLTI0MyZlPTYzODkwODg5NTUxODM3MjU0Nw==", "correlationId": "620dd31b-83b0-45cc-9e2d-ef7c4cc899ea", "publicEventType": "Microsoft.Communication.TranscriptionStopped"}, "time": "2025-08-19T19:55:21.8549786+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699"}, "CallDisconnected": {"id": "3f3f82ca-d412-4c28-8d4a-317e82fb53ad", "source": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699", "type": "Microsoft.Communication.CallDisconnected", "data": {"version": "2025-08-15-preview", "resultInformation": {"code": 200, "subCode": 7000, "message": "Call was ended by Azure Communication Service Call Automation API or a server bot. DiagCode: 0#7000.@"}, "callConnectionId": "09006980-f0ba-4fce-b306-318e37271699", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDUtcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi9WNVBJcEU0ZzFFYU5Rc2pWci1SWkl3P2k9MTAtMTI4LTIzLTI0MyZlPTYzODkwODg5NTUxODM3MjU0Nw==", "correlationId": "620dd31b-83b0-45cc-9e2d-ef7c4cc899ea", "publicEventType": "Microsoft.Communication.CallDisconnected"}, "time": "2025-08-19T19:55:23.0231665+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/09006980-f0ba-4fce-b306-318e37271699"}}

sdk/communication/azure-communication-callautomation/tests/test_e2e_media_client_async.py

Lines changed: 87 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Licensed under the MIT License. See License.txt in the project root for
44
# license information.
55
# --------------------------------------------------------------------------
6-
from datetime import timedelta
6+
from datetime import time, timedelta
77
import pytest
88
import asyncio
99
import os
@@ -24,8 +24,9 @@
2424
CallConnectionClient as CallConnectionClientAsync,
2525
)
2626
from azure.communication.callautomation._shared.models import CommunicationUserIdentifier, identifier_from_raw_id
27-
from azure.communication.callautomation._models import ChannelAffinity
27+
from azure.communication.callautomation._models import ChannelAffinity, PiiRedactionOptions, SummarizationOptions
2828
from azure.communication.identity import CommunicationIdentityClient
29+
from azure.communication.callautomation._generated.models._enums import RedactionType
2930
from devtools_testutils import AzureRecordedTestCase, is_live
3031
from devtools_testutils.aio import recorded_by_proxy_async
3132
from devtools_testutils.helpers import get_test_id
@@ -653,6 +654,90 @@ async def test_play_with_invalid_and_valid_file_sources_with_play_media(self):
653654

654655
await self.terminate_call(unique_id)
655656
return
657+
658+
# @pytest.mark.skip(reason="Missing recording file - test needs to be run in live mode or proper recordings need to be generated")
659+
@recorded_by_proxy_async
660+
async def test_start_stop_transcription_in_call_with_redaction_call_summary(self):
661+
# try to establish the call
662+
caller = await self.identity_client.create_user()
663+
target = await self.identity_client.create_user()
664+
665+
pii_redaction_options = PiiRedactionOptions(
666+
enable=True,
667+
redaction_type=RedactionType.MASK_WITH_CHARACTER
668+
)
669+
670+
locale_list = ["en-us","en-au"]
671+
672+
summarization_options = SummarizationOptions(
673+
enable_end_call_summary=True,
674+
locale="en-us"
675+
)
676+
677+
transcription_options=TranscriptionOptions(
678+
transport_url=self.transport_url,
679+
transport_type=StreamingTransportType.WEBSOCKET,
680+
locale=locale_list,
681+
start_transcription=True,
682+
pii_redaction=pii_redaction_options,
683+
enable_sentiment_analysis=True,
684+
summarization=summarization_options
685+
)
686+
687+
unique_id, call_connection, _ = await self.establish_callconnection_voip_with_streaming_options(caller, target, transcription_options, True)
688+
689+
# check returned events
690+
connected_event = self.check_for_event('CallConnected', call_connection._call_connection_id, timedelta(seconds=15))
691+
participant_updated_event = self.check_for_event('ParticipantsUpdated', call_connection._call_connection_id, timedelta(seconds=15))
692+
693+
if connected_event is None:
694+
raise ValueError("Caller CallConnected event is None")
695+
if participant_updated_event is None:
696+
raise ValueError("Caller ParticipantsUpdated event is None")
697+
698+
# check for TranscriptionStarted event
699+
transcription_started = self.check_for_event('TranscriptionStarted', call_connection._call_connection_id, timedelta(seconds=30))
700+
if transcription_started is None:
701+
raise ValueError("TranscriptionStarted event is None")
702+
703+
# check for transcription subscription from call connection properties for transcription started event
704+
call_connection_properties=await call_connection.get_call_properties()
705+
if call_connection_properties is None:
706+
raise ValueError("call_connection_properties is None")
707+
if call_connection_properties.transcription_subscription is None:
708+
raise ValueError("call_connection_properties.transcription_subscription is None")
709+
if call_connection_properties.transcription_subscription.state!='active':
710+
raise ValueError("transcription subscription state is invalid for TranscriptionStarted event")
711+
712+
await asyncio.sleep(3)
713+
await call_connection.update_transcription(locale="en-gb")
714+
715+
# check for TranscriptionUpdated event
716+
transcription_updated = self.check_for_event('TranscriptionUpdated', call_connection._call_connection_id, timedelta(seconds=30))
717+
if transcription_updated is None:
718+
raise ValueError("TranscriptionUpdated event is None")
719+
720+
await asyncio.sleep(3)
721+
722+
# stop transcription
723+
await call_connection.stop_transcription()
724+
725+
# check for TranscriptionStopped event
726+
transcription_stopped = self.check_for_event('TranscriptionStopped', call_connection._call_connection_id, timedelta(seconds=30))
727+
if transcription_stopped is None:
728+
raise ValueError("TranscriptionStopped event is None")
729+
730+
# check for transcription subscription from call connection properties for transcription stopped event
731+
call_connection_properties=await call_connection.get_call_properties()
732+
if call_connection_properties is None:
733+
raise ValueError("call_connection_properties is None")
734+
if call_connection_properties.transcription_subscription is None:
735+
raise ValueError("call_connection_properties.transcription_subscription is None")
736+
if call_connection_properties.transcription_subscription.state!='inactive':
737+
raise ValueError("transcription subscription state is invalid for TranscriptionStopped event")
738+
739+
await self.terminate_call(unique_id)
740+
return
656741

657742

658743

0 commit comments

Comments
 (0)