`
sun4love
  • 浏览: 226313 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Asterisk Extension中的Application命令详解二

    博客分类:
  • VOIP
阅读更多

AgentLogin( )允许呼叫代理登陆系统
AgentLogin([AgentNo][,options])
将当前呼叫者作为代理登入呼叫队列系统(以任意AgentNo验证),登陆后,该代理可以接收呼叫并在呼入时听到“哔哔”声。该代理可以按
Asterisk (*)键来挂起通话。
option参数可以包含字母s,这样可无记录登入。
    ; silently log in as agent number 42, as defined in agents.conf
    exten => 123,1,AgentLogin(42,s)
参见
AgentCallbackLogin( )
~~~~~~~~~~~~~~~~~~
AgentMonitorOutgoing( ) 记录代理呼出。
AgentMonitorOutgoing([options])

记录所有代理呼出电话
This application tries to figure out the ID of the agent who is placing outgoing call based on a comparison of the Caller ID  
of the current interface and the global variable set by the AgentCallbackLogin( ) application.
应用设法断定该代理的ID,
同样,它应该与 AgentCallbackLogin( ) 应用配合使用。它使用chan_agent模块中的监控功能代替Monitor( )应用来记录。这表明记录须在
agents.conf文件中正确配置。
默认地,记录存放在/var/spool/asterisk/monitor/ 路径下。也可以通过改变agents.conf中的savecallsin参数覆盖默认路径。
如果主叫ID或代理ID找不到,该应用将优先n+1,如果它存在(n为当前优先级)。
返回0除非被以下任意选项覆盖。
option参数可以包含以下一个或多个参数:

d
        如果有错误条件,且无扩展名n+101,程序返回-1。

c

        更改呼叫记录以便主叫以Agent/agent_id记录。

n
        若没有主叫ID或者代理ID未知不发出警告。如果你想为代理及无代理呼叫共享上下文,该选项将非常有用。

    ; record outbound calls for this agent, and change the CDR to reflect
    ; that the call is being made by an agent
    exten => 123,1,AgentMonitorOutgoing(c)

参见
AgentCallbackLogin( ), agents.conf
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AGI( ) 执行AGI-compliant应用
[E]AGI(program[,arguments])

在当前信道执行自适应Asterisk网关接口程序。AGI程序允许外部程序(任何语言编写)通过播放音频,读取DTMF数位等等来控制电话信道。

Asterisk以STDIN 和 STDOUT与AGI程序通信。指定参数被转到AGI程序中。

program 参数须在根文件系统下设置为可执行的。程序路径与Asterisk AGI目录关联,默认为/var/lib/asterisk/agi-bin/。
若你想在无信道存在情况下运行AG(例如在h扩展名中)I,可用DeadAGI( )应用替代。
若你要用AGI处理穿越网络,你或许要用到FastAGI( )应用。

若你要从你的AGI程序中访问内部音频,可用EAGI( )代替AGI( )。届时内部音频将被三号存档描述符读入。

挂断程序请求挂断将返回-1,未挂断退出将返回0。

    ; call the demo AGI program
    exten => 123,1,AGI(agi-test)
    exten => 123,2,EAGI(eagi-test)

参见
DeadAGI( ), FastAGI( ), Chapter 9

AlarmReceiver( )               为从防盗防火警报盘中接收警报提供支持。
效仿报警接受器,及允许Asterisk从防火及(或)防盗警报盘中接收以及解码指定数据。此时,只支持Ademco Contact ID。
呼叫发出时,AlarmReceiver( )将与警报盘握手,接收事件,并验证,握手,存储直到面板挂断。一旦面板挂断,应用将运行命令行来表明alarmreceiver.conf  中eventcmd的设定与传送事件到标准应用的输入。alarmreceiver.conf也包括对DTMF定时和确认声音的音量的设置
        该应用不保证可靠,所以除非你广泛测试否则不要依赖它。如果你没有经过广泛测试,你就是把你的生命和财产置于危险的境地。
该应用总返回0。
;set up Asterisk to answer a call from a supported fire alarm panel
exten => s,1,AlarmReceiver(  )
参见
alarmreceiver.conf
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Answer( ) 如果响铃响应该信道
Answer(  )
如果正确响铃Asterisk响应该信道。应用不启用若当前信道不响铃。
通常在调用其它应用时,在信道上使用Answer( )是个好办法,除非你有很好的理由不这样做。大多数应用需要在信道被叫时响应,可能不正常工作例外。

返回0除非它设法响应信道失败。
    exten => 123,1,Answer(  )
    exten => 123,2,Wait(1)
    exten => 123,3,Playback(tt-weasels)

参见
Hangup( )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AppendCDRUserField( )                       向呼叫详单的用户域中添加值
AppendCDRUserField(value)

向呼叫详单的用户域中添加value。用户域通常用于存储呼叫的特定数据,或许并不适用于其它域。

总是返回0。

    ; set the user field to 'abcde'
    exten => 123,1,SetCDRUserField(abcde)
    ; now append 'xyz'
    exten => 123,1,AppendCDRUserField(xyz)

参见
SetCDRUserField( ), ForkCDR( ), NoCDR( ), ResetCDR( )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Authenticate( )                         需要呼叫者输入正确的密码后才继续。
________________________________________
Authenticate(password[,options])

需要呼叫者输入特定的password 为了以便继续下一个优先的拨号规则的执行。Authenticate( ) 给呼叫者三次机会正确输入密码。如果三次输入密码不正确,信道将被挂断。

如果 password 以 / 字符开始,说明一个文件中存放有效密码列表(每行一个)。密码也可以存储在 Asterisk数据库(AstDB);看下面的 d 选项。

提供一组选项,有下面列表中一个或多个字母组成。

a

将名为accountcode的CDR域和信道变量ACCOUNTCODE设置为输入的密码。

d

把路径看作为可以找到密码的数据库键,而不是文字文件。当使用数据库键时,键和值可以任意。

r

移除数据库键若正确输入(只当d被选时)。

当用户三次内正确输入密码返回0,否则返回-1(或挂断)。

; force the caller to enter the password before continuing, and set the CDR field
; named 'accountcode' to the entered password
exten => 123,1,Answer
exten => 123,2,Authenticate(1234,a)
exten => 123,3,Playback(pin-number-accepted)
exten => 123,4,SayDigits(${ACCOUNTCODE})
参见
VMAuthenticate( ), Chapter 6
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Background( )                            接受到按键式(DTMG)数字时播放文件
________________________________________
Background(filename1[&filename2...][,options[,language]])
当等待用户开始输入一个扩展名时播放指定音频文件。一旦用户开始输入扩展名录音重放将终止。Filename不需要指定扩展名,因为Asterisk会以最低转换成本自动找出文件格式。
有效的option 包含以下任一:

Skip

如果信道不是"up"状态(也就是还未被响应)跳过消息回放。如果指定skip,应用立即返回信道未空闲。

Noanswer
在播放指定文件之前不会应答信道。没有这个选项,信道会在声音播放之前自动被应答。不是所有的信道都支持在被应答之前播放信息。
Language参数可能被用来指定一种语言来播放提示,如果它与当前的信道语言不同。
如果信道被挂断,返回-1,或者指定的文件名不存在,否则返回0值。
    exten => 123,1,Answer(  )
exten => 123,2,Background('exter-ext-of-person');

参见
Playback( ), BackgroundDetect( ), show translation 命令

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
BackgroundDetect( )                        在后台播放一个文件并侦测通话
________________________________________
BackgroundDetect(filename[,sil[,min[,max]]])
与Background( )相似,但会试图侦测通话。
在重放一个文件期间,音频被监控在接收地址。如果一个非静音时期大于min毫秒,小于max毫秒,并且发生伴随着至少sil毫秒的静音,那么音频回放被取消,并且在可用的情况下跳转到扩展通话。
如果没有指明,sil,min和max的默认值分别为1000ms,100ms和无穷大。
挂断返回-1,在没有退出并成功回放的情况下返回0值。
    exten => 123,1,BackgroundDetect(tt-monkeys)
    exten => 123,2,Playback(im-sorry)
    exten => talk,1,Playback(yes-dear)

参见
Playback( ), Background( )

Busy()                                             显示一个信道的占用情况
________________________________________
Busy([timeout])
请求显示信道的占用情况,然后等待用户挂机或可选择的timeout(几秒内)到终止。
这个应用只发送一个占用情况到桥接信道。每个特殊的信道类型有它自己的通信方式给呼叫方。你可以使用Playtones(busy)来播放一个忙音给呼叫方。
永久返回-1
    exten => 123,1,Playback(im-sorry)
    exten => 123,2,Playtones(busy)
exten => 123,3,Busy(  )
参见
Congestion( ), Progress( ), Playtones( )

CallingPres( )                                            更改呼叫方的描述
________________________________________
CallingPres(presentation)
更改呼叫方ID在Q931优先级连接上的描述参数。这些参数应该在播打呼出之前来设置。参数presentation控制两件事情:不光被呼叫可以看到呼叫方ID的信息(认为是描述),而且呼叫者ID的信息已经被权威的资源所查证(认为是显示)。
应用获得呼叫描述设置和显示设置,并且把他们合并成一个数字。这些数值本身是在ITU Q931标准中被定义的,参见Tables B-1和B-2。
Table B-1 显示被位 2和1控制
位 2        位 1        说明
0        0        呼叫者ID信息由用户提供,并不会显示。
0        1        呼叫者ID信息由用户提供,并被成功的校验。
1        0        呼叫者ID信息由用户提供,并确认失败。
1        1        呼叫者ID信息由网络提供。

Table B-2 描述被位7和6控制
位 7        位 6        说明
0        0        呼叫者ID信息描述被允许。
0        1        呼叫者ID信息描述被受限。
1        0        由于相互作用号码不可用。
1        1        保留。

位3,4,5和8应该全被设置为zero(0)。请注意,位从最重要到非重要是有限的,如:87654321。
    ; set presentation to:
    ; Presentation Allowed                 (00000000)
    ; Network Provided                    (00000011)
    ; ------------------                       ----------
    ; Result = 3 (bitwise AND)              (00000011)
    exten => 123,1,CallingPres(3)
    exten => 123,2,Dial(Zap/g1/8885551212)

    ; set presentation to:
    ; Presentation Restricted                (00100000)
    ; User-provided, verified, and passed     (00000001)
    ; ------------------                        ----------
    ; Result = 33 (bitwise AND)              (00100001)
    exten => 124,1,CallingPres(33)
exten => 124,2,Dial(Zap/g1/8885551213)

参见
SetCallerPres( ), SetCallerID( )



ChangeMonitor( )                                更改一个信道的监控文件名
________________________________________ChangeMonitor(filename_base)
使用Monitor( )应用更改一个已被记录的信道监控的文件名称,如果信道没有被监控,应用将没有任何效果。参数filename_base是一个新的文件名,基本上是用来监控信道。
; start recording this channel with a basename of 'sample'
    exten => 123,1,Monitor(sample)
; change the filename base to 'example'
exten => 123,2,ChangeMonitor(example)

参见
Monitor( ), StopMonitor( )
ChanIsAvail( )                                 检查指定的信道当前是否可用
________________________________________ChanIsAvail(technology1/resource1[&technology2/resource2...][,option])
查看任何被请求的信道是否为可用。如果任何被请求的信道是不可用的,那么新的优先权将会变成n+101 (n为当前优先权),除非优先权不存在或发生了一个错误,无论如何ChanIsAvail( )将会退出并返回 -1。

如果任意一个信道都是可用的,那么下一个优先权将会变为n+1,并且ChanIsAvail( )将会返回0。


ChanIsAvail( ) 设置下列信道变量

${AVAILCHAN}

可用信道的名称,包括被用来进行测试的呼叫会话号码。

${AVAILORIGCHAN}

被用来创建没有任何会话号码的规范的信道名称。

${AVAILSTATUS}

信道的状态代码。

如果选项s(s代表“state”)被指定,Asterisk将会认为信道不论什么时候被占用的信道都是不可用的,即使它能够承载另一个呼叫。

; check both Zap/1 and Zap/2 to see if they're available
exten => 123,1,ChanIsAvail(Zap/1&Zap/2)
; if we go to priority 2, then one of the channels is available
; in priority 2, we'll dial our number on the available channel
    exten => 123,2,NoOp(${AVAILORIGCHAN})
    exten => 123,3,Dial(${AVAILORIGCHAN}/5551212)                  
; if we go to priority 101, then neither Zap/1 nor Zap/2 is available
    exten => 123,3,Playback(all-circuits-busy-now)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics