4

我想使用 AMI 在 Asterisk 中代答电话。我可以发起呼叫,但完全不知道如何接听电话......呼叫脚本:

#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 回答