




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Asterisk相关知识与应用,相关内容,1.什么是asterisk2.Asterisk安装与启动3.Asterisk结构4.什么是Dialplan5.AGI原理6.Asterisk相关配置文件7.配置Asterisk作为SIPProxy并进行呼叫通话8.配置VoiceMail9.配制简单IVR10.一个基PHP的AGI脚本,实现语音报告当前天气情况.,什么是asterisk,Asterisk是一个开放源代码的软件VoIPPBX系统,它是一个运行在Linux环境下的纯软件实施方案。Asterisk是一种功能非常齐全的应用程序,提供了许多电信功能,能够把你的x86机器变成你自己的交换机,还能够当作一台企业级的商用交换机。Asterisk让人激动的事情是它在小企业预算可承受的范围内提供了商业交换机的功能和可伸缩性。你可以使用一台老式的奔腾3计算机,让你的机构看起来就同世界上的大企业一样。,Asterisk能够支持线路和协议,,Asterisk能够支持传统的线路,包括:TDM(TimeDivisionMultiplexing)T1/E1PRI/PRAastdb包含Asterisk当地数据库信息.sounds/所有声音提示的文件在里面mohmp3/如果配置了音乐保持,应用程序会在这个目录下查找mp3keys/使用公钥和私钥系统认证与一个由RSA数字签名形成的一对等连接.公钥和私钥的扩展名分别为.pub和.key,Asterisk结构,firmware/这个目录含了很多Asterisk相兼容的设备固件,它只有iax/这个子目录,其中有Digium的IAXy的二进制固件镜像.images/只有在较多的支持并且利用图解式的图像设备被发布,这个目录将会与相应的目录有更大的关联.agi-bin/agi-bin包含所有脚本,可以通过许多已经建立的AGI应用程序与Asterisk连接./var/spool/asteriskmeetme/outgoing/gcall/tmp/voicemail/语音留言后的音频数据以邮箱号为子目录存储,DialPlan(拨号方案),DialPlan:DialPlan是Asterisk系统的真正核心,它定义了Asterisk怎样处理呼入和呼出的呼叫。DialPlan的构成:主要有四个部分分别是contexts、extensions、priorities、applications。Contexts:拨号方案(DialPlan)进入部分我我们称为Contexts,每个Contexts有一些extensions(扩展)构成,来实现一系列相关服务。举一个例子如下:default在extensions.conf配制文件中,default上下文是拨号方案默认的进入部分Extensions:Extensions定义了一系列拨号方案的具体步骤,每一个步骤包含一些applications(应用).,DialPlan(拨号方案),Extensions语法用关键字exten,紧跟在后面有一个=符号,如下:Exten=一个完整的extension有三部分组成:aextension名子,可有数字组成.b优先级即每一个步骤执行的先后顺序.C应用,即在呼叫中执行的一具体动作.举一个简单例子:Exten=123,1,Answer(),DialPlan(拨号方案),Priorities:每一个extension有许多步骤,我们称为优先级。每个优先级有一系列数字组成,开始为1。例如:Exten=123,1,Answer()Exten=123,2,Hangup()注意点:当Asterisk将一个呼叫转入一个extension时,它将首先寻找priority值为1的命令。如果没有优先值为1的行,那么这个extension将不会匹配这个拨入的号码。当执行完优先值为1的命令之后,Asterisk将把priority的值增加到2,除非命令本身决定下一个要执行的优先值。如果extension中没有定义下一个priority,Asterisk将完成对这个extension的处理。,DialPlan(拨号方案),Applications:应用是指在当前的通道上执行一系列特定动作,如播放语音,接受呼入,拨打电话,挂机等动作。具体应用有:Answer()指接受通道上一次呼入Playback()播放一个音频文件。HangUP()挂机动作例如:defaultexten=123,1,Answer()exten=123,n,Playback(hello-world)exten=123,n,Hangup()background()播放一个音频文件,但按下了电话键盘上的数字键后会中断语音,主要做交互式动作(IVR)拨号方案,通常用作创建语音菜单.,DialPlan(拨号方案),waitExten()一般和background()一起使用,等待呼叫者按下DTMF数字键.如下:defaultexten=123,1,Answer()exten=123,n,Background(main-menu)exten=123,n,WaitExten()exten=2,1,Playback(digits/2)exten=3,1,Playback(digits/3)exten=4,1,Playback(digits/4),DialPlan(拨号方案),goto功能是发送呼叫到拨号方案中的其它context部分.语法:goto(context,extension,priority)defaultexten=123,1,Answer()exten=123,n,Background(main-menu)exten=1,1,Playback(digits/1)exten=1,n,Goto(default,123,1)exten=2,1,Playback(digits/2)exten=2,n,Goto(default,123,1),DialPlan(拨号方案),处理错误输入和超时的一个例子:defaultexten=123,1,Answer()exten=123,n,Background(enter-ext-of-person)exten=123,n,WaitExten()exten=1,1,Playback(digits/1)exten=1,n,Goto(default,123,1)exten=2,1,Playback(digits/2)exten=2,n,Goto(default123,1)exten=3,1,Playback(digits/3)exten=3,n,Goto(default,123,1)exten=i,1,Playback(pbx-invalid)exten=i,n,Goto(default,123,1)exten=t,1,Playback(vm-goodbye)exten=t,n,Hangup(),DialPlan(拨号方案),dial:它是Asterisk很有价值的一功能,当来电者使用不同的通信方式时,它可以进行转换并进行呼叫连接,如SIP电话到PSTN呼叫语法:Dial(technology/user:passwordremote_host:port/remote_extension)例如:defaultexten=123,1,Answer()exten=123,n,Background(enter-ext-of-person)exten=123,n,WaitExten()exten=1,1,Dial(Zap/1,10)exten=1,n,Playback(vm-nobodyavail)exten=1,n,Hangup()exten=2,1,Dial(SIP/Jane,10)exten=2,n,Playback(vm-nobodyavail)exten=2,n,Hangup()exten=i,1,Playback(pbx-invalid)exten=i,n,Goto(default,123,1)exten=t,1,Playback(vm-goodbye)exten=t,n,Hangup(),AGI原理,AGI即Asteriskgatewayinterface它为外部程序提供了标准的接口来控制Asterisk的dialplan。拨号方案中,可以采用各种语言很方便的通过AGI接口写脚本。脚本和Asterisk之间通过标准的输入输出进行交互标准的输入输出人别为:STDIN:标准输入,外部脚本程序通过标准的输入,从Asterisk接收信息。STDOUT:标准输出,外部脚本程序通过标准的输出,发送命令到Asterisk。STDERR:标准错误输出,外部脚本程序通过标准错误输出调式信息到Asterisk控制台。一般常用编写AGI脚本的语言有Perl,python,php等。,AGI原理,AGI脚本执行语法:exten=extension-number,priority,agi,script-name或exten=extension-number,priority,agi(script-name)如:exten=123,1,Answer()exten=123,2,AGI(agi-test.agi)执行脚本时,分别要满足下面条件:a,脚本必须可执行,chmod+xscript-nameb.脚本放到/var/lib/asterisk/agi-bin目录下当脚本执行时,Asterisk会向脚本发送各种的信息,可以在做其他事情之前通过标准输入获取这些信息,每项数据都是一行,发送完毕Asterisk会发送一个空行,表示结束。如果需要这些数据,就先保存起来,否则不用处理它内容如下:agi_request:agi-test.agiagi_channel:Zap/1-1agi_language:enagi_type:Zapagi_callerid:agi_context:defaultagi_extension:3agi_priority:1,AGI原理,我们可以看下一个Perl写的agi-test.agi部分代码#!/usr/bin/perlusestrict;$|=1;#Setupsomevariablesmy%AGI;my$tests=0;my$fail=0;my$pass=0;while()这段代码是从ASTERISK获取相关信息,并保存到AGI数组中chomp;lastunlesslength($_);if(/agi_(w+):s+(.*)$/)$AGI$1=$2;printSTDERRAGIEnvironmentDump:n;foreachmy$i(sortkeys%AGI)这段代码是把上面获取的信息打印到控制台上。printSTDERR-$i=$AGI$in;,AGI原理,printSTDERR1.Testingsendfile.;printSTREAMFILEhello-worldn;/这段代码是向asterisk发送播放“hello-world”音频my$result=;printSTDERR6.Testingrecord.;printRECORDFILEtestagigsm12343000n;/录制通道内的声音,生成文件,直到接收到DTMF确认结束按键,或者超时时间结束my$result=;当在录音时,用户按了DTMF键“1”“2”“3”:4“或是时间到了3秒,则结束录音。,Asterisk相关配置文件,Asterisk相关配制文件有很多,这里主要介绍三种要用到配制文件分别是Sip.conf配置sip帐号信息文件Extension.conf拨号方案配制文件Voicemail.conf语音邮箱配制文件,配置Asterisk作为SIPProxy,1.配置Asterisk作为SIPProxy,并让X-Lite注册上去,确保能打通电话就要用到Sip.conf,Extension.conf文件。配制分别如下:在sip.conf文件中分别添加如下内容,其中1498和1499是我预设的两个sip号码1498type=friendusername=1498host=dynamiccanreinvite=yesdtmfmode=rfc28331499type=friendusername=1499host=dynamiccanreinvite=yesdtmfmode=rfc2833,配置Asterisk作为SIPProxy,2.在extensions.conf的default段修改成如下:defaultexten=1498,1,dial(sip/1498,10)exten=1499,1,dial(sip/1499,10)exten=_1xxx,2,hangup启动asteriskasterisk-vvvvvvvvvvvvvvvc测试通话:分别两台机器上分别启动一个softphone,配置domain和sipproxy地址为安装asterisk服务器IP地址。电话号码分别为1498和1499。这时我们应该看到这两个phone可以注册到astersik上面了。相互呼叫应该可以成功。,配置VoiceMail,1.配置VoiceMail要用到Voicemail.conf配制文件。首先在Voicemail.conf中创建邮箱:语法为:mailbox=password,name,email,pager_email,optionsMailbox:邮箱号码Password:邮箱密码Name:用户名Email:email地址其它选项可无在Voicemail.conf的default段下添加如下内容:101=123,zhuyangao,zhuyangao102=123,jane,jane拨打电话时,如果无人接听则调用语音邮箱留言,调用命令为:voicemail()打开extension.conf配制文件,修改default如下:exten=1499,1,dial(sip/1499,5)exten=1498,1,dial(sip/1498,5)exten=1499,2,Voicemail(101default)exten=1498,2,Voicemail(102default)exten=1000,1,1,VoiceMailMain()/拨打号码1000,访问语音邮箱exten=_1xxx,3,hangup()保存配制文件后,重启asterisk,注册softphone成功后进行呼叫对方,对方不接则转到语音邮箱留言,配制简单IVR,1.配制IVR,主要修改entension.confsalesexten=s,1,Background(demo-thanks)exten=0,1,Goto,from-sip|100|1exten=1,1,Goto,Menu|s|1Menuexten=s,1,Background(demo-congrats)exten=s,n,WaitExten()exten=1,1,Goto,sales|s|1exten=2,1,Goto,options|s|1exten=i,1,Goto,from-sip|100|1exten=t,1,hangup()from-sipexten=100,1,Answerexten=100,2,Goto,Menu|s|1defaultexten=999,1,Goto,from-sip|100|1用注册成功的软电话拨打999号码,则进到IVR流程。,一个基PHP的AGI脚本,实现语音报告当前天气情况.,脚本名为:agi-weather.agi,内容如下:#!/usr/local/bin/php-q$value)fwrite(STDERR,-$key=$valuen);fflush(STDERR);,一个基PHP的AGI脚本,实现语音报告当前天气情况.,#retrievethiswebpage$weatherPage=file_get_contents($weatherURL);fwrite(STDERR,$weatherPagen);fwrite(STDERR,testtesttestn);fflush(STDERR);#grabtemperatureinFahrenheitif(preg_match(/(0-9+)/i,$weatherPage,$matches)$currentTemp=$matches1;,一个基PHP的AGI脚本,实现语音报告当前天气情况.,#grabwinddirectionif(preg_match(/North/i,$weatherPage)$currentWindDirection=northerly;elseif(preg_match(/South/i,$weatherPage)$currentWindDirection=southerly;elseif(preg_match(/East/i,$weatherPage)$currentWindDirection=easterly;elseif(preg_match(/Southeast/i,$weatherPage)$currentWindDirection=southeasterly;。略,一个基PHP的AGI脚本,实现语音报告当前天气情况.,#grabwindspeedif(preg_match(/(0-9.+)/i,$weatherPage,$matches)$currentWindSpeed=$matches1;,一个基PHP的AGI脚本,实现语音报告当前天气情况.,functioncheckresult($res)trim($res);if(preg_match(/200/,$res)if(!preg_match(/result=(-?d+)/,$res,$matches)fwrite(STDERR,FAIL($res)n);fflush(STDERR);return0;elsefwrite(STDERR,PASS(.$matches1.)n);fflush(STDERR);return$matches1;elsefwrite(STDERR,FAIL(unexpectedresult$res)n);fflush(STDERR);return-1;,一个基PHP的AGI脚本,实现语音报告当前天气情况,#tellthecallerthecurrentconditionsif($currentTemp)fwrite(STDOUT,STREAMFILEbeepn);fflush(STDOUT);$result=trim(fgets(STDIN,4096);checkresult($result);fwrite(STDOUT,STREAMFILEisn);fflush(STDOUT);$result=trim(fgets(STDIN,4096);checkresult($result);fwrite(STDOUT,SAYNUMBER$currentTempn);fflush(STDOUT);$result=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法律法规概述课件
- 新护士说岗前考试试题及答案解析
- 2025年风电项目环境影响评价标准与方法更新报告
- 2025年山东师范大学第二附属中学第二批公开招聘人员(11名)模拟试卷及答案详解(网校专用)
- 幸运咖啡培训试题及答案
- 电镀方面安全培训考试题及答案解析
- 2025年德阳市事业单位公开考试招聘工作人员笔试考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025年智能网联汽车自动驾驶系统技术发展趋势报告
- 2025年咖啡连锁品牌市场布局下的环保材料应用研究报告
- 2025年分布式能源网联化在智慧城市的应用实践研究报告
- 猫咖设计案例解析与方案模板
- 《模拟电子技术(第三版)》全套教学课件
- 子宫破裂护理常规课件
- (2025年)国家能源集团笔试试题(+答案)
- DB34∕T 4010-2021 水利工程外观质量评定规程
- 精神专科护士工作汇报
- 客户设备大修方案(3篇)
- 【01-暑假复习】初高衔接点03 因式分解含答案-2025年新高一数学暑假衔接讲练 (通)
- 2025年国有企业管理岗竞聘笔考试试题库及答案
- 小区禁毒宣传活动方案
- JG/T 455-2014建筑门窗幕墙用钢化玻璃
评论
0/150
提交评论