tinyCUCM 0.2.958
Cisco Unified Call Manager AXL Methods Collection.
Requires Python: >=3.10

<a name="readme-top"></a>

<!-- PROJECT NAME -->
<br />
<div align="center">
  <h3 align="center">tinyCUCM</h3>
  <p align="center">Cisco Unified Call Manager AXL Methods Collection.</p>
</div>

---

<!-- TABLE OF CONTENTS -->
<details>
  <summary>Table of Contents</summary>
  <ol>
    <li><a href="#about-the-project">About The Project</a></li>
    <li><a href="#installation">Installation</a></li>
    <li>
      <a href="#usage">Usage</a>
      <ul>
        <li><a href="#instance-create">Instance Create</a></li>
        <li><a href="#axl-collection">AXL Collection</a></li>
        <ul>
          <li><a href="#add-methods">Add Methods</a></li>
          <li><a href="#do-methods">Do Methods</a></li>
          <li><a href="#get-methods">Get Methods</a></li>
          <li><a href="#remove-methods">Remove Methods</a></li>
          <li><a href="#reset-methods">Reset Methods</a></li>
          <li><a href="#restart-methods">Restart Methods</a></li>
          <li><a href="#update-methods">Update Methods</a></li>
        </ul>
        <li><a href="#ccs-methods">CCS Methods</a></li>
        <li><a href="#ris-methods">RIS Methods</a></li>
        <li><a href="#sql-collection">SQL Collection</a></li>
        <ul>
          <li><a href="#execute-query">Execute Query</a></li>
          <li><a href="#update-query">Update Query</a></li>
          <li><a href="#predefined-queries">Predefined Queries</a></li>
        </ul>
        <li><a href="#create-yor-own-methods">Create Your Own Methods</a></li>
      </ul>
    </li>
    <li><a href="#license">License</a></li>
    <li><a href="#contact">Contact</a></li>
  </ol>
</details>

---


## About The Project

