Detach an Interaction
The following SCXML strategy detaches a call from the current session, then redirects it from DN 3001 on Switch 'tel_sw' to DN 7778 on Switch 'tel_sw_1'.
<!-- ****************************************** -->
<!-- * TEST OF DETACH AND SUBSEQUENT REDIRECT * -->
<!-- ****************************************** -->
<scxml version="1.0" xmlns="http://www.w3.org/2005/07/scxml"
name="simple monitoring app"
xmlns:queue="http://www.genesyslab.com/modules/queue"
xmlns:ixn="http://www.genesyslab.com/modules/interaction"
xmlns:dialog="http://www.genesyslab.com/modules/dialog" >
<!--********************************************************************-->
<datamodel>
<data ID="stateName" expr="'initial'" />
<data ID="reqid" expr="''" />
<data ID="ixnid" expr="''" />
<data ID="test_result" expr="'PASSED'" />
</datamodel>
<!--********************************************************************-->
<initial>
<transition target="waiting"/>
</initial>
<!--********************************************************************-->
<state id="main" initial="waiting">
<!--********************************************************************-->
<state id="waiting">
<onentry>
<log expr="'Waiting for incoming call...'" />
</onentry>
<transition event="interaction.added" target="detachcall">
<script>
_data.ixnid = _event.data.interactionid;
var dev = _genesys.ixn.interactions[_data.ixnid].parties[_data.ixnid + '-1'].device;
</script>
<log expr="'G_G_GOT initial interaction added: ' + uneval( _event.data )"/>
<log expr="'_genesys.ixn: ' + uneval( _genesys.ixn )" />
</transition>
</state>
<!--********************************************************************-->
<!-- Detaching call from session with graceful termination by timeout -->
<!--********************************************************************-->
<state id="detachcall">
<onentry>
<script>
var noMoreDetach = false;
var detachTimeout = '3s'; /*'infinite' means endless trying to detach*/
</script>
<if cond="detachTimeout != 'infinite'">
<send event="'DetachTimeoutEvent'" delay="detachTimeout"/>
</if>
<ixn:detach interactionid="_data.ixnid" requestid="_data.reqid" />
</onentry>
<transition event="DetachTimeoutEvent">
<script>
noMoreDetach = true;
</script>
</transition>
<transition event="error.interaction.detach" cond="(_event.data.error == 'invalidstate')&&!noMoreDetach&&(_event.data.requestid == _data.reqid)">
<log expr="'G_G_GOT detach invalidstate error: ' + uneval( _event.data )" />
<ixn:detach interactionid="_data.ixnid" requestid="_data.reqid" />
</transition>
<transition event="error.interaction.detach" cond="(_event.data.error == 'invalidstate')&&noMoreDetach&&(_event.data.requestid == _data.reqid)" target="abnormal_exit">
<log expr="'G_G_GOT final detach invalidstate error: ' + uneval( _event.data )" />
</transition>
<transition event="error.interaction.detach" cond="(_event.data.error != 'invalidstate')&&(_event.data.requestid == _data.reqid)" target="abnormal_exit">
<log expr="'G_G_GOT detach error: ' + uneval( _event.data )" />
</transition>
<transition event="interaction.detach.done" cond="_event.data.requestid == _data.reqid" target="redirectcall">
<log expr="'G_G_GOT detach done: ' + uneval( _event.data )"/>
</transition>
<!--*** Targetless transition to intercept interaction.deleted event ***-->
<transition event="interaction.deleted" cond="_event.data.interactionid == _data.ixnid">
<log expr="'G_G_GOT detached interaction deleted: ' + uneval( _event.data )"/>
<log expr="'_genesys.ixn: ' + uneval( _genesys.ixn )" />
</transition>
</state>
<!--********************************************************************-->
<state id="redirectcall">
<onentry>
<ixn:redirect interactionid="_data.ixnid" from="({'dn':'3001', 'switch':'tel_sw'})" to="({'dn':'7778', 'switch':'tel_sw_1'})" requestid="_data.reqid" />
</onentry>
<transition event="error.interaction.redirect" cond="_event.data.requestid == _data.reqid" target="abnormal_exit">
<log expr="'G_G_GOT redirect error: ' + uneval( _event.data )" />
</transition>
<transition event="interaction.redirect.done" cond="_event.data.requestid == _data.reqid" target="somedelay">
<log expr="'G_G_GOT redirect done: ' + uneval( _event.data )"/>
</transition>
</state>
<!--********************************************************************-->
<!--*** Just to make old and new sessions coexist after ixn_detach (additional detach verification) ***-->
<state id="somedelay">
<onentry>
<send event="'SynchroEvent'" delay="'33s'"/>
</onentry>
<transition event="SynchroEvent" target="exit"/>
</state>
<!--*** Common event handler for primary ixn deletion (just to terminate this test session) ***-->
<transition event="interaction.deleted" cond="_event.data.interactionid == _data.ixnid" target="exit">
<log expr="'G_G_GOT initial interaction deleted: ' + uneval( _event.data )"/>
<log expr="'_genesys.ixn: ' + uneval( _genesys.ixn )" />
</transition>
</state>
<!--********************************************************************-->
<state id="abnormal_exit">
<onentry>
<log expr="'G_G_GOT ABNORMAL SESSION TERMINATION'" />
<script>
//Overwrite _data.test_result initial value that was set in data block
_data.test_result = 'FAILED';
</script>
</onentry>
<transition target="exit"/>
</state>
<!--********************************************************************-->
<final id="exit">
<onentry>
<log expr="'G_G_GOT SESSION TERMINATION WITH TEST_RESULT = ' + _data.test_result" />
</onentry>
</final>
</scxml>
This page was last edited on August 14, 2014, at 20:21.
Comments or questions about this documentation? Contact us for support!
