<?xml version="1.0" encoding="utf-8"?> <!-- http://wiki.freeswitch.org/wiki/Dialplan_XML --> <include> <context name="default"> <extension name="unloop"> <condition field="${unroll_loops}" expression="^true$"/> <condition field="${sip_looped_call}" expression="^true$"> <action application="deflect" data="${destination_number}"/> </condition> </extension> <!-- Example of doing things based on time of day. --> <extension name="tod_example" continue="true"> <condition field="${strftime(%H%M)}" expression="^((09|1[0-7])[0-5][0-9]|1800)$"> <action application="set" data="open=true"/> </condition> </extension> <extension name="intercept"> <condition field="destination_number" expression="^886$"> <action application="answer"/> <action application="intercept" data="${db(select/last_dial/global)}"/> <action application="sleep" data="2000"/> </condition> </extension> <extension name="intercept-ext"> <condition field="destination_number" expression="^\*\*(\d+)$"> <action application="answer"/> <action application="intercept" data="${db(select/last_dial_ext/$1)}"/> <action application="sleep" data="2000"/> </condition> </extension> <extension name="redial"> <condition field="destination_number" expression="^870$"> <action application="transfer" data="${db(select/last_dial/${caller_id_number})}"/> </condition> </extension> <extension name="global" continue="true"> <condition field="${network_addr}" expression="^$" break="never"> <action application="set" data="use_profile=${cond(${acl($${local_ip_v4} rfc1918)} == true ? nat : default)}"/> <anti-action application="set" data="use_profile=${cond(${acl(${network_addr} rfc1918)} == true ? nat : default)}"/> </condition> <!-- This will setup some variables if the user isn't authenticated. numbering_plan is required for the demo to function properly. --> <condition field="${numbering_plan}" expression="^$" break="never"> <action application="set_user" data="default@${domain}"/> </condition> <condition field="${call_debug}" expression="^true$" break="never"> <action application="info"/> </condition> <condition field="${sip_has_crypto}" expression="^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$" break="never"> <action application="set" data="sip_secure_media=true"/> <!-- Offer SRTP on outbound legs if we have it on inbound. --> <!-- <action application="export" data="sip_secure_media=true"/> --> </condition> <condition> <action application="db" data="insert/spymap/${caller_id_number}/${uuid}"/> <action application="db" data="insert/last_dial/${caller_id_number}/${destination_number}"/> <action application="db" data="insert/last_dial/global/${uuid}"/> </condition> </extension> <extension name="eavesdrop"> <condition field="destination_number" expression="^88(.*)$|^\*0(.*)$"> <action application="answer"/> <action application="eavesdrop" data="${db(select/spymap/$1)}"/> </condition> </extension> <extension name="call_return"> <condition field="destination_number" expression="^\*69$|^869$"> <action application="transfer" data="${db(select/call_return/${caller_id_number})}"/> </condition> </extension> <extension name="del-group"> <condition field="destination_number" expression="^80(\d{2})$"> <action application="answer"/> <action application="group" data="delete:$1:${sofia_contact(${sip_from_user}@${domain})}"/> <action application="gentones" data="%(1000, 0, 320)"/> </condition> </extension> <extension name="add-group"> <condition field="destination_number" expression="^81(\d{2})$"> <action application="answer"/> <action application="group" data="insert:$1:${sofia_contact(${sip_from_user}@${domain})}"/> <action application="gentones" data="%(1000, 0, 640)"/> </condition> </extension> <extension name="call-group-simo"> <condition field="destination_number" expression="^82(\d{2})$"> <action application="bridge" data="${group(call:$1)}"/> </condition> </extension> <extension name="call-group-order"> <condition field="destination_number" expression="^83(\d{2})$"> <action application="set" data="call_timeout=10"/> <action application="bridge" data="${group(call:$1:order)}"/> </condition> </extension> <extension name="extension-intercom"> <!-- <condition field="${sip_to_params}" expression="intercom\=true"/> --> <condition field="destination_number" expression="^8(10[01][0-9])$"> <action application="set" data="dialed_ext=$1"/> <!-- This Alert-Info seems to be a case for Intercom for Polycom which sip_auto_answer=true covers already. --> <!--<action application="export"><![CDATA[alert_info=<sip:$${domain}>;Ring;Answer]]></action>--> <action application="export"><![CDATA[sip_h_Call-Info=<sip:$${domain}>;answer-after=0]]></action> <action application="export" data="sip_invite_params=intercom=true"/> <action application="export" data="sip_auto_answer=true"/> <action application="bridge" data="user/${dialed_ext}@$${domain}"/> </condition> </extension> <!-- if the calling party is the called party, go to their VM if the calling party is NOT the called party dial the extension (1000-1019) for 30 seconds and go to voicemail if the call fails (continue_on_fail=true), otherwise hang up after a successful bridge (hangup_after-bridge=true) --> <extension name="Local_Extension"> <condition field="destination_number" expression="^(10[01][0-9])$"> <action application="set" data="dialed_ext=$1"/> <action application="export" data="dialed_ext=$1"/> </condition> <condition field="destination_number" expression="^${caller_id_number}$"> <action application="set" data="voicemail_authorized=${sip_authorized}"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="voicemail" data="check default $${domain} ${dialed_ext}"/> <anti-action application="bind_meta_app" data="1 a a execute_extension::dx XML features"/> <anti-action application="bind_meta_app" data="2 a a record_session::$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <anti-action application="bind_meta_app" data="3 a a execute_extension::cf XML features"/> <anti-action application="set" data="transfer_ringback=${us-ring}"/> <anti-action application="set" data="call_timeout=30"/> <anti-action application="set" data="sip_exclude_contact=${network_addr}"/> <anti-action application="set" data="hangup_after_bridge=true"/> <!--<anti-action application="set" data="continue_on_fail=NORMAL_TEMPORARY_FAILURE,BUSY,USER_BUSY,NO_ANSWER,TIMEOUT,NO_ROUTE_DESTINATION"/> --> <anti-action application="set" data="continue_on_fail=true"/> <anti-action application="db" data="insert/call_return/${dialed_ext}/${caller_id_number}"/> <anti-action application="db" data="insert/last_dial_ext/${dialed_ext}/${uuid}"/> <anti-action application="bridge" data="user/${dialed_ext}@$${domain}"/> <anti-action application="answer"/> <!--<anti-action application="send_display" data="Voicemail for ${dialed_ext}"/>--> <anti-action application="sleep" data="1000"/> <anti-action application="voicemail" data="default $${domain} ${dialed_ext}"/> </condition> </extension> <!-- dial via SIP uri --> <extension name="sip_uri"> <condition field="destination_number" expression="^sip:(.*)$"> <action application="bridge" data="sofia/${use_profile}/$1"/> </condition> </extension> <!-- start a dynamic conference with the settings of the "default" conference profile in conference.conf.xml --> <extension name="nb_conferences"> <condition field="destination_number" expression="^(30\d{2})$"> <action application="answer"/> <!--<action application="send_display" data="8k Conference $1"/>--> <action application="conference" data="$1@default"/> </condition> </extension> <extension name="wb_conferences"> <condition field="destination_number" expression="^(31\d{2})$"> <action application="answer"/> <!--<action application="send_display" data="16k Conference $1"/>--> <action application="conference" data="$1@wideband"/> </condition> </extension> <extension name="uwb_conferences"> <condition field="destination_number" expression="^(32\d{2})$"> <action application="answer"/> <!--<action application="send_display" data="32k Conference $1"/>--> <action application="conference" data="$1@ultrawideband"/> </condition> </extension> <!-- dial the freeswitch conference via SIP--> <extension name="freeswitch_public_conf_via_sip"> <condition field="destination_number" expression="^9(888|1616)$"> <action application="bridge" data="sofia/${use_profile}/$1@conference.freeswitch.org"/> </condition> </extension> <!-- a sample IVR --> <extension name="ivr_demo"> <condition field="destination_number" expression="5000"> <action application="ivr" data="demo_ivr"/> </condition> </extension> <extension name="rtp_multicast_page"> <condition field="destination_number" expression="^pagegroup$|^7243"> <action application="answer"/> <!--<action application="send_display" data="Multicast Page"/>--> <action application="esf_page_group"/> </condition> </extension> <!-- Parking extensions... transferring calls to 5900 will park them in a queue. --> <extension name="park"> <condition field="destination_number" expression="^5900$"> <action application="set" data="fifo_music=$${moh_uri}"/> <action application="fifo" data="5900@$${domain} in"/> </condition> </extension> <!-- Parking pickup extension. Calling 5901 will pickup the call. --> <extension name="unpark"> <condition field="destination_number" expression="^5901$"> <action application="answer"/> <action application="fifo" data="5900@$${domain} out nowait"/> </condition> </extension> <!-- This extension is used with snom phones. Set a function key to park+lot (lot being a number or name.) Set type to Park+Orbit. You can then park and pickup using the softkey on the phone. Should work with other phones. --> <extension name="park"> <condition field="source" expression="mod_sofia"/> <condition field="destination_number" expression="park\+(\d+)"> <action application="fifo" data="$1@$${domain} in undef $${moh_uri}"/> </condition> </extension> <!-- The extension is parking pickup with a to param of the fifo we are calling Some phones send things like orbit= and you can extract that info. --> <extension name="unpark"> <condition field="source" expression="mod_sofia"/> <condition field="destination_number" expression="^parking$"/> <condition field="${sip_to_params}" expression="fifo\=(\d+)"> <action application="answer"/> <action application="fifo" data="$1@$${domain} out nowait"/> </condition> </extension> <extension name="video_record"> <condition field="destination_number" expression="^9993$"> <action application="answer"/> <action application="record_fsv" data="/tmp/testrecord.fsv"/> </condition> </extension> <extension name="video_playback"> <condition field="destination_number" expression="^9994$"> <action application="answer"/> <action application="play_fsv" data="/tmp/testrecord.fsv"/> </condition> </extension> <extension name="delay_echo"> <condition field="destination_number" expression="^9995$"> <action application="answer"/> <!--<action application="send_display" data="Delay Echo Test (5 sec)"/>--> <action application="delay_echo" data="5000"/> </condition> </extension> <extension name="echo"> <condition field="destination_number" expression="^9996$"> <action application="answer"/> <!--<action application="send_display" data="Echo Test"/>--> <action application="echo"/> </condition> </extension> <extension name="milliwatt"> <condition field="destination_number" expression="^9997$"> <action application="answer"/> <!--<action application="send_display" data="Milliwatt Test"/>--> <action application="playback" data="tone_stream://%(10000,0,1004);loops=-1"/> </condition> </extension> <extension name="tone_stream"> <condition field="destination_number" expression="^9998$"> <action application="answer"/> <action application="playback" data="tone_stream://path=${base_dir}/conf/tetris.ttml;loops=10"/> </condition> </extension> <extension name="hold_music"> <condition field="destination_number" expression="^9999$"/> <condition field="${sip_has_crypto}" expression="^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$"> <action application="answer"/> <action application="execute_extension" data="is_secure XML features"/> <action application="playback" data="$${moh_uri}"/> <anti-action application="answer"/> <!--<anti-action application="send_display" data="Insecure Music On Hold"/>--> <anti-action application="playback" data="$${moh_uri}"/> </condition> </extension> <X-PRE-PROCESS cmd="include" data="extensions/*.xml"/> <!-- <extension name="refer"> <condition field="${sip_refer_to}"> <expression><![CDATA[<sip:${destination_number}@$${domain}>]]></expression> </condition> <condition field="${sip_refer_to}"> <expression><![CDATA[<sip:(.*)@(.*)>]]></expression> <action application="set" data="refer_user=$1"/> <action application="set" data="refer_domain=$2"/> <action application="info"/> <action application="bridge" data="sofia/${use_profile}/${refer_user}@${refer_domain}"/> </condition> </extension> --> <!-- This is an example of how to overide the RURI on an outgoing invite to a registered contact. --> <!-- <extension name="ruri"> <condition field="destination_number" expression="^ruri$"> <action application="bridge" data="sofia/${ruri_profile}/${ruri_user}${regex(${sofia_contact(${ruri_contact})}|^[^\@]+(.*)|%1)}"/> </condition> </extension> <extension name="7004"> <condition field="destination_number" expression="^7004$"> <action application="set" data="ruri_profile=default"/> <action application="set" data="ruri_user=2000"/> <action application="set" data="ruri_contact=1001@$${domain}"/> <action application="execute_extension" data="ruri"/> </condition> </extension> --> <extension name="enum"> <condition field="destination_number" expression="^(.*)$"> <action application="transfer" data="$1 enum"/> </condition> </extension> </context> </include>