Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
d3878f8
Users/v dharmarajv/getparticipant fix (#47570)
v-dharmarajv Jun 19, 2026
b42f401
Merge branch 'main' into release/callautomation/ga7
v-dharmarajv Jun 19, 2026
6729988
moving the recording url validator to root
v-dharmarajv Jun 19, 2026
3e37b37
Merge branch 'main' into release/callautomation/ga7
v-dharmarajv Jun 22, 2026
4b4f38c
updating the release date
v-dharmarajv Jun 22, 2026
0a9ebff
fixing the my py and pylint issues (#47604)
v-dharmarajv Jun 23, 2026
9b8f5da
updating change log
v-dharmarajv Jun 23, 2026
dc19edf
Merge branch 'main' into release/callautomation/ga7
v-dharmarajv Jun 23, 2026
db0207b
fixing the mypy and pylint issues
v-dharmarajv Jun 23, 2026
be01b08
Merge branch 'main' into release/callautomation/ga7
v-dharmarajv Jun 24, 2026
ec8ba51
updating the release date
v-dharmarajv Jun 24, 2026
04a8ed6
rerecording tests
v-dharmarajv Jun 24, 2026
b734b1d
Re-record callautomation e2e tests on Python 3.10 to fix CI playback
v-dharmarajv Jun 24, 2026
3cc4d38
Merge branch 'main' into release/callautomation/ga7
v-pilvamshi Sep 1, 2026
f786238
Merge branch 'main' into release/callautomation/ga7
v-pilvamshi Sep 7, 2026
2c2b889
Merge branch 'main' into release/callautomation/ga7
v-pilvamshi Sep 8, 2026
9bc80e8
fixed the pylint issue.
v-pilvamshi Sep 8, 2026
0b13191
Fixed the pylint issue.
v-pilvamshi Sep 8, 2026
3afa6fb
Added live tests for get participant and list participants.
v-pilvamshi Sep 14, 2026
f97b0cf
Merge branch 'main' into release/callautomation/ga7
v-pilvamshi Sep 14, 2026
d901074
did test proxy.
v-pilvamshi Sep 14, 2026
64ba4d5
recorded the live tests.
v-pilvamshi Sep 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Release History

## 1.6.0 (Unreleased)
## 1.6.0 (2026-06-24)

### Features Added

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "python",
"TagPrefix": "python/communication/azure-communication-callautomation",
"Tag": "python/communication/azure-communication-callautomation_135357fbdb"
"Tag": "python/communication/azure-communication-callautomation_cb2be7ac58"
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from ._generated import models as _models
from ._generated._utils.serialization import Serializer
from ._generated.operations import CallRecordingOperations
from ._shared.recording_url_validator import validate_recording_url
from .recording_url_validator import validate_recording_url

_SERIALIZER = Serializer()
_SERIALIZER.client_side_validation = False
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,33 +63,6 @@ def _sign_request(self, request: PipelineRequest) -> None:
if parsed_url.query:
query_url += "?" + parsed_url.query

# Need URL() to get a correct encoded key value, from "%3A" to ":", when transport is in type AioHttpTransport.
# There's a similar scenario in azure-storage-blob and azure-appconfiguration, the check logic is from there.
try:
from yarl import URL
from azure.core.pipeline.transport import ( # pylint:disable=non-abstract-transport-import
AioHttpTransport,
)

if (
isinstance(request.context.transport, AioHttpTransport)
or isinstance(
getattr(request.context.transport, "_transport", None),
AioHttpTransport,
)
or isinstance(
getattr(
getattr(request.context.transport, "_transport", None),
"_transport",
None,
),
AioHttpTransport,
)
):
query_url = str(URL(query_url))
except (ImportError, TypeError):
pass

if self._decode_url:
query_url = unquote(query_url)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from .._generated import models as _models
from .._generated._utils.serialization import Serializer
from .._generated.aio.operations import CallRecordingOperations
from .._shared.recording_url_validator import validate_recording_url
from ..recording_url_validator import validate_recording_url

_SERIALIZER = Serializer()
_SERIALIZER.client_side_validation = False
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,16 +128,16 @@ def _message_awaiter(self, unique_id) -> None:
unique_id = self._unique_key_gen(caller, receiver)
key = self._event_key_gen("IncomingCall")
print("EventRegistration(IncomingCall):" + key)
self.event_store[key] = mapper
self.event_to_save[key] = mapper
self.event_store.setdefault(key, []).append(mapper)
self.event_to_save.setdefault(key, []).append(mapper)
else:
if isinstance(mapper, list):
mapper = mapper[0]
if mapper["type"]:
key = self._event_key_gen(mapper["type"].split(".")[-1])
print("EventRegistration:" + key)
self.event_store[key] = mapper
self.event_to_save[key] = mapper
self.event_store.setdefault(key, []).append(mapper)
self.event_to_save.setdefault(key, []).append(mapper)
service_bus_receiver.complete_message(msg)
time.sleep(1)
return
Expand All @@ -148,7 +148,10 @@ def _prepare_events_recording(self) -> None:
file_path = self._get_test_event_file_name()
try:
with open(file_path, "r") as json_file:
self.event_store = json.load(json_file)
loaded_events = json.load(json_file)
self.event_store = {
key: value if isinstance(value, list) else [value] for key, value in loaded_events.items()
}
except IOError as e:
raise SystemExit(f"File write operation failed: {e}")

Expand All @@ -168,8 +171,11 @@ def check_for_event(self, event_type: str, call_connection_id: str, wait_time: t
key = self._event_key_gen(event_type)
time_out_time = datetime.now() + wait_time
while datetime.now() < time_out_time:
popped_event = self.event_store.pop(key, None)
if popped_event is not None:
events = self.event_store.get(key)
if events:
popped_event = events.pop(0)
if not events:
self.event_store.pop(key, None)
print(f"Matching Event Found [{key}]")
return popped_event
time.sleep(1)
Expand Down Expand Up @@ -318,8 +324,10 @@ def terminate_call(self, unique_id) -> None:
pass

def redact_by_key(self, data: Dict[str, Dict[str, any]], keys_to_redact: List[str]) -> Dict[str, Dict[str, any]]:
for _, inner_dict in data.items():
for key in keys_to_redact:
if key in inner_dict:
inner_dict[key] = "REDACTED"
for _, value in data.items():
events = value if isinstance(value, list) else [value]
for inner_dict in events:
for key in keys_to_redact:
if key in inner_dict:
inner_dict[key] = "REDACTED"
return data
Original file line number Diff line number Diff line change
Expand Up @@ -154,16 +154,16 @@ def _message_awaiter(self, unique_id) -> None:
unique_id = self._unique_key_gen(caller, receiver)
key = self._event_key_gen("IncomingCall")
print("EventRegistration(IncomingCall):" + key)
self.event_store[key] = mapper
self.event_to_save[key] = mapper
self.event_store.setdefault(key, []).append(mapper)
self.event_to_save.setdefault(key, []).append(mapper)
else:
if isinstance(mapper, list):
mapper = mapper[0]
if mapper["type"]:
key = self._event_key_gen(mapper["type"].split(".")[-1])
print("EventRegistration:" + key)
self.event_store[key] = mapper
self.event_to_save[key] = mapper
self.event_store.setdefault(key, []).append(mapper)
self.event_to_save.setdefault(key, []).append(mapper)
service_bus_receiver.complete_message(msg)
time.sleep(1)
return
Expand All @@ -174,7 +174,10 @@ def _prepare_events_recording(self) -> None:
if not is_live():
file_path = self._get_test_event_file_name()
with open(file_path, "r") as json_file:
self.event_store = json.load(json_file)
loaded_events = json.load(json_file)
self.event_store = {
key: value if isinstance(value, list) else [value] for key, value in loaded_events.items()
}
except Exception as e:
# Don't fail test setup for file I/O issues
print(f"Warning: Event loading failed: {e}")
Expand All @@ -197,8 +200,11 @@ def check_for_event(self, event_type: str, call_connection_id: str, wait_time: t
key = self._event_key_gen(event_type)
time_out_time = datetime.now() + wait_time
while datetime.now() < time_out_time:
popped_event = self.event_store.pop(key, None)
if popped_event is not None:
events = self.event_store.get(key)
if events:
popped_event = events.pop(0)
if not events:
self.event_store.pop(key, None)
print(f"Matching Event Found [{key}]")
return popped_event
time.sleep(1)
Expand Down Expand Up @@ -349,8 +355,10 @@ async def terminate_call(self, unique_id) -> None:
pass

def redact_by_key(self, data: Dict[str, Dict[str, any]], keys_to_redact: List[str]) -> Dict[str, Dict[str, any]]:
for _, inner_dict in data.items():
for key in keys_to_redact:
if key in inner_dict:
inner_dict[key] = "REDACTED"
for _, value in data.items():
events = value if isinstance(value, list) else [value]
for inner_dict in events:
for key in keys_to_redact:
if key in inner_dict:
inner_dict[key] = "REDACTED"
return data
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"IncomingCall": {"to": {"kind": "communicationUser", "rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_0000002d-59d1-722a-bbe8-6f8ded7c9f1c", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_0000002d-59d1-722a-bbe8-6f8ded7c9f1c"}}, "from": {"kind": "communicationUser", "rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_0000002d-59d1-71d6-bbe8-6f8ded7c9f1b", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_0000002d-59d1-71d6-bbe8-6f8ded7c9f1b"}}, "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDItc2RmLWFrcy5jb252LnNreXBlLmNvbS9jb252L2prUXU1Z2RRdDBTUVU0T2xPN3BpRFE/aT0xMC0xMjgtNzEtMjA0JmU9NjM5MDgxNTg0OTA5NzQ1NzEw", "callerDisplayName": "REDACTED", "incomingCallContext": "REDACTED", "correlationId": "52b97359-a1fa-4149-9987-10daacc706af"}, "ParticipantsUpdated": {"id": "bf01720a-87ed-438e-a7ac-5d77707e9e0c", "source": "calling/callConnections/04009880-da79-4989-b5a6-26a6a17805cd", "type": "Microsoft.Communication.ParticipantsUpdated", "data": {"participants": [{"identifier": {"rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_0000002d-59d1-71d6-bbe8-6f8ded7c9f1b", "kind": "communicationUser", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_0000002d-59d1-71d6-bbe8-6f8ded7c9f1b"}}, "isMuted": false, "isOnHold": false}, {"identifier": {"rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_0000002d-59d1-722a-bbe8-6f8ded7c9f1c", "kind": "communicationUser", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_0000002d-59d1-722a-bbe8-6f8ded7c9f1c"}}, "isMuted": false, "isOnHold": false}], "sequenceNumber": 3, "resultInformation": {"code": 200, "subCode": 0, "message": ""}, "version": "2026-03-12", "callConnectionId": "04009880-da79-4989-b5a6-26a6a17805cd", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDItc2RmLWFrcy5jb252LnNreXBlLmNvbS9jb252L2prUXU1Z2RRdDBTUVU0T2xPN3BpRFE/aT0xMC0xMjgtNzEtMjA0JmU9NjM5MDgxNTg0OTA5NzQ1NzEw", "correlationId": "52b97359-a1fa-4149-9987-10daacc706af", "publicEventType": "Microsoft.Communication.ParticipantsUpdated"}, "time": "2026-03-04T17:40:47.7589291+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/04009880-da79-4989-b5a6-26a6a17805cd"}, "CallConnected": {"id": "56971ca5-5216-4b32-981a-6420a6a8f848", "source": "calling/callConnections/04009880-da79-4989-b5a6-26a6a17805cd", "type": "Microsoft.Communication.CallConnected", "data": {"resultInformation": {"code": 200, "subCode": 0, "message": ""}, "version": "2026-03-12", "callConnectionId": "04009880-da79-4989-b5a6-26a6a17805cd", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDItc2RmLWFrcy5jb252LnNreXBlLmNvbS9jb252L2prUXU1Z2RRdDBTUVU0T2xPN3BpRFE/aT0xMC0xMjgtNzEtMjA0JmU9NjM5MDgxNTg0OTA5NzQ1NzEw", "correlationId": "52b97359-a1fa-4149-9987-10daacc706af", "publicEventType": "Microsoft.Communication.CallConnected"}, "time": "2026-03-04T17:40:43.0815169+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/04009880-da79-4989-b5a6-26a6a17805cd"}, "CancelAddParticipantSucceeded": {"id": "73de8e95-ab54-4379-b36c-0783a4f327cb", "source": "calling/callConnections/04009880-da79-4989-b5a6-26a6a17805cd", "type": "Microsoft.Communication.CancelAddParticipantSucceeded", "data": {"invitationId": "aa277923-e67d-4b51-a531-4a12c4cedc99", "resultInformation": {"code": 200, "subCode": 5300, "message": "addParticipants failed for participant 8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_0000002d-59d1-7278-bbe8-6f8ded7c9f1d. Underlying reason: The conversation has ended. DiagCode: 0#5300.@"}, "version": "2026-03-12", "callConnectionId": "04009880-da79-4989-b5a6-26a6a17805cd", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDItc2RmLWFrcy5jb252LnNreXBlLmNvbS9jb252L2prUXU1Z2RRdDBTUVU0T2xPN3BpRFE/aT0xMC0xMjgtNzEtMjA0JmU9NjM5MDgxNTg0OTA5NzQ1NzEw", "correlationId": "52b97359-a1fa-4149-9987-10daacc706af", "publicEventType": "Microsoft.Communication.CancelAddParticipantSucceeded"}, "time": "2026-03-04T17:40:47.8825114+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/04009880-da79-4989-b5a6-26a6a17805cd"}, "CallDisconnected": {"id": "891f5f53-37da-409d-b09a-32ec76014926", "source": "calling/callConnections/04009880-da79-4989-b5a6-26a6a17805cd", "type": "Microsoft.Communication.CallDisconnected", "data": {"resultInformation": {"code": 200, "subCode": 7000, "message": "Call was ended by Azure Communication Service Call Automation API or a server bot. DiagCode: 0#7000.@"}, "version": "2026-03-12", "callConnectionId": "04009880-da79-4989-b5a6-26a6a17805cd", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVzd2UtMDItc2RmLWFrcy5jb252LnNreXBlLmNvbS9jb252L2prUXU1Z2RRdDBTUVU0T2xPN3BpRFE/aT0xMC0xMjgtNzEtMjA0JmU9NjM5MDgxNTg0OTA5NzQ1NzEw", "correlationId": "52b97359-a1fa-4149-9987-10daacc706af", "publicEventType": "Microsoft.Communication.CallDisconnected"}, "time": "2026-03-04T17:40:50.0566783+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/04009880-da79-4989-b5a6-26a6a17805cd"}}
{"IncomingCall": [{"to": {"kind": "communicationUser", "rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000031-43c0-89c4-5de5-6f8ded7cd9f1", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000031-43c0-89c4-5de5-6f8ded7cd9f1"}}, "from": {"kind": "communicationUser", "rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000031-43c0-88ad-5de5-6f8ded7cd9f0", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000031-43c0-88ad-5de5-6f8ded7cd9f0"}}, "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVhZW4tMDItcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi82UHY1d0x2UE5rdWR0MzhzdE5sMm53P2k9MTAtMTI4LTIzLTE5OCZlPTYzOTI0NzcxMDY2MTEyMTUxNw==", "callerDisplayName": "REDACTED", "incomingCallContext": "REDACTED", "correlationId": "a10ab187-1512-4aca-9c8d-854e55acd1fc"}], "CallConnected": [{"id": "c5776f82-378c-4472-882b-f0be2da68e8b", "source": "calling/callConnections/06004480-f043-4238-8b20-700b76482d23", "type": "Microsoft.Communication.CallConnected", "data": {"resultInformation": {"code": 200, "subCode": 0, "message": ""}, "version": "2026-03-12", "callConnectionId": "06004480-f043-4238-8b20-700b76482d23", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVhZW4tMDItcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi82UHY1d0x2UE5rdWR0MzhzdE5sMm53P2k9MTAtMTI4LTIzLTE5OCZlPTYzOTI0NzcxMDY2MTEyMTUxNw==", "correlationId": "a10ab187-1512-4aca-9c8d-854e55acd1fc", "publicEventType": "Microsoft.Communication.CallConnected"}, "time": "2026-09-15T07:02:01.2353267+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/06004480-f043-4238-8b20-700b76482d23"}], "ParticipantsUpdated": [{"id": "9c7ef65e-432d-4bf1-9f99-919ae37c1db8", "source": "calling/callConnections/06004480-f043-4238-8b20-700b76482d23", "type": "Microsoft.Communication.ParticipantsUpdated", "data": {"participants": [{"identifier": {"rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000031-43c0-88ad-5de5-6f8ded7cd9f0", "kind": "communicationUser", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000031-43c0-88ad-5de5-6f8ded7cd9f0"}}, "isMuted": false, "isOnHold": false}, {"identifier": {"rawId": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000031-43c0-89c4-5de5-6f8ded7cd9f1", "kind": "communicationUser", "communicationUser": {"id": "8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000031-43c0-89c4-5de5-6f8ded7cd9f1"}}, "isMuted": false, "isOnHold": false}], "sequenceNumber": 1, "resultInformation": {"code": 200, "subCode": 0, "message": ""}, "version": "2026-03-12", "callConnectionId": "06004480-f043-4238-8b20-700b76482d23", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVhZW4tMDItcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi82UHY1d0x2UE5rdWR0MzhzdE5sMm53P2k9MTAtMTI4LTIzLTE5OCZlPTYzOTI0NzcxMDY2MTEyMTUxNw==", "correlationId": "a10ab187-1512-4aca-9c8d-854e55acd1fc", "publicEventType": "Microsoft.Communication.ParticipantsUpdated"}, "time": "2026-09-15T07:02:01.3255516+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/06004480-f043-4238-8b20-700b76482d23"}], "CancelAddParticipantSucceeded": [{"id": "c3dae328-6ca4-4e79-a1a0-f8dbc6483a1d", "source": "calling/callConnections/06004480-f043-4238-8b20-700b76482d23", "type": "Microsoft.Communication.CancelAddParticipantSucceeded", "data": {"invitationId": "68a7b515-5f93-440e-bfcb-fcbd5246a5ea", "resultInformation": {"code": 487, "subCode": 5234, "message": "addParticipants failed for participant 8:acs:6d889502-3d7a-41a8-befa-d21fd80e8767_00000031-43c0-8ae0-7be9-6f8ded7cd7a9. Underlying reason: The Call Has Been Cancelled. DiagCode: 487#5234.@"}, "version": "2026-03-12", "callConnectionId": "06004480-f043-4238-8b20-700b76482d23", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVhZW4tMDItcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi82UHY1d0x2UE5rdWR0MzhzdE5sMm53P2k9MTAtMTI4LTIzLTE5OCZlPTYzOTI0NzcxMDY2MTEyMTUxNw==", "correlationId": "a10ab187-1512-4aca-9c8d-854e55acd1fc", "publicEventType": "Microsoft.Communication.CancelAddParticipantSucceeded"}, "time": "2026-09-15T07:02:06.9227916+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/06004480-f043-4238-8b20-700b76482d23"}], "CallDisconnected": [{"id": "2edfbf22-68da-46df-a10b-e5574a595a10", "source": "calling/callConnections/06004480-f043-4238-8b20-700b76482d23", "type": "Microsoft.Communication.CallDisconnected", "data": {"resultInformation": {"code": 200, "subCode": 7000, "message": "Call was ended by Azure Communication Service Call Automation API or a server bot. DiagCode: 0#7000.@"}, "version": "2026-03-12", "callConnectionId": "06004480-f043-4238-8b20-700b76482d23", "serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkuc2t5cGUuY29tL2FwaS92Mi9jcC9jb252LXVhZW4tMDItcHJvZC1ha3MuY29udi5za3lwZS5jb20vY29udi82UHY1d0x2UE5rdWR0MzhzdE5sMm53P2k9MTAtMTI4LTIzLTE5OCZlPTYzOTI0NzcxMDY2MTEyMTUxNw==", "correlationId": "a10ab187-1512-4aca-9c8d-854e55acd1fc", "publicEventType": "Microsoft.Communication.CallDisconnected"}, "time": "2026-09-15T07:02:08.1526764+00:00", "specversion": "1.0", "datacontenttype": "application/json", "subject": "calling/callConnections/06004480-f043-4238-8b20-700b76482d23"}]}
Loading
Loading