Python ve AXL API ile Cisco CUCM Otomasyonu
Günümüzde kurumsal iletişim altyapıları, durağan konfigürasyonlardan dinamik ve programlanabilir bir yapıya evrilmektedir. Binlerce…
Python ve AXL API ile Cisco CUCM Otomasyonu
Günümüzde kurumsal iletişim altyapıları, durağan konfigürasyonlardan dinamik ve programlanabilir bir yapıya evrilmektedir. Binlerce kullanıcıya hizmet veren devasa bir ekosistemde Unified Communications (UC) yönetimi, artık sadece manuel dokunuşlar veya toplu yönetim araçlarıyla (BAT) değil, Python tabanlı stratejik otomasyonlarla sürdürülebilir kılınmaktadır.
Bu yazıda, Cisco Unified Communications Manager (CUCM) ekosisteminde Administrative XML (AXL) servislerini kullanarak süreçleri nasıl otomatikleştirebileceğimizi inceleyeceğiz.

Kurumsal Ses Ağlarında Python Tabanlı Otomasyon Dönemi
- Temel Kavramlar
Otomasyona geçmeden önce, sistemler arasındaki veri alışverişi yöntemlerini anlamak gerekir.
- API (Application Programming Interface): İki yazılımın haberleşmesini sağlayan köprüdür. Bir Python scripti CUCM veritabanına doğrudan erişmek yerine, arada iletici görevini üstlenen API katmanını kullanır.
- AXL (Administrative XML): Cisco’ya özgü bir API adlandırmasıdır. Unified Communications (UC) yapılandırmasında veri tabanına veri ekleme, silme ve güncelleme işlemlerini sağlayan XML/SOAP tabanlı bir arayüzdür.
- WSDL (Web Services Description Language): Web servisinin hangi fonksiyonları sunduğunu ve hangi veri yapılarını beklediğini tanımlayan XML dosyasıdır. Bir nevi API’nin kullanım kılavuzudur.
- SOAP (Simple Object Access Protocol): XML tabanlı, katı kuralları olan bir protokoldür. CUCM konfigürasyonu için kullanılan AXL, SOAP tabanlıdır.
- REST (Representational State Transfer): SOAP’a göre daha esnektir; XML dışında JSON ve HTML gibi formatları da kullanabilir. Cisco Unity Connection (CUC) ve UCCX gibi sistemler genellikle REST API mimarisi üzerinden yönetilir.
2. CUCM Otomasyonunun Kalbi: AXL ve RISPort
Cisco’nun konfigürasyon veritabanına erişim sağlayan AXL servisi, XML şemaları aracılığıyla nesnelerin oluşturulmasını, güncellenmesini ve silinmesini sağlar. AXL iki temel metodoloji sunar:
- Thick AXL: Telefonlar, hatlar ve kullanıcılar gibi nesneler için önceden tanımlanmış fonksiyonlar içerir (Örneğin:
getUser,addPhone). - Thin AXL:
executeSQLQueryveexecuteSQLUpdategibi metodlarla doğrudan veritabanına özel SQL sorguları gönderilmesini sağlar. Bu, standart metodların yetmediği karmaşık raporlamalar için kullanılır.
IP adresi, kayıt durumu ve güncel yazılım sürümü gibi gerçek zamanlı veriler için ise RISPort (Real-Time Information Service) API’si devreye girer. Özellikle Wireshark ve RTMT analizlerinde ihtiyaç duyulan anlık durum bilgileri için önem arz eder.
Bir python otomasyonunda AXL ve RISPort API’leri aynı anda kullanılabilir. İlk olarak AXL ile cihaz listesi ve konfigürasyonlar verileri çekilir. Ardından RISPort ile aynı cihazın canlı durum bilgileri alınır. Bu iki veri seti birleştirilerek envanter veya monitoring sistemleri elde edilir.
Kısaca, AXL ‘yapılandırma’ yaparken, RISPort ise ‘durum sorgusu’ yapar.
Aşağıdaki görseller konuyu daha iyi anlamaya yardımcı olabilir.

Client App — API — Database Akış Şeması

AXL API: Cisco Call Manager Veritabanına Güvenli Köprü
3. Python Ekosistemi: Zeep ve Sarmalayıcı (Wrapper) Kütüphaneler
Python 3 ile SOAP servisleriyle etkileşime geçmek için geçmişte suds gibi kütüphaneler popüler olsa da, günümüzde en modern çözüm Zeep kütüphanesidir. Zeep, CUCM’in sunduğu karmaşık XML yapılarını doğrudan Python sözlüklerine dönüştürür.
Zeep kütüphanesini python üzerinde çalıştırmak için görselde gösterildiği gibi Cisco AXL Toolkit paketi CUCM arayüzünden indirilmelidir.