This project is for informational purposes only and is intended to study the capabilities of the Cisco Unified Call Manager's API. 
Methods have been tested on CUCM ver. 11.5.\
[Cisco UCM AXL Schemas & SQL Data Dictionaries Documentation](https://developer.cisco.com/docs/axl/#!archived-references)

<p align="right">(<a href="#readme-top">back to top</a>)</p>


## Installation

Installation is as simple as:

   ```sh
   pip install tinyCUCM
   ```

<p align="right">(<a href="#readme-top">back to top</a>)</p>


## Usage

Cisco UCM WSDL Services:

| WSDL File              | Path                                                                               |
|------------------------|------------------------------------------------------------------------------------|
| SOAPMonitorService     | https://x.x.x.x:8443/realtimeservice/services/SOAPMonitorService?wsdl              |
| RisPort                | https://x.x.x.x:8443/realtimeservice/services/RisPort?wsdl                         |
| RisPort70              | https://x.x.x.x:8443/realtimeservice/services/RisPort70?wsdl                       |
| RisService70           | https://x.x.x.x:8443/realtimeservice2/services/RISService70?wsdl                   |
| PerfmonPort            | https://x.x.x.x:8443/perfmonservice/services/PerfmonPort?wsdl                      |
| ControlCenterServices  | https://x.x.x.x:8443/controlcenterservice/services/ControlCenterServicesPort?wsdl  |
| LogCollectionService   | https://x.x.x.x:8443/logcollectionservice/services/LogCollectionPort?wsdl          |
| CDRonDemand            | https://x.x.x.x:8443/CDRonDemandService/services/CDRonDemand?wsdl                  |
| DimeGetFile            | https://x.x.x.x:8443/logcollectionservice/services/DimeGetFileService?wsdl         |

Download `Cisco AXL Toolkit` from the station (`Application` -> `Plugins`) and put it into the folder with your project.\
Copy `RISService70` and create `RISService70.xml` file, put file it into `axlsqltoolkit` folder.\
Create an Cisco UCM application account or local end user with `Standard CCM Super Users` privileges
(Assign access control group to `Your-CUCM-Account`).


### Instance Create

Create a new instance of the `CucmAxlClient` class and assigns this object to the local variable `cucm`.

<span style="color:#ff0000">**Don't store sensitive information in source code. For example use ".env" file.**</span>

<details>
<summary>Code Example:</summary>

```python
from pathlib import Path
from tinyCUCM import CucmClient


BASE_DIR = Path(__file__).resolve().parent
settings = {
    "pub_fqdn": "cucm.example.com",
    "pub_version": "11.5",
    "user_login": "Your-CUCM-Account",
    "user_password": "You%wILL#&neVeR!gUEss",
    "toolkit_path": BASE_DIR / "axlsqltoolkit",
    "cert_path": BASE_DIR / "cucm.crt",
    "session_verify": False,
    "session_timeout": 15,
    "ccs_wsdl_filename": "wsdlControlCenterServices_test.xml",
    "ris_wsdl_filename": "wsdlRISService70_test.xml",
}

if __name__ == "__main__":
    cucm = CucmClient(**settings)
    # Get All AXL Method Names
    print("Result:", cucm.axlAllMethods())
    # Result: (
    #     'addAarGroup', 
    #     'addAdvertisedPatterns', 
    #     'addAnnouncement', 
    #     'addAppServerInfo', 
    #     'addAppUser', 
    #     ...,
    #     'updateWifiHotspot', 
    #     'updateWirelessAccessPointControllers', 
    #     'updateWlanProfileGroup', 
    #     'wipePhone'
    # )
```

</details>

<p align="right">(<a href="#readme-top">back to top</a>)</p>


### AXL Collection


#### Add Methods

* `axlAddCallPickupGroup`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `callPickupGroup`
    * `name`
    * `pattern`
  * expected:
    * `description`
    * `routePartitionName`
    * `members`
    * `pickupNotification`
    * `pickupNotificationTimer`
    * `callInfoForPickupNotification`
  </details>
* `axlAddDeviceProfile`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `deviceProfile`
    * `name`
    * `product`
    * `class`
    * `protocol`
    * `protocolSide`
    * `phoneTemplateName`
  * expected:
    * `name`
    * `description`
    * `userHoldMohAudioSourceId`
    * `vendorConfig`
    * `traceFlag`
    * `mlppDomainId`
    * `mlppIndicationStatus`
    * `preemption`
    * `lines`
      * `line` - collection of:
        * required:
          * `index`
          * `dirn`
            * `pattern`
            * `routePartitionName`
        * expected:
          * `label`
          * `display`
          * `ringSetting`
          * `consecutiveRingSetting`
          * `ringSettingIdlePickupAlert`
          * `ringSettingActivePickupAlert`
          * `displayAscii`
          * `e164Mask`
          * `mwlPolicy`
          * `maxNumCalls`
          * `busyTrigger`
          * `callInfoDisplay`
          * `recordingProfileName`
          * `monitoringCssName`
          * `recordingFlag`
          * `audibleMwi`
          * `speedDial`
          * `partitionUsage`
          * `associatedEndusers`
          * `missedCallLogging`
          * `recordingMediaSource`
    * `speeddials`
    * `busyLampFields`
    * `blfDirectedCallParks`
    * `addOnModules`
    * `userLocale`
    * `singleButtonBarge`
    * `joinAcrossLines`
    * `loginUserId`
    * `ignorePresentationIndicators`
    * `dndOption`
    * `dndRingSetting`
    * `dndStatus`
    * `emccCallingSearchSpace`
    * `alwaysUsePrimeLine`
    * `alwaysUsePrimeLineForVoiceMessage`
    * `softkeyTemplateName`
    * `callInfoPrivacyStatus`
    * `services`
    * `featureControlPolicy`
  </details>
* `axlAddLine`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `line`
    * `pattern`
    * `usage`
  * expected:
    * `description`
    * `routePartitionName`
    * `aarNeighborhoodName`
    * `aarDestinationMask`
    * `aarKeepCallHistory`
    * `aarVoiceMailEnabled`
    * `callForwardAll`
    * `callForwardBusy`
    * `callForwardBusyInt`
    * `callForwardNoAnswer`
    * `callForwardNoAnswerInt`
    * `callForwardNoCoverage`
    * `callForwardNoCoverageInt`
    * `callForwardOnFailure`
    * `callForwardAlternateParty`
    * `callForwardNotRegistered`
    * `callForwardNotRegisteredInt`
    * `callPickupGroupName`
    * `autoAnswer`
    * `networkHoldMohAudioSourceId`
    * `userHoldMohAudioSourceId`
    * `alertingName`
    * `asciiAlertingName`
    * `presenceGroupName`
    * `shareLineAppearanceCssName`
    * `voiceMailProfileName`
    * `patternPrecedence`
    * `releaseClause`
    * `hrDuration`
    * `hrInterval`
    * `cfaCssPolicy`
    * `defaultActivatedDeviceName`
    * `parkMonForwardNoRetrieveDn`
    * `parkMonForwardNoRetrieveIntDn`
    * `parkMonForwardNoRetrieveVmEnabled`
    * `parkMonForwardNoRetrieveIntVmEnabled`
    * `parkMonForwardNoRetrieveCssName`
    * `parkMonForwardNoRetrieveIntCssName`
    * `parkMonReversionTimer`
    * `partyEntranceTone`
    * `directoryURIs`
    * `allowCtiControlFlag`
    * `rejectAnonymousCall`
    * `patternUrgency`
    * `confidentialAccess`
    * `externalCallControlProfile`
    * `enterpriseAltNum`
    * `e164AltNum`
    * `pstnFailover`
    * `callControlAgentProfile`
    * `useEnterpriseAltNum`
    * `useE164AltNum`
    * `active`
  </details>
* `axlAddLineGroup`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `lineGroup`
    * `name`
    * `distributionAlgorithm`
    * `rnaReversionTimeOut`
    * `huntAlgorithmNoAnswer`
    * `huntAlgorithmBusy`
    * `huntAlgorithmNotAvailable`
  * expected:
    * `members`
    * `autoLogOffHunt`
  </details>
* `axlAddPhone`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `phone`
    * `name`
    * `product`
    * `class`
    * `protocol`
    * `protocolSide`
    * `devicePoolName`
    * `commonPhoneConfigName`
    * `locationName`
    * `useTrustedRelayPoint`
    * `phoneTemplateName`
    * `primaryPhoneName`
    * `builtInBridgeStatus`
    * `packetCaptureMode`
    * `certificateOperation`
    * `deviceMobilityMode`
  * expected:
    * `description`
    * `callingSearchSpaceName`
    * `commonDeviceConfigName`
    * `networkLocation`
    * `mediaResourceListName`
    * `networkHoldMohAudioSourceId`
    * `userHoldMohAudioSourceId`
    * `automatedAlternateRoutingCssName`
    * `aarNeighborhoodName`
    * `loadInformation`
    * `vendorConfig`
    * `versionStamp`
    * `traceFlag`
    * `mlppDomainId`
    * `mlppIndicationStatus`
    * `preemption`
    * `retryVideoCallAsAudio`
    * `securityProfileName`
    * `sipProfileName`
    * `cgpnTransformationCssName`
    * `useDevicePoolCgpnTransformCss`
    * `geoLocationName`
    * `geoLocationFilterName`
    * `sendGeoLocation`
    * `lines`
      * `line` - collection of:
        * required:
          * `index`
          * `dirn`
            * `pattern`
            * `routePartitionName`
        * expected:
          * `label`
          * `display`
          * `ringSetting`
          * `consecutiveRingSetting`
          * `ringSettingIdlePickupAlert`
          * `ringSettingActivePickupAlert`
          * `displayAscii`
          * `e164Mask`
          * `mwlPolicy`
          * `maxNumCalls`
          * `busyTrigger`
          * `callInfoDisplay`
          * `recordingProfileName`
          * `monitoringCssName`
          * `recordingFlag`
          * `audibleMwi`
          * `speedDial`
          * `partitionUsage`
          * `associatedEndusers`
          * `missedCallLogging`
          * `recordingMediaSource`
    * `speeddials`
    * `busyLampFields`
    * `ringSettingIdleBlfAudibleAlert`
    * `ringSettingBusyBlfAudibleAlert`
    * `blfDirectedCallParks`
    * `addOnModules`
    * `userLocale`
    * `networkLocale`
    * `idleTimeout`
    * `authenticationUrl`
    * `directoryUrl`
    * `idleUrl`
    * `informationUrl`
    * `messagesUrl`
    * `proxyServerUrl`
    * `servicesUrl`
    * `services`
    * `softkeyTemplateName`
    * `defaultProfileName`
    * `enableExtensionMobility`
    * `singleButtonBarge`
    * `joinAcrossLines`
    * `callInfoPrivacyStatus`
    * `hlogStatus`
    * `ownerUserName`
    * `ignorePresentationIndicators`
    * `packetCaptureDuration`
    * `subscribeCallingSearchSpaceName`
    * `rerouteCallingSearchSpaceName`
    * `allowCtiControlFlag`
    * `presenceGroupName`
    * `unattendedPort`
    * `requireDtmfReception`
    * `rfc2833Disabled`
    * `authenticationMode`
    * `keySize`
    * `keyOrder`
    * `ecKeySize`
    * `authenticationString`
    * `upgradeFinishTime`
    * `remoteDevice`
    * `dndOption`
    * `dndRingSetting`
    * `dndStatus`
    * `isActive`
    * `isDualMode`
    * `mobilityUserIdName`
    * `phoneSuite`
    * `phoneServiceDisplay`
    * `isProtected`
    * `mtpRequired`
    * `mtpPreferedCodec`
    * `dialRulesName`
    * `sshUserId`
    * `sshPwd`
    * `digestUser`
    * `outboundCallRollover`
    * `hotlineDevice`
    * `secureInformationUrl`
    * `secureDirectoryUrl`
    * `secureMessageUrl`
    * `secureServicesUrl`
    * `secureAuthenticationUrl`
    * `secureIdleUrl`
    * `alwaysUsePrimeLine`
    * `alwaysUsePrimeLineForVoiceMessage`
    * `featureControlPolicy`
    * `deviceTrustMode`
    * `earlyOfferSupportForVoiceCall`
    * `requireThirdPartyRegistration`
    * `blockIncomingCallsWhenRoaming`
    * `homeNetworkId`
    * `AllowPresentationSharingUsingBfcp`
    * `confidentialAccess`
    * `requireOffPremiseLocation`
    * `allowiXApplicableMedia`
    * `cgpnIngressDN`
    * `useDevicePoolCgpnIngressDN`
    * `msisdn`
    * `enableCallRoutingToRdWhenNoneIsActive`
    * `wifiHotspotProfile`
    * `wirelessLanProfileGroup`
    * `elinGroup`
  </details>
* `axlAddeRemoteDestination`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `remoteDestination`
    * `destination`
    * `answerTooSoonTimer`
    * `answerTooLateTimer`
    * `delayBeforeRingingCell`
    * `ownerUserId`
    * `remoteDestinationProfileName`
  * expected:
    * `name`
    * `enableUnifiedMobility`
    * `enableExtendAndConnect`
    * `ctiRemoteDeviceName`
    * `dualModeDeviceName`
    * `isMobilePhone`
    * `enableMobileConnect`
    * `lineAssociations`
    * `timeZone`
    * `todAccessName`
    * `mobileSmartClientName`
    * `mobilityProfileName`
    * `singleNumberReachVoicemail`
    * `dialViaOfficeReverseVoicemail`
    * `ringSchedule`
    * `accessListName`
  </details>
* `axlAddRemoteDestinationProfile`
  <details>
  <summary>keywords args</summary>

  * required:
    * `remoteDestinationProfile`
    * `name`
    * `product`
    * `class`
    * `protocol`
    * `protocolSide`
    * `devicePoolName`
    * `callInfoPrivacyStatus`
    * `userId`
  * expected:
    * `description`
    * `callingSearchSpaceName`
    * `networkHoldMohAudioSourceId`
    * `userHoldMohAudioSourceId`
    * `lines`
      * `line` - collection of:
        * required:
          * `index`
          * `dirn`
            * `pattern`
            * `routePartitionName`
        * expected:
          * `label`
          * `display`
          * `ringSetting`
          * `consecutiveRingSetting`
          * `ringSettingIdlePickupAlert`
          * `ringSettingActivePickupAlert`
          * `displayAscii`
          * `e164Mask`
          * `mwlPolicy`
          * `maxNumCalls`
          * `busyTrigger`
          * `callInfoDisplay`
          * `recordingProfileName`
          * `monitoringCssName`
          * `recordingFlag`
          * `audibleMwi`
          * `speedDial`
          * `partitionUsage`
          * `associatedEndusers`
          * `missedCallLogging`
          * `recordingMediaSource`
    * `ignorePresentationIndicators`
    * `rerouteCallingSearchSpaceName`
    * `cgpnTransformationCssName`
    * `automatedAlternateRoutingCssName`
    * `useDevicePoolCgpnTransformCss`
    * `userLocale`
    * `networkLocale`
    * `primaryPhoneName`
    * `dndOption`
    * `dndStatus`
    * `mobileSmartClientProfileName`
  </details>
* `axlAddTranslationPattern`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `transPattern`
    * `pattern`
    * `routePartitionName`
    * `usage`
  * expected:
    * `description`
    * `blockEnable`
    * `calledPartyTransformationMask`
    * `callingPartyTransformationMask`
    * `useCallingPartyPhoneMask`
    * `callingPartyPrefixDigits`
    * `dialPlanName`
    * `digitDiscardInstructionName`
    * `patternUrgency`
    * `prefixDigitsOut`
    * `routeFilterName`
    * `callingLinePresentationBit`
    * `callingNamePresentationBit`
    * `connectedLinePresentationBit`
    * `connectedNamePresentationBit`
    * `patternPrecedence`
    * `provideOutsideDialtone`
    * `callingPartyNumberingPlan`
    * `callingPartyNumberType`
    * `calledPartyNumberingPlan`
    * `calledPartyNumberType`
    * `callingSearchSpaceName`
    * `resourcePriorityNamespaceName`
    * `routeNextHopByCgpn`
    * `routeClass`
    * `callInterceptProfileName`
    * `releaseClause`
    * `useOriginatorCss`
    * `dontWaitForIDTOnSubsequentHops`
    * `isEmergencyServiceNumber`
  </details>
* `axlAddUser`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `user`
    * `userid`
    * `lastName`
    * `presenceGroupName`
  * expected:
    * `firstName`
    * `displayName`
    * `middleName`
    * `password`
    * `pin`
    * `mailid`
    * `department`
    * `manager`
    * `userLocale`
    * `associatedDevices`
    * `primaryExtension`
    * `associatedPc`
    * `associatedGroups`
    * `enableCti` 
    * `digestCredentials`
    * `phoneProfiles`
    * `defaultProfile`
    * `subscribeCallingSearchSpaceName`
    * `enableMobility`
    * `enableMobileVoiceAccess`
    * `maxDeskPickupWaitTime`
    * `remoteDestinationLimit`
    * `passwordCredentials`
    * `pinCredentials`
    * `enableEmcc`
    * `ctiControlledDeviceProfiles`
    * `patternPrecedence`
    * `numericUserId`
    * `mlppPassword`
    * `customUserFields`
    * `homeCluster`
    * `imAndPresenceEnable`
    * `serviceProfile`
    * `lineAppearanceAssociationForPresences`
    * `directoryUri`
    * `telephoneNumber`
    * `title`
    * `mobileNumber`
    * `homeNumber`
    * `pagerNumber`
    * `extensionsInfo`
    * `selfService`
    * `userProfile`
    * `calendarPresence`
    * `ldapDirectoryName`
    * `userIdentity`
    * `nameDialing`
    * `ipccExtension`
    * `convertUserAccount`
    * `accountType`
    * `authenticationType`
    * `enableUserToHostConferenceNow`
    * `attendeesAccessCode`
    * `zeroHop`
  </details>

<details>
<summary>Code Example:</summary>

```python
cucm = ...
print("Result:", cucm.axlAddCallPickupGroup(**{"callPickupGroup": {"name": "...", "pattern": "..."}}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddLine(**{"line": {"pattern": "...", "usage": "Device"}}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddLineGroup(**{
    "lineGroup": {
        "name": "...",
        "distributionAlgorithm": "Broadcast",
        "rnaReversionTimeOut": 10,
        "huntAlgorithmNoAnswer": "Try next member; then, try next group in Hunt List",
        "huntAlgorithmBusy": "Try next member; then, try next group in Hunt List",
        "huntAlgorithmNotAvailable": "Try next member; then, try next group in Hunt List",
    }
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddPhone(**{
    "phone": {
        "name": "...",
        "product": "Cisco 7821",
        "class": "Phone",
        "protocol": "SIP",
        "protocolSide": "User",
        "devicePoolName": "Default",
        "commonPhoneConfigName": "Standard Common Phone Profile",
        "locationName": "Hub_None",
        "useTrustedRelayPoint": "Default",
        "phoneTemplateName": "Standard 7821 SIP",
        "primaryPhoneName": None,
        "builtInBridgeStatus": "Default",
        "packetCaptureMode": "None",
        "certificateOperation": "No Pending Operation",
        "deviceMobilityMode": "Default"
    }
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddRemoteDestination(**{
    "remoteDestination": {
        "destination": "...",
        "answerTooSoonTimer": 1500,
        "answerTooLateTimer": 19000,
        "delayBeforeRingingCell": 4000,
        "ownerUserId": "...",
        "remoteDestinationProfileName": "..."
    }
}))
# Result: <Response [200]>

print("Result:", cucm.axlAddRemoteDestinationProfile(**{
    "remoteDestinationProfile": {
        "name": "...",
        "product": "Remote Destination Profile",
        "class": "Remote Destination Profile",
        "protocol": "Remote Destination",
        "protocolSide": "User",
        "devicePoolName": "...",
        "callInfoPrivacyStatus": "Default",
        "userId": "..."
    }
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

# Pattern without `routePartitionName`
print("Result:", cucm.axlAddTranslationPattern(**{
        "transPattern": {"pattern": "...", "routePartitionName": "", "usage": "Translation"}
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlAddUser(**{
  "user": {"userid": "...", "lastName": "...", "presenceGroupName": "Standard Presence group"}
}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}
```

</details>

<p align="right">(<a href="#readme-top">back to top</a>)</p>


#### Do Methods

* `axlDoAuthenticateUser`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `userid`
    * `password` or `pin`
  </details>
* `axlDoDeviceLogin`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `deviceName`
    * `loginDuration`
      * `"0"` - Logout disabled
      * `"36000"` - Logout after 10h (or any other positive value in milliseconds)
    * `profileName`
    * `userId`
  </details>
* `axlDoDeviceLogout`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `deviceName`
  </details>
* `axlDoLdapSync`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
    * `sync`
      * `True` - Start Synchronization
      * `False` - Cancel the Synchronization which is currently under process
  </details>

<details>
<summary>Code Example:</summary>

```python
cucm = ...
print("Result:", cucm.axlDoAuthenticateUser(userid="...", pin= "..."))
print("Result:", cucm.axlDoAuthenticateUser(**{"userid": "...", "password": "..."}))
# Result: {'return': {'userAuthenticated': 'true', 'code': 0, 'daysToExpiry': 0, 'isWarningNeeded': 'false'}, 'sequence': None}
# Result: {'return': {'userAuthenticated': 'false', 'code': 1, 'daysToExpiry': 0, 'isWarningNeeded': 'false'}, 'sequence': None}

print("Result:", cucm.axlDoDeviceLogin(**{"deviceName": "SEP...", "loginDuration": "...", "profileName":"...", "userid": "..."}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlDoDeviceLogout(**{"deviceName": "SEP..."}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}

print("Result:", cucm.axlDoLdapSync(**{"uuid": "........-....-....-....-............", "sync": True}))
# Result: {'return': 'Sync initiated successfully', 'sequence': None}
```

</details>

<p align="right">(<a href="#readme-top">back to top</a>)</p>


#### Get Methods

* `axlGetAny`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `method` and `uuid` or `name` or any other key for getting cucm object 
  </details>
* `axlGetCallPickupGroup`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name` or `pattern` or (`pattern`, `routePartitionName`)
  </details>
* `axlGetDeviceProfile`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>
* `axlGetLine`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `pattern` or (`pattern`, `routePartitionName`)
  </details>
* `axlGetLineGroup`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>
* `axlGetPhone`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>
* `axlGetRemoteDestination`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `destination`
  </details>
* `axlGetRemoteDestinationProfile`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>
* `axlGetTranslationPattern`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `pattern` or (`pattern`, `routePartitionName`)
  </details>
* `axlGetUser`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `userid`
  </details>

<details>
<summary>Code Example:</summary>

```python
cucm = ...
print("Result:", cucm.axlGetAny(method="getPhone", name="SEP..."))
print("Result:", cucm.axlGetPhone(name="SEP..."))
print("Result:", cucm.axlGetPhone(**{"uuid": "........-....-....-....-............"}))
# Result: {
#     'name': '...',
#     ...,  
#     'lines': {
#         'line': [
#             {
#                 'index': 1,
#                  ...,
#                 'dirn': {
#                     'pattern': '...',
#                     'routePartitionName': {'_value_1': '...', 'uuid': '{........-....-....-....-............}'},
#                     'uuid': '{........-....-....-....-............}'
#                 },
#                 'uuid': '{........-....-....-....-............'
#             }
#         ], 
#         'lineIdentifier': None
#     }, 
#     'uuid': '{........-....-....-....-............}'
# }
```

</details>

<p align="right">(<a href="#readme-top">back to top</a>)</p>


#### Remove Methods

* `axlRemoveCallPickupGroup`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name` or `pattern` or (`pattern`, `routePartitionName`)
  </details>
* `axlRemoveDeviceProfile`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>
* `axlRemoveLine`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `pattern` or (`pattern`, `routePartitionName`)
  </details>
* `axlRemoveLineGroup`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>
* `axlRemovePhone`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>
* `axlRemoveRemoteDestination`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `destination`
  </details>
* `axlRemoveRemoteDestinationProfile`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>
* `axlRemoveTranslationPattern`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `pattern` or (`pattern`, `routePartitionName`)
  </details>
* `axlRemoveUser`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `userid`
  </details>

<details>
<summary>Code Example:</summary>

```python
cucm = ...
print("Result:", cucm.axlRemovePhone(name= "SEP..."))
print("Result:", cucm.axlRemovePhone(**{"uuid": "........-....-....-....-............"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}
```

</details>

<p align="right">(<a href="#readme-top">back to top</a>)</p>


#### Reset Methods

* `axlResetPhone`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>

<details>
<summary>Code Example:</summary>

```python
cucm = ...
print("Result:", cucm.axlResetPhone(name="SEP..."))
print("Result:", cucm.axlResetPhone(**{"uuid": "........-....-....-....-............"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}
```

</details>

<p align="right">(<a href="#readme-top">back to top</a>)</p>


#### Restart Methods

* `axlRestartPhone`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  </details>

<details>
<summary>Code Example:</summary>

```python
cucm = ...
print("Result:", cucm.axlRestartPhone(name="SEP..."))
print("Result:", cucm.axlRestartPhone(**{"uuid": "........-....-....-....-............"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}
```

</details>

<p align="right">(<a href="#readme-top">back to top</a>)</p>


#### Update Methods

* `axlUpdateCallPickupGroup`
  <details>
    <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name` or `pattern` or (`pattern`, `routePartitionName`)
  * expected:
    * `newPattern`
    * `description`
    * `newRoutePartitionName`
    * `removeMembers`
    * `addMembers`
    * `members`
    * `pickupNotification`
    * `pickupNotificationTimer`
    * `callInfoForPickupNotification`
    * `newName`
  </details>
* `axlUpdateDeviceProfile`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  * expected:
    * `newName`
    * `description`
    * `userHoldMohAudioSourceId`
    * `vendorConfig`
    * `mlppDomainId`
    * `mlppIndicationStatus`
    * `preemption`
    * `lines`
      * `line` - collection of:
        * required:
          * `index`
          * `dirn`
            * `pattern`
            * `routePartitionName`
        * expected:
          * `label`
          * `display`
          * `ringSetting`
          * `consecutiveRingSetting`
          * `ringSettingIdlePickupAlert`
          * `ringSettingActivePickupAlert`
          * `displayAscii`
          * `e164Mask`
          * `mwlPolicy`
          * `maxNumCalls`
          * `busyTrigger`
          * `callInfoDisplay`
          * `recordingProfileName`
          * `monitoringCssName`
          * `recordingFlag`
          * `audibleMwi`
          * `speedDial`
          * `partitionUsage`
          * `associatedEndusers`
          * `missedCallLogging`
          * `recordingMediaSource`
    * `phoneTemplateName`
    * `speeddials`
    * `busyLampFields`
    * `blfDirectedCallParks`
    * `addOnModules`
    * `userLocale`
    * `singleButtonBarge`
    * `joinAcrossLines`
    * `loginUserId`
    * `ignorePresentationIndicators`
    * `dndOption`
    * `dndRingSetting`
    * `dndStatus`
    * `emccCallingSearchSpace`
    * `alwaysUsePrimeLine`
    * `alwaysUsePrimeLineForVoiceMessage`
    * `softkeyTemplateName`
    * `callInfoPrivacyStatus`
    * `services`
    * `featureControlPolicy`
  </details>
* `axlUpdateLine
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `pattern` or (`pattern`, `routePartitionName`)
  * expected:
    * `newPattern`
    * `description`
    * `newRoutePartitionName`
    * `aarNeighborhoodName`
    * `aarDestinationMask`
    * `aarKeepCallHistory`
    * `aarVoiceMailEnabled`
    * `callForwardAll`
    * `callForwardBusy`
    * `callForwardBusyInt`
    * `callForwardNoAnswer`
    * `callForwardNoAnswerInt`
    * `callForwardNoCoverage`
    * `callForwardNoCoverageInt`
    * `callForwardOnFailure`
    * `callForwardAlternateParty`
    * `callForwardNotRegistered`
    * `callForwardNotRegisteredInt`
    * `callPickupGroupName`
    * `autoAnswer`
    * `networkHoldMohAudioSourceId`
    * `userHoldMohAudioSourceId`
    * `alertingName`
    * `asciiAlertingName`
    * `presenceGroupName`
    * `shareLineAppearanceCssName`
    * `voiceMailProfileName`
    * `patternPrecedence`
    * `releaseClause`
    * `hrDuration`
    * `hrInterval`
    * `cfaCssPolicy`
    * `defaultActivatedDeviceName`
    * `parkMonForwardNoRetrieveDn`
    * `parkMonForwardNoRetrieveIntDn`
    * `parkMonForwardNoRetrieveVmEnabled`
    * `parkMonForwardNoRetrieveIntVmEnabled`
    * `parkMonForwardNoRetrieveCssName`
    * `parkMonForwardNoRetrieveIntCssName`
    * `parkMonReversionTimer`
    * `partyEntranceTone`
    * `directoryURIs`
    * `allowCtiControlFlag`
    * `rejectAnonymousCall`
    * `patternUrgency`
    * `confidentialAccess`
    * `externalCallControlProfile`
    * `enterpriseAltNum`
    * `e164AltNum`
    * `pstnFailover`
    * `callControlAgentProfile`
    * `useEnterpriseAltNum`
    * `useE164AltNum`
    * `active`
  </details>
* `axlUpdateLineGroup`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  * expected:
    * `distributionAlgorithm`
    * `rnaReversionTimeOut`
    * `huntAlgorithmNoAnswer`
    * `huntAlgorithmBusy`
    * `huntAlgorithmNotAvailable`
    * `removeMembers`
    * `addMembers`
    * `members`
    * `newName`
    * `autoLogOffHunt`
  </details>
* `axlUpdatePhone`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  * expected:
    * `newName`
    * `description`
    * `callingSearchSpaceName`
    * `devicePoolName`
    * `commonDeviceConfigName`
    * `commonPhoneConfigName`
    * `networkLocation`
    * `locationName`
    * `mediaResourceListName`
    * `networkHoldMohAudioSourceId`
    * `userHoldMohAudioSourceId`
    * `automatedAlternateRoutingCssName`
    * `aarNeighborhoodName`
    * `loadInformation`
    * `vendorConfig`
    * `versionStamp`
    * `traceFlag`
    * `mlppDomainId`
    * `mlppIndicationStatus`
    * `preemption`
    * `useTrustedRelayPoint`
    * `retryVideoCallAsAudio`
    * `securityProfileName`
    * `sipProfileName`
    * `cgpnTransformationCssName`
    * `useDevicePoolCgpnTransformCss`
    * `geoLocationName`
    * `geoLocationFilterName`
    * `sendGeoLocation`
    * `removeLines`
    * `addLines`
    * `lines`
      * `line` - collection of:
        * required:
          * `index`
          * `dirn`
            * `pattern`
            * `routePartitionName`
        * expected:
          * `label`
          * `display`
          * `ringSetting`
          * `consecutiveRingSetting`
          * `ringSettingIdlePickupAlert`
          * `ringSettingActivePickupAlert`
          * `displayAscii`
          * `e164Mask`
          * `mwlPolicy`
          * `maxNumCalls`
          * `busyTrigger`
          * `callInfoDisplay`
          * `recordingProfileName`
          * `monitoringCssName`
          * `recordingFlag`
          * `audibleMwi`
          * `speedDial`
          * `partitionUsage`
          * `associatedEndusers`
          * `missedCallLogging`
          * `recordingMediaSource`
    * `phoneTemplateName`
    * `speeddials`
    * `busyLampFields`
    * `primaryPhoneName`
    * `ringSettingIdleBlfAudibleAlert`
    * `ringSettingBusyBlfAudibleAlert`
    * `blfDirectedCallParks`
    * `addOnModules`
    * `userLocale`
    * `networkLocale`
    * `idleTimeout`
    * `authenticationUrl`
    * `directoryUrl`
    * `idleUrl`
    * `informationUrl`
    * `messagesUrl`
    * `proxyServerUrl`
    * `servicesUrl`
    * `services`
    * `softkeyTemplateName`
    * `defaultProfileName`
    * `enableExtensionMobility`
    * `singleButtonBarge`
    * `joinAcrossLines`
    * `builtInBridgeStatus`
    * `callInfoPrivacyStatus`
    * `hlogStatus`
    * `ownerUserName`
    * `ignorePresentationIndicators`
    * `packetCaptureMode`
    * `packetCaptureDuration`
    * `subscribeCallingSearchSpaceName`
    * `rerouteCallingSearchSpaceName`
    * `allowCtiControlFlag`
    * `presenceGroupName`
    * `unattendedPort`
    * `requireDtmfReception`
    * `rfc2833Disabled`
    * `certificateOperation`
    * `authenticationMode`
    * `keySize`
    * `keyOrder`
    * `ecKeySize`
    * `authenticationString`
    * `upgradeFinishTime`
    * `deviceMobilityMode`
    * `remoteDevice`
    * `dndOption`
    * `dndRingSetting`
    * `dndStatus`
    * `isActive`
    * `mobilityUserIdName`
    * `phoneSuite`
    * `phoneServiceDisplay`
    * `isProtected`
    * `mtpRequired`
    * `mtpPreferedCodec`
    * `dialRulesName`
    * `sshUserId`
    * `sshPwd`
    * `digestUser`
    * `outboundCallRollover`
    * `hotlineDevice`
    * `secureInformationUrl`
    * `secureDirectoryUrl`
    * `secureMessageUrl`
    * `secureServicesUrl`
    * `secureAuthenticationUrl`
    * `secureIdleUrl`
    * `alwaysUsePrimeLine`
    * `alwaysUsePrimeLineForVoiceMessage`
    * `featureControlPolicy`
    * `deviceTrustMode`
    * `earlyOfferSupportForVoiceCall`
    * `requireThirdPartyRegistration`
    * `blockIncomingCallsWhenRoaming`
    * `homeNetworkId`
    * `AllowPresentationSharingUsingBfcp`
    * `confidentialAccess`
    * `requireOffPremiseLocation`
    * `allowiXApplicableMedia`
    * `cgpnIngressDN`
    * `useDevicePoolCgpnIngressDN`
    * `msisdn`
    * `enableCallRoutingToRdWhenNoneIsActive`
    * `wifiHotspotProfile`
    * `wirelessLanProfileGroup`
    * `elinGroup`
  </details>
* `axlUpdateRemoteDestination`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `destination`
  * expected:
    * `newName`
    * `newDestination`
    * `answerTooSoonTimer`
    * `answerTooLateTimer`
    * `delayBeforeRingingCell`
    * `ownerUserId`
    * `enableUnifiedMobility`
    * `remoteDestinationProfileName`
    * `enableExtendAndConnect`
    * `ctiRemoteDeviceName`
    * `dualModeDeviceName`
    * `isMobilePhone`
    * `enableMobileConnect`
    * `lineAssociations`
    * `timeZone`
    * `todAccessName`
    * `mobileSmartClientName`
    * `mobilityProfileName`
    * `singleNumberReachVoicemail`
    * `dialViaOfficeReverseVoicemail`
    * `removeRingSchedule`
    * `addRingSchedule`
    * `ringSchedule`
    * `accessListName`
  </details>
* `axlUpdateRemoteDestinationProfile`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `name`
  * expected:
    * `newName`
    * `description`
    * `callingSearchSpaceName`
    * `devicePoolName`
    * `networkHoldMohAudioSourceId`
    * `userHoldMohAudioSourceId`
    * `lines`
      * `line` - collection of:
        * required:
          * `index`
          * `dirn`
            * `pattern`
            * `routePartitionName`
        * expected:
          * `label`
          * `display`
          * `ringSetting`
          * `consecutiveRingSetting`
          * `ringSettingIdlePickupAlert`
          * `ringSettingActivePickupAlert`
          * `displayAscii`
          * `e164Mask`
          * `mwlPolicy`
          * `maxNumCalls`
          * `busyTrigger`
          * `callInfoDisplay`
          * `recordingProfileName`
          * `monitoringCssName`
          * `recordingFlag`
          * `audibleMwi`
          * `speedDial`
          * `partitionUsage`
          * `associatedEndusers`
          * `missedCallLogging`
          * `recordingMediaSource`
    * `callInfoPrivacyStatus`
    * `userId`
    * `ignorePresentationIndicators`
    * `rerouteCallingSearchSpaceName`
    * `cgpnTransformationCssName`
    * `automatedAlternateRoutingCssName`
    * `useDevicePoolCgpnTransformCss`
    * `userLocale`
    * `networkLocale`
    * `primaryPhoneName`
    * `dndOption`
    * `dndStatus`
    * `mobileSmartClientProfileName`
  </details>
* `axlUpdateTranslationPattern`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `pattern` or (`pattern`, `routePartitionName`)
  * expected:
    * `dialPlanName`
    * `routeFilterName`
    * `newPattern`
    * `description`
    * `newRoutePartitionName`
    * `blockEnable`
    * `calledPartyTransformationMask`
    * `callingPartyTransformationMask`
    * `useCallingPartyPhoneMask`
    * `callingPartyPrefixDigits`
    * `newDialPlanName`
    * `digitDiscardInstructionName`
    * `patternUrgency`
    * `prefixDigitsOut`
    * `newRouteFilterName`
    * `callingLinePresentationBit`
    * `callingNamePresentationBit`
    * `connectedLinePresentationBit`
    * `connectedNamePresentationBit`
    * `patternPrecedence`
    * `provideOutsideDialtone`
    * `callingPartyNumberingPlan`
    * `callingPartyNumberType`
    * `calledPartyNumberingPlan`
    * `calledPartyNumberType`
    * `callingSearchSpaceName`
    * `resourcePriorityNamespaceName`
    * `routeNextHopByCgpn`
    * `routeClass`
    * `callInterceptProfileName`
    * `releaseClause`
    * `useOriginatorCss`
    * `dontWaitForIDTOnSubsequentHops`
    * `isEmergencyServiceNumber`
  </details>
* `axlUpdateUser`
  <details>
  <summary>keywords args</summary>
  
  * required:
    * `uuid` or `userid`
  * expected:
    * `firstName`
    * `displayName`