asterisk diaplan编程

来源:互联网 发布:高仿淘宝网站模板下载 编辑:程序博客网 时间:2024/04/30 07:52

Asterisk Dialplan命令中文翻译http://www.kancaimi.cn/jisuanjiyingyu/ruanjiangongcheng/200912/14-458454.html

网上有个《asterisk app命令中文翻译》,版本比较老,内容更像是软件翻译的。我参考了下,并根据voip-info.org现有新版本做了些修正。由于内容很多名词比较专业,翻译的不够完整,英文实在不好的可以参考一下。

Asterisk Dialplan Commands
常规命令

Authenticate:鉴别用户
VMAuthenticate:根据"voicemail.conf"鉴别用户
Bridge:连接两个专用来话 (1.6+)
ChannelRedirect:重定向现有的通道到拨号计划
Curl:允许接受外部的URLs。并且支持POSTing,不支持CURL。
DUNDiLookup:用DUNDi查寻号码
Log:向日志文件中添加文件 (1.6+)
JabberSend:经过Jabber发送文件消息(Jabber是一个即时通信软件)
Page:Page a mobile device (new in Asterisk v1.2)
SendDTMF:发送专用的DTMF数据
SendImage:发送图像文件
SendText:发送给客户文本消息
SendURL:发送给客户URL用以显示
System:执行系统命令
Transfer:将呼叫方转移到另一个分机
TrySystem:执行系统命令并且总是返回0
Wait:稍等
WaitExte:等待呼叫方拨打一个新的分机
WaitForRing:等待呼叫申请
WaitMusicOnHold:等待,在线拨放音乐(1.6)

话单与计费

ForkCDR:将CDR分成两个独立的实体
NoCDR:确保 asterisk没有把CRD保存为特定的呼叫
ResetCDR:重置CDR数据
SetAccount:设置帐簿号码
SetAMAflags:开通AMA标志开户的渠道
SetCDRUserField:建立CDR用户领域
AppendCDRUserField:给CDR用户附加数据

呼叫管理(hangup, answer, dial, etc)

AMD:侦测自动应答机
Answer:应答一个振铃的通道
Busy:示忙,等待挂断
ChanIsAvail:检测通道可用性
Congestion:显示拥塞等待挂断
Dial:设置一个呼叫连接当前的通道
DISA:直接访问内部系统
Hangup:无条件挂断
RetryDial:一个电话,重试失败,允许可选的分机
Ringing:显示呼叫

呼叫方描述 (ID, Name etc)

CallingPres:更改呼叫方的身份介绍
LookupBlacklist:从黑名单数据库上查询访客的身份 姓名和号码
LookupCIDName:从当地的数据库查询访客的身份和姓名
PrivacyManager:如果没有CallerID过来,要求输入电话号码
SetCallerID:建立CallerID,发生矛盾服从CallerID
SetCallerPres:建立访客资料的独立信道
SetCIDName:建立呼叫者身份 姓名,发生矛盾服从CallerID
SetCIDNum:只建立访客的身份号码(没有姓名),发生矛盾服从CallerID
SoftHangup:请求挂断转到另一个信道
Zapateller:拥SIT阻止远程商人

ADSI

ADSIProg:将Asterisk ADSI脚本加载到电话
GetCPEID:获得ADSI CPE ID

数据库操作

DBdel:从数据库中删除一个键
DBdeltree:从数据库中删除一批数据
DBget:从数据库中取出数值. 发生矛盾服从DB.
DBput:在数据库中储存一个数值. 发生矛盾服从DB.
MYSQL:执行不同的 mySQL 数据库行为
RealTime:使用实时数据库资料填充变量
RealTimeUpdate:使用实时数据库更新字段

应用程序整合

AGI:执行一套AGI应用程序
DeadAGI:在中断的信道上执行AGI
EAGI:在音频通道上执行一套 AGI 适应程序
EnumLookup:在 ENUM 中查找号码
ExternalIVR:执行扩展IVR引擎
Jack:Interface to JACK audio for audio manipulation (1.6+)
Macro:执行宏
MacroExclusive:同一时间只有一个通道可呼叫这个宏,所有其他人只能等待(1.4)
MacroExit:退出的宏,就像它已全部完成 (1.4)
NoOp:不进行操作,可将数值打印到控制台进行调试
Perl:res perl 是Apache 的 mod_perl, 只适用于 Asterisk
PHP:res_php 不需要就可将PHP与进行一体化处理
Read:读有效的DTMF变量
TXTCIDName:从 TXT 记录中查找访客的姓名
UserEvent:发送专用事件给管理接口

 
控制流与超时设定

