"""
Voice portal API
"""
import json
from typing import Optional
from pydantic import Field
from .vm_rules import BlockPreviousPasscodes, BlockRepeatedDigits, BlockContiguousSequences, PinLength
from ..api_child import ApiChild
from ..base import ApiModel
__all__ = ['VoicePortalSettings', 'FailedAttempts', 'ExpirePasscode', 'PasscodeRules', 'VoicePortalApi']
[docs]class VoicePortalSettings(ApiModel):
#: Voice Portal ID
portal_id: Optional[str] = Field(alias='id')
#: Voice Portal Name.
name: str
#: Language for audio announcements.
language: str
#: Language code for voicemail group audio announcement
language_code: str
#: Extension of incoming call.
extension: Optional[str]
#: Phone Number of incoming call.
phone_number: Optional[str]
#: Caller ID First Name.
first_name: str
#: Caller ID Last Name
last_name: str
[docs]class FailedAttempts(ApiModel):
"""
Number of failed attempts allowed.
"""
#: If enabled, allows specified number of attempts before locking voice portal access.
enabled: bool
#: Number of failed attempts allowed.
attempts: int
[docs]class ExpirePasscode(ApiModel):
enabled: bool
days: int
[docs]class PasscodeRules(ApiModel):
#: Settings for passcode expiry.
expire_passcode: Optional[ExpirePasscode]
#: Number of failed attempts allowed.
failed_attempts: FailedAttempts
#: Settings for previous passcode usage.
block_previous_passcodes: BlockPreviousPasscodes
#: Settings for not allowing single or groups of repeated digits in passcode (for example, 22888, 121212, or
#: 408408).
block_repeated_digits: BlockRepeatedDigits
#: Settings for not allowing numerical sequence in passcode (for example, 012345 or 987654).
block_contiguous_sequences: BlockContiguousSequences
#: Allowed length of the passcode.
length: PinLength
#: If enabled, the passcode do not allow revered phone number or extension.
block_reversed_user_number_enabled: bool
#: If enabled, the passcode do not allow user phone number or extension.
block_user_number_enabled: bool
#: If enabled, the passcode do not contain repeated pattern.
block_repeated_patterns_enabled: bool
#: If enabled, the passcode do not allow setting reversed old passcode.
block_reversed_old_passcode_enabled: bool
[docs]class VoicePortalApi(ApiChild, base='telephony/config/locations'):
"""
location voice portal API
"""
def _endpoint(self, *, location_id: str, path: str = None) -> str:
"""
location specific
telephony/config/locations/{locationId}/voicePortal
:meta private:
:param location_id: Unique identifier for the location.
:type location_id: str
:param path: additional path
:type: path: str
:return: full endpoint
:rtype: str
"""
path = path and f'/{path}' or ''
ep = self.session.ep(f'telephony/config/locations/{location_id}/voicePortal{path}')
return ep
[docs] def read(self, location_id: str, org_id: str = None) -> VoicePortalSettings:
"""
:param location_id: Location to which the voice portal belongs.
:type location_id: str
:param org_id: Organization to which the voice portal belongs.
:type org_id: str
:return: location voice portal settings
:rtype: VoicePortalSettings
"""
params = org_id and {'orgId': org_id} or None
url = self._endpoint(location_id=location_id)
return VoicePortalSettings.parse_obj(self.get(url, params=params))
[docs] def update(self, location_id: str, settings: VoicePortalSettings, passcode: str = None, org_id: str = None):
"""
Update VoicePortal
Update Voice portal information for the location.
Voice portals provide an interactive voice response (IVR) system so administrators can manage auto attendant
announcements.
Updating voice portal information for organization and/or rules requires a full administrator auth token with
a scope of spark-admin:telephony_config_write.
:param location_id: Location to which the voice portal belongs.
:type location_id: str
:param settings: new settings
:type settings: VoicePortalSettings
:param passcode: new passcode
:type passcode: str
:param org_id: Organization to which the voice portal belongs.
:type org_id: str
"""
data = json.loads(settings.json(exclude={'portal_id': True,
'language': True}))
if passcode is not None:
data['passcode'] = {'newPasscode': passcode,
'confirmPasscode': passcode}
params = org_id and {'orgId': org_id} or None
url = self._endpoint(location_id=location_id)
self.put(url, params=params, json=data)
[docs] def passcode_rules(self, location_id: str, org_id: str = None) -> PasscodeRules:
"""
Get VoicePortal Passcode Rule
Retrieve the voice portal passcode rule for a location.
Voice portals provide an interactive voice response (IVR) system so administrators can manage auto attendant
announcements
Retrieving the voice portal passcode rule requires a full read-only administrator auth token with a scope
of spark-admin:telephony_config_read.
:param location_id: Retrieve voice portal passcode rules for this location.
:type location_id: str
:param org_id: Retrieve voice portal passcode rules for this organization.
:type org_id: str
:return: passcode rules
:rtype: PasscodeRules
"""
params = org_id and {'orgId': org_id} or None
url = self._endpoint(location_id=location_id, path='passcodeRules')
return PasscodeRules.parse_obj(self.get(url, params=params))