Asterisk控制接口(AMI)允许管理客户端程序连接到一个asterisk实例并且可以通过TCP/IP流发送命令或读取事件。这在试图跟踪asterisk的状态或其中的电话客户端状态时很有用,AMI说明了客户端基于的一般(可能是动态的)规则。
一种简单的"key: value"协议用于已连接的管理客户端和asteriskPBX之间的信息传递。每行都用回车换行(/r/n)来结束。

协议特点:        
在发送命令前,你必须建立一个连接。
在认证后,数据包任何时间都可以在两个方向上互相传输。
数据包第一行为"Action"时表明是由管理客户端发送到asterisk,第一行为"Event"或"Response"表明有asterisk发送到管理客户端。数据包内各行顺序可以变化,对数据包没有影响。
回车换行由于区分每一行,空行(两个连续回车换行)用于表明命令结束,Asterisk开始处理命令。

数据包类型:        
数据包的类型通过一下几种关键字来划分
Action:一个由管理客户端发送到Asterisk的数据包,请求执行特定的动作。只有有限的几种动作供客户端使用,每个动作是由Asterisk服务器上的模块所决定的。一次只能执行一个动作,该动作数据包包含了动作名称以及执行所必需的参数。
Response:Asterisk对管理客户端动作的响应。
Event: 有关Asterisk核心或扩展模块发生事件的信息。

建立管理连接和用户身份验证:        
为了与Asterisk进行管理通话,管理客户端必须建立到Asterisk服务器侦听端口(一般是5038)的TCP/IP连接,并使用登陆动作进行身份验证。这就要求在Asterisk服务器上创建用户账户,用户账户在/etc/asterisk/manager.conf中配置。账户由允许登陆的主机,登录密码以及被授予的权限列表组成。
登录和身份验证的经理,你必须发送一个" 登录 "行动,用您的用户名和秘密(密码作为参数)。 Here is an example:下面是一个例子:
Action: login
Username: admin
Secret: secret

你还可以通过"Events: off"阻止事件数据包发送到你的连接。例如:
Action: login
Username: admin
Secret: secret
Events: off

动作数据包:        
向Asterisk发送动作时,额外的关键字可以提供进一步的动作信息。例如,你可能希望指定号码或通道的断开。此外,如果您的操作会导致Asterisk来执行拨号规则中的条目,你可以传递变量给拨号规则。这与你传递关键字的方式是一样的。
向Asterisk发送动作数据包时,按照以下格式:
Action: <action type><CRLF>
<Key 1>: <Value 1><CRLF>
<Key 2>: <Value 2><CRLF>
...
Variable: <Variable 1>=<Value 1><CRLF>
Variable: <Variable 2>=<Value 2><CRLF>
...
<CRLF>

管理动作(          Action          ):        
通过CLI命令show manager commands的输出结果就是管理动作列表。
具体如下:
          AbsoluteTimeout          这个命令将要求Asterisk在指定秒数后挂断特定的通道,从而有效地结束通话。
参数:
Channel :哪些渠道挂断,如SIP/123-1c20
Timeout :到通道应挂断的秒数
例子:
请求信息
Action: AbsoluteTimeout
Channel: SIP/123-1c20
Timeout: 20

返回成功信息
Response: Success
Message: Timeout Set

返回失败信息
Response: Error
Message: No such channel

ChangeMonitor          更改记录某通道信息文件名。
参数:
Channel:通道名称
File:文件名

例子:
发送请求
ACTION: ChangeMonitor
Channel: SIP/x7065558529-1c20
File: 20050103-140105_cc51

返回失败信息
Response: Error
Message: No such channel

返回成功信息
Response: Success
Message: Stopped monitoring channel

Command          发送Asterisk CLI命令。
参数:
Command:Asterisk CLI 命令。

例子:
发送请求
ACTION: COMMAND
command: Show Channels

返回信息
Response: Follows
Channel (Context Extension Pri ) State Appl. Data
0 active channel(s)
--END COMMAND-

注意:返回的事件响应结果并不是发送一个回车换行(/r/n),而只发送回车(/n),如果你在中断处理程序中只等待回车换行,那么这条信息将会被被抛弃。
例如command返回信息如下:
Response: Follows/r/n
Channel Location State Application(Data)/n
SIP/x7065551212b-1af (None) Ringing AppDial((Outgoing Line))/n
SIP/x7065551212c-2aa 29@default:2 Ring Dial(SIP/x7065551212b)/n
2 active channels/n
1 active call/r/n
--END COMMAND--/r/n
/r/n

Events          事件控制流,用于启用/禁用发送给管理客户端的事件。
参数:
EventMask: 'on'表示所有事件均会被发送到管理客户端。
'off'表示所有时间都不会被发送。
'system,call,log'用于选择被发送的事件。
提示:有些事件是启用或禁已经在.conf文件中配置了, They might be disabled by default.他们可能是默认为禁用。

例子:
注意在此例子中EventMask事件没有立即返回的响应信息,只有在设备注销时才返回相关信息。
发送请求:
ACTION: EVENTS
EVENTMASK: ON
返回信息:
Event: PeerStatus
Peer: SIP/ChannelName
PeerStatus: Unregistered
Cause: Expired

当EventMask参数为'off'时会立即返回响应信息,如下:
发送:
ACTION: EVENTS
EVENTMASK: OFF
返回:
Response: Events Off

