创建如下Dialplan,这个例子来自FreeSWITCH的Wiki <extension name="blacklist_check"> <condition field=" <action (9196) =~ /^9196$/ break=on-false |--- <em>Dialplan</em>: Processing recursive conditions level:1 [echo_recur _1] require-nested=TRUE |--- <em>Dialplan</em>: sofia/internal/1004@192.168.7.6 Regex (FAIL) [echo_recur_1] $ : Processing recursive conditions level:1 [echo_recur_1] require-nested=TRUE |--- <em>Dialplan</em>: sofia/internal : sofia/internal/1000@192.168.7.6 Action answer() |--- <em>Dialplan</em>: sofia/internal/1000@192.168.7.6 Action
我们先从dialplan目录开始看。dialplan也简单了。 我们继续看,dialplan/public目录下也只有一个文件: 内容如下: <extension name="public_extensions"> <condition field="destination_number <action application="transfer" data="$1 XML default"/> </condition> </extension> 就是说,所有到达public dialplan 的呼叫,如果被叫号码是1000~1019的话,就转到default Dialplan进行处理。 好吧,我们看 dialplan/default目录。该目录下现在有0000_ ~ 0023_ 开头的一系列XML。 大体结构我们清楚了,今天就到这里,下次我们接着说。
bind_digit_action中引入了realm的概念来绑定各种按键动作,这个类似于dialplan中的context概念(在收到呼叫后,根据呼叫所在的context来分配呼叫路由)。 digits|~regex>\,<string>[,<value>][,<dtmf target leg>][,<event target leg>]"/> 需要参数如下 realm — 没有具体含义,类似dialplan digits — 所要匹配的按键 OR ~regex — 所要匹配的正则表达式 string — 收到按键匹配后,所要执行的Dialplan或者API, 例如: exec:\<dialplan app\ start_recording,*0,exec:execute_extension,rstart XML default,self,peer,当aleg按下*0的时候,会触发bleg重新unting dialplan 在dialplan的default.xml的开头添加上述配置,然后执行fs_cli -x 'reloadxml'使之生效,接着1001拨打1002,1001按*0会看到/tmp下产生caller.wav
FreeSWITCH的视频录像功能非常简单,在dialplan/default/0004_record_video.xml中我们可以看到: <extension name="record_video"> "/> <action application="record" data="/tmp/record_video.mp4"/> </condition> </extension> 从上述Dialplan 当然,下面的Dialplan就是播放刚刚录制的视频。
> originate loopback/dtmf &lua(dtmf.lua) 其中,loopback/ 后面的dtmf是被叫号码,当一个Channel产生后,该Channel的一端(一头)会进入Dialplan 关于loopback我们就不多解释了,我们只需要知道它在查找Dialplan时需要在Dialplan中让它能找到,因而,我们在默认的Dialplan(default.xml)中加入以下内容: <extension data=""/> <action application="playback" data="/tmp/dtmf.wav"/> </condition> </extension> 上述Dialplan
App 简介 transfer [-bleg|-both] <exten> [<dialplan> <context>] transfer是一个dialplan application,在mod_dptools 功能是将当前的通话channel重新转入dialplan去匹配新的extension,并可修改目标dialplan的类型(XML/LUA/INLINE)和用户的context。 这种转移是对于FreeSWITCH来说的,另一个比较准确的表达叫做dialplan-jump。 使用例子 让我们以安装FreeSWITCH后的默认dialplan来看看transfer App的用法。 transfer到其他用户 <! transfer到其他dialplan或context <!
今天,我们来看dialplan/default/0000_local_extensioins.xml。 这一段dialplan跟我们在《FreeSWITCH权威指南》中的Loacal_Extensions类似,只不过简化了许多,而且,增加了一点点视频配置。 由于在上面的Dialplan中我们通过hold_music使用该流,所以,当且仅当通话的双方有一方按下话机上的HOLD按键进入HOLD状态时,对方才能看到「流」里的视频。 想不想试一把?
fs.write(fileContent.getBytes()); fs.flush(); fs.close(); } } 二、调整\FreeSWITCH\conf\dialplan 答案就在dialplan\default.xml这个文件里: 1 <extension name="Local_Extension"> 2 <! 三、调整\FreeSWITCH\conf\dialplan\public.xml 1 <extension name="public_extensions"> 2 <!
再说App: App是Application的缩写,通常会在Dialplan里见到,如 <action application="answer"/> 其中,answer就是一个 App,它用于对来话进行应答 这是一条测试日志"/> <action application="playback" data="/tmp/test.wav/> 常用的App是在mod_dptools中实现的,dptools即<em>Dialplan</em> wiki.freeswitch.org/wiki/Mod_dptools 所有的App都是与Channel相关的,它作为通话中的一方与另一方交互,所以,如果你打一个电话到FreeSWITCH,如呼叫9196,它就在<em>Dialplan</em>
dptools是Dialplan Tools的简写。也就是说,这些App大部分是在Dialplan中用的。 除App外,该模块还实现了一些Endpoint、Dialplan、API、File、Chat等Interface。
可以看到ivr的动作主要是在entry项里配置完成的,在上述例子中,第一个entry里配置了按键0,通过menu-exec-app执行一个FreeSWITCH的App(transfer),再次通过Dialplan 配置完成后就可以在控制台上进行如下测试(呼叫1001,接听后进入ivr菜单): freeswitch> originate user/1001 &ivr(welcome) 测试成功后,你就可以配置Dialplan 把并户来话转接到菜单了,在Dialplan中加入一个extension(请注意,你需要加到正确的Dialplan Context中,如果不确定应该加到哪个Context中的话,在default和public transfer_on_failure:可选参数,按键失败之后执行的动作,语法是extension-name [dialplan-id [context]],比如1000 XML default 需要注意的一点是在 Lua中使用playAndGetDigits和在XML Dialplan中使用play_and_get_digits功能一样,只是参数稍有不同,前者参数digit_regex在variable_name
通过该模块,可以使用Javascrip控制呼叫流程,如,你可以使用如下Dialplan将电话交给一个Javascript脚本处理: <action application=“javascript 是的,它等于以下Dialplan: <action application=“answer””/> <action application=“sleep” data=“1000”/> action application=“playback” data=“/tmp/hello-js.wav”/> <action application=“hangup”/> 但是,大家都知道,在Dialplan
<param name="sip-trace" value="true"/> </gateway> </include> (2)配置拨码计划 在 \conf\dialplan (2)在 \conf\dialplan\default.xml中添加如下内容, <extension name="group_dial_seq"> <condition field="destination_number 如下所示: 在 \conf\<em>dialplan</em>\default.xml中,修改 如下 语句 -: <extension name="Local_Extension"><condition field=" 实现上述功能的配置文件在 \conf\<em>dialplan</em>\default.xml 中,如下所示: [录像] <extension name="video_record"> <condition field 实现: (1)建立一个文件夹 freeswitch/recordings/archive/ ,用来存储录音文件; (2)修改拨码计划,打开 \conf\dialplan\default.xml 找到下面的语句
//不能用1T或者1312*,show dialplan 1 number 13124012222不能匹配 translate-outgoing called 1 session target ipv4 //不能用011T或者011*,show dialplan 1 number 011442030013333不能匹配 session target ipv4:200.0.0.254 ! ..... 312.......才是控制拨入后转换的关键语句,如果没有,主叫方显示“UNKNOWN NUMBER”,虽然test voice translation-rule被叫发送正确或者show dialplan
dialplan/default/0001_vmain.xml中,定义了VoiceMail的检查方法。当呼叫vmain或*98时,就可以进行检查。 ="sleep" data="1000"/> <action application="voicemail" data="check default ${domain_name}"/> 上述dialplan 当然,FreeSWITCH现在支持视频了,在dialplan/default/0002_leave_videomail.xml中,我们看到有如下配置: <condition field="destination_number
github.com/fiorix/go-eventsocket/eventsocket" ) const dest = "sofia/internal/1000%127.0.0.1" const dialplan log.Fatal(err) } c.Send("events json ALL") c.Send(fmt.Sprintf("bgapi originate %s %s", dest, dialplan { c.Send("exit") } } } } 要让FreeSWITCH使用Outbound模式,需要在FreeSWITCH的配置文件中设置相应的拨号计划(Dialplan FreeSWITCH的拨号计划的配置文件位于FreeSWITCH的conf/dialplan目录下,文件名为default.xml。
从下列Dialplan可以看出,它使用conference App将来话送入一个会议: <extension name="nb_conferences"> <condition field
为进行测试,我在一台远端的FreeSWITCH服务器上使用如下Dialplan做了一个Echo服务: <extension name=“public_dialplan_echo">
测试机B: 仅做录音,在dialplan/public.xml中写入以下配置 ? 测试机C: 用于应答并循环播放,在dialplan/public.xml添加以下配置: ?
修改配置 extensions.conf 修改etc/asterisk/extensions.conf配置dialplan: [from-internal] exten = 9196,1,Answer () same = n,Wait(1) same = n,Playback(hello-world) same = n,Hangup() 配置了被叫为9196的dialplan,应答后等待1s,然后放音