AMI
Материал из Xgu.ru
AMI (Asterisk Manager Interface) — позволяет внешним программам подключаться к Asterisk
и давать ему управляющие команды. Все команды, которые Asterisk умеет получать через консоль,
могут быть отправлены ему через AMI-интерфейс[1].
Кроме того, через AMI можно получать сообщения от Asterisk'а о том, что с ним происходит: например,
как обрабатываются звонки, на какой стадии находится обработка и так далее.
Настройка AMI выполняется через файл manager.conf.
Содержание |
[править] Протокол AMI
Пример сеанса работы с AMI вручную:
$ telnet 127.0.0.1 5038 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Asterisk Call Manager/1.0
Ответ:
Response: Success ActionID: 1 Message: Authentication accepted
[править] Пример конфигурации
В файле manager.conf (или в файле, который инклюдится из него, например /etc/asterisk/manager.d/admin.conf):
[admin] secret = secret5 deny = 0.0.0.0/0.0.0.0 permit = 127.0.0.1/255.255.255.255 read = all,system,call,log,verbose,command,agent,user,config write = all,system,call,log,verbose,command,agent,user,config
[править] Пример использования
Python-скрипт, который принимает сообщения от Asterisk с помощью интерфейса AMI и публикует их на ZeroMQ-сокете:
#!/usr/bin/python
'''
Pub events from the Asterisk Manager Interface vie ZeroMQ.
'''
__author__ = 'David Wilson'
__id__ = '$Id$'
import sys, time, socket
from Asterisk.Config import Config
from Asterisk.Manager import CoreManager
import Asterisk.Manager, Asterisk.Util
class MyManager(CoreManager):
'''
Send events.
'''
def on_Event(self, event):
#print event.keys()
if event['Event'] == 'Bridge':
Asterisk.Util.dump_packet(event)
def main2():
manager = MyManager(*Config().get_connection())
try:
print '#', repr(manager)
print
manager.serve_forever()
except KeyboardInterrupt, e:
raise SystemExit
def main(argv):
max_reconnects = 100
reconnect_delay = 2
while True:
try:
main2()
except Asterisk.Manager.GoneAwayError, e:
print '#', str(e)
except socket.error, e:
print
print '# Connect error:', e[1]
reconnect_delay *= 2
print '# Waiting', reconnect_delay, 'seconds before reconnect.'
print '# Will try', max_reconnects, 'more times before exit..'
max_reconnects -= 1
time.sleep(reconnect_delay)
print '# Reconnecting...'
if __name__ == '__main__':
main(sys.argv[1:])
</pre>
[править] Дополнительная информация
- Asterisk manager API (англ.)
- The Asterisk Manager Interface (AMI) (англ.)
- manager.conf (англ.)
[править] Примечания
- ↑ Только синтаксис у них другой