<div dir="ltr">Sorry, jumped the gun a little based on the subject.<div><br></div><div>A more relevant answer is that during the hangup state the call is still in the process of hanging up, it isn&#39;t hung up and ended until the hangup_complete event. So your 5s sleep is extending the life of the call.</div><div><br></div><div>Is it perhaps possible to subscribe to the hangup event and process it asyncronously?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 26 February 2015 at 23:32, Steven Ayre <span dir="ltr">&lt;<a href="mailto:steveayre@gmail.com" target="_blank">steveayre@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">CDR processing should be done in the reporting not hangup state.</div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5">On 26 February 2015 at 22:50, Andrew Keil <span dir="ltr">&lt;<a href="mailto:andrew.keil@visytel.com" target="_blank">andrew.keil@visytel.com</a>&gt;</span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">





<div lang="EN-AU" link="#0563C1" vlink="#954F72">
<div>
<p class="MsoNormal">To FreeSWITCH users,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I am currently experimenting with Lua scripts on FreeSWITCH (latest build) and found an interesting issue with FreeSWITCH default CDRs (inside log/cdr-csv/1000.csv).<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">See below for my simple Lua script called from a diaplan as follows:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">&lt;include&gt;<u></u><u></u></p>
<p class="MsoNormal">    &lt;!-- To test Lua script  --&gt;<u></u><u></u></p>
<p class="MsoNormal">    &lt;extension name=&quot;ivr_demo&quot;&gt;<u></u><u></u></p>
<p class="MsoNormal">      &lt;condition field=&quot;destination_number&quot; expression=&quot;^(9101)$&quot;&gt;<u></u><u></u></p>
<p class="MsoNormal">                                &lt;action application=&quot;lua&quot; data=&quot;myservice.lua&quot;/&gt;                          
<u></u><u></u></p>
<p class="MsoNormal">      &lt;/condition&gt;<u></u><u></u></p>
<p class="MsoNormal">    &lt;/extension&gt;<u></u><u></u></p>
<p class="MsoNormal">&lt;/include&gt;<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">What I noticed is that placing a call into FreeSWITCH via a SIP phone (calling 9101) and landing on myservice.lua everything processes as expected.  If I hangup after 3 seconds then I should expect the CDR to show ${billsec} = 3.  However
 this is not the case since both ${duration} and ${billsec} are actually set once the Lua script completes (not based on HANGUP).  So inside 1000.csv I see duration and billsec both having 8 seconds.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">You will see below that inside my hangup handler (function myHangupHook(s, status, arg)) I fire an event and wait up to 5000ms for an event to be returned (currently I am not returning an event so the 5000ms will take place).  This explains
 the extra 5 seconds after the 3 seconds of the call.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">My question is since FreeSWITCH knows that the HANGUP has taken place why is the ${billsec} not correct (ie. should be 3 seconds)?<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">I tried adding “session:hangup()” as the first line inside my hangup handler (function myHangupHook(s, status, arg)) and this made no difference.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Is there a solution to this issue?  Perhaps there is a different CDR variable that will contain the correct duration based on when HANGUP was actually received.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Thanks in advance for any assistance with this.<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Regards,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Andrew Keil<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Simple Lua Script:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-- myservice.lua<u></u><u></u></p>