AbsoluteTimeout:设置最长呼叫时间
DigitTimeout:设置数字间的最长时间间隔
Gosub:跳到一个子程序并且返回 (new in v1.2)
GosubIf:有条件的跳到一个子程序并且返回 (new in v1.2)
Goto:跳转到特定的priority, extension, 或context(专用名词)
GotoIf:带条件判断的Goto
GotoIfTime:带时间条件判断的Goto
Random:在拨号栏中随机跳动
ResponseTimeout:设置等候回应的最长时间
Return:从Gosub或GosubIf返回(new in v1.2)
StackPop:删除返回地址,但没有返回(new in v1.2)
While:开始一个当循环- *1.2beta
EndWhile:结束一个当循环 - *1.2beta
ExecIf:条件执行 - *1.2beta
ExitWhile:退出循环
 
字符串与变化处理

ImportVar:变量赋值
Math:进行简单的计算
SetGlobalVar:赋数值变量
Set:设置通道变量和功能值
SetVar:赋数值变量(如果不允许,使用 Set)
DBRewrite:执行的Perl兼容正则表达式和替代了一个MySQL数据库。
DumpChan:清除有关这个通道的呼叫信息

语音:放音

Background:在等待分机的时候播放声音文件
BackgroundDetect:通话检测背景音文件
ControlPlayback:用快进,重绕和退出当前命令控制器播放声音文件
DateTime:报出日期/和时间(已经废了)
Echo:重复声音回复到用户端
Festival:使用Festival语音合成器(Festival是一个开源的TTS)朗诵课文
Milliwatt:在0分贝产生持续的1000赫兹的音调
MP3Player:播放MP3声音文件
MusicOnHold:无限期地播放音乐
Playback:播放一个声音文件
Playtones:当执行其它命令的时候播放声音列表
SayUnixTime:报出日期/和时间
SayAlpha:报出字母
SayDigits:报出阿拉伯数字
SayNumber:报出号码
SayPhonetic:报出语音
SetMusicOnHold:在控制系统上设置默认的音乐
SetLanguage:为录音重放设置语言转换
StopPlaytones:停止播放音调列表

语音:录音和监测

ALSAMonitor:监测ALSA控制台
ChangeMonitor:转换监测的路线文件名
ChanSpy:通用的通道插话
Dictate:录音和回放
MixMonitor:记录和混合呼叫语音(不同于监视器)v1.2.x
Monitor:录音电话会话到声音文件
Record:通话录音保存到语音文件
StopMonitor:停止监测路线
StopMixMonitor:停止监视通道监测MixMonitor

 
SIP 命令

SIPdtmfMode:在SIP呼叫过程中转换DTMF模式
SIP_HEADER():挑选SIP invite消息的任何header(取代了SIPGetHeader )
SIPAddHeader:填标题到外部的SIP邀请
 
DAHDI(过去的ZAP)命令

Flash:刷新到Zap中继
DAHDIBarge:Barge in DAHDI 通道(原来的ZapBarge)
ZapCD:ISDN call deflection (bristuff)
BristuffZapEC:Echo cancellation on/off (bristuff)
DAHDISendKeypadFacility:Send digits out of band over a PRI
DAHDIRAS:提供ISDN数据服务 (原来的ZapRAS)
DAHDIScan:扫描DAHDI通道到监控呼叫(原来的ZapScan)

语音邮件和会议

Directory:规定语音邮件扩展目录
HasNewVoicemail:有条件的分支到优先权+101
MailboxExists:检查邮箱是否存在
MeetMe:简单的 MeetMe 会议桥
MeetMeAdmin:MeetMe 会议管理
MeetMeCount:MeetMe参与者统计
MiniVM:Mini-Voicemail (new in v1.6)
VoiceMail:语音留言
VoiceMailMain:进入语音系统
VMAuthenticate:基于语音邮箱鉴别用户

呼叫队列和ACD操纵

AddQueueMember:动态添加排队成员
AgentCallbackLogin:呼叫座席回叫注册
AgentLogin:呼叫座席注册
AgentMonitorOutgoing:记录座席的对外呼叫
ParkAndAnnounce:驻留通告
PauseQueueMemeber:暂停一个座席
ParkedCall:回复被停放的呼叫
Queue:排队等代呼叫
RemoveQueueMember:动态移除列队成员
UnpauseQueueMemeber:恢复一个座席

警报监测/中心站

