asterisk系统学习文档_第1页
asterisk系统学习文档_第2页
asterisk系统学习文档_第3页
asterisk系统学习文档_第4页
asterisk系统学习文档_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录ASTERISK系统主要线程 2系统主控线程 2通道主控线程 2维护用户状态线程 3交换线程 3两个codec之间转换时间表 6系统交互命令 7呼叫转移 14呼叫停泊 14语音邮件 15语音会议 17Asterisk主要程序模块功能简述 18ASTERISK系统主要线程Asterisk系统主要是独立线程方式工作的系统,主要的独立线程有:维护注册用户状态的线程-维护各个用户在存在于系统的整个过程中的各个状态各个通道(SIP、IAX等)主控线程-解析自己通道内的请求和响应系统主控线程-完成系统的初始化启动工作,完成后等待用户的输入和用户进行交互交换线程-由各个通道来调用启动,完成两个通道的桥接和语音交换系统主控线程Asterisk系统除了主控程序外,其它功能模块都编译成共享文件*.so类型,都采用预加载或者实时加载的方式进行协调工作,默认情况下系统启动后加载所有的模块,每个模块都有一个load_module()函数,主控找到每个模块并加载,然后调用模块内部的load_module()函数,这个函数完成模块自己对应的参数配置文件(如果有配置文件)数据的加载,并对模块进行初始化工作,初始化完成后,注册自己模块的应用方法和该模块支持的交互命令(这些是一般模块加载的流程,通道模块加载除外),模块内初始化函数调用完成后,系统继续加载下一个模块,直到所有的模块加载完成,系统主控线程等待用户的输入,完成和用户的交互,系统提供很多可以和用户交互的命令,来管理、配置、查询asterisk系统。通道主控线程完成以上普通模块加载步骤后,建立一个该通道的主监控线程,该线程在整个系统运行期间一直运行。每个通道(SIP通道、IAX通道等)都是在系统启动的时候,被加载进系统的,每个通道都是通过独立线程方式工作的,在各自配置的端口上监听等待接收各自通道上的请求和响应,各个通道线程独立运行,每个通道维护一个事件结构,该结构中放的是该通道中需要定时调度的事件(该事件是由该通道在解析数据的过程中,如果遇到需要隔一段时间来运行的程序则写入该结构的,比如,重发事件、销毁事件、期满事件等),每个通道共同调用三个公共的函数,一个是调度等待时间函数,一个是判断IO资源是否有数据发生的函数,一个是调度该通道事件运行的函数,调度等待时间函数每次调用返回的是需要等待调度事件的最短时间,如果没有事件,则返回-1,判断IO资源函数用这个返回时间来挂起资源,判断自己的通道上的数据发生,如果有数据发生就去调用自己注册的数据处理函数去处理请求数据,判断IO资源函数返回后,调用事件运行函数,来判断是否在该时间点有事件需要调度运行,每个通道都是如此往复的调用这三个函数循环运行判断,直到系统运行结束为止。维护用户状态线程这个线程也是独立运行的线程,在系统初始化时就开始运行,由它来维护系统中所有用户在系统整个运行过程中的在线、通话、离线等过程中所有的状态记录,该线程是通过接收信号量的方式工作的,在没有收到给自己的信号量时处于阻塞状态工作,如果某个通道的用户在事务处理的过程中需要改变用户的在线状态时,则由该通道的解析程序给该线程发出一个信号,该线程收到该信号后,更改该用户的状态,然后继续处于阻塞状态。交换线程该线程是由每个通道接收到请求后,由主叫完成自己需要处理的部分后,由主叫通道调用建立的交换线程,本线程首先在dailplan配置里查找用户的拨号应用配置,找到配置后调用相应的应用函数来处理这个拨号,这个应用函数本身要处理该应用的所有流程,比如,定义的是dail应用,那么该应用要处理用户的邀请、通话、到用户挂机的整个流程后,才退出,返回到交换线程主流程中来,这些拨号应用函数在系统加载pbx时,被加载入系统中,由它来分配和调度各个通道的事务功能处理函数,该由那个通道处理就调度那个通道来处理,交换线程本身自是处理通用的流程部分,如果涉及到通道自己的属性部分,那么就由交换线程来调度,比如,如果要向被叫通道发起邀请信令,那么就由交换线程来调用,该被叫通道的邀请函数自己用该通道支持的信令来组织该邀请信息包,然后向被叫客户端发出邀请,发出邀请后返回处理状态,然后由交换线程来等待被叫的应答,如果被叫发出200Ok的应答后,就由交换线程来调用主叫通道的应答函数,来用自己通道的信令来组织一个200OK的消息包,发往主叫客户端,处理完后,交换线程得到用户处理状态,然后由交换线程来决定下一步的处理,然后需要涉及到通道要处理的流程,就继续调度通道函数来处理,具体信令的差异屏蔽在各个通道内部,交换线程只是做公共的流程部分,就算是SIP客户端拨SIP客户端仍然走相同的交换流程,只是由交换线程来调度完成,asterisk的每个事务都要Digest的数字认证,在这里不再赘述这个过程。以下这个通道描述的是SIP通道为主叫的交换线程建立和工作过程:当通道线程接收到邀请请求后,调用一个事先注册在系统中的请求和响应处理程序,该程序首先进行该信令的SIP语法解析语法没有错误后,查找该主叫用户是否是系统的合法用户如果为合法用户则进行SDP协议的解析,识别主叫用户所能支持的codec,并且求出该通道在服务端所能支持的codec(服务端的支持的codec在该通道的配置中定义,在系统加载该通道时加载到系统中的)和主叫用户支持的codec的交集,如果交集为空的,本次邀请失败返回查找主叫用户拨号计划的合法性,并且找到是否有该拨号的DAIL-PLAN(该拨号计划被定义在extensions.conf这个配置文件中,这个配置文件中定义了所有的拨号计划配置,在系统加载交换共享模块时,被初始化到系统中),如果没有找到用户的拨号计划定义,则失败返回如果以上都正确的话,创建一个新的主叫通道资源,然后给主叫用户返回一个“100Trying”的临时响应发送100临时响应后,更改主叫用户的状态,给维护用户状态的线程发出一个更改用户状态的信号,由空闲改为正在使用中,“1>2”然后就开始启动一个该通道的交换线程,启动了交换线程后,处理请求响应函数退出,该通道的主控线程又开始监控自己的端口,剩下的工作交由该线程来处理,通道的线程又开始进入等待读数据状态交换线程开始运行首先进行用户拨号计划的解析,找到用户拨号所对应的应用和所有该拨号对应的属性然后查找该拨号应用所对应处理函数的句柄,比如:Dial所对应的处理函数为dail_exec_full,这些应用处理函数都是在交换共享模块加载的过程中注册到该系统中的找到该拨号应用处理函数后,把参数传递给它,然后调用该应用处理函数,该拨号应用处理函数在处理每个拨号的流程都是一样的,各个处理环节的具体实现由该通道自己来解析处理,只是由它来组织调用该通道注册到系统的一些处理函数,比如每个通道都具有的处理请求函数、发起邀请函数、控制状态发送函数、应答函数等该拨号应用处理函数首先调用被叫通道的请求处理函数,检查拨号是否为系统注册并且是在线的合法用户,如果是合法用户则为本次呼叫建立一个新的会话,并且创建一个新的通道资源处理完后,该拨号应用处理函数继续调用被叫通道邀请处理函数,向被叫用户发起邀请信息,该函数组织SIP邀请信令和SDP协议部分内容,并且向被叫用户发出邀请信息邀请发送成功后,该拨号应用处理函数开始等待被叫用户的响应信息,在这个等待过程中,被叫通道主控线程和该交换线程通过被叫通道内的管道变量通讯(这个管道变量被定义在通道结构中),通过这个管道的读写来获取被叫用户的应答状态(应答状态包括:180RING和200OK),当被叫通道主控收到被叫用户的180响应后,更改被叫用户的状态,“2>6”并且把信息写入自己通道内管道中,写入成功后,这时交换线程的拨号应用处理函数读到用户的180响应后,调用主叫通道的控制状态发送函数,给主叫用户发送一个180的响应,然后拨号应用处理函数继续等待被叫用户的200OK响应,当被叫通道主控收到被叫用户的200OK的响应后,同时由通道主控给被叫用户ACK响应,然后更改被叫用户的状态,“6>2”并且把信息写入被通道的管道中,这时应用处理函数读到被叫用户的200OK响应后,调用主叫通道的应答函数给主叫通道组织发送一个200OK的应答,然后就开始调用桥接函数,来建立两个通道的通话桥接,监控两端的rtp资源,并调用各自通道的rtp读、写函数,由读函数读出本通道的语音数据,返回给写函数,由写函数来把语音数据发给自己的通道,语音的翻译转换工作由读写函数来调用完成,来完成两个通道的语音转换何传输,各个通道的语音读写函数在通道加载的时候,把各个函数的句柄加载入系统,使两个支持不同codec的客户端可以互相正常通话,但是前提是,服务端必须能支持两个客户端的codec。如果任何一方挂机后,通道桥接结束,让后由应用处理函数调用挂机的另一方的通道挂机函数,发送挂机信令,更改两个用户的系统状态,“2

