Peticiones Cisco Administration XML (AXL)

Las peticiones AXL no son mas que XML con una estructura SOAP que se envía a un servidor CUCM en el que se haya configurado Cisco Administration XML (AXL). El servidor recibe el XML, ejecuta la petición y una vez completada devuelve el XML de respuesta como una estructura SOAP, si se produce un error SOAP Fault. Todas las respuestas correctas tienen el mismo nombre que la petición asociada concatenándole Response al final.

La implementación de CUCM AXL cumple con las especificaciones XML Schema 1.0, SOAP 1.1 y HTTPS 1.1, solo permite peticiones seguras.

Cabecera de la petición
Hay que enviar las peticiones SOAP mediante HTTPS POST, utilizando una autorización Basic, por el puerto 8443 a la URL del servidor CUCM, en el que se ha configurado el Web Service AXL, indicando la versión de la base de datos de configuración.
POST: /axl HTTP/1.1
Host: 10.77.31.194:8443
Accept: text/*
Authorization: Basic bGFycnk6Y3VybHkgYW5kIG1vZQ==
Content-type: text/xml
SOAPAction: "CUCM:DB ver=7.0"
Content-length: 613
Cuerpo de la petición
El siguiente ejemplo muestra el XML con estructura SOAP utilizado para hacer un soft reset a un teléfono, es necesario indicar la MAC al estilo CUCM.
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <SOAP-ENV:Body>
  <axl:doDeviceReset sequence="1"
   xmlns:axl="http://www.cisco.com/AXL/1.0"
   xsi:schemaLocation="http://www.cisco.com/AXL/7.0 http://ccmserver/schema/axlsoap.xsd">
      <deviceName>SEP000000000000</deviceName>
      <isHardReset>false</isHardReset>
    </axl:doDeviceReset>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Puedes probarlo fácilmente desde una maquina Linux. Copia el código anterior a un archivo y envía la petición con cURL.
curl -k -u user:pass -H "Content-type: text/xml;" -H "SOAPAction: CUCM:DB ver=7.0;" -d @archivo.xml https://10.77.31.194:8443/axl/
No olvides remplazar user y pass con las credenciales del usuario que añadiste al grupo de usuarios con acceso al Web Service AXL, modificar CUCM:DB ver=7.0 con la versión adecuada en tu caso y archivo.xml por el nombre del archivo en el que guardaste el ejemplo anterior. Bueno, y por supuesto la IP del servidor CUCM.

Respuesta a la petición
Si todo fue bien la respuesta es un XML con estructura SOAP y con el mismo nombre que la petición asociada concatenándole Response al final.
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <axl:doDeviceResetResponse sequence="1"
     xmlns:axl="http://www.cisco.com/AXL/7.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <return>true</return>
    </axl:doDeviceResetResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
En caso de producirse un error la respuesta es un XML con estructura SOAP Fault indicando el problema por el que se ha producido el fallo.
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <SOAP-ENV:Fault>
      <faultcode>SOAP-ENV:Client</faultcode>
      <faultstring>Item not valid: The specified SEP000000000000 was not found</faultstring>
      <detail>
        <axl:Error xmlns:axl="http://www.cisco.com/AXL/7.0">
          <axl:code>5007</axl:code>
          <axl:message>Item not valid: The specified SEP000000000000 was not found</axl:message>
          <request>doDeviceReset</request>
        </axl:Error>
      </detail>
    </SOAP-ENV:Fault>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Documentación
La documentación oficial esta disponible en Cisco Developer Network. En este caso pueden ser especialmente útiles los documentos "Cisco Unified CM AXL Schema Reference" y "Cisco Unified Communications Manager XML Developer Guide".