AlarmReceiver:仿效一个Ademco 连接ID的警报接受站

业余广播/转发连接

Rpt:支持业余无线电广播和商业化的两种转发器连接

外部应用(非Digium的CVS里)

Asterisk app_dbodc:用unixODBC进行拨号方案修正
DynExtenDB:数据库中的存储扩充
Iconv:字符转换设置
app Prepaid:为Postgres 所设计的
PPPD:邮件后台程序连接器

Bristuff & zaphfc applications

PickUp:大多数路线是独立的;是bristuff片的一部分
PickUpChan:接收指定路线
BristuffPickupSIPuri
PickDown:挂断长途电话
Steal:接受中转电话
Devstate:产生一种安装设备驱动程序状态来改变事件(忙,打电话…)
Segfault:用 segfault 撞击Asterisk
ZapEC:对于Zap能或者不能的回波消除
Autoanswer:在指定范围内自动回话
AutoanswerLogin:登陆到自动回话应用程序

ISDN应用

ISDN重叠拨号

Sirrix通道的应用

SrxEchoCan:不能/能回波消除
SrxDeflect:偏转进入的电话
SrxMWI:在Sirrix组上 设置/重新设置信息等待指示(MWI)

2.Asterisk 拨号方案(dialplan)命令手册http://www.asteriskcn.com/index.php?q=content/asterisk-%E6%8B%A8%E5%8F%B7%E6%96%B9%E6%A1%88dialplan%E5%91%BD%E4%BB%A4%E6%89%8B%E5%86%8C

3.一个演示Asterisk dialplan全部功能的不完全例子http://www.51asterisk.com/read.php?tid=664

传统PBX中,一个extension对应一个分机、接口、菜单等,在Asterisk中一个extension对应一系列 Applications,extension中的每一步叫Priority。各个Priority一般是按顺序执行的,直到呼叫挂断、或某个 Priority对应的Application返回-1、或呼叫被路由到下一个extension。extension中的每一步定义如下:
exten => ,,, [()]

示例1: 复制代码
exten => 100,1,Wait(1)
exten => 100,2,Answer
exten => 100,3,Playback(demo-congrats)
exten => 100,4,Hangup


这个extension对应四步。当客户电话被转到这个extension上,先等一秒,然后应答,并给客户放一段录音(录音文件名就是demo-congrats),最后挂断。如果客户提前挂断,处理也算结束了。
示例2: 复制代码
exten => 100,1,Dial(Zap/1,20)
exten => 100,2,Voicemail(u100)
exten => 100,102,Voicemail(b100)


当客户电话被转到100上,Asterisk会试图拨通Zap/1通道,如果超过20秒没有拨通,就转到Priority为102(n+101,不知道为什么是101?)的哪一步,提示客户对方正忙请留言。如果拨通了,但对方没有应答,就继续执行第二步,提示客户对方不在请留言。

示例3: 复制代码
exten => 100/2565551212,1,Congestion
exten => 100,1,Dial(Zap/1,20)
exten => 100,2,Voicemail(u100)
exten => 100,102,Voicemail(b100)


在前一个示例的基础上,增加了一行,说明如果是2565551212这个号码的呼叫到达100,就提示忙音,可用来做主叫路由,又如:

示例4: 复制代码
exten => 100/,1,Zapateller
exten => 100,1,Wait(0)
exten => 100,2,Dial(Zap/1)


如果主叫为空,就运行Zapateller,否则拨通Zap/1。

示例5: 复制代码
exten => 0,1,Dial(Zap/1,15)
exten => 0,2,Dial(Zap/1&Zap/2&Zap/3,15)
exten => 0,3,Playback(companymailbox)
exten => 0,4,Voicemail(100)
exten => 0,5,Hangup


客户拨0之后,Asterisk先试图拨通Zap/1,如果超过15秒不通就拨Zap/2和Zap/3,如果还是超时不通,就给客户放录音,并转到语音信箱,可用来做ACD。

示例6: 复制代码
[sales]
exten => s,1,Background(welcome-sales)
exten => 1,1,Goto(default,100,1)
exten => 2,1,Goto(default,101,1)
[mainmenu]
exten => s,1,Background(welcome-mainmenu)
exten => 1,1,Goto(sales,s,1)
exten => 2,1,Dial,Zap/2
exten => 9,1,Directory(default)
exten => 0,1,Dial,Zap/3


不同extension contexts之间的跳转,用"Goto"。