CUCM AXL Toolkit ve WSDL Dosyalarının Temini
- Yol: Applications → Plugins → Cisco AXL Toolkit menüsünden “Cisco AXL Toolkit” paketi indirilir. Bu paketin içerisinde bulunan aşağıdaki dosyalar python scriptinin erişebileceği bir yere (genellikle python scripti ile aynı dosya) çıkarılır.
- Gereken WSDL dosyaları:
AXLAPI.wsdl,AXLEnums.xsdveAXLSoap.xsd.
Ancak, her projede ham SOAP istekleriyle uğraşmak zaman alıcı olabilir. İşte bu noktada, Zeep üzerine inşa edilmiş Sarmalayıcı (Wrapper) kütüphaneler devreye girer:
- python-axl: Cisco AXL operasyonlarını daha sade bir hale getiren popüler bir kütüphanedir.
- cisco-axl: Benzer şekilde, AXL servislerini birer Python fonksiyonu gibi çağırmamızı sağlayarak kodun okunabilirliğini artırır.

Zeep ve python-axl kütüphaneleri
4. Güvenlik ve Yetkilendirme
Güvenlik gerekçeleriyle, otomasyon scriptlerinde tam yetkili bir yönetici hesabı kullanmak yerine, sadece işlemin gerektirdiği yetkilere sahip özel bir “Application User” oluşturulmalıdır. Python betiğinde CUCM’e bağlanmak için kullanıcıya verilebilecek yetkiler şunlardır:
- Standard AXL API Access: Cihaz ekleme, silme ve mevcut konfigürasyonları güncelleme işlemleri için gereklidir.
- Standard AXL Read Only API Access: Sadece envanter raporlama ve durum izleme yapılacak projeler için tanımlanır.
- Standard CCM Server Monitoring: Sistem servislerinin durumunu kontrol etmek ve performans takibi yapmak için kullanılır.
Örneğin, CUCM’de Application Users kısmında “python_users” adında bir kullanıcı oluşturulmuştur. Python scriptinde kullanmak üzere bu kullanıcıya görselde görüldüğü gibi “Standard AXL API Access” yetkisi verilmiştir.

CUCM’de ‘’python_users’’ kullanıcısı için “Standard AXL API Access’’ yetkisi tanımlama
5. SSH ve CLI Otomasyonu: Netmiko ve Paramiko
API’lerin kapsama alanı dışında kalan işletim sistemi düzeyindeki görevler için SSH tabanlı CLI otomasyonu gereklidir. Bu noktada Netmiko kütüphanesi, Cisco cihazları için özelleşmiş yapısıyla öne çıkar. Paramiko ise alt seviye SSH bağlantısı sağlar; daha esnek ancak daha fazla manuel kodlama gerektirir.
Özellikle Voice Gateway (CUBE) üzerindeki dial-peer yönetimini otomatize etmek için bu yöntem oldukça etkilidir.
6. Teoriden Pratiğe
Teorik bilgiyi gerçek dünya senaryolarına dönüştürmek, özellikle büyük ölçekli altyapılarda hayati önem taşır. Ben de python ile oluşturduğum network otomasyonu projelerimi Github sayfamda paylaşıyorum. Bu sayfada, CUCM sistemlerine hem ham Zeep kütüphanesi hem de python-axl gibi modern sarmalayıcılar kullanarak eriştiğim projeler yer almaktadır.
Projelerimi incelemek ve kendi altyapınıza uyarlamak için: github.com/ErenKilinc1
Teorik bölümde bahsettiğim AXL ve RISPort yapılarının birlikte kullanımına dair en somut örneklerden biri, CUCM envanterindeki kayıtlı olmayan cihazların analizidir. Standart CUCM arayüzü, kayıt durumu ‘None’ olan cihazların tümünü dinamik bir şekilde raporlamakta veya bu veriyi anlamlı bir istatistiğe dönüştürmekte kısıtlı kalabilmektedir.
Geliştirdiğim bu proje, Cisco’nun iki farklı API dünyasını (AXL + RISPort) harmanlayarak bu kısıtlamayı aşmaktadır:
Proje çıktısının belirli bir kısmı aşağıdaki örnekteki gibidir:
# | Cihaz Adı | Model | Durum
--------------------------------------------------------------------
1 | SEP7A11C87D07C4 | Cisco 7841 | None
2 | SEPEAF55C447BAB | Cisco 840 | None
3 | SEP8D9C22D03F88 | Cisco 8851 | None

Github projesi örnek grafik çıktısı
SONUÇ
Unified Communication ve Voice Network için Python, artık en az bir ses protokolü kadar temel bir yetkinlik haline gelmiştir. Bu yazıda bahsettiğim AXL, WSDL ve çeşitli Python kütüphaneleri, bizlere statik bir yapıyı dinamik bir yapıya dönüştürme gücü veriyor.
메타데이터
- post_id
- 10c2ea0ccf80
- slug
- python-ve-axl-api-ile-cisco-cucm-otomasyonu-10c2ea0ccf80
- url
- https://medium.com/@vverenvv3/python-ve-axl-api-ile-cisco-cucm-otomasyonu-10c2ea0ccf80
- canonical_url
- https://medium.com/@vverenvv3/python-ve-axl-api-ile-cisco-cucm-otomasyonu-10c2ea0ccf80
- author_url
- https://medium.com/@vverenvv3
- status
- ok
- fetched_at
- 2026-06-22 05:41:33