Skip to content

GA6 Changes for callautomation #41918

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 51 commits into from
Jul 30, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
fefc834
updating ga5 version
v-dharmarajv May 6, 2025
325fe7d
Addressing comments
v-dharmarajv May 16, 2025
a6e2571
fixing the media streaming error
v-dharmarajv May 21, 2025
c570649
updating the change
v-dharmarajv May 21, 2025
4489128
Recorded live tests + GA5 changes (#41253)
v-saasomani May 21, 2025
dbf9d2d
updating the locale and adding the operation callback uril in the un…
v-dharmarajv May 22, 2025
c11e1d4
updating hold operationcallback url
v-dharmarajv May 23, 2025
6e082ec
updating version number
v-dharmarajv May 23, 2025
a21efac
adding the dtmf
v-dharmarajv May 23, 2025
a4f3b85
resolving merge conflicts
v-dharmarajv May 27, 2025
9a569fb
fixing the spelling error on the comment
v-dharmarajv May 28, 2025
f3d2882
Live/Recorded Tests (#41328)
v-saasomani May 28, 2025
4a2ccee
fixing the pipeline error
v-dharmarajv May 28, 2025
1a52b02
Merge branch 'callautomation/release/ga5' of https://github.com/Azure…
v-dharmarajv May 28, 2025
a12d039
fixing lint error
v-dharmarajv May 28, 2025
cfbad8f
fixing the recording issue
v-dharmarajv May 30, 2025
8907dc2
fixing doc error
v-dharmarajv May 30, 2025
a05414b
Created feature branch off of callautomation/release/ga5. Updated to …
v-saasomani Jun 4, 2025
c257e64
Made changes to start recording to effectively handle call_connection…
v-saasomani Jun 4, 2025
0cb5a87
Recorded live tests for ga6.
v-saasomani Jun 13, 2025
ef3f706
merging from main
v-dharmarajv Jun 20, 2025
8aeb9c5
updating changelog
v-dharmarajv Jun 20, 2025
97e881d
[OPS Common SDK] Update Communication Common SDK for Teams Phone Exte…
cemateia Jun 19, 2025
0a4d685
updating api version
v-dharmarajv Jun 23, 2025
4c3035d
ga6 vesrion update
v-dharmarajv Jul 1, 2025
b74d150
updating the python version
v-dharmarajv Jul 7, 2025
da5a0ad
merging from main
v-dharmarajv Jul 11, 2025
e4027d4
updating the live test
v-dharmarajv Jul 11, 2025
2bbe010
pushing resolve issue
v-dharmarajv Jul 11, 2025
65d4829
changelog update
v-dharmarajv Jul 11, 2025
9d9fe38
Update serialization.py
v-dharmarajv Jul 12, 2025
211bd8a
updating ordering
v-dharmarajv Jul 12, 2025
a36995d
changing to dev version number as the pipeline is not letting to crea…
v-dharmarajv Jul 13, 2025
3199853
merge from main
v-dharmarajv Jul 14, 2025
2030338
version number update
v-dharmarajv Jul 14, 2025
0947053
merge from main
v-dharmarajv Jul 14, 2025
acf305b
Adding the classifier for the ga release
v-dharmarajv Jul 15, 2025
73ce8b7
making the teams extension users constructers to have the keyword onl…
v-dharmarajv Jul 16, 2025
aadc0fb
copy issue fixing
v-dharmarajv Jul 16, 2025
ff66a70
spell check fix
v-dharmarajv Jul 17, 2025
a2bdbd2
updating communication shared code to use the isodate instead of the …
v-dharmarajv Jul 24, 2025
f1ab795
merge from main
v-dharmarajv Jul 24, 2025
d5036f6
release date update
v-dharmarajv Jul 25, 2025
660134a
update changelog
v-dharmarajv Jul 29, 2025
0fb0d7e
Add asynchronous tests to align with existing synchronous tests in Ca…
v-vkaluri Jul 29, 2025
3a7c4a9
Merge branch 'callautomation/release/ga6' of https://github.com/Azure…
v-dharmarajv Jul 29, 2025
b735f35
fixing the long path issue fixed for the build failure
v-dharmarajv Jul 29, 2025
7f598e3
removing older files
v-dharmarajv Jul 29, 2025
a845052
removing the release
v-dharmarajv Jul 29, 2025
505785e
reverting the version beta to check in changes to main as the release…
v-dharmarajv Jul 30, 2025
45df0e6
reverting classifier
v-dharmarajv Jul 30, 2025
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
Expand Up @@ -4,11 +4,9 @@

### Features Added

### Breaking Changes

### Bugs Fixed

### Other Changes
- Added support for Teams multipersona users in create call, add participant, transfer, and redirect scenarios in OPS calls
- Added TeamsAppSource for use when creating outbound OPS calls
- Recording with the call connection ID is now supported. OPS calls can be recorded using the call connection ID.

## 1.4.0 (2025-06-06)

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_7fb5483cb0"
"Tag": "python/communication/azure-communication-callautomation_6d7be2f83f"
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@
CommunicationIdentifierKind,
CommunicationCloudEnvironment,
UnknownIdentifier,
TeamsExtensionUserProperties,
TeamsExtensionUserIdentifier,
)
from ._generated.models._enums import (
CallRejectReason,
Expand Down Expand Up @@ -91,6 +93,8 @@
"CommunicationIdentifierKind",
"CommunicationCloudEnvironment",
"UnknownIdentifier",
"TeamsExtensionUserProperties",
"TeamsExtensionUserIdentifier",

# enums
"CallRejectReason",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@ class ApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta):
V2024_04_15 = "2024-04-15"
V2024_09_15 = "2024-09-15"
V2025_05_15 = "2025-05-15"
V2025_06_15 = "2025-06-15"

DEFAULT_VERSION = ApiVersion.V2025_05_15.value
DEFAULT_VERSION = ApiVersion.V2025_06_15.value
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
serialize_phone_identifier,
serialize_identifier,
serialize_communication_user_identifier,
serialize_msft_teams_app_identifier,
build_call_locator,
process_repeatability_first_sent,
)
Expand All @@ -58,6 +59,7 @@
CommunicationIdentifier,
CommunicationUserIdentifier,
PhoneNumberIdentifier,
MicrosoftTeamsAppIdentifier
)
from ._generated.models._enums import (
CallRejectReason,
Expand Down Expand Up @@ -303,6 +305,7 @@ def create_call(
cognitive_services_endpoint: Optional[str] = None,
media_streaming: Optional['MediaStreamingOptions'] = None,
transcription: Optional['TranscriptionOptions'] = None,
teams_app_source: Optional["MicrosoftTeamsAppIdentifier"] = None,
**kwargs
) -> CallConnectionProperties:
"""Create a call connection request to a target identity.
Expand All @@ -329,6 +332,8 @@ def create_call(
:keyword transcription: Configuration of live transcription.
:paramtype transcription: ~azure.communication.callautomation.TranscriptionOptions
or None
:keyword teams_app_source: The Microsoft Teams App Identifier.
:paramtype teams_app_source: ~azure.communication.callautomation.MicrosoftTeamsAppIdentifier
:return: CallConnectionProperties
:rtype: ~azure.communication.callautomation.CallConnectionProperties
:raises ~azure.core.exceptions.HttpResponseError:
Expand Down Expand Up @@ -362,7 +367,8 @@ def create_call(
operation_context=operation_context,
call_intelligence_options=call_intelligence_options,
media_streaming_options=media_config,
transcription_options=transcription_config
transcription_options=transcription_config,
teams_app_source=serialize_msft_teams_app_identifier(teams_app_source),
)
process_repeatability_first_sent(kwargs)
result = self._client.create_call(create_call_request=create_call_request, **kwargs)
Expand All @@ -378,6 +384,7 @@ def create_group_call(
source_display_name: Optional[str] = None,
operation_context: Optional[str] = None,
cognitive_services_endpoint: Optional[str] = None,
teams_app_source: Optional["MicrosoftTeamsAppIdentifier"] = None,
**kwargs,
) -> CallConnectionProperties:
"""Create a call connection request to a list of multiple target identities.
Expand All @@ -398,6 +405,8 @@ def create_group_call(
:keyword cognitive_services_endpoint:
The identifier of the Cognitive Service resource assigned to this call.
:paramtype cognitive_services_endpoint: str
:keyword teams_app_source: The Microsoft Teams App Identifier.
:paramtype teams_app_source: ~azure.communication.callautomation.MicrosoftTeamsAppIdentifier
:return: CallConnectionProperties
:rtype: ~azure.communication.callautomation.CallConnectionProperties
:raises ~azure.core.exceptions.HttpResponseError:
Expand All @@ -413,6 +422,7 @@ def create_group_call(
source_display_name=source_display_name,
operation_context=operation_context,
cognitive_services_endpoint=cognitive_services_endpoint,
teams_app_source=teams_app_source,
**kwargs,
)

Expand Down Expand Up @@ -680,6 +690,57 @@ def start_recording(
:raises ~azure.core.exceptions.HttpResponseError:
"""

@overload
def start_recording(
self,
*,
call_connection_id: str,
recording_state_callback_url: Optional[str] = None,
recording_content_type: Optional[Union[str, 'RecordingContent']] = None,
recording_channel_type: Optional[Union[str, 'RecordingChannel']] = None,
recording_format_type: Optional[Union[str, 'RecordingFormat']] = None,
audio_channel_participant_ordering: Optional[List['CommunicationIdentifier']] = None,
channel_affinity: Optional[List['ChannelAffinity']] = None,
recording_storage: Optional[Union['AzureCommunicationsRecordingStorage',
'AzureBlobContainerRecordingStorage']] = None,
pause_on_start: Optional[bool] = None,
**kwargs,
) -> RecordingProperties:
"""Start recording for a ongoing call. Locate the call with call connection id.

:keyword str call_connection_id: The call connection ID to locate ongoing call.
:keyword recording_state_callback_url: The url to send notifications to.
:paramtype recording_state_callback_url: str or None
:keyword recording_content_type: The content type of call recording.
:paramtype recording_content_type: str or ~azure.communication.callautomation.RecordingContent or None
:keyword recording_channel_type: The channel type of call recording.
:paramtype recording_channel_type: str or ~azure.communication.callautomation.RecordingChannel or None
:keyword recording_format_type: The format type of call recording.
:paramtype recording_format_type: str or ~azure.communication.callautomation.RecordingFormat or None
:keyword audio_channel_participant_ordering:
The sequential order in which audio channels are assigned to participants in the unmixed recording.
When 'recordingChannelType' is set to 'unmixed' and `audioChannelParticipantOrdering is not specified,
the audio channel to participant mapping will be automatically assigned based on the order in
which participant first audio was detected.
Channel to participant mapping details can be found in the metadata of the recording.
:paramtype audio_channel_participant_ordering:
list[~azure.communication.callautomation.CommunicationIdentifier] or None
:keyword channel_affinity: The channel affinity of call recording
When 'recordingChannelType' is set to 'unmixed', if channelAffinity is not specified,
'channel' will be automatically assigned.
Channel-Participant mapping details can be found in the metadata of the recording.
:paramtype channel_affinity: list[~azure.communication.callautomation.ChannelAffinity] or None
:keyword recording_storage: Defines the kind of external storage. Known values are:
``AzureCommunicationsRecordingStorage`` and ``AzureBlobContainerRecordingStorage``.
If no storage option is provided, the default is Azure Communications recording storage.
:paramtype recording_storage: AzureCommunicationsRecordingStorage or AzureBlobContainerRecordingStorage or None
:keyword pause_on_start: The state of the pause on start option.
:paramtype pause_on_start: bool or None
:return: RecordingProperties
:rtype: ~azure.communication.callautomation.RecordingProperties
:raises ~azure.core.exceptions.HttpResponseError:
"""

@distributed_trace
def start_recording(
self,
Expand All @@ -696,9 +757,14 @@ def start_recording(
kwargs.pop("room_id", None),
args
)
call_connection_id = kwargs.pop("call_connection_id", None)
if not call_locator and not call_connection_id:
raise ValueError("Either a call locator or a call_connection_id must be provided to start recording.")

external_storage = build_external_storage(kwargs.pop("recording_storage", None))
start_recording_request = StartCallRecordingRequest(
call_locator=call_locator if call_locator else None,
call_connection_id=call_connection_id if call_connection_id else None,
recording_state_callback_uri=kwargs.pop("recording_state_callback_url", None),
recording_content_type=kwargs.pop("recording_content_type", None),
recording_channel_type=kwargs.pop("recording_channel_type", None),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
from . import models as _models
from ._configuration import AzureCommunicationCallAutomationServiceConfiguration
from ._utils.serialization import Deserializer, Serializer
from .operations import CallConnectionOperations, CallMediaOperations, CallRecordingOperations
from .operations._operations import _AzureCommunicationCallAutomationServiceOperationsMixin
from .operations import (
CallConnectionOperations,
CallMediaOperations,
CallRecordingOperations,
_AzureCommunicationCallAutomationServiceOperationsMixin,
)


class AzureCommunicationCallAutomationService(_AzureCommunicationCallAutomationServiceOperationsMixin):
Expand All @@ -36,7 +40,7 @@ class AzureCommunicationCallAutomationService(_AzureCommunicationCallAutomationS
:type endpoint: str
:param credential: Credential needed for the client to connect to Azure. Required.
:type credential: ~azure.core.credentials.AzureKeyCredential
:keyword api_version: Api Version. Default value is "2025-05-15". Note that overriding this
:keyword api_version: Api Version. Default value is "2025-06-15". Note that overriding this
default value may result in unsupported behavior.
:paramtype api_version: str
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ class AzureCommunicationCallAutomationServiceConfiguration: # pylint: disable=t
:type endpoint: str
:param credential: Credential needed for the client to connect to Azure. Required.
:type credential: ~azure.core.credentials.AzureKeyCredential
:keyword api_version: Api Version. Default value is "2025-05-15". Note that overriding this
:keyword api_version: Api Version. Default value is "2025-06-15". Note that overriding this
default value may result in unsupported behavior.
:paramtype api_version: str
"""

def __init__(self, endpoint: str, credential: AzureKeyCredential, **kwargs: Any) -> None:
api_version: str = kwargs.pop("api_version", "2025-05-15")
api_version: str = kwargs.pop("api_version", "2025-06-15")

if endpoint is None:
raise ValueError("Parameter 'endpoint' must not be None.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,12 @@
from .. import models as _models
from .._utils.serialization import Deserializer, Serializer
from ._configuration import AzureCommunicationCallAutomationServiceConfiguration
from .operations import CallConnectionOperations, CallMediaOperations, CallRecordingOperations
from .operations._operations import _AzureCommunicationCallAutomationServiceOperationsMixin
from .operations import (
CallConnectionOperations,
CallMediaOperations,
CallRecordingOperations,
_AzureCommunicationCallAutomationServiceOperationsMixin,
)


class AzureCommunicationCallAutomationService(_AzureCommunicationCallAutomationServiceOperationsMixin):
Expand All @@ -37,7 +41,7 @@ class AzureCommunicationCallAutomationService(_AzureCommunicationCallAutomationS
:type endpoint: str
:param credential: Credential needed for the client to connect to Azure. Required.
:type credential: ~azure.core.credentials.AzureKeyCredential
:keyword api_version: Api Version. Default value is "2025-05-15". Note that overriding this
:keyword api_version: Api Version. Default value is "2025-06-15". Note that overriding this
default value may result in unsupported behavior.
:paramtype api_version: str
"""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@ class AzureCommunicationCallAutomationServiceConfiguration: # pylint: disable=t
:type endpoint: str
:param credential: Credential needed for the client to connect to Azure. Required.
:type credential: ~azure.core.credentials.AzureKeyCredential
:keyword api_version: Api Version. Default value is "2025-05-15". Note that overriding this
:keyword api_version: Api Version. Default value is "2025-06-15". Note that overriding this
default value may result in unsupported behavior.
:paramtype api_version: str
"""

def __init__(self, endpoint: str, credential: AzureKeyCredential, **kwargs: Any) -> None:
api_version: str = kwargs.pop("api_version", "2025-05-15")
api_version: str = kwargs.pop("api_version", "2025-06-15")

if endpoint is None:
raise ValueError("Parameter 'endpoint' must not be None.")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# pylint: disable=line-too-long,useless-suppression
# coding=utf-8
# --------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
Expand All @@ -12,6 +13,7 @@
if TYPE_CHECKING:
from ._patch import * # pylint: disable=unused-wildcard-import

from ._operations import _AzureCommunicationCallAutomationServiceOperationsMixin # type: ignore # pylint: disable=unused-import
from ._operations import CallConnectionOperations # type: ignore
from ._operations import CallMediaOperations # type: ignore
from ._operations import CallRecordingOperations # type: ignore
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3212,7 +3212,7 @@ async def start_recording(

response = pipeline_response.http_response

if response.status_code not in [200]:
if response.status_code not in [200, 202]:
map_error(status_code=response.status_code, response=response, error_map=error_map)
error = self._deserialize.failsafe_deserialize(_models.CommunicationErrorResponse, pipeline_response)
raise HttpResponseError(response=response, model=error)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,11 @@
SsmlSource,
StartCallRecordingRequest,
StartMediaStreamingRequest,
StartRecordingFailed,
StartTranscriptionRequest,
StopMediaStreamingRequest,
StopTranscriptionRequest,
TeamsExtensionUserIdentifierModel,
TextSource,
TranscriptionFailed,
TranscriptionOptions,
Expand Down Expand Up @@ -231,9 +233,11 @@
"SsmlSource",
"StartCallRecordingRequest",
"StartMediaStreamingRequest",
"StartRecordingFailed",
"StartTranscriptionRequest",
"StopMediaStreamingRequest",
"StopTranscriptionRequest",
"TeamsExtensionUserIdentifierModel",
"TextSource",
"TranscriptionFailed",
"TranscriptionOptions",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ class CommunicationIdentifierModelKind(str, Enum, metaclass=CaseInsensitiveEnumM
PHONE_NUMBER = "phoneNumber"
MICROSOFT_TEAMS_USER = "microsoftTeamsUser"
MICROSOFT_TEAMS_APP = "microsoftTeamsApp"
TEAMS_EXTENSION_USER = "teamsExtensionUser"


class DtmfTone(str, Enum, metaclass=CaseInsensitiveEnumMeta):
Expand Down
Loading
Loading