示例7: 复制代码
[globals]
MARK => Zap/1
GREG => Zap/2&SIP/pingtel
WIL => Zap/3
JUDY => Zap/4
[mainmenu]
exten => 1,1,Dial(${GREG}&${MARK})
exten => 2,1,Dial(${WIL}&${JUDY})
exten => 3,1,Dial(${JUDY}&${MARK})


Asterisk支持变量,自定义的全局变量放在globals段中,引用时通过"${变量名}",Asterisk定义了一些内部变量也可以使用,如下:
引用
${CONTEXT} 当前extension contexts
${EXTEN} 当前extension
${EXTEN:x} 当前extension,截掉前x个数字
${PRIORITY} 当前priority
${CALLERID} 当前客户ID(名字和号码)
${CALLERIDNUM} 当前客户号码
${CALLERIDNAME} 当前客户名字
${RDNIS} 当前redirecting DNIS

extension contexts之间的include关系,定义格式如下:
include => [||||]

context 被include的context
hours include关系有效的时间范围,格式如:9:00-17:00
weekdays 按周算include关系有效的日期,格式如:mon-fri
monthdays 按月算include关系有效的日期,格式如:22-25
months include关系有效的月份,格式如:jan

通过extension contexts之间的include关系,可以很方面的实现白天、夜间或假日的方案,如: 复制代码
[newyears]
exten => s,1,Playback(happy-new-years)
[daytime]
exten => s,1,Dial(Zap/1,20)
[nighttime]
exten => s,1,Playback(after-hours-msg)
[default]
include => newyears||||1|jan
include => daytime|9:00-17:00|mon-fri
include => nighttime


如果是一月一日,就播放录音祝客户新年快乐。如果是工作时间(星期一到星期五的早9点到下午5点)拨通Zap/1,否则提示客户已下班。

extension(可以看着一个号码)中可用的通配符:
X Any digit from 0-9
N Any digit from 2-9
[14-6] Any a 1,4, 5, or 6
. Matches anything

示例8: 复制代码
[directdial]
ignorepat => 9
exten => 9,1,Dial(Zap/g2/)
exten => 9,2,Congestion
[international]
ignorepat => 9
exten => _9011.,1,Dial(Zap/g2/${EXTEN:1})
exten => _9011.,2,Congestion
include => longdistance
[longdistance]
ignorepat => 9
exten => _91NXXNXXXXXX,1,Dial(Zap/g2/${EXTEN:1})
exten => _91NXXNXXXXXX,2,Congestion
include => local
[local]
ignorepat => 9
exten => _9NXXXXXX,1,Dial(Zap/g2/${EXTEN:1})
exten => _9NXXXXXX,2,Congestion
include => default


这是一个外拨方案,包含四个extension contexts。ignorepat 告诉Asterisk驱动层当客户拨9保留拨号音,这样客户拨完9会继续听到拨号音。local告诉Asterisk可以通过拨9出外线打7位数的本地电话,longdistance告诉Asterisk可以通过拨9出外线打的长途电话只能是1开头,international告诉Asterisk可以通过拨9出外线,可以通过拨打任意国际长途,directdial表明按9可以找到出外线的中继。

如果多个extension 定义的步骤一致,就可以通过Macro来实现它们的定义,如: 复制代码
[macro-oneline]
;
; Standard one-line phone.
;
; ${ARG1} - Device to use
;
exten => s,1,Dial(${ARG1},20)
exten => s,2,Voicemail(u${MACRO_EXTEN})
exten => s,3,Hangup
exten => s,102,Voicemail(b${MACRO_EXTEN})
exten => s,103,Hangup
[macro-twoline]
;
; Standard two-line phone.
;
; ${ARG1} - First phone
; ${ARG2} - Second phone
;
exten => s,1,Dial(${ARG1},20)
exten => s,2,Voicemail(u${MACRO_EXTEN})
exten => s,102,Dial(${ARG2},20)
exten => s,103,Voicemail(b${MACRO_EXTEN})
[default]
exten => 1000,1,Macro(oneline,Zap/1)
exten => 1001,1,Macro(oneline,SIP/1001)
exten => 1002,1,Macro(twoline,Zap/3,Zap/4)


这里用到了Asterisk定义的内部变量,如下:
${MACRO_EXTEN} The extension calling the macro
${MACRO_CONTEXT} The extension context calling the macro
${MACRO_PRIORITY} The active priority when the macro was called
${MACRO_OFFSET} If set, causes the macro to attempt to return to n + ${MACRO_OFFSET}
${ARGn} The nth argument passed to the macro.

Powered by Zoundry Raven

原创粉丝点击