<div dir="ltr"><a href="https://github.com/englercj/node-esl">https://github.com/englercj/node-esl</a>  is modeled after standard FS esl libs and seems to implement full spec<div style>I faced some strange troubles with malformed UTF8 symbols in messages, but it works well and is fully async.</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/5/22 Thomas Lee <span dir="ltr">&lt;<a href="mailto:thomas.lee@octon.net" target="_blank">thomas.lee@octon.net</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
Please take a look.<br>
<br>
I&#39;m using node.js and esl (<a href="https://github.com/shimaore/esl" target="_blank">https://github.com/shimaore/esl</a>)<br>
<br>
For example,<br>
--------------------------------------------------<br>
//<br>
// esl-test1.js<br>
//<br>
<br>
var esl = require(&#39;esl&#39;);<br>
var util = require(&#39;util&#39;);<br>
<br>
var audio_file = [];<br>
//<br>
// play and get digits<br>
// &lt;min&gt; &lt;max&gt; &lt;tries&gt; &lt;timeout&gt; &lt;terminators&gt; &lt;file&gt; &lt;invalid_file&gt;<br>
&lt;var_name&gt; &lt;regexp&gt; &lt;digit_timeout&gt;<br>
//<br>
audio_file[0]=&#39;1 1 3 5000 # sounds/mywav/0.wav&#39;;<br>
audio_file[1]=&#39;1 1 3 5000 # sounds/mywav/1.wav&#39;;<br>
audio_file[2]=&#39;1 1 3 5000 # sounds/mywav/2.wav&#39;;<br>
audio_file[3]=&#39;1 1 3 5000 # sounds/mywav/3.wav&#39;;<br>
audio_file[4]=&#39;1 1 3 5000 # sounds/mywav/4.wav&#39;;<br>
audio_file[5]=&#39;1 1 3 5000 # sounds/mywav/5.wav&#39;;<br>
audio_file[6]=&#39;1 1 3 5000 # sounds/mywav/6.wav&#39;;<br>
audio_file[7]=&#39;1 1 3 5000 # sounds/mywav/7.wav&#39;;<br>
audio_file[8]=&#39;1 1 3 5000 # sounds/mywav/8.wav&#39;;<br>
audio_file[9]=&#39;1 1 3 5000 # sounds/mywav/9.wav&#39;;<br>
audio_file[10]=&#39;1 1 3 5000 # sounds/mywav/10.wav&#39;;<br>
audio_file[11]=&#39;1 1 3 5000 # sounds/mywav/11.wav&#39;;<br>
audio_file[12]=&#39;1 1 3 5000 # sounds/mywav/12.wav&#39;;<br>
audio_file[13]=&#39;1 1 3 5000 # sounds/mywav/13.wav&#39;;<br>
<br>
var error3 = &#39;1 1 3 5000 # sounds/mywav/error3.wav&#39;;<br>
var welcome = &#39;1 1 3 5000 # sounds/mywav/hello.wav&#39;;<br>
<br>
<br>
var server = esl.createCallServer();<br>
//var server = esl.createClient();<br>
<br>
server.on(&#39;CONNECT&#39;, function(req, res) {<br>
<br>
        var uri, channel_data, unique_id;<br>
<br>
        channel_data = req.body;<br>
        unique_id = channel_data[&#39;Unique-ID&#39;];<br>
<br>
<br>
        req.execute(&#39;answer&#39;);<br>
<br>
        //req.execute(&#39;playback&#39;, &#39;sounds/mywav/hello.wav&#39;);<br>
<br>
        //req.execute(&#39;play_and_get_digits&#39;, &#39;2 5 3 7000 #<br>
sounds/mywav/hello.wav sounds/mywav/error3.wav myFoo \d+&#39;);<br>
        req.execute(&#39;play_and_get_digits&#39;, welcome);<br>
<br>
        req.on(&#39;DTMF&#39;, function(req) {<br>
<br>
                //util.log(&#39;DTMF:&#39;+util.inspect(req, null, null));<br>
<br>
                var digit;<br>
                var channel_data;<br>
                channel_data = req.body;<br>
                unique_id = channel_data[&#39;Unique-ID&#39;];<br>
<br>
                util.log(&#39;DTMF: unique_id=&#39;+unique_id);<br>
<br>
                digit = channel_data[&#39;DTMF-Digit&#39;];<br>
                console.log(&#39;DTMF Received=&#39; + digit);<br>
                util.log(&#39;DTMF Received&#39;);<br>
                if(digit===&#39;#&#39; || digit===&#39;*&#39;){<br>
<br>
                        req.execute(&#39;play_and_get_digits&#39;, error3);<br>
<br>
<br>
                } else {<br>
<br>
                        var n = parseInt(digit);<br>
<br>
                        req.execute(&#39;play_and_get_digits&#39;, audio_file[n]);<br>
<br>
<br>
                }<br>
<br>
<br>
                return;<br>
        });<br>
<br>
        req.on(&#39;CHANNEL_ANSWER&#39;, function(req) {<br>
<br>
                //util.log(&#39;CHANNEL_ANSWER:&#39;+util.inspect(req, null, null));<br>
                var channel_data;<br>
                channel_data = req.body;<br>
                unique_id = channel_data[&#39;Unique-ID&#39;];<br>
<br>
                util.log(&#39;CHANNEL_ANSWER: unique_id=&#39;+unique_id);<br>
<br>
                return util.log(&#39;Call was answered&#39;);<br>
        });<br>
<br>
        req.on(&#39;CHANNEL_HANGUP&#39;, function(req) {<br>
<br>
                //util.log(&#39;CHANNEL_HANGUP:&#39;+util.inspect(req, null, null));<br>
                var channel_data;<br>
                channel_data = req.body;<br>
                unique_id = channel_data[&#39;Unique-ID&#39;];<br>
<br>
                util.log(&#39;CHANNEL_HANGUP: unique_id=&#39;+unique_id);<br>
<br>
                console.log(&#39;CHANNEL_HANGUP&#39;);<br>
                return util.log(&#39;CHANNEL_HANGUP&#39;);<br>
        });<br>
<br>
        req.on(&#39;CHANNEL_HANGUP_COMPLETE&#39;, function(req) {<br>
<br>
                ///util.log(&#39;CHANNEL_HANGUP_COMPLETE:&#39;+util.inspect(req,<br>
null, null));<br>
<br>
                var channel_data;<br>
                channel_data = req.body;<br>
                unique_id = channel_data[&#39;Unique-ID&#39;];<br>
<br>
                util.log(&#39;CHANNEL_HANGUP_COMPLETE: unique_id=&#39;+unique_id);<br>
<br>
                console.log(&#39;CHANNEL_HANGUP_COMPLETE&#39;);<br>
                return util.log(&#39;CHANNEL_HANGUP_COMPLETE&#39;);<br>
        });<br>
<br>
        req.on(&#39;DISCONNECT&#39;, function(req) {<br>
<br>
                //util.log(&#39;DISCONNECT:&#39;+util.inspect(req, null, null));<br>
                var channel_data;<br>
                channel_data = req.body;<br>
                unique_id = channel_data[&#39;Unique-ID&#39;];<br>
<br>
                util.log(&#39;DISCONNECT: unique_id=&#39;+unique_id);<br>
<br>
                console.log(&#39;DISCONNECT&#39;);<br>
                return util.log(&#39;DISCONNECT&#39;);<br>
        })<br>
<br>
        //util.log(&#39;CONNECT: req &#39;+util.inspect(req, null, null));<br>
        util.log(&#39;CONNECT: unique_id=&#39;+unique_id);<br>
<br>
        return util.log(&#39;CONNECT received&#39;);<br>
<br>
});<br>
<br>
server.listen(9173);<br>
<br>
-----------------------------------------------<br>
<br>
Thanks<br>
<br>
Regards,<br>
Thomas Lee<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://freeswitch-users.2379917.n2.nabble.com/Node-JS-ESL-libraries-tp7590562p7590938.html" target="_blank">http://freeswitch-users.2379917.n2.nabble.com/Node-JS-ESL-libraries-tp7590562p7590938.html</a><br>

Sent from the freeswitch-users mailing list archive at Nabble.com.<br>
<div class="HOEnZb"><div class="h5"><br>
_________________________________________________________________________<br>
Professional FreeSWITCH Consulting Services:<br>
<a href="mailto:consulting@freeswitch.org">consulting@freeswitch.org</a><br>
<a href="http://www.freeswitchsolutions.com" target="_blank">http://www.freeswitchsolutions.com</a><br>
<br>
FreeSWITCH-powered IP PBX: The CudaTel Communication Server<br>
<a href="http://www.cudatel.com" target="_blank">http://www.cudatel.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://wiki.freeswitch.org" target="_blank">http://wiki.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">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>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Best regards,<br><br>Dmitry Sytchev,<br>IT Engineer
</div>