>1”,释放资源,交换进程退出运行,本次交换完成两个codec之间转换时间表以下所列举的的codec是asterisk都支持的codec,表中所列的数字是对应两种codec系统在进行编码转换的时候,需要的时间单位为毫秒,行中列举的是源codec编码,列中列举的是要转换的目的编码:Translationtimesbetweenformats(inmilliseconds)SourceFormat(Rows)DestinationFormat(Columns)g723gsmulawalawg726adpcmslinlpc10g729speexilbcg723-----------gsm--222213--13ulaw-2-12213--13alaw-21-2213--13g726-222-213--13adpcm-2222-13--13slin-11111-2--12lpc10-222221---13g729-----------speex-----------ilbc-3333324---系统交互命令以下列举的是asterisk系统可以支持和用户交互的所有命令,及其命令的解释,在系统启动后,当出现“CLI>”这样的提示时,用户就可以输入一些系统支持的命令,交给系统去解析执行:!ExecuteashellcommandaborthaltCancelarunninghaltaddextensionAddnewextensionintocontextaddignorepatAddnewignorepatternaddqueuememberAddachanneltoaspecifiedqueueaeldebugcontextsEnableAELcontextsdebugaeldebugmacrosEnableAELmacrosdebugaeldebugreadEnableAELreaddebugaeldebugtokensEnableAELtokensdebugaelnodebugDisableAELdebugmessagesaelreloadReloadAELconfigurationagentlogoffSetsanagentofflineagidebugEnableAGIdebuggingaginodebugDisableAGIdebugginganswerAnsweranincomingconsolecallautoanswerSets/displaysautoanswercdrstatusDisplaytheCDRstatusconsoleSets/displaysactiveconsoledatabasedelRemovesdatabasekey/valuedatabasedeltreeRemovesdatabasekeytree/valuesdatabasegetGetsdatabasevaluedatabaseputAdds/updatesdatabasevaluedatabaseshowShowsdatabasecontentsdatabaseshowkeyShowsdatabasecontentsdebugchannelEnabledebuggingonachanneldebuglevelSetglobaldebugleveldialDialanextensionontheconsolednsmgrreloadReloadstheDNSmanagerconfigurationdnsmgrstatusDisplaytheDNSmanagerstatusdontincludeRemoveaspecifiedincludefromcontextdumpagihtmlDumpsalistofagicommandinhtmlformatdundidebugEnableDUNDidebuggingdundiflushFlushDUNDicachedundilookupLookupanumberinDUNDidundinodebugDisableDUNDidebuggingdundinostorehistoryDisableDUNDihistoricrecordsdundiprecachePrecacheanumberinDUNDidundiqueryQueryaDUNDiEIDdundishowentityidDisplayGlobalEntityIDdundishowmappingsShowDUNDimappingsdundishowpeersShowdefinedDUNDipeersdundishowpeerShowinfoonaspecificDUNDipeerdundishowprecacheShowDUNDiprecachedundishowrequestsShowDUNDirequestsdundishowtransShowactiveDUNDitransactionsdundistorehistoryEnableDUNDihistoricrecordsextensionsreloadReloadextensionsand*only*extensionsfeatureshowchannelsShowstatusoffeaturechannelsflashFlashacallontheconsolegroupshowchannelsShowactivechannelswithgroup(s)hangupHangupacallontheconsolehelpDisplayhelplist,orspecifichelponacommandiax2debugEnableIAXdebuggingiax2jbdebugEnableIAXjitterbufferdebuggingiax2nodebugDisableIAXdebuggingiax2nojbdebugDisableIAXjitterbufferdebuggingiax2notrunkdebugDisableIAXtrunkdebuggingiax2provisionProvisionanIAXdeviceiax2prunerealtimePruneacachedrealtimelookupiax2reloadReloadIAXconfigurationiax2setjitterSetsIAXjitterbufferiax2showcacheDisplayIAXcacheddialplaniax2showchannelsShowactiveIAXchannelsiax2showfirmwareShowavailableIAXfirmwaresiax2shownetstatsShowactiveIAXchannelnetstatsiax2showpeerShowdetailsonspecificIAXpeeriax2showpeersShowdefinedIAXpeersiax2showprovisioningShowiaxprovisioningiax2showregistryShowIAXregistrationstatusiax2showstatsDisplayIAXstatisticsiax2showusersShowdefinedIAXusersiax2testlosspctSetIAX2incomingframelosspercentageiax2trunkdebugEnableIAXtrunkdebuggingincludecontextIncludecontextinothercontextindicationaddAddthegivenindicationtothecountryindicationremoveRemovethegivenindicationfromthecountryinitkeysInitializeRSAkeypasscodesloadLoadadynamicmodulebynamelocalshowchannelsShowstatusoflocalchannelsloggerreloadReopensthelogfilesloggerrotateRotatesandreopensthelogfilesloggershowchannelsListconfiguredlogchannelsmeetmeExecuteacommandonaconferenceorconfereemgcpauditendpointAuditspecifiedMGCPendpointmgcpdebugEnableMGCPdebuggingmgcpnodebugDisableMGCPdebuggingmgcpreloadReloadMGCPconfigurationmgcpshowendpointsShowdefinedMGCPendpointsmixmonitorExecuteaMixMonitorcommandmohclassesshowListMOHclassesmohfilesshowListMOHfile-basedclassesmohreloadMusicOnHoldmuteDisablemicinputnodebugchannelDisabledebuggingonachannelodbcconnectConnecttoODBCDSNodbcdisconnectDisconnectfromODBCDSNodbcshowShowODBCDSN(s)pridebugspanEnablesPRIdebuggingonaspanpriintensedebugspanEnablesREALLYINTENSEPRIdebuggingprinodebugspanDisablesPRIdebuggingonaspanprisetdebugfileSendsPRIdebugoutputtothespecifiedfileprishowdebugDisplayscurrentPRIdebugsettingsprishowspanDisplaysPRIInformationpriunsetdebugfileEndsPRIdebugoutputtofilerealtimeloadUsedtoprintoutRealTimevariables.realtimemysqlstatusShowsconnectioninformationfortheMySQLRealTimedriverrealtimeupdateUsedtoupdateRealTimevariables.reloadReloadconfigurationremoveextensionRemoveaspecifiedextensionremoveignorepatRemoveignorepatternfromcontextremovequeuememberRemovesachannelfromaspecifiedqueuerestartgracefullyRestartAsteriskgracefullyrestartnowRestartAsteriskimmediatelyrestartwhenconvenientRestartAsteriskatemptycallvolumertpdebugEnableRTPdebuggingrtpdebugipEnableRTPdebuggingonIPrtpnodebugDisableRTPdebuggingsavedialplanSavedialplansendtextSendtexttotheremotedevicesetdebugSetlevelofdebugchattinesssetverboseSetlevelofverbosenessshowagentsShowstatusofagentsshowagiShowAGIcommandsorspecifichelpshowapplicationsShowsregistereddialplanapplicationsshowapplicationDescribeaspecificdialplanapplicationshowaudiocodecsShowsaudiocodecsshowchannelDisplayinformationonaspecificchannelshowchannelsDisplayinformationonchannelsshowchanneltypesShowavailablechanneltypesshowcodecsShowscodecsshowcodecShowsaspecificcodecshowconferencesShowstatusofconferencesshowconfigmappingsShowConfigmappings(filenamestoconfigengines)showdialplanShowdialplanshowfeaturesListsconfiguredfeaturesshowfileformatsDisplaysfileformatsshowfunctionsShowsregistereddialplanfunctionsshowfunctionDescribeaspecificdialplanfunctionshowhintsShowdialplanhintsshowimagecodecsShowsimagecodecsshowimageformatsDisplaysimageformatsshowindicationsShowalistofallcountry/indicationsshowkeysDisplaysRSAkeyinformationshowlicenseShowthelicense(s)forthiscopyofAsteriskshowmanagercommandShowamanagerinterfacecommandshowmanagercommandsListmanagerinterfacecommandsshowmanagerconnectedShowconnectedmanagerinterfaceusersshowmodulesListmodulesandinfoshowmoduleslikeListmodulesandinfoshowparkedcallsListsparkedcallsshowqueueShowstatusofaspecifiedqueueshowqueuesShowstatusofqueuesshowswitchesShowalternativeswitchesshowtranslationDisplaytranslationmatrixshowuptimeShowuptimeinformationshowversionDisplayversioninfoshowversionfilesShowversionsoffilesusedtobuildAsteriskshowvideocodecsShowsvideocodecsshowvoicemailusersListdefinedvoicemailboxesshowvoicemailzonesListzonemessageformatsshowwarrantyShowthewarranty(ifany)forthiscopyofAsterisksipdebugEnableSIPdebuggingsipdebugipEnableSIPdebuggingonIPsipdebugpeerEnableSIPdebuggingonPeernamesiphistoryEnableSIPhistorysipnodebugDisableSIPdebuggingsipnohistoryDisableSIPhistorysipnotifySendanotifypackettoaSIPpeersipprunerealtimePrunecachedRealtimeobject(s)sipprunerealtimepeerPrunecachedRealtimepeer(s)sipprunerealtimeuserPrunecachedRealtimeuser(s)sipreloadReloadSIPconfigurationsipshowchannelsShowactiveSIPchannelssipshowchannelShowdetailedSIPchannelinfosipshowdomainsListourlocalSIPdomains.sipshowhistoryShowSIPdialoghistorysipshowinuseListallinuse/limitssipshowobjectsShowallSIPobjectallocationssipshowpeerShowdetailsonspecificSIPpeersipshowpeersShowdefinedSIPpeerssipshowregistryShowSIPregistrationstatussipshowsettingsShowSIPglobalsettingssipshowsubscriptionsShowactiveSIPsubscriptionssipshowusersShowdefinedSIPuserssipshowuserShowdetailsonspecificSIPuserskinnydebugEnableSkinnydebuggingskinnynodebugDisableSkinnydebuggingskinnyshowdevicesShowdefinedSkinnydevicesskinnyshowlinesShowdefinedSkinnylinesperdevicesofthangupRequestahanguponagivenchannelstopgracefullyGracefullyshutdownAsteriskstopnowShutdownAsteriskimmediatelystopwhenconvenientShutdownAsteriskatemptycallvolumetransferTransferacalltoadifferentextensionunloadUnloadadynamicmodulebynameunmuteEnablemicinputzapdestroychannelDestroyachannelzapshowcadencesListcadenceszapshowchannelsShowactivezapatachannelszapshowchannelShowinformationonachannelzapshowstatusShowallZaptelcardsstatus呼叫转移在服务端配置实现呼叫转移功能,呼叫转移的配置实在extensions.conf配置文件中,配置用到的应用DIAL应用,且要在拨号参数中配置超时,如果呼叫在超时之前被接听,通道就被桥接,拨号方案完成,如果被叫地没有应答(包括挂机、不在线、呼叫超时),DIAL()会继续到该extension的下一个priority。但是,如果被叫通道忙,DIAL()将转到priorityn+101,如果存在的话,(其中的n是DIAL()被调用的priority),这样我们就能够以不同的方式处理未接听电话了,在测试的过程中,我用未来之路的例子怎么测试都不能转到priorityn+101,都是转到extension的下一个priority,换了另一种方法后,测试可以了,Extensions.conf的测试可以遇忙转移的配置如下:exten=>1497,1,Dial(IAX2/1497,10)exten=>1497,2,Goto(s-${DIALSTATUS},1)exten=>s-CHANUNAVAIL,1,Dial(SIP/1499,10)(遇忙或者被叫挂机的状态)exten=>s-NOANSWER,1,Dial(SIP/1496,10)(被叫呼叫超时的状态)exten=>s-CONGESTION,1,Dial(SIP/1498,10)(被叫不在线的状态)遇忙不能转移的配置:;exten=>1497,1,Dial(IAX2/1497,10);exten=>1497,2,Dial(SIP/1496,10);exten=>1497,3,Hangup;exten=>1497,102,Dial(SIP/1499,10);exten=>1497,103,Hangup呼叫停泊呼叫停泊(callparking)另一个方便的特性叫做“呼叫停泊(callparking)”。呼叫停泊允许你保持一个呼叫一段时间,因此你就能够在另外一个extension下保持通话状态。通话保持的参数是在feature.conf配置文件中的「general]部分控制。「general]一段包含了四个与呼叫停泊有关的设置:Parkext这是等待的extension的标签。一个呼叫传递到这个extension的时候,系统将告诉你呼叫停泊的位置。通过默认设置,等待的extension号是700。Parkos这个选项定义了呼叫停泊的空位数目。例如,设置它从701到720,将创建20个等待位置,编号701到720。Context这是等待上下文(Context)的名字。你必须包含这个上下文才能等待呼叫。Parkingtime如果设置,这个选项控制一个呼叫能等待多长时间。如果呼叫没有在设定时间内连接,extension将把呼叫停泊的这个呼叫回拨。当你编辑过features.conf以后,你必须重新启动Asterisk,因为这个文件只有启动的时候才被读取,执行reload命令将不会读这个文件。也要注意,你应该确认:你正在Dial()应用中使用t或者T的选项。因为使用者需要传递呼叫到呼叫停泊的标签到extension。所以,我们创建一个简单的拨号方案,来演示呼叫停泊,如下:Features.conf配置文件配置内容:[general]parkext=>700parkos=>701-720context=>parkedcallsparkingtime=>45extensions.conf配置文件配置内容:Include=>parkedcallsexten=>103,1,Dial(SIP/1498,,T)为了说明呼叫停泊是如何工作的,举例如下:Alice访问系统,然后拨号103来连接Bob,Bob接收来电,过了一会,Bob传递这个呼叫到700,并告诉他从Alice来的呼叫已经在701处等待。Bob在104呼叫Charlie,并告诉他Alice在701。Charlie拨打extension701,开始和Alice通话。这是一个简单的方法在两个用户之间呼叫停泊的应用。语音邮件在任何现代电话系统之中最流行的特征之一就是语音邮件,实事上,asterisk有一个非常灵活的语音邮件系统。语音邮件配置在配置文件voicemail.conf中配置和定义,这个文件包含语音邮件系统设置的分类,这样就可以客户化配置语音邮件系统到你想要的状态。正像拨号方案上下文可以分别保持你的拨号方案的不同部分一样,语音邮件的上下文允许从一个到另外一个邮箱,这就允许你可以为一个或者几个公司或者办公室在同一个服务器上配置不同的邮件设置,语音邮件的上下文和拨号方案的上下文的定义方法相同。创建邮箱Mailbox=>password,name,emailMailbox邮箱的号码Password这是邮箱主人访问自己的语音邮箱的数字密码,如果使用者改变了她的密码,系统会在voicemail.conf中升级到相应的字段。Name这是邮箱主人的名字。Email这是邮箱所有者的email地址,assterisk能发送语音邮件通知(包括语音邮件消息本身)到特定的邮箱。邮箱实例1498=>1498,huangbing,bb_jinlin@163.com增加语音邮件到拨号方案中我们允许主叫方在他们没有接听电话时候,允许留下信息,为了实现这些,我们将使用VoiceMail()这个应用,这个应用将主叫方呼叫送到特定的邮箱,一次他能留下一个消息,邮箱应该被指定为mailbox@context的形式,在这的context是语音邮箱的上下文,邮箱号码前头可以被加上u或者b,如果是字母b,主叫方将听到邮箱所有者忙音的消息,如果是字母u,主叫方将听到邮箱所有者的用户不可用的消息(如果存在的话):exten=>1497,1,Dial(IAX2/1497,10,r)exten=>1497,2,Voicemail(u1498@default)exten=>1497,3,Hangupexten=>1497,102,Voicemail(b1498@default)exten=>1497,103,Hangup接收语音邮件用户能够检索他们的语音邮件消息,改变他们的语音邮件选项,以及通过使用voicemai1Main()应用记录他们的语音邮件问候语。在它的典型情况中,voicemailMain()以无任何变量形式调用。我们增加extension500到拨号方案的上下文中,为了内部用户能拨打500,根据语音提示输入mailbox号码和进入mailbox的密码,核实输入正确后,用户根据提示按下“1”键可以听留给自己的语音邮件,来访问他们的语音邮件的消息:exten=>500,1,VoicemailMain()语音会议我们使用MeetMe()应用来设置一个语音的会议桥。这个应用允许多个主叫方互相谈话,就像他们在同一个物理地点一样。下面是一些主要的特性:在以前的传统PBX中,这个功能很昂贵。要么你向拨入服务商掏一大笔钱,要么你不得不安装一个昂贵的会议桥到你所有的PBx上去。创建密码保护的会议.会议管理(将电话会场静音、锁定会议、断开某个参与者).允许一个人讲话,其他的人安静的可选项(常常用在公司的会议、广播等情况).创建动态或是静态会议。我们设置一个基本会议室,MeetMe会议系统的配置项是在meetme.conf中。在配置文件内,你来定义会议室和进入会议室的密码。例如,我们设置一个extension为600的会议室。首先,我们将在meetme.conf中设置会议室,称作600。而这次我们没有设置密码:[rooms}Conf=>600现在配置文件完成了,我们需要重启Asterisk让他能重新读取meetme.conf文件。下一步,我们使用meetme()应用,把支持会议室的特性增加到拨号方案中。MeetMe()有三个参数:会议室的名字(定义在meetme.conf)、一组选项设置以及用户加入会议的密码。我们设置一个简单的会议室,房间是600,"i”可选项(通知用户进入和退出会议),密码是54321:eXten=>600,l,MeetMe(600,i,54321)这就是全部。当主叫方进入extension600,密码提示。如果正确输入54321,他们将加入会议。另一个有用的程序是MeetMeCountO,如名所示,这个程序是用来计数一个会议室用户数量的。Extensions.conf配置文件中的配置内容:exten=>601,1,MeetMeCount(600,CONFCOUNT)exten=>601,2,GotoI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论