<p class="MsoNormal">-- To test a simple service<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">function MainService()<u></u><u></u></p>
<p class="MsoNormal">                freeswitch.consoleLog(&quot;INFO&quot;, &quot;MAIN SERVICE SECTION\n&quot;)<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">                -- answer the call<u></u><u></u></p>
<p class="MsoNormal">                freeswitch.consoleLog(&quot;INFO&quot;, &quot;ANSWER CALLER\n&quot;)<u></u><u></u></p>
<p class="MsoNormal">                session:answer();<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">                -- sleep a second<u></u><u></u></p>
<p class="MsoNormal">                freeswitch.consoleLog(&quot;INFO&quot;, &quot;Sleep for 1000ms\n&quot;)<u></u><u></u></p>
<p class="MsoNormal">                session:sleep(1000);<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">                freeswitch.consoleLog(&quot;INFO&quot;, &quot;Playing 12345\n&quot;)<u></u><u></u></p>
<p class="MsoNormal">                session:say(&quot;12345&quot;, &quot;en&quot;, &quot;number&quot;, &quot;pronounced&quot;);<u></u><u></u></p>
<p class="MsoNormal">                freeswitch.consoleLog(&quot;INFO&quot;, &quot;Finished playing 12345\n&quot;)<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">                if (session:ready()) then<u></u><u></u></p>
<p class="MsoNormal">                                -- hangup<u></u><u></u></p>
<p class="MsoNormal">                                freeswitch.consoleLog(&quot;INFO&quot;, &quot;HANGUP\n&quot;)<u></u><u></u></p>
<p class="MsoNormal">                                session:hangup()  <u></u><u></u></p>
<p class="MsoNormal">                end<u></u><u></u></p>
<p class="MsoNormal">end<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">--------------------------------------------------------------------------------------------<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-- Functions section …<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">function myHangupHook(s, status, arg)<u></u><u></u></p>
<p class="MsoNormal">    freeswitch.consoleLog(&quot;INFO&quot;, &quot;myHangupHook: &quot; .. status .. &quot;\n&quot;)<u></u><u></u></p>
<p class="MsoNormal">                <u></u><u></u></p>
<p class="MsoNormal">    -- send hangup event test (after caller hangs up)<u></u><u></u></p>
<p class="MsoNormal">    local event = freeswitch.Event(&quot;CUSTOM&quot;, &quot;visytel::HANGUP?&quot;)<u></u><u></u></p>
<p class="MsoNormal">                event:addHeader(&quot;hi&quot;, &quot;there&quot;)<u></u><u></u></p>
<p class="MsoNormal">                event:addHeader(&quot;channel-uuid&quot;, channeluuid)<u></u><u></u></p>
<p class="MsoNormal">                -- Add Event consumer if a response is required!<u></u><u></u></p>
<p class="MsoNormal">                local con = freeswitch.EventConsumer(&quot;CUSTOM&quot;, &quot;visytel::HANGUP!&quot;)<u></u><u></u></p>
<p class="MsoNormal">    -- fire event<u></u><u></u></p>
<p class="MsoNormal">    freeswitch.consoleLog(&quot;INFO&quot;, &quot;Fire HANGUP event\n&quot;)        
<u></u><u></u></p>
<p class="MsoNormal">    event:fire()    <u></u><u></u></p>
<p class="MsoNormal">                -- Wait for 5000ms to test response<u></u><u></u></p>
<p class="MsoNormal">                local retevent = con:pop(1, 5000)<u></u><u></u></p>
<p class="MsoNormal">                if retevent then<u></u><u></u></p>
<p class="MsoNormal">                                freeswitch.consoleLog(&quot;INFO&quot;, &quot;Reply received!\n&quot;)<u></u><u></u></p>
<p class="MsoNormal">                                freeswitch.consoleLog(&quot;INFO&quot;,  string.format(&quot;Reply received: %s\n&quot;,retevent:getHeader(&quot;Result&quot;)))<u></u><u></u></p>
<p class="MsoNormal">                end<u></u><u></u></p>
<p class="MsoNormal">end<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-- Setup handlers here<u></u><u></u></p>
<p class="MsoNormal">myparam=&quot;empty&quot;;<u></u><u></u></p>
<p class="MsoNormal">session:setHangupHook(&quot;myHangupHook&quot;, &quot;myparam&quot;)<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-- Source channel-uuid here {used inside myHangupHook handler and for all fired events inside the header<u></u><u></u></p>
<p class="MsoNormal">channeluuid = session:getVariable(&quot;uuid&quot;);<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">MainService()<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">-- End of lua script<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>

<br></div></div>_________________________________________________________________________<br>
Professional FreeSWITCH Consulting Services:<br>
<a href="mailto:consulting@freeswitch.org" target="_blank">consulting@freeswitch.org</a><br>
<a href="http://www.freeswitchsolutions.com" target="_blank">http://www.freeswitchsolutions.com</a><br>
<br>
Official FreeSWITCH Sites<br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<a href="http://confluence.freeswitch.org" target="_blank">http://confluence.freeswitch.org</a><br>
<a href="http://www.cluecon.com" target="_blank">http://www.cluecon.com</a><br>
<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br></blockquote></div><br></div>
</blockquote></div><br></div>