4

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 コマンドで有用なコマンドが見つかりません

邪魔して、プロックス

4

1 に答える 1

12

AMI経由で直接電話に出ることができません。これは、新しいコールがダイヤルプランで設定された特定のコンテキスト/優先度/内線番号に「到着」するためです(または、該当するものが見つからない場合は拒否されます)。したがって、その呼び出しで発生することはすべて、ダイヤルプランの指定されたコンテキスト/優先度/内線番号で開始されます。

AMIを介して呼び出しを処理する場合は、次のように非同期AGIを使用してみてください。

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

これは、AMIクライアントで処理できるイベント(AsyncAGI)を発行することにより、少なくとも1桁の内線番号へのすべての呼び出しを処理します。

次に、AMIクライアントから、次のようなAGIActionを送信できます。

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

これにより、AMIクライアントからAGIコマンドを効果的に実行できます(また、通常のAGIスクリプトで行うように呼び出しを処理できます)。

それが役に立てば幸い!

于 2012-05-31T17:22:24.120 に答える