
<include> <gateway name="sipgate"> <param name="username" value="<  >"/> <param name="proxy" value="10.10.10.10"/> <param name="register" value="false"/> <param name="caller-id-in-from" value="true"/> </gateway> </include>  <section name="languages" description="Language Management"> <!-- <X-PRE-PROCESS cmd="include" data="lang/en/*.xml"/>--> <X-PRE-PROCESS cmd="include" data="lang/ru/*.xml"/> </section>  <include> <context name="public"> <extension name="unloop"> <condition field="${unroll_loops}" expression="^true$"/> <condition field="${sip_looped_call}" expression="^true$"> <action application="deflect" data="${destination_number}"/> </condition> </extension> <X-PRE-PROCESS cmd="include" data="public/*.xml"/> </context> </include>  <include> <extension name="voip_platform_pub_step1"> <condition field="destination_number" expression="^(555555)$"> <!--          --> <action application="log" data="INFO pub/1 RAD_AUTH STEP1"/> <action application="set" data="process_cdr=b_only"/><!--   Stop accounting    , ..      ,    Start  -    ... --> <action inline="true" application="set" data="pin_auth_count=0"/><!--     ,        -   --> <!--     radius  --> <action inline="true" application="set" data="CALLID=${uuid}"/> <action inline="true" application="set" data="CALLINGNUMBER=${caller_id_number}"/> <action inline="true" application="set" data="USERNAME=${caller_id_number}"/> <action inline="true" application="set" data="STEP=fs1"/><!--      (     ) --> <action application="auth_function" data="in ${CALLEDNUMBER}, in ${USERNAME}, in ${PASSWD}, out AUTH_RESULT"/><!--    radius,    ../../autoload_configs/rad_auth.conf.xml --> <action application="log" data="INFO pub/1 AUTH_RESULT=${AUTH_RESULT}: credit_amount=${credit_amount}; return_code=${return_code}"/> <action application="set" data="domain_name=$${domain}"/> <action application="transfer" data="10 XML voip"/><!--         --> </condition> </extension> </include>  <configuration name="rad_auth.conf" description="radius authentification module"> <settings> </settings> <client> <param name="authserver" value="10.20.20.20:1812:radiussecret"/> <param name="dictionary" value="/usr/local/etc/radiusclient/dictionary.all"/> <param name="seqfile" value="/var/run/radius.seq"/> <param name="mapfile" value="/usr/local/etc/radiusclient/port-id-map"/> <param name="default_realm" value=""/> <param name="radius_timeout" value="3"/> <param name="radius_retries" value="2"/> <param name="radius_deadtime" value="0"/> <param name="bindaddr" value="*"/> </client> <vsas> <!--name= , id=   dictionary, value=    , pec=  dictionary, expr=       , direction=  --> <param name="Acct-Session-Id" id="44" value="CALLID" pec="0" expr="1" direction="in"/> <param name="Freeswitch-Ani" id="8" value="CALLINGNUMBER" pec="27880" expr="1" direction="in"/> <param name="Freeswitch-Dst" id="5" value="CALLEDNUMBER" pec="27880" expr="1" direction="in"/> <param name="NAS-Port-Type" id="61" value="0" pec="0" expr="0" direction="in"/> <param name="Connect-Info" id="77" value="STEP" pec="0" expr="1" direction="in"/> <param name="CREDIT_AMOUNT" id="101" value="credit_amount" pec="9" expr="0" direction="out"/> <param name="CREDIT_TIME" id="102" value="credit_time" pec="9" expr="0" direction="out"/> <param name="RADIUS_RETURN_CODE" id="103" value="return_code" pec="9" expr="0" direction="out"/> </vsas> </configuration>  <?xml version="1.0" encoding="utf-8"?> <include> <context name="voip"> <extension name="unloop"> <condition field="${unroll_loops}" expression="^true$"/> <condition field="${sip_looped_call}" expression="^true$"> <action application="deflect" data="${destination_number}"/> </condition> </extension> <extension name="voip_10"> <condition field="destination_number" expression="^10$" break="on-false"/> <condition field="${AUTH_RESULT}" expression="^OK$" break="on-true"> <!--   IVR   dtmf  --> <action application="log" data="INFO voip_10 AUTH_RESULT=${AUTH_RESULT} => Read DTMF"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="play_and_get_digits" data="6 20 5 30000 # phrase:voip_get_digits voicemail/vm-fail_auth.wav digits ^\**(\d{6}|\d{10,20})\**$ 5000"/><!-- <min> <max> <tries> <timeout> <terminators> <file> <invalid_file> <var_name> <regexp> <digit_timeout> --> <action application="transfer" data="20 XML voip"/> </condition> <condition field="${return_code}" expression="^h323-return-code=6$" break="on-true"> <!--      =>      --> <action application="log" data="INFO voip_10 RETURN_CODE = 6 => Closed account"/> <action application="answer"/> <action application="sleep" data="1000"/> <!--TODO!!!      --> <action application="playback" data="voicemail/vm-not_available.wav"/> <action application="hangup" data="NORMAL_CLEARING"/> </condition> <!--TODO!!!     --> <condition field="${pin_auth_count}" expression="^0$" break="on-true"><!--        --> <!--         ,  PIN --> <action inline="true" application="set" data="pin_auth_count=1"/> <action application="log" data="INFO voip_10 RETURN_CODE = OTHER"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="play_and_get_digits" data="10 10 5 30000 # phrase:voip_get_pin conference/conf-bad-pin.wav pin ^(\d{10})$ 5000"/><!-- <min> <max> <tries> <timeout> <terminators> <file> <invalid_file> <var_name> <regexp> <digit_timeout> --> <action application="transfer" data="15 XML voip"/> </condition> <condition> <!--      ,        ,       PIN-,     PIN-     --> <action application="log" data="INFO voip_10 Prevent second PIN authentification"/> <action application="answer"/> <action application="sleep" data="1000"/> <!--TODO!!!         --> <action application="playback" data="voicemail/vm-not_available.wav"/> <action application="hangup" data="NORMAL_CLEARING"/> </condition> </extension> <extension name="voip_15"> <condition field="destination_number" expression="^15$"/> <condition field="${pin}" expression="^(\d{6})(\d{4})$"> <!--      PIN- --> <action application="log" data="INFO voip_15 pin=($1+$2) => RAD_AUTH STEP1/PIN"/> <action inline="true" application="set" data="CALLINGNUMBER=${caller_id_number}"/> <action inline="true" application="set" data="USERNAME=$1"/> <action inline="true" application="set" data="PASSWD=$2"/> <action inline="true" application="set" data="STEP=fs1pin"/> <action application="log" data="INFO voip_15 CALLID=${CALLID}; CALLINGNUMBER=${CALLINGNUMBER}; USERNAME=${USERNAME}"/> <action application="auth_function" data="in ${CALLEDNUMBER}, in ${USERNAME}, in ${PASSWD}, out AUTH_RESULT"/> <action application="log" data="INFO voip_15 AUTH_RESULT=${AUTH_RESULT}: credit_amount=${credit_amount}; return_code=${return_code}"/> <action application="transfer" data="10 XML voip"/><!--               --> </condition> </extension> <extension name="voip_20"> <condition field="destination_number" expression="^20$"/> <condition field="${digits}" expression="^\**(\d+)\**$"> <!--         --> <action inline="true" application="set" data="digits=$1"/> <action inline="true" application="set" data="digits=${regex(${digits}|^(\d{6})$|83532%1)}"/><!--  85555 –          ^(\d{6})$  ,      --> <action application="log" data="INFO voip_20 DTMF digits=${digits} => RAD_AUTH STEP2"/> <action application="log" data="INFO voip_20 CALLID=${CALLID}; CALLINGNUMBER=${CALLINGNUMBER}; USERNAME=${USERNAME}"/> <action inline="true" application="set" data="CALLEDNUMBER=${digits}"/> <!--       fs2pin  fs2 --> <action inline="true" application="set" data="STEP=${regex(${STEP}|^fs\d(.*)$|fs2%1)}"/> <action application="auth_function" data="in ${CALLEDNUMBER}, in ${USERNAME}, in ${PASSWD}, out AUTH_RESULT"/> <action application="log" data="INFO voip_20 AUTH_RESULT=${AUTH_RESULT}: credit_amount=${credit_amount}; credit_time=${credit_time}; return_code=${return_code}"/> <!--            --> <action application="export" data="nolocal:api_on_answer=sched_hangup +${credit_time} ${uuid} alloted_timeout" /> <action application="transfer" data="30 XML voip"/> </condition> </extension> <extension name="voip_30"> <condition field="destination_number" expression="^30$" break="on-false"/> <condition field="${AUTH_RESULT}" expression="^OK$" break="on-true"> <action application="log" data="INFO voip_30 AUTH_RESULT=${AUTH_RESULT} => Call number"/> <action inline="true" application="set" data="effective_caller_id_number=35555555555"/> <!--      (|)    (fs2|fs2pin),     Freeswitch-CLID   --> <action inline="true" application="set" data="effective_caller_id_name=${STEP}"/> <!--     USERNAME    ,   mod_radius_cdr        User-Name   --> <action application="export" data="nolocal:acc_username=${USERNAME}"/> <!-- <action application="set_profile_var" data="Caller-Username=${USERNAME}"/>         mod_radius_cdr,         --> <action application="set" data="hangup_after_bridge=true"/><!--  !     --> <action application="bridge" data="sofia/gateway/sipgate/${digits}"/> <!--TODO!!!    --> <action application="log" data="INFO voip_30 AFTER BRIDGE"/> </condition> <!--TODO!!!        ,    .. --> <!--TODO!!! h323-return-code=9 Access denied -     ,        --> <condition> <action application="log" data="INFO voip_30 RETURN_CODE = OTHER"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="playback" data="zrtp/zrtp-status_error.wav"/> <action application="hangup" data="NORMAL_CLEARING"/> </condition> </extension> </context> </include>  <include> <macro name="voip_get_digits" pause="250"> <input pattern="(.*)"> <match> <action function="play-file" data="ivr/ivr-account_balance_is.wav"/> <action function="say" data="${credit_amount}" method="pronounced" type="currency"/> <action function="play-file" data="ivr/ivr-please_enter_the_phone_number.wav"/> </match> </input> </macro> <macro name="voip_get_pin" pause="250"> <input pattern="(.*)"> <match> <action function="play-file" data="ivr/ivr-please_enter_pin_followed_by_pound.wav"/> <action function="execute" data="sleep(1000)"/> </match> </input> </macro> </include>  <configuration name="mod_radius_cdr.conf" description="RADIUS CDR Configuration"> <settings> <param name="dictionary" value="/usr/local/etc/radiusclient/dictionary.all"/> <param name="seqfile" value="/var/run/radius.seq"/> <param name="acctserver" value="10.20.20.20:1813:radiussecret"/> <param name="radius_retries" value="2"/> <param name="radius_timeout" value="3"/> <param name="radius_deadtime" value="0"/> </settings> </configuration> Source: https://habr.com/ru/post/189148/
All Articles