Искал библиотеку на питоне для работы с 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