<?xml version="1.0" encoding="utf-8"?>
<include>

    <context name="ExitedQueue">
        <extension name="GoToQueueVoicemail">
            <condition field="${agentExtn}" expression="^0$">
                <action application="javascript" data="$${scriptsLoc}CallStageUpdate.js $TO_VOICEMAIL"/>
                <action application="playback" data="${voicemailRecording1}"/>
                <action application="playback" data="${voicemailRecording2}"/>
                <action application="playback" data="${voicemailMessageFile}"/>
                <action application="set" data="skip_greeting=true"/>
                <action application="set" data="skip_instructions=true"/>
                <action application="voicemail" data="default ${domain_name} ${voiceExtn}"/>
            </condition>
        </extension>

        <extension name="CallAgentExtn">
            <condition>
                <action application="set" data="dial_string=user/${agentExtn}@${domain_name}"/>
                <action application="execute_extension" data="ConnectBLeg XML DecideWhetherToCall"/>
            </condition>
        </extension>
    </context>


    <context name="DecideWhetherToCall">
        <extension name="CheckVoicemail">
            <condition field="${CheckVoicemail}" expression="^Yes$">
                <action application="answer"/>
                <action application="sleep" data="1000"/>
                <action application="voicemail" data="check default ${domain_name} ${VoicemailNumber}"/>  
            </condition>
        </extension>

        <extension name="GoToQueueVoicemail">
            <condition field="${GoToQueueVoicemail}" expression="^Yes$">
                <action application="set" data="agentExtn=0"/>
                <action application="execute_extension" data="GoToQueueVoicemail XML ExitedQueue"/>
            </condition>
        </extension>

        <extension name="GoToQueue">
            <condition field="${agentExtn}" expression="^0$">
                <action application="set" data="GoToQueue=Yes"/>
                <action application="fifo" data="${groupId}@$${domain} in"/>
            </condition>
        </extension>

        <extension name="ConnectBLeg">
            <condition>
                <!--<action application="set" data="ringback=${us-ring}"/>-->
                <!--<action application="info"/>-->
                <action application="set" data="hangup_after_bridge=false"/>
                <action application="set" data="continue_on_fail=true"/>
                <action application="set" data="RECORD_STEREO=true"/>
                <action application="set" data="answered_time=0"/><!-- workaround for FS bug -->

                <action application="javascript" data="$${scriptsLoc}BridgeBefore.js"/><!-- This sets variables, so should happen before export's-->
                <action application="eval" data="${jsrun($${scriptsLoc}api_Call_Stage_Update_SP.js ${uuid} $PICKUP_DELAY - ${happenedToType} ${happenedToId} ${agentExtn} ${personId})}"/>

                <action application="export" data="media_bug_answer_req=true"/><!-- This stops the ringing from being recorded-->
                <action application="export" data="storageName=${storageName}"/>
                <action application="export" data="storagePath=${storagePath}"/>
                <action application="export" data="happenedToType=${happenedToType}"/>
                <action application="export" data="happenedToId=${happenedToId}"/>
                <action application="export" data="personId=${personId}"/>
                <action application="export" data="groupId=${groupId}"/>
                <action application="export" data="dialed_extension=${dialed_extension}"/>
                <action application="export" data="agentExtn=${agentExtn}"/>
                <action application="export" data="aLegUuid=${aLegUuid}"/>

                <action application="record_session" data="${storagePath}/${storageName}.wav"/>
                <action application="export" data="nolocal:execute_on_answer=set 'GoToQueue=No'"/>
                <action application="export" data="nolocal:api_on_answer=jsrun $${scriptsLoc}api_Call_Stage_Update_SP.js ${uuid} $SPOKE_TO ${storageName} ${happenedToType} ${happenedToId} ${agentExtn} ${personId}"/>

                <action application="log" data="NOTICE BRIDGE TO: [${dial_string}]"/>
                <action application="bridge" data="${dial_string}"/>

                <action application="stop_record_session" data="${storagePath}/${storageName}.wav"/><!-- also is run in CallOnHangup -->
                <action application="javascript" data="$${scriptsLoc}BridgeEnded.js"/>
                <action application="transfer" data="123456787 XML DecideAfterCall"/>
            </condition>
        </extension>
    </context>


    <context name="DecideAfterCall">
        <extension name="BackToQueue">
            <condition field="${GoToQueue}" expression="^Yes$">
                <action application="eval" data="${jsrun($${scriptsLoc}api_Call_Stage_Update_SP.js ${uuid} $QUEUED - ${happenedToType} ${happenedToId} ${agentExtn} ${personId})}"/>
                <action application="fifo" data="${groupId}@$${domain} in"/>
            </condition>
        </extension>

        <extension name="GoToVoicemail">
            <condition field="${GoToVoicemail}" expression="^Yes$">
                <action application="set" data="skip_instructions=true"/>
                <action application="voicemail" data="default ${domain_name} ${dialed_extension}"/>
            </condition>
        </extension>

        <extension name="GoToCallAgent">
            <condition field="${GoToCallAgent}" expression="^Yes$">
                <action application="transfer" data="123456785 XML DecideWhetherToCall"/>
            </condition>
        </extension>

        <extension name="DisconnectBusy">
            <condition field="${originate_disposition}" expression="^USER_BUSY$|^NO_USER_RESPONSE$|^NORMAL_TEMPORARY_FAILURE$">
                <action application="playback" data="tone_stream://%(500,500,480,620);loops=4"/>
                <action application="hangup" data="${originate_disposition}"/>
            </condition>
        </extension>

        <extension name="DisconnectNoAnswer">
            <condition field="${originate_disposition}" expression="^NORMAL_CLEARING$|^NO_ANSWER$">
                <action application="playback" data="tone_stream://%(1500,0,600,120)"/>
                <action application="hangup" data="${originate_disposition}"/>
            </condition>
        </extension>

        <extension name="DisconnectEnd">
            <condition>
                <action application="playback" data="tone_stream://%(250,250,600,120);loops=3"/>
                <action application="hangup" data="${originate_disposition}"/>
            </condition>
        </extension>
    </context>


    <context name="att_transfer_conference_external">
        <extension name="TransferCall">
            <condition field="destination_number" expression="^([a-z0-9]*)$">
                <action application="conference" data="$1@att_transfer_external"/>
            </condition>
        </extension>
    </context>


    <context name="att_transfer_conference_internal">
        <extension name="TransferCall">
            <condition field="destination_number" expression="^([a-z0-9]*)$">
                <action application="javascript" data="$${scriptsLoc}OutboundCall.js"/>
                <action application="log" data="NOTICE TRANSFER TO: ${dial_string}"/>
                <action application="conference_set_auto_outcall" data="${dial_string}"/>
                <action application="conference" data="in-$1@att_transfer_internal"/>
            </condition>
        </extension>
    </context>


    <context name="transfer_call">
        <extension name="TransferCall">
            <condition>
                <action application="javascript" data="$${scriptsLoc}TransferCall.js"/>
                <action application="javascript" data="$${scriptsLoc}TransferCall_HangupHook.js"/>
                <action application="javascript" data="$${scriptsLoc}OutboundCall.js"/>
                <action application="log" data="NOTICE TRANSFER TO: ${dial_string}"/>
                <action application="att_xfer" data="${dial_string}"/>
                <action application="set" data="transferredNumber=f"/>
                <action application="playback" data="tone_stream://%(250,100,480,620);%(250,100,480,620);%(400,200,480,620)"/>
            </condition>
        </extension>
    </context>


    <context name="outbound_call">
        <extension name="OutboundCall">
            <condition>
                <action application="javascript" data="$${scriptsLoc}OutboundCall.js"/>
                <action application="execute_extension" data="ConnectBLeg XML DecideWhetherToCall"/>
            </condition>
        </extension>
    </context>


    <context name="delay_echo_extn">
        <extension name="delay_echo_extn">
            <condition field="${echo_test}" expression="^Y$">
                <action application="answer"/>
                <action application="set" data="tts_engine=flite"/>
                <action application="set" data="tts_voice=slt"/><!--Voices: slt,rms,kal,awb-->
                <action application="speak" data="Talk now to test your microphone"/>
                <action application="echo" data=""/>
            </condition>
        </extension>
    </context>


    <context name="Staffey">
        <extension name="MainMenuStaffey">
            <condition>
                <!-- TODO: let it ring for 2 secs? Doing <action application="sleep" data="2000"/> won't work because it's already been answered -->
                <action application="set" data="answered_time=0"/><!-- workaround for FS bug -->
                <action application="javascript" data="$${scriptsLoc}MainMenuStaffey.js"/>
                <action application="transfer" data="123456789 XML DecideWhetherToCall"/>
            </condition>
        </extension>
    </context>


    <context name="default">
    <!-- These special numbers could go inside MainMenuCallsIn.js, but it's more efficient to call them here without the overhead of the js file. -->
        <extension name="StaffeySwitchboardExtn">
            <condition field="destination_number" expression="^4444$">
                <action application="set" data="selectedVoice=en-gb/female"/>
                <action application="set" data="call_timeout=30"/>
                <action application="set" data="ringback=${uk-ring}"/>
                <action application="execute_extension" data="MainMenuStaffey XML Staffey"/>
            </condition>
        </extension>
        <extension name="StaffeySwitchboardExtn">
            <condition field="destination_number" expression="^8888$">
                <action application="set" data="selectedVoice=en-us/female"/>
                <action application="set" data="call_timeout=30"/>
                <action application="set" data="ringback=${us-ring}"/>
                <action application="execute_extension" data="MainMenuStaffey XML Staffey"/>
            </condition>
        </extension>
        <extension name="CheckVoicemail">
            <condition field="destination_number" expression="^vmain$|^\#963$">
                <action application="set" data="CheckVoicemail=Yes"/>
                <action application="set" data="VoicemailNumber=${caller_id_number}"/>
                <action application="transfer" data="123456784 XML DecideWhetherToCall"/>
            </condition>
        </extension>
        <extension name="TestCode">
            <condition field="destination_number" expression="^123456$">
                <action application="playback" data="tone_stream://%(250,250,600,120);%(250,250,600,120);%(250,250,600,120);%(250,250,600,120);"/>
                <action application="hangup" data=""/>
            </condition>
        </extension>
        <extension name="EchoTest">
            <condition field="destination_number" expression="^77000$|^123$">
                <action application="set" data="echo_test=Y"/>
                <action application="transfer" data="delay_echo_extn XML delay_echo_extn"/>
            </condition>
        </extension>
        <extension name="AnswerBlank">
            <condition field="destination_number" expression="^75000$">
                <action application="set" data="playback_sleep_val=250"/>
                <action application="ring_ready"/>
                <action application="javascript" data="$${scriptsLoc}MainMenuCallsIn.js"/>
                <action application="conference" data="blank${expr(randomize(&x);ceil(random(0,100,&x)))}@blank"/>
                <!-- <action application="bridge" data="loopback/75001"/> -->
            </condition>
        </extension>
        <extension name="AnswerBlank2ndLeg">
            <condition field="destination_number" expression="^75001$">
                <action application="answer"/>
                <action application="park"/>
                <!-- <action application="fifo" data="blank${expr(randomize(&x);ceil(random(0,100,&x)))}@$${domain} in"/> -->
            </condition>
        </extension>

        <extension name="RedirectExtensions">
        <!-- TODO: these can be handled inside a sql query in MainMenuCallsIn.js -->
            <condition field="destination_number" expression="^(39442)$" break="on-true">
                <action application="transfer" data="10805 XML default"/>
            </condition>
            <condition field="destination_number" expression="^(39651)$" break="on-true">
                <action application="transfer" data="10214 XML default"/>
            </condition>
            <!--
            <condition field="destination_number" expression="^(10214)$" break="on-true">
                <action application="set" data="agentExtn=$1"/>
                <action application="set" data="ignore_early_media=true"/>
                <action application="set" data="Outbound=Yes"/>
                <action application="transfer" data="6590393168 XML outbound_call"/>
            </condition>
            -->
        </extension>

        <extension name="StaffeySwitchboard">
            <condition>
                <action application="ring_ready"/>
                <!-- action application="info"/ -->
                <action application="javascript" data="$${scriptsLoc}MainMenuCallsIn.js"/>
                <action application="transfer" data="123456784 XML DecideWhetherToCall"/>
            </condition>
        </extension>

    </context>

</include>
