CISCO UNIFIED COMMUNICATIONS MANAGER (CUCM)
CUCM là một thành phần xử lý cuộc gọi mạnh mẽ của giải pháp truyền thông hội tụ của Cisco. CUCM hỗ trợ các loại giao tiếp sau:
API quản trị XML cung cấp một cơ chế đề chèn, truy xuất, cập nhật và xóa dữ liệu ra khỏi cơ sở dữ liệu cấu hình của CUCM bằng cách dùng SOAP/XML. Giao tiếp này cho phép một người lập trình viên truy cập đến dịch vụ cài đặt của CUCM bằng cách dùng XML và trao đổi dữ liệu ở dạng XML. Các phương thức ACL, còn gọi là request, được thực hiện dùng một kết hợp của HTTP và SOAP. SOAP là một giao thức gọi thủ tục từ xa. Người dùng thực hiện các yêu cầu bằng cách gửi các dữ liệu XML đến các máy chủ CUCM, sau đó các máy chủ trả về AXL, cũng là một dạng thông điệp SOAP.
Để biết thêm thông tin, hãy truy cập
https://developer.cisco.com/docs/axl/#!axl-developerguide/overview.
Các ví dụ mà CUCM có thể cài đặt bằng AXL bao gồm:
Bạn có thể download các AXL Toolkit từ trang quản trị của CUCM (https://<CUCMAddress>/
plugins/axlsqltoolkit.zip), như hiển thị trong hình vẽ
Khi bạn download AXL Toolkit và giải nén file, thư mục chứa các AXL API file cho các phiên bản AXL:
Các file XML này chứa đầy đủ các chi tiết về định dạng AXL API, bao gồm tên truy cập, các trường/ các thành phần, các kiểu dữ liệu được dùng và các luật kiểm tra các trường dữ liệu. Một điểm thuận lợi của các sơ đồ .xsd là nó có thể được dùng để kiểm tra một cách tự động các tài liệu XML để đảm bảo rằng nó được định dạng tốt và đúng theo các đặc tả của XML.
Nhiều ứng dụng soạn thảo XML và các công cụ lập trình, các thành phần có thể dùng .xsd để kiểm tra các tài liệu XML. Các cách làm có thể khác nhau. Các chi tiết chính cần thiết, là định nghĩa xsi:schemaLocation với URI chỉ đến file axlsoap.xsd.
3. Truy cập đến AXL SOAP API
Bây giờ chúng ta hãy xem hai phương thức khác nhau để truy cập AXL SOAP API.
3.1. Dùng thư viện Zeep Client Library
Đoạn mã Python trong ví dụ bên dưới mô tả làm thế nào để thực hiện một cuộc gọi API để cập nhật một thiết bị phone và nhận thông tin đầy đủ về phone. Chương trình dùng AXLAPI.wsdl được tải về bằng AXL Tookkit.
""" Update and Retrieve Client Details """
from zeep import Client
from zeep.cache import SqliteCache
from zeep.transports import Transport
from requests import Session
from requests.auth import HTTPBasicAuth
import urllib3
from urllib3.exceptions import
InsecureRequestWarning
urllib3.disable_warnings(InsecureRequestWarning)
USERNAME = 'administrator'
PASSWORD = 'ciscopsdt'
IP_ADDRESS = "10.10.20.1"
WSDL = 'schema//12.0//AXLAPI.wsdl'
BINDING_NAME = "
{http://www.cisco.com/AXLAPIService/}AXLAPIBinding"
ADDRESS =
"https://{ip}:8443/axl/".format(ip=IP_ADDRESS)
def update_phone_by_name(client, name,description):
""" Update Phone by Name """
return client.updatePhone(**{'name': name,'description': description})
def get_phone_by_name(client, name):
""" Get Phone by Name """
return client.getPhone(name=name)
def main():
""" Main """
session = Session()
session.verify = False
session.auth = HTTPBasicAuth(USERNAME,PASSWORD)
transport = Transport(cache=SqliteCache(),
session=session, timeout=60)
client = Client(wsdl=WSDL,transport=transport)
axl = client.create_service(BINDING_NAME,ADDRESS)
update_phone_by_name(axl,
"SEP001122334455", "DevAsc: adding new Desc")
print(get_phone_by_name(axl,"SEP001122334455"))
if __name__ == '__main__':
main()
3.2. Dùng Cisco AXL SDK
Python SDK được gọi là Cisco ACL thì khá đơn giản để sử dụng. Cũng có những loại SDK khác sẵn có, nhưng chúng ta sẽ dùng CiscoAXL ở đây như một ví dụ. Để bắt đầu bằng SDK, bạn cần phải cài đặt nó bằng lệnh pip hay pip3.
pip install ciscoaxl or pip3 install ciscoaxl
Ví dụ bên dưới mô tả cách thức đơn giản để kích hoạt SDK và bắt đầu làm việc với công cụ này.
""" Using CiscoAXL SDK to get phone info"""
from ciscoaxl import axl
CUCM = '10.10.20.1'
CUCM_USER = "administrator"
CUCM_PASSWORD = "ciscopsdt"
CUCM_VERSION = '12.0'
ucm =axl(username=CUCM_USER,password=CUCM_PASSWORD,c
ucm=CUCM,cucm_version=CUCM_VERSION)
print (ucm)
for phone in ucm.get_phones():
print(phone.name)
for user in ucm.get_users():
print(user.firstName)
Để có thêm nhiều ví dụ, hãy xem phần DevNet’s Code Exchange ở địa chỉ
https://developer.cisco.com/codeexchange/github/repo/levensailor/ciscoaxl/.
CUCM là một thành phần xử lý cuộc gọi mạnh mẽ của giải pháp truyền thông hội tụ của Cisco. CUCM hỗ trợ các loại giao tiếp sau:
- Các giao tiếp cho cài đặt.
- Giám sát thiết bị và giao tiếp điều khiển cuộc gọi.
- Các giao tiếp cho các dịch vụ
- Các giao tiếp cho các qui luật định tuyến
API quản trị XML cung cấp một cơ chế đề chèn, truy xuất, cập nhật và xóa dữ liệu ra khỏi cơ sở dữ liệu cấu hình của CUCM bằng cách dùng SOAP/XML. Giao tiếp này cho phép một người lập trình viên truy cập đến dịch vụ cài đặt của CUCM bằng cách dùng XML và trao đổi dữ liệu ở dạng XML. Các phương thức ACL, còn gọi là request, được thực hiện dùng một kết hợp của HTTP và SOAP. SOAP là một giao thức gọi thủ tục từ xa. Người dùng thực hiện các yêu cầu bằng cách gửi các dữ liệu XML đến các máy chủ CUCM, sau đó các máy chủ trả về AXL, cũng là một dạng thông điệp SOAP.
Để biết thêm thông tin, hãy truy cập
https://developer.cisco.com/docs/axl/#!axl-developerguide/overview.
Các ví dụ mà CUCM có thể cài đặt bằng AXL bao gồm:
- Unified CM groups,
- Call park DNs
- Call pickup groups
- Calling search spaces
- CTI route points
- Device pools
- Device profiles
- Dial plan tags
- Dial plans
- Digit discard instructions
- Directory numbers
- Gateways (analog, T1, PRI)
- Locations
- MGCP devices
- Phones
- Process nodes
- Process node services
- Regions
- Route filters
- Route groups
- Route lists
- Route partitions
- Service parameters
- Translation patterns
- Users
- Voicemail ports
Bạn có thể download các AXL Toolkit từ trang quản trị của CUCM (https://<CUCMAddress>/
plugins/axlsqltoolkit.zip), như hiển thị trong hình vẽ
Khi bạn download AXL Toolkit và giải nén file, thư mục chứa các AXL API file cho các phiên bản AXL:
- AXLAPI.wsdl: WSDL file
- AXLEnums.xsd: Enum type definitions
- AXLSoap.xsd: Type definitions
Các file XML này chứa đầy đủ các chi tiết về định dạng AXL API, bao gồm tên truy cập, các trường/ các thành phần, các kiểu dữ liệu được dùng và các luật kiểm tra các trường dữ liệu. Một điểm thuận lợi của các sơ đồ .xsd là nó có thể được dùng để kiểm tra một cách tự động các tài liệu XML để đảm bảo rằng nó được định dạng tốt và đúng theo các đặc tả của XML.
Nhiều ứng dụng soạn thảo XML và các công cụ lập trình, các thành phần có thể dùng .xsd để kiểm tra các tài liệu XML. Các cách làm có thể khác nhau. Các chi tiết chính cần thiết, là định nghĩa xsi:schemaLocation với URI chỉ đến file axlsoap.xsd.
3. Truy cập đến AXL SOAP API
Bây giờ chúng ta hãy xem hai phương thức khác nhau để truy cập AXL SOAP API.
3.1. Dùng thư viện Zeep Client Library
Đoạn mã Python trong ví dụ bên dưới mô tả làm thế nào để thực hiện một cuộc gọi API để cập nhật một thiết bị phone và nhận thông tin đầy đủ về phone. Chương trình dùng AXLAPI.wsdl được tải về bằng AXL Tookkit.
""" Update and Retrieve Client Details """
from zeep import Client
from zeep.cache import SqliteCache
from zeep.transports import Transport
from requests import Session
from requests.auth import HTTPBasicAuth
import urllib3
from urllib3.exceptions import
InsecureRequestWarning
urllib3.disable_warnings(InsecureRequestWarning)
USERNAME = 'administrator'
PASSWORD = 'ciscopsdt'
IP_ADDRESS = "10.10.20.1"
WSDL = 'schema//12.0//AXLAPI.wsdl'
BINDING_NAME = "
{http://www.cisco.com/AXLAPIService/}AXLAPIBinding"
ADDRESS =
"https://{ip}:8443/axl/".format(ip=IP_ADDRESS)
def update_phone_by_name(client, name,description):
""" Update Phone by Name """
return client.updatePhone(**{'name': name,'description': description})
def get_phone_by_name(client, name):
""" Get Phone by Name """
return client.getPhone(name=name)
def main():
""" Main """
session = Session()
session.verify = False
session.auth = HTTPBasicAuth(USERNAME,PASSWORD)
transport = Transport(cache=SqliteCache(),
session=session, timeout=60)
client = Client(wsdl=WSDL,transport=transport)
axl = client.create_service(BINDING_NAME,ADDRESS)
update_phone_by_name(axl,
"SEP001122334455", "DevAsc: adding new Desc")
print(get_phone_by_name(axl,"SEP001122334455"))
if __name__ == '__main__':
main()
3.2. Dùng Cisco AXL SDK
Python SDK được gọi là Cisco ACL thì khá đơn giản để sử dụng. Cũng có những loại SDK khác sẵn có, nhưng chúng ta sẽ dùng CiscoAXL ở đây như một ví dụ. Để bắt đầu bằng SDK, bạn cần phải cài đặt nó bằng lệnh pip hay pip3.
pip install ciscoaxl or pip3 install ciscoaxl
Ví dụ bên dưới mô tả cách thức đơn giản để kích hoạt SDK và bắt đầu làm việc với công cụ này.
""" Using CiscoAXL SDK to get phone info"""
from ciscoaxl import axl
CUCM = '10.10.20.1'
CUCM_USER = "administrator"
CUCM_PASSWORD = "ciscopsdt"
CUCM_VERSION = '12.0'
ucm =axl(username=CUCM_USER,password=CUCM_PASSWORD,c
ucm=CUCM,cucm_version=CUCM_VERSION)
print (ucm)
for phone in ucm.get_phones():
print(phone.name)
for user in ucm.get_users():
print(user.firstName)
Để có thêm nhiều ví dụ, hãy xem phần DevNet’s Code Exchange ở địa chỉ
https://developer.cisco.com/codeexchange/github/repo/levensailor/ciscoaxl/.