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> manager show command
Помоги мне, вздор
1 ответ
Вы не можете ответить на звонок напрямую через 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.
Надеюсь, поможет!