2012-05-31 6 views
3

Я хочу получить звонок в Asterisk с помощью AMI. Я могу происходить вызов, но совершенно не знаю, как ответить на телефонный звонок ... скрипта для вызова:Asterisk AMI - звонок для пикапа

#login 
sock = socket.socket(af, socktype, proto) 
sock.connect(sockaddr) 
sock.send('Action: login\r\n') 
sock.send('Events: off\r\n') 
sock.send('Username: '+str(ast_server.login)+'\r\n') 
sock.send('Secret: '+str(ast_server.password)+'\r\n\r\n') 

#originate call 
sock.send('Action: originate\r\n') 
sock.send('Channel: ' + str(user.asterisk_chan_type) + '/' + str(user.internal_number)+'\r\n') 
sock.send('Timeout: '+str(ast_server.wait_time*1000)+'\r\n') 
sock.send('CallerId: '+str(user.callerid)+'\r\n') 
sock.send('Exten: '+str(ast_number)+'\r\n') 
sock.send('Context: '+str(ast_server.context)+'\r\n') 
if ast_server.alert_info and user.asterisk_chan_type == 'SIP': 
    sock.send('Variable: SIPAddHeader=Alert-Info: '+str(ast_server.alert_info)+'\r\n') 
sock.send('Priority: '+str(ast_server.extension_priority)+'\r\n\r\n') 

#logout 
sock.send('Action: Logoff\r\n\r\n') 
time.sleep(1) 
sock.close() 

мне нужно что-то подобное, но для ответа на вызовы. не можете найти какую-либо полезную команду * CLI> менеджер шоу команды

Halp меня, plox

ответ

11

Вы не можете ответить на вызов непосредственно через AMI. Это связано с тем, что новый вызов будет «прибывать» в заданный контекст/приоритет/расширение, настроенный в диалплане (или он будет отклонен, если не найдет тот, который применяется). Итак, что бы ни случилось с этим вызовом, начнется с заданного контекста/приоритета/расширения в диалплане.

Если вы хотите обрабатывать вызовы с помощью AMI, попробуйте использовать асинхронный AGI, как это:

exten => _X.,1,AGI(agi:async) 

Это будет обрабатывать все звонки в любое расширение, которое имеет по крайней мере 1 цифру, путем выдачи события (AsyncAGI) которые вы можете обрабатывать с вашим клиентом AMI.

Затем от вашего клиента AMI, вы можете отправить AGIAction, вроде:

Action: AGI 
Channel: SIP/adevice 
Command: ANSWER 
CommandID: MyCommandID 

Это позволит эффективно запускать команды AGI (и обрабатывать вызов, как вы обычно делаете в любом AGI скрипт) из ваш AMI-клиент.

Надеюсь, это поможет!

+0

Я уверен, что вы правы, но я не знаю, куда положить _exten => _X., 1, AGI (agi: async) _. Я программист на питоне, а не гуру Asterisk: < – voy

+0

Привет! Диалплан находится в вашем файле extensions.conf, см. Https://wiki.asterisk.org/wiki/display/AST/Dialplan+Fundamentals и http://www.voip-info.org/wiki/view/Asterisk+ конфиг + extensions.conf. Возможно, вы захотите создать специальный контекст для своих тестов, а после того, как вы его измените, не забудьте выпустить «перезагрузку диалплана» в кли или перезапустить звездочку, чтобы изменения вступили в силу. – marcelog

+0

Я знаю, где находятся диалпланы. Например, я использую внутренний диалплан. Где вставить _exten => (blah) _? Может быть, это не имеет значения? Спасибо за то, что тратили свое время на меня :) – voy