Source code for wxc_sdk.person_settings.mode_management

from collections.abc import Generator
from typing import Optional

from pydantic import TypeAdapter

from wxc_sdk.api_child import ApiChild
from wxc_sdk.base import ApiModel
from wxc_sdk.base import SafeEnum as Enum

__all__ = ['ModeManagementApi', 'ExceptionType',
           'FeatureType', 'AvailableFeature',
           'ModeManagementFeature']

from wxc_sdk.common import IdAndName


[docs] class FeatureType(str, Enum): #: Specifies the feature is an Auto Attendant. auto_attendant = 'AUTO_ATTENDANT' #: Specifies the feature is a Call Queue. call_queue = 'CALL_QUEUE' #: Specifies the feature is a Hunt Group. hunt_group = 'HUNT_GROUP'
[docs] class AvailableFeature(ApiModel): #: A unique identifier for the feature. id: Optional[str] = None #: Unique name for the feature. name: Optional[str] = None #: Defines the scheduling of the operating mode. type: Optional[FeatureType] = None #: The primary phone number configured for the feature. phone_number: Optional[str] = None #: The extension configured for the feature. extension: Optional[str] = None
[docs] class ExceptionType(str, Enum): #: The mode was switched to or extended by the user for manual switch back and runs as an exception until the user #: manually switches the feature back to normal operation or a different mode. manual_switch_back = 'MANUAL_SWITCH_BACK' #: The mode was switched to by the user before its start time and runs as an exception until its end time is #: reached, at which point it automatically switches the feature back to normal operation. automatic_switch_back_early_start = 'AUTOMATIC_SWITCH_BACK_EARLY_START' #: The current mode was extended by the user before its end time and runs as an exception until the extension end #: time (mode's end time + extension of up to 12 hours) is reached, at which point it automatically switches the #: feature back to normal operation. automatic_switch_back_extension = 'AUTOMATIC_SWITCH_BACK_EXTENSION' #: The mode will remain the current operating mode for the feature until its normal end time is reached. automatic_switch_back_standard = 'AUTOMATIC_SWITCH_BACK_STANDARD'
[docs] class ModeManagementFeature(ApiModel): #: A unique identifier for the feature. id: Optional[str] = None #: Unique name for the feature. name: Optional[str] = None #: Defines the scheduling of the operating mode. type: Optional[FeatureType] = None #: The primary phone number configured for the feature. phone_number: Optional[str] = None #: The extension configured for the feature. extension: Optional[str] = None #: A flag to indicate whether mode-based call forwarding is enabled for the feature. mode_based_forwarding_enabled: Optional[bool] = None #: The destination for call forwarding if mode-based call forwarding is enabled. forward_destination: Optional[str] = None #: Name of the current operating mode. current_operating_mode_name: Optional[str] = None #: Unique identifier for the current operating mode. current_operating_mode_id: Optional[str] = None #: Defines the exception through which the current operating mode is set as active for the feature. exception_type: Optional[ExceptionType] = None #: Location object that has a unique identifier for the location and its name. location: Optional[IdAndName] = None
[docs] class ModeManagementApi(ApiChild, base='telephony/config/people'): """ Operating Mode Management for Person Call Settings Person Call Settings supports modifying Webex Calling settings for a specific person. Viewing People requires a full, user, or read-only administrator or location administrator auth token with a scope of `spark-admin:people_read` or, for select APIs, a user auth token with `spark:people_read` scope can be used by a person to read their own settings. Configuring People settings requires a full, or user administrator or location administrator auth token with the `spark-admin:people_write` scope or, for select APIs, a user auth token with `spark:people_write` scope can be used by a person to update their own settings. Call Settings API access can be restricted via Control Hub by a full administrator. Restricting access causes the APIs to throw a `403 Access Forbidden` error. See details about `features available by license type for Webex Calling <https://help.webex.com/en-us/article/n1qbbp7/Features-available-by-license-type-for-Webex-Calling>`_. """
[docs] def available_features(self, person_id: str = None, name: str = None, phone_number: str = None, extension: str = None, order: str = None, org_id: str = None, **params) -> Generator[AvailableFeature, None, None]: """ Retrieve the List of Available Features. Retrieve a list of feature identifiers that can be assigned to a user for `Mode Management`. Feature identifiers reference feature instances like `Auto Attendants`, `Call Queues`, and `Hunt Groups`. Features with mode-based call forwarding enabled can be assigned to a user for `Mode Management`. Retrieving this list requires a full, read-only, or location administrator auth token with a scope of `spark-admin:telephony_config_read`. :param person_id: A unique identifier for the user. :type person_id: str :param name: List features whose `name` contains this string. :type name: str :param phone_number: List features whose phoneNumber contains this matching string. :type phone_number: str :param extension: List features whose `extension` contains this matching string. :type extension: str :param order: Sort the list of features based on `name`, `phoneNumber`, or `extension`, either `asc`, or `desc`. :type order: str :param org_id: Retrieve features list from this organization. :type org_id: str :return: Generator yielding :class:`AvailableFeature` instances """ if name is not None: params['name'] = name if phone_number is not None: params['phoneNumber'] = phone_number if extension is not None: params['extension'] = extension if order is not None: params['order'] = order if org_id is not None: params['orgId'] = org_id url = self.ep(f'{person_id}/modeManagement/availableFeatures') return self.session.follow_pagination(url=url, model=AvailableFeature, item_key='features', params=params)
[docs] def assigned_features(self, person_id: str = None, org_id: str = None) -> list[ModeManagementFeature]: """ Retrieve the List of Features Assigned to a User for Mode Management. Retrieve a list of feature identifiers that are already assigned to a user for `Mode Management`. Feature identifiers reference feature instances like `Auto Attendants`, `Call Queues`, and `Hunt Groups`. A maximum of 50 features can be assigned to a user for `Mode Management`. Features with mode-based call forwarding enabled can be assigned to a user for `Mode Management`. Retrieving this list requires a full, read-only, or location administrator auth token with a scope of `spark-admin:telephony_config_read`. :param person_id: A unique identifier for the user. :type person_id: str :param org_id: Retrieve features list from this organization. :type org_id: str :rtype: list[ModeManagementFeature] """ params = {} if org_id is not None: params['orgId'] = org_id url = self.ep(f'{person_id}/modeManagement/features') data = super().get(url, params=params) r = TypeAdapter(list[ModeManagementFeature]).validate_python(data['features']) return r
[docs] def assign_features(self, feature_ids: list[str], person_id: str = None, org_id: str = None): """ Assign a List of Features to a User for Mode Management. Assign a user a list of feature identifiers for `Mode Management`. Feature identifiers reference feature instances like `Auto Attendants`, `Call Queues`, and `Hunt Groups`. A maximum of 50 features can be assigned to a user for `Mode Management`. Updating mode management settings for a user requires a full, or location administrator auth token with a scope of `spark-admin:telephony_config_write`. :param feature_ids: Array of feature IDs. :type feature_ids: list[str] :param person_id: A unique identifier for the user. :type person_id: str :param org_id: Retrieve features list from this organization. :type org_id: str :rtype: None """ params = {} if org_id is not None: params['orgId'] = org_id body = dict() body['featureIds'] = feature_ids url = self.ep(f'{person_id}/modeManagement/features') super().put(url, params=params, json=body)