ExtensionState          检查分机的状态。
参数:Exten,Context,ActionID

例子:
发送:
ACTION: ExtensionState
Context: default
Exten: 2001
ActionID: 1

接收:
Response: Success
ActionID: 1
Message: Extension Status
Exten: 2001
Context: default
Hint: SIP/2001
Status: 0

Status状态代码:
-1 =扩展找不到
0 =空闲
1 =在使用
2 =忙
4 =不可用
8 =振铃
16 =正等待

GetVar:获取一个通道变量。
参数:Channel,Variable,actionID
ActionID是一个可选的参数匹配信息。

例子:
发送:
ACTION: GetVar
Channel: SIP/5060-44d225d0
Variable: extension
成功返回:
Response: Success
Value: 17065551419
失败返回:
Response: Error
Message: No such channel

Response: Success
varname: (null)

Hangup:挂断指定通道。
参数:Channel

例子:

发送:
ACTION: Hangup
Channel: SIP/x7065558529-99a0

接收:
Event: Unlink
Channel1: SIP/127.180.254.109-44df88e8
Channel2: SIP/x7065558529-99a0
Uniqueid1: 1124989110.20473
Uniqueid2: 1124989110.20474

Event: Hangup
Channel: SIP/x7065558529-99a0
Uniqueid: 1124989110.20474
Cause: 16

Event: Hangup
Channel: SIP/127.180.254.109-44df88e8
Uniqueid: 1124989110.20473
Cause: 16

Response: Success
Message: Channel Hungup

IAXpeers          显示iax信息列表。
例子:

发送:
Action: IAXPeers

接收:
Name/Username Host Mask Port Status
8002 (Unspecified) (D) 255.255.255.255 0 UNKNOWN
8001 192.168.0.91 (D) 255.255.255.255 4569 OK (5 ms)
2 iax2 peers [1 online, 1 offline, 0 unmonitored]

ListCommands          显示命令列表。
参数:ActionID

例子:
发送:
Action:ListCommands
接收:Response: Success
AbsoluteTimeout: Set Absolute Timeout (Priv: call,all)
AgentCallbackLogin: Sets an agent as logged in by callback (Priv: agent,all)
AgentLogoff: Sets an agent as no longer logged in (Priv: agent,all)
Agents: Lists agents and their status (Priv: agent,all)
ChangeMonitor: Change monitoring filename of a channel (Priv: call,all)
Command: Execute Asterisk CLI Command (Priv: command,all)
DBGet: Get DB Entry (Priv: system,all)
DBPut: Put DB Entry (Priv: system,all)
Events: Control Event Flow (Priv: )
ExtensionState: Check Extension Status (Priv: call,all)
Getvar: Gets a Channel Variable (Priv: call,all)
Hangup: Hangup Channel (Priv: call,all)
IAXnetstats: Show IAX Netstats (Priv: )
IAXpeers: List IAX Peers (Priv: )
ListCommands: List available manager commands (Priv: )
Logoff: Logoff Manager (Priv: )
MailboxCount: Check Mailbox Message Count (Priv: call,all)
MailboxStatus: Check Mailbox (Priv: call,all)
MeetmeMute: Mute a Meetme user (Priv: call,all)
MeetmeUnmute: Unmute a Meetme user (Priv: call,all)
Monitor: Monitor a channel (Priv: call,all)
Originate: Originate Call (Priv: call,all)
Park: Park a channel (Priv: call,all)
ParkedCalls: List parked calls (Priv: )
PauseMonitor: Pause monitoring of a channel (Priv: call,all)
Ping: Keepalive command (Priv: )
PlayDTMF: Play DTMF signal on a specific channel. (Priv: call,all)
QueueAdd: Add interface to queue. (Priv: agent,all)
QueuePause: Makes a queue member temporarily unavailable (Priv: agent,all)
QueueRemove: Remove interface from queue. (Priv: agent,all)
Queues: Queues (Priv: )
QueueStatus: Queue Status (Priv: )
Redirect: Redirect (transfer) a call (Priv: call,all)
SetCDRUserField: Set the CDR UserField (Priv: call,all)
Setvar: Set Channel Variable (Priv: call,all)
SIPpeers: List SIP peers (text format) (Priv: system,all)
SIPshowpeer: Show SIP peer (text format) (Priv: system,all)
Status: Lists channel status (Priv: call,all)
StopMonitor: Stop monitoring a channel (Priv: call,all)
UnpauseMonitor: Unpause monitoring of a channel (Priv: call,all)
UserEvent: Send an arbitrary event (Priv: user,all)
WaitEvent: Wait for an event to occur (Priv: )
ZapDialOffHook: Dial over channel while offhook (Priv: )
ZapDNDoff: Toggle channel Do Not Disturb status OFF (Priv: )
ZapDNDon: Toggle channel Do Not Disturb status ON (Priv: )
ZapHangup: Hangup Channel (Priv: )
ZapRestart: Fully Restart channels (terminates calls) (Priv: )
ZapShowChannels: Show status channels (Priv: )
ZapTransfer: Transfer Channel (Priv: )

Logoff          注销管理客户端。
例子:
发送:
ACTION: LOGOFF
接收:
Response: Goodbye
Message: Thanks for all the fish.

