"""
API for voicemail rules
"""
from typing import Optional
from ..api_child import ApiChild
from ..base import ApiModel
__all__ = [
'BlockRepeatedDigits',
'BlockContiguousSequences',
'PinLength',
'DefaultVoicemailPinRules',
'EnabledAndNumberOfDays',
'BlockPreviousPasscodes',
'VoiceMailRules',
'UserVoicemailPINRules',
'VoicemailRulesApi',
]
[docs]
class BlockRepeatedDigits(ApiModel):
"""
Settings for not allowing single or groups of repeated digits in passcode (for example, 22888, 121212, or 408408).
"""
#: If enabled, passcode should not contain repeated digits.
enabled: Optional[bool] = None
#: Maximum number of repeated digits. Min 1, Max 6.
max: Optional[int] = None
[docs]
class BlockContiguousSequences(ApiModel):
"""
Settings for not allowing numerical sequence in passcode (for example, 012345 or 987654).
"""
#: If enabled, do not allow the specified number of ascending or descending digits in a row.
enabled: Optional[bool] = None
#: Number of ascending digits in sequence. The minimum value is 2. The maximum value is 5.
number_of_ascending_digits: Optional[int] = None
#: Number of descending digits in sequence. The minimum value is 2. The maximum value is 5.
number_of_descending_digits: Optional[int] = None
[docs]
class PinLength(ApiModel):
"""
Length of the passcode.
"""
#: The minimum value is 2. The maximum value is 15.
min: Optional[int] = None
#: The minimum value is 3. The maximum value is 30.
max: Optional[int] = None
[docs]
class DefaultVoicemailPinRules(ApiModel):
"""
Default voicemail passcode requirements.
"""
#: If enabled, the passcode should not contain repeated pattern.
block_repeated_patterns_enabled: Optional[bool] = None
#: Settings for not allowing single or groups of repeated digits in passcode (for example, 22888, 121212, or
#: 408408).
block_repeated_digits: Optional[BlockRepeatedDigits] = None
#: Settings for not allowing numerical sequence in passcode (for example, 012345 or 987654).
block_contiguous_sequences: Optional[BlockContiguousSequences] = None
#: Length of the passcode.
length: Optional[PinLength] = None
#: If enabled, default voicemail passcode can be set.
default_voicemail_pin_enabled: Optional[bool] = None
[docs]
@staticmethod
def default() -> 'DefaultVoicemailPinRules':
return DefaultVoicemailPinRules(
block_repeated_patterns_enabled=True,
block_repeated_digits=BlockRepeatedDigits(enabled=True, max=3),
block_contiguous_sequences=BlockContiguousSequences(
enabled=True, number_of_descending_digits=3, number_of_ascending_digits=3
),
length=PinLength(min=6, max=30),
default_voicemail_pin_enabled=False,
)
[docs]
class BlockPreviousPasscodes(ApiModel):
#: If enabled, set how many of the previous passcodes are not allowed to be re-used.
enabled: Optional[bool] = None
#: Number of previous passcodes. The minimum value is 1. The maximum value is 10.
number_of_passcodes: Optional[int] = None
[docs]
class UserVoicemailPINRules(ApiModel):
#: If enabled, the passcode cannot contain repeated patterns. For example, 121212 and 123123.
block_repeated_patterns_enabled: Optional[bool] = None
#: If enabled, the passcode must not match the user's own phone number.
block_user_number_enabled: Optional[bool] = None
#: If enabled, the passcode must not match the user's phone number in reverse.
block_reversed_user_number_enabled: Optional[bool] = None
block_previous_passcodes: Optional[BlockPreviousPasscodes] = None
#: If enabled, the passcode must not match the user's old passcodes in reverse.
block_reversed_old_passcode_enabled: Optional[bool] = None
block_repeated_digits: Optional[BlockRepeatedDigits] = None
block_contiguous_sequences: Optional[BlockContiguousSequences] = None
length: Optional[PinLength] = None
[docs]
class EnabledAndNumberOfDays(ApiModel):
"""
Settings for passcode expiry or passcode changes
"""
enabled: Optional[bool] = None
number_of_days: Optional[int] = None
[docs]
class VoiceMailRules(ApiModel):
#: Default voicemail passcode requirements.
default_voicemail_pin_rules: Optional[DefaultVoicemailPinRules] = None
#: Set to true to enable default voicemail passcode; only used in update()
default_voicemail_pin_enabled: Optional[bool] = None
#: Default voicemail passcode; only used in update()
default_voicemail_pin: Optional[str] = None
#: Settings for passcode expiry.
expire_passcode: Optional[EnabledAndNumberOfDays] = None
#: Settings for passcode changes.
change_passcode: Optional[EnabledAndNumberOfDays] = None
#: Settings for previous passcode usage.
block_previous_passcodes: Optional[BlockPreviousPasscodes] = None
[docs]
@staticmethod
def default() -> 'VoiceMailRules':
return VoiceMailRules(
default_voicemail_pin_rules=DefaultVoicemailPinRules.default(),
expire_passcode=EnabledAndNumberOfDays(enabled=True, number_of_days=180),
change_passcode=EnabledAndNumberOfDays(enabled=False, number_of_days=1),
block_previous_passcodes=BlockPreviousPasscodes(enabled=True, number_of_passcodes=10),
)
[docs]
class VoicemailRulesApi(ApiChild, base='telephony/config/voicemail/rules'):
"""
API for voicemail rules settings
"""
[docs]
def read(self, org_id: str = None) -> VoiceMailRules:
"""
Get Voicemail Rules
Retrieve the organization's voicemail rules.
Organizational voicemail rules specify the default passcode requirements.
Retrieving the organization's voicemail rules requires a full, user or read-only administrator auth token with
a scope of spark-admin:telephony_config_read.
:param org_id: Retrieve voicemail settings for this organization.
:type org_id: str
:return: VM settings
:rtype: OrganisationVoicemailSettings
"""
params = org_id and {'orgId': org_id} or None
url = self.ep()
return VoiceMailRules.model_validate(self.get(url, params=params))
[docs]
def update(self, settings: VoiceMailRules, org_id: str = None):
"""
Update Voicemail Rules
Update the organization's default voicemail passcode and/or rules.
Organizational voicemail rules specify the default passcode requirements.
If you choose to set default passcode for new people added to your organization, communicate to your people
what that passcode is, and that it must be reset before they can access their voicemail. If this feature is
not turned on, each new person must initially set their own passcode.
Updating organization's voicemail passcode and/or rules requires a full administrator auth token with a scope
of spark-admin:telephony_config_write.
:param settings: new settings
:type settings: VoiceMailRules
:param org_id: Update voicemail rules for this organization.
:type org_id: str
"""
params = org_id and {'orgId': org_id} or None
url = self.ep()
data = settings.model_dump_json(exclude={'default_voicemail_pin_rules': True})
self.put(url, params=params, data=data)