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 (англ.)
[править] Примечания
- ↑ Только синтаксис у них другой