MailboxCount          检查语音信箱是否有新信息。
参数:MailBox,actionID
例子:
发送:
Action: MailboxCount
Mailbox: 2001@device
接收:
Response: Success
Message: Mailbox Message Count
Mailbox: 2001@device
NewMessages: 1
OldMessages: 0

MailboxStatus:检查语音信箱状态。
参数:MailBox,actionID
例子:
发送:
Action: MailboxStatus
Mailbox: 2001@device
接收:
Response: Success
Message: Mailbox Status
Mailbox: 2001@device
Waiting: 1

Monitor:监听某个通道。
参数:Channel, File, Format, Mix
例子:
发送:
ACTION: Monitor
Channel: SIP/x7062618529-643d
File: channelsavefile
Mix: 1

返回:
Response: Success
Message: Started monitoring channel

失败返回
Response: Error
Message: No such channel

Originate          产生一个呼叫。(privilege: call,all)        
参数:
Channel:呼叫连接产生的通道。
Context:呼叫连接所使用的Context(Context,Exten,Priority必须同时使用)
Exten: 呼叫连接所使用的分机(Context,Exten,Priority必须同时使用)

Priority:呼叫连接的优先级。(Context,Exten,Priority必须同时使用)
TimeOut:呼叫连接的超时(,单位为毫秒,默认为30000毫秒)
CallID:呼叫连接的来电显示。
Variable:通道变量设置。本地通道和连接通道都将被设置。
Account:呼叫所用密码。
Application:使用此次呼叫的应用程序。(使用参数和数据)
Data:应用程序参数所使用的数据。
Async:呼叫是否为异步。(允许多次调用不等待响应生成)
ActionID请求标识符。 It allows you to identify the response to thisrequest.它允许您确定这一请求的响应信息。 You may use a number or a string. Useful whenyou make several simultaneous requests.当您有用几个并发请求,您可以使用一个数字或字符串来区分。

事件的顺序:首先SGI通道鸣响,然后当他被接听后,通过上下文呼叫另一端的分机。注意超时只用于呼叫通道,呼叫分机时的超时另外指定。

使用异步导致1 OriginateResponse事件,包含了失败的原因。 Reason may be one of the following:原因可能是下列之一:
0 = no such extension or number 0 =没有这样的延长或编号
1 = no answer 1 =无应答
4 = answered 4 =回答
8 = congested or not available 8 =拥挤或不可用

例1(从SIP通道呼叫一个分机,这将导致外部呼叫无法产生直到sip通道挂断)
发送:
Action: Originate
Channel: SIP/101test
Context: default
Exten: 8135551212
Priority: 1
Callerid: 3125551212
Timeout: 30000
Variable: var1=23|var2=24|var3=25
ActionID: ABC45678901234567890

分机8135551212是外呼号码。这个例子表明了变量的使用方法

例2(从呼出通道呼叫一个本地分机,这将导致该分机不再响铃直到zap通道挂断)
发送:
Action: Originate
Channel: Zap/g2/8135551212
Context: default
Exten: 101
Priority: 1
Timeout: 30000
Callerid: 3125551212

101为一个本地分机号。

例3(运行系统命令)
发送:
Action: Originate
Channel: Local/1@dummy
Application: system
Data: /path/to/script

提示:如果你希望通道连接到任意分机和上下文,需要指定一个本地通道

ParkedCalls          设置显示保持的呼叫列表。
参数:ActionID
发送:
Action: PakedCalls

返回:
Response: Success
Message: Parked calls will follow

Event: ParkedCallsComplete
          Ping        
例子:
发送:
Action: ping
返回:
Response: Pong

QueueAdd          添加队列成员。
参数:
Queue:添加成员的队列名。
Interface: 成员名(例如sip/2001)
Penalty:数值,值越高越靠后。
Paused:暂停(true)或不暂停(false)
ActionID:(前面已介绍)

例子:
发送:
Action: QueueAdd
Queue: 200
Interface: sip/3001
Penalty: 1
Paused: true
返回:
Response: Success
Message: Added interface to queue

Event: QueueMemberAdded
Privilege: agent,all
Queue: 200
Location: sip/3001
MemberName: sip/3001
Membership: dynamic
Penalty: 1
CallsTaken: 0
LastCall: 0
Status: 5
Paused: 1

QueueRemove          移除队列成员。
参数:
Queue:移除成员的队列名。
Interface: 成员名(例如sip/2001)

例子:
发送:
Action: QueueRemove
Queue: 200
Interface: sip/3001
返回:
Response: Success
Message: Removed interface from queue

Event: QueueMemberRemoved
Privilege: agent,all
Queue: 200
Location: sip/3001
MemberName: sip/3001

Queues          返回全部队列的配置以及电话数据信息。
例子:
发送:
Action: Queues
返回:
200 has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime), W:0, C:0, A:0, SL:0.0% within 0s
Members:
Local/2002@from-internal/n (Invalid) has taken no calls yet
Local/2003@from-internal/n (Invalid) has taken no calls yet
Local/2001@from-internal/n (Invalid) has taken no calls yet
No Callers

default has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime), W:0, C:0, A:0, SL:0.0% within 0s
No Members
No Callers

QueueStatus          返回全部队列的电话数据信息。
例子:
发送:
Action: QueueStatus
返回:
Response: Success
Message: Queue status will follow

