Asterisk manager API(AMI)文档(中文版)(转) Asterisk manager API(AMI)文档(中文版)(转)

Asterisk manager API(AMI)文档(中文版)(转)

 

From: http://blog.csdn.net/seven407/archive/2010/02/05/5292110.aspx

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 this request.它允许您确定这一请求的响应信息。 You may use a number or a string. Useful when you 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:


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

seven407总结

2009.09.23

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/seven407/archive/2010/02/05/5292110.aspx

From: http://blog.csdn.net/seven407/archive/2010/02/05/5292110.aspx

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 this request.它允许您确定这一请求的响应信息。 You may use a number or a string. Useful when you 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:


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

seven407总结

2009.09.23

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/seven407/archive/2010/02/05/5292110.aspx

猜你喜欢

转载自www.cnblogs.com/kiss-passion/p/10325578.html