2012-05-31 4 views
3

AMI를 사용하여 별표로 전화를 받고 싶습니다. 나는 전화를 발신 할 수 있지만, 완전히 전화의 전화 ... 스크립트에 대답하는 방법을 모르겠어요 :별표 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() 

내가 비슷한 필요하지만, 호출에 응답합니다. 는 HALP 날, plox

답변

11

당신은 AMI를 통해 직접 전화를받을 수 없습니다 * CLI> 관리자 show 명령

에 유용한 명령을 찾을 수 없습니다. 이는 새 전화가 다이얼 플랜에 구성된 주어진 컨텍스트/우선 순위/내선에 "도착"하기 때문입니다 (또는 적용 할 수없는 경우 거부됩니다). 따라서이 호출이있을 때마다 다이얼 플랜의 주어진 상황/우선 순위/내선에서 시작됩니다.

당신은 AMI를 통해 통화를 처리하려면, 다음과 같이 비동기 AGI를 사용해보십시오 :

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

이 이벤트를 실행하여, 최소 1 자리가있는 모든 확장에 대한 모든 호출을 처리합니다 (AsyncAGI) AMI 클라이언트로 처리 할 수 ​​있습니다. 에서이 효과적으로 당신이 AGI이 명령을 실행 (당신은 일반적으로 어떤 AGI 스크립트에서 할 것 같은 통화를 처리) 할 수

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

:

그런 다음, AMI 클라이언트에서, 당신은 AGIAction의 같은를 보낼 수 있습니다 귀하의 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+ 참조). config + extensions.conf. 테스트를위한 특별한 컨텍스트를 만들고 수정 한 후 cli에서 "dialplan reload"를 실행하거나 별표를 다시 시작하여 변경 내용이 적용되도록해야합니다. – marcelog

+0

dialplans의 위치를 ​​알고 있습니다. 예를 들어, 내부 - 내부 다이얼 플랜을 사용합니다. _exten => (blah) _? 그건 상관 없어요? 나를 위해 시간을 낭비 해 주셔서 감사합니다. – voy