Event: QueueParams
Queue: 200
Max: 0
Calls: 0
Holdtime: 0
Completed: 0
Abandoned: 0
ServiceLevel: 0
ServicelevelPerf: 0.0
Weight: 0

Event: QueueMember
Queue: 200
Name: Local/2002@from-internal/n
Location: Local/2002@from-internal/n
Membership: static
Penalty: 0
CallsTaken: 0
LastCall: 0
Status: 4
Paused: 0

Event: QueueMember
Queue: 200
Name: Local/2003@from-internal/n
Location: Local/2003@from-internal/n
Membership: static
Penalty: 0
CallsTaken: 0
LastCall: 0
Status: 4
Paused: 0

Event: QueueMember
Queue: 200
Name: Local/2001@from-internal/n
Location: Local/2001@from-internal/n
Membership: static
Penalty: 0
CallsTaken: 0
LastCall: 0
Status: 4
Paused: 0

Event: QueueParams
Queue: default
Max: 0
Calls: 0
Holdtime: 0
Completed: 0
Abandoned: 0
ServiceLevel: 0
ServicelevelPerf: 0.0
Weight: 0

Event: QueueStatusComplete

Redirect          重定向一个呼叫。
参数:
Channel:重定向的通道。
ExtraChannel:重定向的第二通道(可选)
Exten:重定向的分机。
Context: 重定向的上下文。
Priority:重定向的优先级
ActionID:(可选)

例子(把两个呼叫重定向到meetme房间)
Action: Redirect
Channel: Zap/73-1
ExtraChannel: SIP/199testphone-1f3c
Exten: 8600029
Context: default
Priority: 1

8600029的上下文是default,并将进入meetme房间。

SetCDRUserField          设置用户的呼叫详细记录。
参数:UserField,Channel,Append

SetVar          设置通道变量。
参数:Channel, Variable, Value

例子:
发送:
Action: Setvar
Channel: Zap/1-1
Variable: AtestVariable
Value: This is now set

SIPpeers          显示sip用户列表。
例子:
发送:
Action: SIPpeers
返回
Response: Success
Message: Peer status list will follow

Event: PeerEntry
Channeltype: SIP
ObjectName: 3001
ChanObjectType: peer
IPaddress: -none-
IPport: 0
Dynamic: yes
Natsupport: yes
VideoSupport: no
ACL: no
Status: UNKNOWN
RealtimeDevice: no

Event: PeerEntry
Channeltype: SIP
ObjectName: 2003
ChanObjectType: peer
IPaddress: -none-
IPport: 0
Dynamic: yes
Natsupport: yes
VideoSupport: no
ACL: no
Status: UNKNOWN
RealtimeDevice: no

Event: PeerEntry
Channeltype: SIP
ObjectName: 2002
ChanObjectType: peer
IPaddress: -none-
IPport: 0
Dynamic: yes
Natsupport: yes
VideoSupport: no
ACL: no
Status: UNKNOWN
RealtimeDevice: no

Event: PeerEntry
Channeltype: SIP
ObjectName: 2001
ChanObjectType: peer
IPaddress: -none-
IPport: 0
Dynamic: yes
Natsupport: yes
VideoSupport: no
ACL: no
Status: UNKNOWN
RealtimeDevice: no

Event: PeerlistComplete
ListItems: 4

Status          返回所有开放通道或指定通道的状态。
参数:Channel (可选), ActionID (可选)
例子:
发送:
Action:Status

返回:
Response: Success
Message: Channel status will follow

Event: StatusComplete

StopMonitor          停止检测某通道。
参数:Channel
例子:
发送:
Action: StopMonitor
Channel: Zap/1-1

ZapDialOffhook          从空闲的ZAP通道拨打呼叫。
参数:
ZapChannel: ZAP 通道
Number: 所拨打的号码

ZapDNDoff          绑定ZAP通道而不影响其关闭状态
参数:ZAPChannel

ZapDNDon          绑定ZAP通道而不影响其开放状态
参数:ZAPChannel

ZapHangup          挂断ZAP通道。
参数:ZAPChannel

ZapTransfer          转拨ZAP通道。
参数:ZAPChannel

ZapShowChannels          显示所有ZAP通道信息。
参数:ActionID(可选)

Asterisk 1.2.1新增:
          AgentCallBackLogin          设置用户以回拨方式登录。
参数:
Agent:用户登录的ID
Exten: 用于回拨的分机
Context: 用于回拨的上下文
AckCall: 设置在用户回拨时进行验证
WrapupTime: 挂断重拨的最小间隔时间
ActionID:

例子:
发送:
Action: AgentCallBackLogin
Agent: 1234
Exten: 1234
Context: myqueues
AckCall: true
WrapupTime: 30
ActionID: 12345

AgentLogoff          注销一个用户。
参数:
Agent:用户登录Id

例子:
发送:
Action: AgentLogoff
Agent: 1234

Agents          显示所有用户信息。
例子:
发送:
Action: Agents

DBGet          查询数据库信息。
参数:Family,Key

发送:
Action: DBGet
Family: 
Key:

失败返回:
Response: Error
Message: Database entry not found

成功返回:
Response: Success
Message: Result will follow

Event: DBGetResponse
Family: 
Key: 
Val:

