Panoramisk - софт для работы с AMI asterisk

Искал библиотеку на питоне для работы с AMI asterisk. Смотрел pyst, но примеров кода на нем совсем  кот наплакал.  Гугл подсказал, что есть еще panoramisk, Obelus. Ставим то,  на что первым упал взгяд)

Установка на примере центоса 7:

yum install git
git clone https://github.com/gawel/panoramisk.git
yum install epel-release python34 python34-requests python34-setuptools.noarch
cd panoramisk

 

Меняем дефолтный питон с 2-го на 3-ий. Как сделать более красиво - не знаю. Если попытаться сменить путь в скрипте setup.py на 3-ий питон - при установке будут синтаксические ошибки. Поэтому:

ln -sf /usr/bin/python3.4 /usr/bin/python 
python setup.py install
ln -sf /usr/bin/python2.7 /usr/bin/python

 

 Или еще проще (через pip):

yum install python34-pip.noarch
pip3 install panoramisk

 

 Далее берем пример скрипта из папки examples event_listener.py и чуть добавляем свое (мне необходимо было мониторить cdr-записи и отправлять информацию на сайт-crm)

 cat ami_asterisk.py
#!/usr/bin/python3

import asyncio
from panoramisk import Manager
import json
import requests

manager = Manager(loop=asyncio.get_event_loop(),
                  host='IP_ATC',
                  username='ami_user',
                  secret='PASSW')


#меня интересуют только записи cdr
@manager.register_event('Cdr*')
def callback(event, manager):
    if "FullyBooted" not in manager.event:
       
        info_cdr = dict(manager)
 
       #код для отправки post запроса на удаленный сервер
       url = 'https://SITE/scan/cdr.php'
       headers = {'content-type': 'application/json', 'Accept': 'text/plain'}
       r = requests.post(url, data=json.dumps(info_cdr), headers=headers)
            
def main():
    manager.connect()
    try:
        manager.loop.run_forever()
    except KeyboardInterrupt:
        manager.loop.close()


if __name__ == '__main__':
    main()

 

 

 

Все, теперь запускаем  python3 ami_asterisk.py  и на удаленном узле начинаем получать json.

 

P.S. в качестве ip-атс используется сборка FreePBX, там по умолчанию отключена отправка cdr событий через AMI, поэтому делаем в консоли сервера:

nano /etc/asterisk/cdr_manager.conf:

[general]
enabled = yes

 

asterisk -rv

module reload cdr_manager.so

cdr show status

 

 

 

Please publish modules in offcanvas position.