Cisco Unified Call Manager AXL Methods Collection.
Project description
tinyCUCM
Cisco Unified Call Manager AXL Methods Collection.
Table of Contents
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
Installation
Installation is as simple as:
pip install tinyCUCM
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.
Don't store sensitive information in source code. For example use ".env" file.
Code Example:
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'
# )
AXL Collection
Add Methods
-
axlAddCallPickupGroupkeywords args
- required:
callPickupGroupnamepattern
- expected:
descriptionroutePartitionNamememberspickupNotificationpickupNotificationTimercallInfoForPickupNotification
- required:
-
axlAddDeviceProfilekeywords args
- required:
deviceProfilenameproductclassprotocolprotocolSidephoneTemplateName
- expected:
namedescriptionuserHoldMohAudioSourceIdvendorConfigtraceFlagmlppDomainIdmlppIndicationStatuspreemptionlinesline- collection of:- required:
indexdirnpatternroutePartitionName
- expected:
labeldisplayringSettingconsecutiveRingSettingringSettingIdlePickupAlertringSettingActivePickupAlertdisplayAsciie164MaskmwlPolicymaxNumCallsbusyTriggercallInfoDisplayrecordingProfileNamemonitoringCssNamerecordingFlagaudibleMwispeedDialpartitionUsageassociatedEndusersmissedCallLoggingrecordingMediaSource
- required:
speeddialsbusyLampFieldsblfDirectedCallParksaddOnModulesuserLocalesingleButtonBargejoinAcrossLinesloginUserIdignorePresentationIndicatorsdndOptiondndRingSettingdndStatusemccCallingSearchSpacealwaysUsePrimeLinealwaysUsePrimeLineForVoiceMessagesoftkeyTemplateNamecallInfoPrivacyStatusservicesfeatureControlPolicy
- required:
-
axlAddLinekeywords args
- required:
linepatternusage
- expected:
descriptionroutePartitionNameaarNeighborhoodNameaarDestinationMaskaarKeepCallHistoryaarVoiceMailEnabledcallForwardAllcallForwardBusycallForwardBusyIntcallForwardNoAnswercallForwardNoAnswerIntcallForwardNoCoveragecallForwardNoCoverageIntcallForwardOnFailurecallForwardAlternatePartycallForwardNotRegisteredcallForwardNotRegisteredIntcallPickupGroupNameautoAnswernetworkHoldMohAudioSourceIduserHoldMohAudioSourceIdalertingNameasciiAlertingNamepresenceGroupNameshareLineAppearanceCssNamevoiceMailProfileNamepatternPrecedencereleaseClausehrDurationhrIntervalcfaCssPolicydefaultActivatedDeviceNameparkMonForwardNoRetrieveDnparkMonForwardNoRetrieveIntDnparkMonForwardNoRetrieveVmEnabledparkMonForwardNoRetrieveIntVmEnabledparkMonForwardNoRetrieveCssNameparkMonForwardNoRetrieveIntCssNameparkMonReversionTimerpartyEntranceTonedirectoryURIsallowCtiControlFlagrejectAnonymousCallpatternUrgencyconfidentialAccessexternalCallControlProfileenterpriseAltNume164AltNumpstnFailovercallControlAgentProfileuseEnterpriseAltNumuseE164AltNumactive
- required:
-
axlAddLineGroupkeywords args
- required:
lineGroupnamedistributionAlgorithmrnaReversionTimeOuthuntAlgorithmNoAnswerhuntAlgorithmBusyhuntAlgorithmNotAvailable
- expected:
membersautoLogOffHunt
- required:
-
axlAddPhonekeywords args
- required:
phonenameproductclassprotocolprotocolSidedevicePoolNamecommonPhoneConfigNamelocationNameuseTrustedRelayPointphoneTemplateNameprimaryPhoneNamebuiltInBridgeStatuspacketCaptureModecertificateOperationdeviceMobilityMode
- expected:
descriptioncallingSearchSpaceNamecommonDeviceConfigNamenetworkLocationmediaResourceListNamenetworkHoldMohAudioSourceIduserHoldMohAudioSourceIdautomatedAlternateRoutingCssNameaarNeighborhoodNameloadInformationvendorConfigversionStamptraceFlagmlppDomainIdmlppIndicationStatuspreemptionretryVideoCallAsAudiosecurityProfileNamesipProfileNamecgpnTransformationCssNameuseDevicePoolCgpnTransformCssgeoLocationNamegeoLocationFilterNamesendGeoLocationlinesline- collection of:- required:
indexdirnpatternroutePartitionName
- expected:
labeldisplayringSettingconsecutiveRingSettingringSettingIdlePickupAlertringSettingActivePickupAlertdisplayAsciie164MaskmwlPolicymaxNumCallsbusyTriggercallInfoDisplayrecordingProfileNamemonitoringCssNamerecordingFlagaudibleMwispeedDialpartitionUsageassociatedEndusersmissedCallLoggingrecordingMediaSource
- required:
speeddialsbusyLampFieldsringSettingIdleBlfAudibleAlertringSettingBusyBlfAudibleAlertblfDirectedCallParksaddOnModulesuserLocalenetworkLocaleidleTimeoutauthenticationUrldirectoryUrlidleUrlinformationUrlmessagesUrlproxyServerUrlservicesUrlservicessoftkeyTemplateNamedefaultProfileNameenableExtensionMobilitysingleButtonBargejoinAcrossLinescallInfoPrivacyStatushlogStatusownerUserNameignorePresentationIndicatorspacketCaptureDurationsubscribeCallingSearchSpaceNamererouteCallingSearchSpaceNameallowCtiControlFlagpresenceGroupNameunattendedPortrequireDtmfReceptionrfc2833DisabledauthenticationModekeySizekeyOrderecKeySizeauthenticationStringupgradeFinishTimeremoteDevicedndOptiondndRingSettingdndStatusisActiveisDualModemobilityUserIdNamephoneSuitephoneServiceDisplayisProtectedmtpRequiredmtpPreferedCodecdialRulesNamesshUserIdsshPwddigestUseroutboundCallRolloverhotlineDevicesecureInformationUrlsecureDirectoryUrlsecureMessageUrlsecureServicesUrlsecureAuthenticationUrlsecureIdleUrlalwaysUsePrimeLinealwaysUsePrimeLineForVoiceMessagefeatureControlPolicydeviceTrustModeearlyOfferSupportForVoiceCallrequireThirdPartyRegistrationblockIncomingCallsWhenRoaminghomeNetworkIdAllowPresentationSharingUsingBfcpconfidentialAccessrequireOffPremiseLocationallowiXApplicableMediacgpnIngressDNuseDevicePoolCgpnIngressDNmsisdnenableCallRoutingToRdWhenNoneIsActivewifiHotspotProfilewirelessLanProfileGroupelinGroup
- required:
-
axlAddeRemoteDestinationkeywords args
- required:
remoteDestinationdestinationanswerTooSoonTimeranswerTooLateTimerdelayBeforeRingingCellownerUserIdremoteDestinationProfileName
- expected:
nameenableUnifiedMobilityenableExtendAndConnectctiRemoteDeviceNamedualModeDeviceNameisMobilePhoneenableMobileConnectlineAssociationstimeZonetodAccessNamemobileSmartClientNamemobilityProfileNamesingleNumberReachVoicemaildialViaOfficeReverseVoicemailringScheduleaccessListName
- required:
-
axlAddRemoteDestinationProfilekeywords args
- required:
remoteDestinationProfilenameproductclassprotocolprotocolSidedevicePoolNamecallInfoPrivacyStatususerId
- expected:
descriptioncallingSearchSpaceNamenetworkHoldMohAudioSourceIduserHoldMohAudioSourceIdlinesline- collection of:- required:
indexdirnpatternroutePartitionName
- expected:
labeldisplayringSettingconsecutiveRingSettingringSettingIdlePickupAlertringSettingActivePickupAlertdisplayAsciie164MaskmwlPolicymaxNumCallsbusyTriggercallInfoDisplayrecordingProfileNamemonitoringCssNamerecordingFlagaudibleMwispeedDialpartitionUsageassociatedEndusersmissedCallLoggingrecordingMediaSource
- required:
ignorePresentationIndicatorsrerouteCallingSearchSpaceNamecgpnTransformationCssNameautomatedAlternateRoutingCssNameuseDevicePoolCgpnTransformCssuserLocalenetworkLocaleprimaryPhoneNamedndOptiondndStatusmobileSmartClientProfileName
- required:
-
axlAddTranslationPatternkeywords args
- required:
transPatternpatternroutePartitionNameusage
- expected:
descriptionblockEnablecalledPartyTransformationMaskcallingPartyTransformationMaskuseCallingPartyPhoneMaskcallingPartyPrefixDigitsdialPlanNamedigitDiscardInstructionNamepatternUrgencyprefixDigitsOutrouteFilterNamecallingLinePresentationBitcallingNamePresentationBitconnectedLinePresentationBitconnectedNamePresentationBitpatternPrecedenceprovideOutsideDialtonecallingPartyNumberingPlancallingPartyNumberTypecalledPartyNumberingPlancalledPartyNumberTypecallingSearchSpaceNameresourcePriorityNamespaceNamerouteNextHopByCgpnrouteClasscallInterceptProfileNamereleaseClauseuseOriginatorCssdontWaitForIDTOnSubsequentHopsisEmergencyServiceNumber
- required:
-
axlAddUserkeywords args
- required:
useruseridlastNamepresenceGroupName
- expected:
firstNamedisplayNamemiddleNamepasswordpinmailiddepartmentmanageruserLocaleassociatedDevicesprimaryExtensionassociatedPcassociatedGroupsenableCtidigestCredentialsphoneProfilesdefaultProfilesubscribeCallingSearchSpaceNameenableMobilityenableMobileVoiceAccessmaxDeskPickupWaitTimeremoteDestinationLimitpasswordCredentialspinCredentialsenableEmccctiControlledDeviceProfilespatternPrecedencenumericUserIdmlppPasswordcustomUserFieldshomeClusterimAndPresenceEnableserviceProfilelineAppearanceAssociationForPresencesdirectoryUritelephoneNumbertitlemobileNumberhomeNumberpagerNumberextensionsInfoselfServiceuserProfilecalendarPresenceldapDirectoryNameuserIdentitynameDialingipccExtensionconvertUserAccountaccountTypeauthenticationTypeenableUserToHostConferenceNowattendeesAccessCodezeroHop
- required:
Code Example:
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}
Do Methods
-
axlDoAuthenticateUserkeywords args
- required:
useridpasswordorpin
- required:
-
axlDoDeviceLoginkeywords args
- required:
deviceNameloginDuration"0"- Logout disabled"36000"- Logout after 10h (or any other positive value in milliseconds)
profileNameuserId
- required:
-
axlDoDeviceLogoutkeywords args
- required:
deviceName
- required:
-
axlDoLdapSynckeywords args
- required:
uuidornamesyncTrue- Start SynchronizationFalse- Cancel the Synchronization which is currently under process
- required:
Code Example:
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}
Get Methods
-
axlGetAnykeywords args
- required:
methodanduuidornameor any other key for getting cucm object
- required:
-
axlGetCallPickupGroupkeywords args
- required:
uuidornameorpatternor (pattern,routePartitionName)
- required:
-
axlGetDeviceProfilekeywords args
- required:
uuidorname
- required:
-
axlGetLinekeywords args
- required:
uuidorpatternor (pattern,routePartitionName)
- required:
-
axlGetLineGroupkeywords args
- required:
uuidorname
- required:
-
axlGetPhonekeywords args
- required:
uuidorname
- required:
-
axlGetRemoteDestinationkeywords args
- required:
uuidordestination
- required:
-
axlGetRemoteDestinationProfilekeywords args
- required:
uuidorname
- required:
-
axlGetTranslationPatternkeywords args
- required:
uuidorpatternor (pattern,routePartitionName)
- required:
-
axlGetUserkeywords args
- required:
uuidoruserid
- required:
Code Example:
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': '{........-....-....-....-............}'
# }
Remove Methods
-
axlRemoveCallPickupGroupkeywords args
- required:
uuidornameorpatternor (pattern,routePartitionName)
- required:
-
axlRemoveDeviceProfilekeywords args
- required:
uuidorname
- required:
-
axlRemoveLinekeywords args
- required:
uuidorpatternor (pattern,routePartitionName)
- required:
-
axlRemoveLineGroupkeywords args
- required:
uuidorname
- required:
-
axlRemovePhonekeywords args
- required:
uuidorname
- required:
-
axlRemoveRemoteDestinationkeywords args
- required:
uuidordestination
- required:
-
axlRemoveRemoteDestinationProfilekeywords args
- required:
uuidorname
- required:
-
axlRemoveTranslationPatternkeywords args
- required:
uuidorpatternor (pattern,routePartitionName)
- required:
-
axlRemoveUserkeywords args
- required:
uuidoruserid
- required:
Code Example:
cucm = ...
print("Result:", cucm.axlRemovePhone(name= "SEP..."))
print("Result:", cucm.axlRemovePhone(**{"uuid": "........-....-....-....-............"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}
Reset Methods
-
axlResetPhonekeywords args
- required:
uuidorname
- required:
Code Example:
cucm = ...
print("Result:", cucm.axlResetPhone(name="SEP..."))
print("Result:", cucm.axlResetPhone(**{"uuid": "........-....-....-....-............"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}
Restart Methods
-
axlRestartPhonekeywords args
- required:
uuidorname
- required:
Code Example:
cucm = ...
print("Result:", cucm.axlRestartPhone(name="SEP..."))
print("Result:", cucm.axlRestartPhone(**{"uuid": "........-....-....-....-............"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}
Update Methods
-
axlUpdateCallPickupGroupkeywords args
- required:
uuidornameorpatternor (pattern,routePartitionName)
- expected:
newPatterndescriptionnewRoutePartitionNameremoveMembersaddMembersmemberspickupNotificationpickupNotificationTimercallInfoForPickupNotificationnewName
- required:
-
axlUpdateDeviceProfilekeywords args
- required:
uuidorname
- expected:
newNamedescriptionuserHoldMohAudioSourceIdvendorConfigmlppDomainIdmlppIndicationStatuspreemptionlinesline- collection of:- required:
indexdirnpatternroutePartitionName
- expected:
labeldisplayringSettingconsecutiveRingSettingringSettingIdlePickupAlertringSettingActivePickupAlertdisplayAsciie164MaskmwlPolicymaxNumCallsbusyTriggercallInfoDisplayrecordingProfileNamemonitoringCssNamerecordingFlagaudibleMwispeedDialpartitionUsageassociatedEndusersmissedCallLoggingrecordingMediaSource
- required:
phoneTemplateNamespeeddialsbusyLampFieldsblfDirectedCallParksaddOnModulesuserLocalesingleButtonBargejoinAcrossLinesloginUserIdignorePresentationIndicatorsdndOptiondndRingSettingdndStatusemccCallingSearchSpacealwaysUsePrimeLinealwaysUsePrimeLineForVoiceMessagesoftkeyTemplateNamecallInfoPrivacyStatusservicesfeatureControlPolicy
- required:
-
`axlUpdateLine
keywords args
- required:
uuidorpatternor (pattern,routePartitionName)
- expected:
newPatterndescriptionnewRoutePartitionNameaarNeighborhoodNameaarDestinationMaskaarKeepCallHistoryaarVoiceMailEnabledcallForwardAllcallForwardBusycallForwardBusyIntcallForwardNoAnswercallForwardNoAnswerIntcallForwardNoCoveragecallForwardNoCoverageIntcallForwardOnFailurecallForwardAlternatePartycallForwardNotRegisteredcallForwardNotRegisteredIntcallPickupGroupNameautoAnswernetworkHoldMohAudioSourceIduserHoldMohAudioSourceIdalertingNameasciiAlertingNamepresenceGroupNameshareLineAppearanceCssNamevoiceMailProfileNamepatternPrecedencereleaseClausehrDurationhrIntervalcfaCssPolicydefaultActivatedDeviceNameparkMonForwardNoRetrieveDnparkMonForwardNoRetrieveIntDnparkMonForwardNoRetrieveVmEnabledparkMonForwardNoRetrieveIntVmEnabledparkMonForwardNoRetrieveCssNameparkMonForwardNoRetrieveIntCssNameparkMonReversionTimerpartyEntranceTonedirectoryURIsallowCtiControlFlagrejectAnonymousCallpatternUrgencyconfidentialAccessexternalCallControlProfileenterpriseAltNume164AltNumpstnFailovercallControlAgentProfileuseEnterpriseAltNumuseE164AltNumactive
- required:
-
axlUpdateLineGroupkeywords args
- required:
uuidorname
- expected:
distributionAlgorithmrnaReversionTimeOuthuntAlgorithmNoAnswerhuntAlgorithmBusyhuntAlgorithmNotAvailableremoveMembersaddMembersmembersnewNameautoLogOffHunt
- required:
-
axlUpdatePhonekeywords args
- required:
uuidorname
- expected:
newNamedescriptioncallingSearchSpaceNamedevicePoolNamecommonDeviceConfigNamecommonPhoneConfigNamenetworkLocationlocationNamemediaResourceListNamenetworkHoldMohAudioSourceIduserHoldMohAudioSourceIdautomatedAlternateRoutingCssNameaarNeighborhoodNameloadInformationvendorConfigversionStamptraceFlagmlppDomainIdmlppIndicationStatuspreemptionuseTrustedRelayPointretryVideoCallAsAudiosecurityProfileNamesipProfileNamecgpnTransformationCssNameuseDevicePoolCgpnTransformCssgeoLocationNamegeoLocationFilterNamesendGeoLocationremoveLinesaddLineslinesline- collection of:- required:
indexdirnpatternroutePartitionName
- expected:
labeldisplayringSettingconsecutiveRingSettingringSettingIdlePickupAlertringSettingActivePickupAlertdisplayAsciie164MaskmwlPolicymaxNumCallsbusyTriggercallInfoDisplayrecordingProfileNamemonitoringCssNamerecordingFlagaudibleMwispeedDialpartitionUsageassociatedEndusersmissedCallLoggingrecordingMediaSource
- required:
phoneTemplateNamespeeddialsbusyLampFieldsprimaryPhoneNameringSettingIdleBlfAudibleAlertringSettingBusyBlfAudibleAlertblfDirectedCallParksaddOnModulesuserLocalenetworkLocaleidleTimeoutauthenticationUrldirectoryUrlidleUrlinformationUrlmessagesUrlproxyServerUrlservicesUrlservicessoftkeyTemplateNamedefaultProfileNameenableExtensionMobilitysingleButtonBargejoinAcrossLinesbuiltInBridgeStatuscallInfoPrivacyStatushlogStatusownerUserNameignorePresentationIndicatorspacketCaptureModepacketCaptureDurationsubscribeCallingSearchSpaceNamererouteCallingSearchSpaceNameallowCtiControlFlagpresenceGroupNameunattendedPortrequireDtmfReceptionrfc2833DisabledcertificateOperationauthenticationModekeySizekeyOrderecKeySizeauthenticationStringupgradeFinishTimedeviceMobilityModeremoteDevicedndOptiondndRingSettingdndStatusisActivemobilityUserIdNamephoneSuitephoneServiceDisplayisProtectedmtpRequiredmtpPreferedCodecdialRulesNamesshUserIdsshPwddigestUseroutboundCallRolloverhotlineDevicesecureInformationUrlsecureDirectoryUrlsecureMessageUrlsecureServicesUrlsecureAuthenticationUrlsecureIdleUrlalwaysUsePrimeLinealwaysUsePrimeLineForVoiceMessagefeatureControlPolicydeviceTrustModeearlyOfferSupportForVoiceCallrequireThirdPartyRegistrationblockIncomingCallsWhenRoaminghomeNetworkIdAllowPresentationSharingUsingBfcpconfidentialAccessrequireOffPremiseLocationallowiXApplicableMediacgpnIngressDNuseDevicePoolCgpnIngressDNmsisdnenableCallRoutingToRdWhenNoneIsActivewifiHotspotProfilewirelessLanProfileGroupelinGroup
- required:
-
axlUpdateRemoteDestinationkeywords args
- required:
uuidordestination
- expected:
newNamenewDestinationanswerTooSoonTimeranswerTooLateTimerdelayBeforeRingingCellownerUserIdenableUnifiedMobilityremoteDestinationProfileNameenableExtendAndConnectctiRemoteDeviceNamedualModeDeviceNameisMobilePhoneenableMobileConnectlineAssociationstimeZonetodAccessNamemobileSmartClientNamemobilityProfileNamesingleNumberReachVoicemaildialViaOfficeReverseVoicemailremoveRingScheduleaddRingScheduleringScheduleaccessListName
- required:
-
axlUpdateRemoteDestinationProfilekeywords args
- required:
uuidorname
- expected:
newNamedescriptioncallingSearchSpaceNamedevicePoolNamenetworkHoldMohAudioSourceIduserHoldMohAudioSourceIdlinesline- collection of:- required:
indexdirnpatternroutePartitionName
- expected:
labeldisplayringSettingconsecutiveRingSettingringSettingIdlePickupAlertringSettingActivePickupAlertdisplayAsciie164MaskmwlPolicymaxNumCallsbusyTriggercallInfoDisplayrecordingProfileNamemonitoringCssNamerecordingFlagaudibleMwispeedDialpartitionUsageassociatedEndusersmissedCallLoggingrecordingMediaSource
- required:
callInfoPrivacyStatususerIdignorePresentationIndicatorsrerouteCallingSearchSpaceNamecgpnTransformationCssNameautomatedAlternateRoutingCssNameuseDevicePoolCgpnTransformCssuserLocalenetworkLocaleprimaryPhoneNamedndOptiondndStatusmobileSmartClientProfileName
- required:
-
axlUpdateTranslationPatternkeywords args
- required:
uuidorpatternor (pattern,routePartitionName)
- expected:
dialPlanNamerouteFilterNamenewPatterndescriptionnewRoutePartitionNameblockEnablecalledPartyTransformationMaskcallingPartyTransformationMaskuseCallingPartyPhoneMaskcallingPartyPrefixDigitsnewDialPlanNamedigitDiscardInstructionNamepatternUrgencyprefixDigitsOutnewRouteFilterNamecallingLinePresentationBitcallingNamePresentationBitconnectedLinePresentationBitconnectedNamePresentationBitpatternPrecedenceprovideOutsideDialtonecallingPartyNumberingPlancallingPartyNumberTypecalledPartyNumberingPlancalledPartyNumberTypecallingSearchSpaceNameresourcePriorityNamespaceNamerouteNextHopByCgpnrouteClasscallInterceptProfileNamereleaseClauseuseOriginatorCssdontWaitForIDTOnSubsequentHopsisEmergencyServiceNumber
- required:
-
axlUpdateUserkeywords args
- required:
uuidoruserid
- expected:
firstNamedisplayNamemiddleNamelastNamenewUseridpasswordpinmailiddepartmentmanageruserLocaleassociatedDevicesprimaryExtensionassociatedPcassociatedGroupsenableCtidigestCredentialsphoneProfilesdefaultProfilepresenceGroupNamesubscribeCallingSearchSpaceNameenableMobilityenableMobileVoiceAccessmaxDeskPickupWaitTimeremoteDestinationLimitpasswordCredentialspinCredentialsenableEmccctiControlledDeviceProfilespatternPrecedencenumericUserIdmlppPasswordcustomUserFieldshomeClusterimAndPresenceEnableserviceProfilelineAppearanceAssociationForPresencesdirectoryUritelephoneNumbertitlemobileNumberhomeNumberpagerNumberremoveExtensionsInfoaddExtensionsInfoextensionsInfoselfServiceuserProfilecalendarPresenceldapDirectoryNameuserIdentitynameDialingipccExtensionconvertUserAccountaccountTypeauthenticationTypeenableUserToHostConferenceNowattendeesAccessCodezeroHop
- required:
Code Example:
cucm = ...
print("Result:", cucm.axlUpdatePhone(name="SEP", description="New Description"))
print("Result:", cucm.axlUpdatePhone(**{"uuid": "........-....-....-....-............", "description": "New Description"}))
# Result: {'return': '{........-....-....-....-............}', 'sequence': None}
CCS Methods
CCS - Control Center Services provides an API Methods used to view status, to restart, to start and stop Cisco CallManager services for a particular server.
-
ccsDoControlServiceskeywords args
- required:
control_command- Control Command:Restart,StartorStopservice_names- Service Names Collection
- optional
node_fqdn- Specify a node other than the publisher
- required:
-
ccsDoServiceDeploymentkeywords args
- required:
deploy_command- Deploy Command:DeployorUnDeployservice_names- Service Names Collection
- optional
node_fqdn- Specify a node other than the publisher
- required:
-
ccsGetProductInfoListkeywords args
- optional
node_fqdn- Specify a node other than the publisher
- optional
-
ccsGetServiceStatuskeywords args
- optional
service_name- Specify a specific service namenode_fqdn- Specify a node other than the publisher
- optional
-
ccsGetStaticServiceListkeywords args
- optional
node_fqdn- Specify a node other than the publisher
- optional
Code Example:
cucm = ...
print("Result:", cucm.ccsDoControlServices(control_command="Restart", service_names=["Cisco License Manager", "Cisco Tftp"]))
# Result: (
# {'ServiceName': 'Cisco License Manager', 'ServiceStatus': 'Starting', 'ReasonCode': -1, 'ReasonCodeString': ' ', 'StartTime': None, 'UpTime': -1},
# {'ServiceName': 'Cisco Tftp', 'ServiceStatus': 'Started', 'ReasonCode': -1, 'ReasonCodeString': ' ', 'StartTime': 'Tue Mar 5 15:53:19 2024', 'UpTime': 4}
# )
print("Result:", cucm.ccsDoServiceDeployment(deploy_command="Deploy", service_names=["Cisco Tftp"]))
# Result: (
# {'ServiceName': 'Cisco Tftp', 'ServiceStatus': 'Started', 'ReasonCode': -1, 'ReasonCodeString': ' ', 'StartTime': 'Wed Mar 6 13:37:59 2024', 'UpTime': 17},
# )
print("Result:", cucm.ccsGetServiceStatus())
# Result: (
# {'ServiceName': 'A Cisco DB', 'ServiceStatus': 'Started', 'ReasonCode': -1, 'ReasonCodeString': ' ', 'StartTime': 'Tue Mar 5 13:01:39 2024', 'UpTime': 10012},
# ...,
# {'ServiceName': 'Cisco Wireless Controller Synchronization Service', 'ServiceStatus': 'Stopped', 'ReasonCode': -1068, 'ReasonCodeString': 'Service Not Activated ', 'StartTime': None, 'UpTime': -1}
# )
RIS Methods
RIS - Real-time Information Server retrieve information stored in all RIS nodes in the cluster. https://developer.cisco.com/docs/sxml/#!risport70-api
-
risGetCtikeywords args
- required:
collection_name- values:DevNamesorDirNumbersitems_collection- Collection of Dictionaries. Depending on the type of collection, dictionaries should contain the keynameforDevNamesor the keypatternforDirNumberscti_mgr_class- values:ProviderorDeviceorLine
- required:
-
risGetPhonekeywords args
- required:
phone_name
- required:
-
risGetPhoneskeywords args
- required:
devices_collection- Collection of Dictionaries. Dictionaries should contain the keyname
- required:
Code Example:
cucm = ...
print("Result:", cucm.risGetCti(
collection_name="DirNumbers",
items_collection=({"pattern": "..."}, {"pattern": "..."}, ...),
cti_mgr_class="Line"
))
# Result: {
# 'SelectCtiItemResult': {
# 'TotalItemsFound': 6,
# 'CtiNodes': {...}
# },
# 'StateInfo': '<StateInfo><Node Name="cucm.example.com" ...'
# }
print("Result:", cucm.risGetPhone(phone_name="CSF...", is_raw_resp=False))
# Result: {
# 'DeviceName': 'CSF...',
# 'Status': 'Registered',
# 'Model': 503,
# 'Product': 390,
# 'IP': 'xxx.xxx.xxx.xxx',
# 'NodeName': 'cucm.example.com',
# 'ActiveLoadID': '...',
# 'InactiveLoadID': '...'
# }
print("Result:", cucm.risGetPhones(devices_collection=({"name": "TCT..."}, {"name": "CSF..."}, ...), is_raw_resp=False))
# Result = (
# {
# 'name': 'TCT...',
# 'ris': {
# 'DeviceName': 'TCT...',
# 'Status': 'UnRegistered',
# 'Model': 562,
# 'Product': 449,
# 'IP': 'xxx.xxx.xxx.xxx',
# 'NodeName': 'cucm.example.com',
# 'ActiveLoadID': '...',
# 'InactiveLoadID': '...'
# }
# },
# {
# 'name': 'CSF...',
# 'ris': {
# 'DeviceName': 'CSF...',
# 'Status': 'Registered',
# 'Model': 503,
# 'Product': 390,
# 'IP': 'xxx.xxx.xxx.xxx',
# 'NodeName': 'cucm.example.com',
# 'ActiveLoadID': '...',
# 'InactiveLoadID': '...'
# }
# },
# {
# 'name': 'SEP...',
# 'ris': {'DeviceName': None, 'Status': None, ...}
# },
# {
# 'name': 'RDP...',
# 'ris': {'DeviceName': None, 'Status': None, ...}
# },
# {
# 'name': 'UDP...',
# 'ris': {'DeviceName': None, 'Status': None, ...}
# }
# )
SQL Collection
Execute Query
Code Example:
cucm = ...
sql_query = """
SELECT d.pkid, d.name, d.description
FROM device d
WHERE d.name LIKE '%value%'
"""
print("Result:", cucm.sqlExecuteQuery(sql_query=sql_query))
# Result: (
# {'pkid': '........-....-....-....-............', 'name': 'SEP...', 'description': '...'},
# {'pkid': '........-....-....-....-............', 'name': 'RDP...', 'description': '...'},
# {'pkid': '........-....-....-....-............', 'name': 'UDP...', 'description': '...'},
# {'pkid': '........-....-....-....-............', 'name': 'TCT...', 'description': '...'},
# {'pkid': '........-....-....-....-............', 'name': 'BOT...', 'description': '...'},
# {'pkid': '........-....-....-....-............', 'name': 'CSF...', 'description': '...'},
# {'pkid': '........-....-....-....-............', 'name': 'TAB...', 'description': '...'},
# {'pkid': '........-....-....-....-............', 'name': 'CIPC...', 'description': '...'},
# )
Update Query
Code Example:
cucm = ...
sql_query = """
UPDATE device d
SET d.description = 'New Description via SQL'
WHERE d.name LIKE '%value%'
"""
print("Result:", cucm.sqlUpdateQuery(sql_query=sql_query))
# Result: {
# 'return': {
# 'rowsUpdated': 1
# },
# 'sequence': None
# }
Predefined Queries
GetMethods:sqlGetDeviceEndUsersRelationssqlGetDeviceServicesSubscriptionsqlGetEMSessionsqlGetEndUserDefaultDeviceProfilesqlGetEndUserDevicesRelationssqlGetLineForwardDestinationssqlGetLineGroupStatus- DeprecatedsqlGetLineGroupMemberStatusessqlGetRemoteDestination
ListMethods:sqlListCallingSearchSpacesqlListCredentialPolicysqlListDevicePoolsqlListDirGroupsqlListMediaResourceGroupsqlListMediaResourceListsqlListPhoneTemplatesqlListProcessNodesqlListRecordingProfilesqlListRegionsqlListRoutePartitionsqlListSoftkeyTemplatesqlListTelecasterServicesqlListTypeClasssqlListTypeCountrysqlListTypeModelsqlListTypeUserLocalesqlListUcServiceProfilesqlListUcUserProfile
SearchMethods:sqlSearchCallPickupGroups- required keywords args:criterion,valuecriterionenum:Name,Description,Pattern,Line Number,Line Descriptionvalue: str | None
sqlSearchDevices- required keywords args:criterion,valuecriterionenum:Name,Description,Line Number,Line Description,User ID,Device Pool,Device Typevalue: str | None
sqlSearchEndUsers- required keywords args:criterion,valuecriterionenum:User ID,Display Name,Last Name,First Name,Phone Number,Mobile Number,Email,Directory URIvalue: str | None
sqlSearchLineForwards- required keywords args:criterion,valuecriterionenum:Line Number,Line Description,Forward Destinationvalue: str | None
sqlSearchLineGroups- required keywords args:criterion,valuecriterionenum:Name,Line Number,Line Descriptionvalue: str | None
sqlSearchLineNumbers- required keywords args:criterion,valuecriterionenum:Line Number,Line Description,Partition,Calling Search Space,Alerting Name,Alerting Name ASCIIvalue: str | None
sqlSearchPatterns- required keywords args:criterion,valuecriterionenum:Pattern,Description,Partition,Calling Search Space,Pattern Usagevalue: str | None
sqlSearchRemoteDestinations- required keywords args:criterion,valuecriterionenum:Name,Remote Destinationvalue: str | None
sqlSearchTranslationPatterns- required keywords args:criterion,valuecriterionenum:Pattern,Description,Partition,Calling Search Space,Called Party Transform Mask,Prefix Digits Outvalue: str | None
sqlSearchUnassignedNumbers- required keywords args:criterion,valuecriterionenum:Line Number,Line Description,Partition,Calling Search Space,Alerting Name,Alerting Name ASCIIvalue: str | None
ValidateMethods:sqlValidateDevice- required keywords kwargs:nameorpkidsqlValidateEndUser- required keywords kwargs:useridorpkidsqlValidateLine- required keywords kwargs:dnorpatternorpkid(Type Pattern Usage: Device Only)sqlValidateLineDevices- required keywords kwargs:dnorpatternorpkid(Type Pattern Usage: Device Only)sqlValidatePattern- required keywords kwargs:dnorpatternorpkid(Type Pattern Usage: Any)
Create Your Own Methods
Don't store sensitive information in source code. For example use ".env" file.
Code Example:
from pathlib import Path
from typing import Union
from tinyCUCM import CucmClient, cucm_logging
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,
"ris_wsdl_filename": "wsdlRISService70_test.xml",
}
class CucmAxlCustom(CucmClient):
@cucm_logging
def axlYourOwnGetMethod(self, **kwargs: Union[dict, ...]) -> dict:
"""
AXL Your Own `Get` or Any Other Method.
:param kwargs: Required Fields:
`kwargs = {"uuid": "uuid"}`
or
`kwargs = {"name": "name"}`
:return:
"""
return self._axl.getCallManager(**kwargs)["return"]
if __name__ == "__main__":
cucm = CucmAxlCustom(**settings)
print("Result:", cucm.axlYourOwnGetMethod(**{"uuid": "........-....-....-....-............"}))
# Result: {
# 'callManager': {
# 'name': 'CM_...',
# 'description': '...',
# 'autoRegistration': {...},
# 'ports': {...},
# 'processNodeName': {...},
# 'lbmGroup': {...},
# 'ctiid': ...,
# 'uuid': '{........-....-....-....-............}'
# }
# }
License
Distributed under the MIT License. See LICENSE for more information.
Contact
Luarvick - lu.luarvick@gmail.com
Project Link: https://github.com/luarvick/tinyCUCM
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tinycucm-0.2.960.tar.gz.
File metadata
- Download URL: tinycucm-0.2.960.tar.gz
- Upload date:
- Size: 47.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
733a0613cd36314a1bd6dd4e7d0af7c7ad09e254ec09d321f0e561c3a3c29b08
|
|
| MD5 |
338daff8785b71747362ec585dc63ddd
|
|
| BLAKE2b-256 |
ce218b65ee9eb2a5b0b22fc8f487a988c30ab8a13187e3e30ec9366631e31af6
|
File details
Details for the file tinycucm-0.2.960-py3-none-any.whl.
File metadata
- Download URL: tinycucm-0.2.960-py3-none-any.whl
- Upload date:
- Size: 34.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f14be17ff97b89c041cd4a543d4acffa3c38d805af6c8253c38b1f6a2adfb60
|
|
| MD5 |
bf75d538b233a43c369db7e1bd060879
|
|
| BLAKE2b-256 |
f89786034485f505b4e82c71c3d02caa982be0bbeb77cf9d1cb52f38dcc8fb94
|