在Perl脚本中的运用:
use Asterisk::Manager;
my $astman = new Asterisk::Manager;
$astman->user('');
$astman->secret('');
$astman->host('');
$astman->connect || die $astman->error . "/n";

$astman->sendcommand(Action => 'DBGet', Family => '', Key => '');
my @result = $astman->sendcommand(Event => 'DBGetResponse');
$astman->disconnect;

my $value = $result[7]; -> Value 7 is the returned Value
          DBPut:更新数据库信息。
发送:
Action: DBPut
Family: 
Key: 
Value:  (note, as of Asterisk 1.4 The Manager API wants Val: )

返回:
Response: Success
Message: Updated database successfully

使用方法同DBGet一样。

QueuePause          停止/开启队列中某个成员的使用。
参数:
Queue: 成员所在队列名.(可选,如无此项将在成员所在的所有队列停止成员的使用)
Interface: 队列成员名 (如sip/1000, zap/1-1, agent/1000)
Paused: 停止或开启 (true or false)

SIPshowPeer          :显示指定          peer          信息        
参数: peer:指定的peer。

Asterisk 1.4.0新增:
          PlayDTMF          在指定通道上发送双音多频信号数字。
参数:
Channel:指定的通道
Digit:双音多频信号数字

发送:
Action: PlayDTMF
Channel: SIP/123-e2b2
Digit: 1

成功返回:
Response: Success
Message: DTMF successfully queued

失败返回:
Response: Error
Message: No such channel

UpdateConfig          更新配置文件。
参数:
SrcFilename: 要读取的配置文件(.conf)
DstFilename: 要更新的配置文件(.conf)
Reload: 是否重新加载(asterisk或者模块名称)
Action-XXXXXX: 采取的动作 (NewCat、RenameCat、DelCat、Update、Delete、Append)
Cat-XXXXXX: 操作对象
Var-XXXXXX: 采用的变量
Value-XXXXXX: 变量的值
Match-XXXXXX: 其他匹配信息

例1:(更新manager.conf)
action: updateconfig
reload: yes
srcfilename: manager.conf
dstfilename: manager.conf
action-000000: append
cat-000000: newuser
var-000000: secret
value-000000: nottelling
例2:(更新extension.conf,通过'>'增加前缀)
action:updateconfig
reload:yes
srcfilename: extensions.conf
dstfilename: extensions.conf
Action-000000:append
Cat-000000: ami-test
Var-000000: exten
Value-000000: >999,1,Dial(SIP/Bob)

例3:(删除manager.conf中的配置信息)
action: updateconfig
srcfilename: manager.conf
dstfilename: manager.conf
action-000000: delete
cat-000000: newuser
var-000000: secret
value-000000: nottelling
match-000000: nottelling

删除时必须设置'value'和'match',不设置'match'将会删除变量为'var'所有条目

GetConfig          显示配置文件内容,主要给AJAM和asterisk图形界面使用。
变量:FileName:显示的文件名(.conf)。

