<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-1"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;
        mso-fareast-language:IT;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:black;
        mso-fareast-language:IT;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;
        mso-fareast-language:EN-US;}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 2.0cm 2.0cm 2.0cm;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body bgcolor=white lang=IT link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='color:windowtext'>Thanks Paul for you interest! Much appreciated.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'>Almost solved!<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'>Js script called dialplan.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'>I’m using this code:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'>if (session.ready()) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>session.answer();<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var sessOut = new Session("sofia/gateway/realtoneFXO/" +  dialedNum + "@192.168.0.216:5060");<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>                <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>if (sessOut.ready()) {<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>                                bridge(session, sessOut);<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>}<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>sessOut.hangup();<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>session.hangup();<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var xml = new XML ("<xml>" + sessOut.generateXmlCdr() + "</xml>");<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var xmlCDR                        = xml.getChild('cdr');<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var xmCallFlow                  = xmlCDR.getChild('callflow');<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var xmTimes                      = xmCallFlow.getChild('times');<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var created_time                                            = parseInt(xmTimes.getChild('created_time').data);<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var profile_created_time                             = parseInt(xmTimes.getChild('profile_created_time').data);<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var progress_time                                          = parseInt(xmTimes.getChild('progress_time').data);<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var progress_media_time                           = parseInt(xmTimes.getChild('progress_media_time').data);      <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var answered_time                                       = parseInt(xmTimes.getChild('answered_time').data);   <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var bridged_time                                            = parseInt(xmTimes.getChild('bridged_time').data);       <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var last_hold_time                                         = parseInt(xmTimes.getChild('last_hold_time').data);    <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var hold_accum_time                                   = parseInt(xmTimes.getChild('hold_accum_time').data);              <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var hangup_time                                            = parseInt(xmTimes.getChild('hangup_time').data);        <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var resurrect_time                                         = parseInt(xmTimes.getChild('resurrect_time').data);     <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var transfer_time                                           = parseInt(xmTimes.getChild('transfer_time').data);       <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>                <o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US style='color:windowtext'>var callLength = (hangup_time - answered_time)/1000000;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'>which works fine BUT, as "sofia/gateway/realtoneFXO/" is on analog line (FXO), it does not actually communicate the on-answer properly, so the call length is the total length including dialing, waiting for ring, ringing … and not just the speaking time…<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'>as you see from these values, the answered_time and bridge_time are identical!<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><created_time>1522946076054074</created_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><profile_created_time>1522946076054074</profile_created_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><progress_time>0</progress_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><progress_media_time>0</progress_media_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><answered_time>1522946079154074</answered_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><bridged_time>1522946079154074</bridged_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><last_hold_time>0</last_hold_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><hold_accum_time>0</hold_accum_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><hangup_time>1522946095634072</hangup_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><resurrect_time>0</resurrect_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><transfer_time>0</transfer_time><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='color:windowtext'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='color:windowtext;mso-fareast-language:IT'>From:</span></b><span lang=EN-US style='color:windowtext;mso-fareast-language:IT'> FreeSWITCH-users <freeswitch-users-bounces@lists.freeswitch.org> <b>On Behalf Of </b>Paul Zillmann<br><b>Sent:</b> giovedì 5 aprile 2018 18:00<br><b>To:</b> freeswitch-users@lists.freeswitch.org<br><b>Subject:</b> Re: [Freeswitch-users] cdr via javascript<o:p></o:p></span></p></div></div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p>nodeJS or Browser?<span style='mso-fareast-language:IT'><o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>Am 05.04.2018 um 16:39 schrieb Francesco Facco de Lagarda:<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal><span lang=EN-US>Is there any way I can interrogate cdr data of a call that has finished via javascript?<br>I see no samples of cdr data with js.</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US> </span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>Thanks</span><o:p></o:p></p><p class=MsoNormal><span lang=EN-US>F</span><o:p></o:p></p><p class=MsoNormal><span style='mso-fareast-language:IT'><br><br><br><o:p></o:p></span></p><pre>_________________________________________________________________________<o:p></o:p></pre><pre>Professional FreeSWITCH Consulting Services:<o:p></o:p></pre><pre><a href="mailto:consulting@freeswitch.org">consulting@freeswitch.org</a><o:p></o:p></pre><pre><a href="http://www.freeswitchsolutions.com">http://www.freeswitchsolutions.com</a><o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Official FreeSWITCH Sites<o:p></o:p></pre><pre><a href="http://www.freeswitch.org">http://www.freeswitch.org</a><o:p></o:p></pre><pre><a href="http://confluence.freeswitch.org">http://confluence.freeswitch.org</a><o:p></o:p></pre><pre><a href="http://www.cluecon.com">http://www.cluecon.com</a><o:p></o:p></pre><pre><o:p> </o:p></pre><pre>FreeSWITCH-users mailing list<o:p></o:p></pre><pre><a href="mailto:FreeSWITCH-users@lists.freeswitch.org">FreeSWITCH-users@lists.freeswitch.org</a><o:p></o:p></pre><pre><a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><o:p></o:p></pre><pre>UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><o:p></o:p></pre><pre><a href="http://www.freeswitch.org">http://www.freeswitch.org</a><o:p></o:p></pre></blockquote><p class=MsoNormal><span style='mso-fareast-language:IT'><o:p> </o:p></span></p></div></body></html>