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