Asterisk          事件(          Event                            
以下的事件都在asterisk源码中定义。

用户状态事件:

'Agentcallbacklogin' 事件 :
描述:
[来源于chan_agent.c]

示例:
Event: Agentcallbacklogin
Agent: 
Loginchan: 
Uniqueid:

'Agentcallbacklogoff'事件
描述:
[来源于chan_agent.c]

示例:
Event: Agentcallbacklogoff
Agent: 
Loginchan: 
Logintime: 
Reason: Autologoff
Uniqueid:

Event: Agentcallbacklogoff
Agent: 
Loginchan: 
Logintime: 
Uniqueid:

'AgentCalled'事件
描述:
[来源于 app_queue.c]

示例:
Event: AgentCalled
AgentCalled: 
ChannelCalling: 
CallerID: 
Context: 
Extension: 
Priority:

'AgentComplete'事件
描述:
[来源于 app_queue.c]

示例:
Event: AgentComplete
Queue: 
Uniqueid: 
Channel: 
Member: 
MemberName: 
HoldTime: 
TalkTime: 
Reason:

'AgentConnect'事件
描述:
[来源于 app_queue.c]

示例:
Event: AgentConnect
Queue: 
Uniqueid: 
Channel: 
Member: 
MemberName: 
Holdtime: 
BridgedChannel:

'AgentDump'事件
描述:
[来源于 app_queue.c]

示例:
Event: AgentDump
Queue: 
Uniqueid: 
Channel: 
Member: 
MemberName:

'Agentlogin'事件
描述:
[来源于 chan_agent.c]

示例:
Event: Agentlogin
Agent: 
Channel: 
Uniqueid:

'Agentlogoff'事件
描述:
[来源于 chan_agent.c]

示例:
Event: Agentlogoff
Agent: 
Logintime: 
Uniqueid:

'QueueMemberAdded'事件
描述:

队列增加成员动作
[来源于 app_queue.c]

示例:
Queue: testing
Location: Agent/AgentId
Membership: dynamic
Penalty: 0
CallsTaken: 0
LastCall: 0
Status: 4
Paused: 1

'QueueMemberPaused'事件

描述:

响应动作: QueuePause
[来源于 app_queue.c]

示例:
Event: QueueMemberPaused
Location: 
MemberName: 
Paused:

'QueueMemberStatus'事件
描述:
[来源于 app_queue.c]

Status的值可能为:
/*设备是有效的,但不知道的通道状态*/
define AST_DEVICE_UNKNOWN 0

/*设备没有使用 */
define AST_DEVICE_NOT_INUSE 1

/*设备使用中 */
define AST_DEVICE_INUSE 2

/*设备忙 */
define AST_DEVICE_BUSY 3

/*设备无效 */
define AST_DEVICE_INVALID 4

/*设备不可用 */
define AST_DEVICE_UNAVAILABLE 5

/* 设备在响铃*/
define AST_DEVICE_RINGING 6

/*设备在响铃并在使用中*/
define AST_DEVICE_RINGINUSE 7

/*设备在等待 */
define AST_DEVICE_ONHOLD 8

示例:
Event: QueueMemberStatus
Queue: 
Location: 
MemberName: 
Membership: 
Penalty: CallsTaken: 
LastCall: 
Status: 
Paused:

-

命令状态事件:

呼叫状态事件:

'CDR'事件
描述:
[来源于 cdr_manager.c]

必须在 cdr_manager.conf 配置文件中有:

general
enabled = yes

示例:
Event: Cdr
AccountCode:
Source:
Destination:
DestinationContext:
CallerID:
Channel:
DestinationChannel:
LastApplication:
LastData:
StartTime:
AnswerTime:
EndTime:
Duration:
BillableSeconds:
Disposition:
AMAFlags:
UniqueID:
UserField:

'Dial'事件
描述:
[来源于 app_dial.c]

示例:
Event: Dial
Privilege: call,all
Source: Local/900@default-2dbf,2
Destination: SIP/900-4c21
CallerID: 
CallerIDName: default
SrcUniqueID: 1149161705.2
DestUniqueID: 1149161705.4

'ExtensionStatus'事件
描述:
[来源于 manager.c]

示例:
Event: ExtensionStatus
Exten: 
Context: 
Status:

'Hangup'事件
描述:
[来源于 channel.c]

示例:
Event: Hangup
Channel: SIP/101-3f3f
Uniqueid: 1094154427.10
Cause: 0

Cause 代码:

未分配 = 1
无到达路由 = 2
无路由目的地 = 3
无效通道 = 6
正在通话中 = 7
正常挂机 = 16
用户忙 = 17
无应答 = 18
无人接听 = 19
拒绝接听 = 21
号码已更改 = 22
目的次序不对 = 27
无效的数字格式 = 28
设备拒绝 = 29
查询响应 = 30
正常未指定 = 31
正常的呼叫拥塞 = 34
网络状态差 = 38
正常的临时故障 = 41
交换机拥塞 = 42
信息过时 = 43
请求通道无效 = 44
被抢占 = 45
无呼叫保持或呼叫等待 = 50
禁止呼出 = 52
禁止呼入 = 54
负载过重导致失效 = 57
负载过多导致不可达 = 58
负载过多导致为实现 = 65
通道未实现 = 66
设备未实现 = 69
无效的呼叫证明 = 81
不相容的目的地 = 88
无效的不明信息 = 95
IE浏览器关闭 = 96
不识别的信息类型 = 97
错误信息 = 98
无IE浏览器 = 99
无效的IE信息 = 100
呼叫状态错误 = 101
计时到达 = 102
强制性IE浏览器长度误差 = 103
协议错误 = 111
互通 = 127
未定义的 = 0

'MusicOnHold'事件
描述:
事件表示电话等待时,播放音乐
示例:

Event: MusicOnHold
Channel: 
State: 
Uniqueid:

'Join'事件
描述:
[来源于 app_queue.c]

示例:
Event: Join
Channel: 
CallerID: 
Queue: 
Position: 
Count:

'Leave'事件
描述:
[来源于 app_queue.c]

示例:
Event: Leave
Channel: 
Queue: 
Count:

'Link'事件
描述:
当两个通道已连接后开始交换声音数据时发生'link'事件

示例:

Event: Link
Channel1: SIP/101-3f3f
Channel2: Zap/2-1
Uniqueid1: 1094154427.10
Uniqueid2: 1094154427.11

'MeetmeJoin'事件
描述:
[来源于 app_meetme.c]

示例:
Event: MeetmeJoin
Channel: 
Uniqueid: 
Meetme: 
Usernum:

'MeetmeLeave'事件
描述:
[来源于 app_meetme.c]

示例:
Event: MeetmeLeave
Channel: 
Uniqueid: 
Meetme: 
Usernum:

'MeetmeStopTalking'事件
描述:
[来源于 app_meetme.c]

注意:
这要求在meetme应用中以选中T选

示例:

Event: MeetmeStopTalking
Privilege: call,all
Channel: SIP/200-ABC1
Uniqueid: 1234567890.1
Meetme: 400
Usernum: 2

'MeetmeTalking'事件
描述:
[来源于 app_meetme.c]

注意:
这要求在meetme应用中以选中T选项

示例:

Event: MeetmeTalking
Privilege: call,all
Channel: SIP/200-ABC1
Uniqueid: 1234567890.1
Meetme: 400
Usernum: 2

'MessageWaiting'事件
描述:
[来源于 app_voicemail.c]

示例:
Event: MessageWaiting
Mailbox: @
Waiting: 
New: 
Old:

Event: MessageWaiting
Mailbox: 
Waiting:

'Newcallerid'事件
描述:
[来源于 channel.c]

示例:
Event: Newcallerid
Channel: 
Callerid: 
Uniqueid:

'Newchannel'事件
描述:
[来源于 channel.c]

示例:
Event: Newchannel
Channel: Zap/2-1
State: Rsrvd
Callerid: 
Uniqueid: 1094154427.11

Event: Newchannel
Channel: SIP/101-3f3f
State: Ring
Callerid: 101
Uniqueid: 1094154427.10

'Newexten'事件
描述:
当一项PBX函数运行(例如执行拨号规则)时发生此事件。

示例:
Event: Newexten
Channel: SIP/101-00c7
Context: macro-ext
Extension: s
Priority: 3
Application: Goto
AppData: s-BUSY
Uniqueid: 1094154321.8

Event: Newexten
Channel: SIP/101-3f3f
Context: local_extensions
Extension: 917070
Priority: 1
Application: AGI
AppData: /etc/asterisk/agi/ks_doorman_pickup.py|channel_up
Uniqueid: 1094154427.10

Event: Newexten
Channel: SIP/101-3f3f
Context: local_extensions
Extension: 917070
Priority: 2
Application: Dial
AppData: Zap/G1/17070
Uniqueid: 1094154427.10

'ParkedCall'事件
描述:
[来源于 res_features.c]

示例:
Event: ParkedCall
Exten: Channel: 
From: 
Timeout: 
CallerID:

'Rename'事件
描述:
[来源于 channel.c: channel 'rename' event]

示例:
Event: Rename
Oldname: 
Newname: 
Uniqueid:

'SetCDRUserField'事件
描述:
[来源于 app_setcdruserfield.c]

示例:

'Unlink'事件
描述:

当两个连接的通道断开是发生此事件,通常为挂机时

示例:

Event: Unlink
Channel1: SIP/101-3f3f
Channel2: Zap/2-1
Uniqueid1: 1094154427.10
Uniqueid2: 1094154427.11

'UnParkedCall'事件
描述:
[来源于 res_features.c]

日志状态事件:

系统状态事件:

'Alarm'事件:
描述:
[来源于 chan_zap.c]

示例:
Event: Alarm
Alarm:<(Red|Yellow|Blue|No|Unknown)Alarm|Recovering|Loopback|Not Open|None>
Channel:

'AlarmClear'事件:
描述:
[来源于 chan_zap.c]

示例:
Event: AlarmClear
Channel:

'DNDState'事件:
描述:
[来源于 chan_dahdi.c]

示例:
Event: DNDState
Channel: Zap/1
Status:

'LogChannel'事件
描述:
[来源于 logger.c]

示例:
Event: LogChannel
Channel: /var/log/asterisk/messages
Enabled: Yes

Event: LogChannel
Channel: /var/log/asterisk/messages
Enabled: No
Reason: 13 - Permission denied

'PeerStatus'事件
描述:
当用户注册或注销时发生此事件
[来源于 chan_sip.c, chan_iax2.c]

示例:
Event: PeerStatus
Peer: SIP/2005
PeerStatus: Registered

Event: PeerStatus
Peer: SIP/2005
PeerStatus: Unregistered
Cause: Expired

Event: PeerStatus
Peer: IAX2/2007
PeerStatus: 
Time: 1000

'Registry'事件
描述:

当应户注册时发生的事件
[来源于 chan_sip.c, chan_iax2.c]

示例:
Event: Registry
Channel: SIP
Domain: sip.domain
Status: Registered

'Reload'事件
描述:
当 "RELOAD" 命令执行时发生此事件
[来源于 manager.c]

示例:
Event: Reload
Message: Reload Requested

'Shutdown'事件
描述:
[来源于 asterisk.c]

示例:
Event: Shutdown
Shutdown: 
Restart: [tr]

User Status          事件:

'UserEvent'事件
描述:
[来源于 app_userevent.c]

示例:
Event: 
Channel: 
Uniqueid:

Event: 
Channel: 
Uniqueid:

详细状态事件:        
'Newstate'事件
示例:
Event: Newstate
Channel: Zap/2-1
State: Dialing
Callerid: 101
Uniqueid: 1094154427.11

Event: Newstate
Channel: Zap/2-1
State: Up
Callerid: 101
Uniqueid: 1094154427.11

'ParkedCallsComplete:'事件
描述:
发生在ParkedCalls事件之后
示例:
Event: ParkedCallsComplete

'QueueParams:'事件
描述:
响应Queues动作的事件
示例:
Event: QueueParams
Queue: sales
Max: 0
Calls: 0
Holdtime: 0
Completed: 0
Abandoned: 0
ServiceLevel: 0
ServicelevelPerf: 0.0

'QueueMember'事件
描述:
响应Queues动作并且队列中有成员是发生的事件。
示例:
Event: QueueMember
Queue: sales
Location: SIP/101
Membership: dynamic
Penalty: 0
CallsTaken: 0
LastCall: 0

'QueueStatusEnd'事件
描述:
响应Queues动作表示输出结束。
示例:
Event: QueueStatusEnd

'Status'事件
示例:
Event: Status
Channel: Zap/2-1
CallerID: 101
Account:
State: Up
Link: SIP/101-5cf0
Uniqueid: 1094166088.26

Event: Status
Channel: SIP/101-5cf0

CallerID: 101
Account:
State: Up
Context: local_extensions
Extension: 917070
Priority: 2
Seconds: 11
Link: Zap/2-1
Uniqueid: 1094166088.25

'StatusComplete'事件
描述:
响应Status动作的事件,表示状态输出结束。
示例:
Event: StatusComplete

'ZapShowChannels'事件
描述:
响应ZapShowChannels动作的事件。
示例:
Event: ZapShowChannels
Channel: 2
Signalling: FXS Kewlstart
Context: pstn_menu
Alarm: No Alarm

'ZapShowChannelsComplete事件
描述:
响应ZapShowChannels动作的事件,表示输出结束。
示例:
Event: ZapShowChannelsComplete

动作响应(          Response                  
格式:
Response: ( Success或Error)
Message: (显示信息)

示例:
无动作或输入有误:
Response: Error
Message: Missing action in request

未知命令:
Response: Error
Message: Invalid/unknown command

无权限:
Response: Error
Message: Permission denied

成功:
Response: Success
Message: Zap channel status will follow

转至:http://www.cnblogs.com/blogs/articles/3011767.html

Asterisk manager API(AMI)文档(中文版)的更多相关文章

  1. JAVA - JDK 1.8 API 帮助文档-中文版

    JAVA - JDK 1.8 API 帮助文档-中文版 百度云链接: https://pan.baidu.com/s/1_7FFadw1a6J0qTfx2FzqPQ 密码: 41n4

  2. 插件式WebApi服务及自动生成Api帮助文档

    上一篇博客中,讲到了将WebApi Host到控制台和IIS,本篇总结一下如何将WebApi的Service以插件的形式进行动态部署,并设置Hoster的首页显示Api帮助文档,当然,也包括动态部署进 ...

  3. Swagger解决你手写API接口文档的痛

    首先,老规矩,我们在接触新事物的时候, 要对之前学习和了解过的东西做一个总结. 01 痛     苦 不做.不行 之前,前后端分离的系统由前端和后端不同的编写,我们苦逼的后端工程师会把自己已经写完的A ...

  4. Openstack api 学习文档 & restclient使用文档

    Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...

  5. CYQ.Data 轻量数据层之路 优雅V1.4 现世 附API帮助文档(九)

    继上一版本V1.3版本发布到现在,时隔N天了:[V1.3版本开源见:CYQ.Data 轻量数据层之路 华丽V1.3版本 框架开源] N天的时间,根据各路网友的反映及自身的想法,继续修改优化着本框架,力 ...

  6. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  7. api(接口)文档管理工具

    api(接口)文档管理工具 欢迎光临:博之阅API管理平台  ,做为一个app开发者,还没有用到api管理工具,你就OUT了 点击进入:程序员精华博客大全  

  8. 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.

  9. MyEclipse下查看Java API帮助文档

    每次重装JDK或者升级JDK时,都会忘了如何使MyEclipse关联帮助文档.然后,再花十几分钟重新google搜索,麻烦! 首先下载Javadoc api帮助文档,google搜一下就行了. MyE ...

  10. API的文档自动生成——基于CDIF的SOA基本能力

    当前,作为大部分移动app和云服务后台之间的标准连接方式,REST API已经得到了绝大部分开发者的认可和广泛的应用.近年来,在新兴API经济模式逐渐兴起,许多厂商纷纷将自己的后台业务能力作为REST ...

随机推荐

  1. 一段freemarker高级分页效果的代码

    <a onclick="page(1)">首页</a> [#if currpage != 1] [#assign last=currpage - 1] &l ...

  2. MySQL 关联表批量修改(数据同步)

    update table1 t1 ,table2 t2 set t1.field1 = t2.field2 where t1.id = t2.id

  3. CentOS6.3安装MongoDB2.2 及 安装PHP的MongoDB客户端

    下载源码:(放到 /usr/local/src 目录下) 到官网 http://www.mongodb.org/downloads 下载源码 https://fastdl.mongodb.org/li ...

  4. Linux文件查找命令 find 详解

    关于find命令 由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权 ...

  5. thinkphp一对多HAS_MANY

    关联关系通常我们所说的关联关系包括下面三种:一对一关联 :ONE_TO_ONE,包括HAS_ONE 和 BELONGS_TO 一对多关联 :ONE_TO_MANY,包括HAS_MANY 和 BELON ...

  6. 去除ios系统a标签点击时的灰色背景

    使用图片作为a标签的点击按钮时,当触发touchstart的时候,往往会有一个灰色的背景,想要去掉的话可以用下面这种方式 a,a:hover,a:active,a:visited,a:link,a:f ...

  7. 模拟javascript中的sort排序

    一.javascript中sort对数据进行排序的原理 sort() 方法对数组的元素做原地的排序,并返回这个数组. sort 可能不是稳定的.默认按照字符串的Unicode码位点排序; 语法:arr ...

  8. Extjs 制作柱状图

    在JSP页面制作柱状图,可以根据数据的变化动态实时的变化 主要是使用EXTJS自带的插件达到效果 Ext.require('Ext.chart.*'); Ext.require([ 'Ext.Wind ...

  9. ID属性值为小数

    获取带有.的id值 <h1 id="123.45">dom对象</h1> <script> $('#123\\.45').attr('id') ...

  10. Python下RSA加密/解密, 签名/验证

    原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privkey) = rsa.newkeys(1 ...