These are all excellent questions. In fact, this is one of the reasons why Dave Kompel is working on the &quot;10,000 foot view&quot; document that we&#39;ll be publishing, hopefully soon. (Listen to last week&#39;s <a href="http://wiki.freeswitch.org/wiki/FS_weekly_2012_09_05">conference call</a> for more information.) Hopefully that will help you to mentally separate things that may be unnecessarily jumbled together in your mind.<br>
<br>Here&#39;s an incomplete but hopefully helpful overview.  You can &quot;control&quot; FreeSWITCH functionality in a few basic ways:<br>* Controlling call routing (where calls go, i.e. connecting party A to party B)<br>
* Controlling call actions (what calls actually do, i.e. IVRs)<br>* Controlling non-dialplan configuration, like users, conferences, SIP/sofia, etc.<br><br>Then you have tools for accomplishing the control above.<br>* Static XML for everything<br>
* Static XML for some things and dynamic for others (like dialplan, directory, etc.) <br>** dialplan uses mod_xml_curl<br>** dialplan uses mod_httapi<br>** dialplan uses a scripting language to generate dialplan config<br>
* Dynamic config of everything using mod_xml_curl<br>* Dynamic config with static &quot;fall back&quot; in case of mod_xml_curl lookup failure<br><br>As a subset of &quot;configuration&quot; you have call control. Technically it can be part of the FreeSWITCH &quot;configuration&quot; but it doesn&#39;t have to be. When I say &quot;call control&quot; I don&#39;t mean &quot;call routing.&quot; In this discussion &quot;call routing&quot; is just getting a call from A to B and &quot;call control&quot; means interacting with a call, usually with IVR-like functionality. Here are some options:<br>
<br>Static XML for everything, i.e. XML dialplan for &quot;call routing&quot; and for &quot;call control&quot;<br>Static XML for call routing, Lua/Perl/Python dialplan script for &quot;call control&quot;<br>Static XML for call routing, socket-based ESL script for &quot;call control&quot;<br>
Static XML for call routing, mod_httapi for &quot;call control&quot;<br>(You can also do dynamic XML in these cases :)<br><br>I hope the above information is useful in breaking things down a bit. So, when someone says, &quot;How can I control FreeSWITCH?&quot; you understand why we ask all of these follow up questions.<br>
<br>When someone asks, &quot;What&#39;s the best way to do call control?&quot; the correct answer has been the same since the dawn of time: &quot;It depends.&quot; There are too many variables to give a simple answer. However, here are some rules of thumb that might help you narrow it down:<br>
<br>* Do simple stuff with XML dialplan (static, dynamic - that&#39;s up to you)<br>* Do more complex logic with a dialplan script (I prefer Lua)<br>* If you need absolute control of a call leg, and especially if you plan on bridging that call leg to other calls legs that you wish to control then avoid dialplan scripts! I prefer ESL in these cases.<br>
<br>Naturally there are other things to consider. For example, would mod_httapi work for you? Its focus is more narrow than ESL but with that narrower focus comes less complexity. Maybe that&#39;s what you want or need. In any case, I hope this is good food for thought. I&#39;m sure the substance of this conversation will make it into the big picture document that we are trying to create.<br>
<br>-MC<br><br><br><div class="gmail_quote">On Tue, Sep 11, 2012 at 9:00 AM, A E G <span dir="ltr">&lt;<a href="mailto:all.eforums@gmail.com" target="_blank">all.eforums@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"><div class="gmail_quote"><div><span style="color:rgb(102,51,102);font-family:&#39;trebuchet ms&#39;,sans-serif">I like this discussion. Unfortunately I&#39;m too inexperienced to fully understand why one method/interface would be used over the other. Is this a matter of &quot;inbound&quot; vs &quot;outbound&quot; interfaces? Or is this a matter of taking over the control of each call and making all decisions dynamically on behalf of FS as opposed to say doing a relatively &quot;static&quot; configuration of FS by sending it an XML on the fly to process as opposed to api commands over socket as you would in the case of mod_event_socket?</span></div>


<div><span style="color:rgb(102,51,102);font-family:&#39;trebuchet ms&#39;,sans-serif"><br></span></div><div><span style="color:rgb(102,51,102);font-family:&#39;trebuchet ms&#39;,sans-serif">Are they all variations for the same purpose and so the decision to use one or the other depends on your application and how it&#39;s able to interface with FS? or is there also another level of decision where one is clearly better/powerful/faster/efficient than the other, and that could infact drive the decision for your application development?</span></div>


<div><span style="color:rgb(102,51,102);font-family:&#39;trebuchet ms&#39;,sans-serif"><br></span></div><div><span style="color:rgb(102,51,102);font-family:&#39;trebuchet ms&#39;,sans-serif">Would it fair to compare the functionality and interface offered by mod_httapi to that of something like Plivo, in terms of abstraction of the most common functions required from FS by simply interacting with commands like say, speak, play, record etc? and that this is at a higher level than mod_xml_curl? </span></div>


<div><span style="color:rgb(102,51,102);font-family:&#39;trebuchet ms&#39;,sans-serif"><br></span></div><div><span style="color:rgb(102,51,102);font-family:&#39;trebuchet ms&#39;,sans-serif">Thanks (and apologies for the ignorance)</span></div>


<div><span style="color:rgb(102,51,102);font-family:&#39;trebuchet ms&#39;,sans-serif"><br></span></div></div><div class="gmail_quote">On Mon, Sep 10, 2012 at 1:53 PM, Christopher Rienzo <span dir="ltr">&lt;<a href="mailto:cmrienzo@gmail.com" target="_blank">cmrienzo@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">
Since the things that FS does (transcoding, tone detection, etc) can be CPU intensive, you might want multiple servers to spread the load.  So, you can have a pool of identically-configured FS servers load balanced by something like opensips, with the (typically lighter-weight) application logic handled outside of that pool of servers.  FS here just provides resources for the application to use.<br>




<br>In this type of setup, you can pick between an application that actively controls the FS apps to execute (mod_event_socket, mod_erlang_event) or one that feeds FS higher-level scripts to execute on demand (mod_httapi, mod_xml_curl).<br>




<br>Chris<br><br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div><div>On Mon, Sep 10, 2012 at 10:32 AM, Brett Clark - Grasshopper <span dir="ltr">&lt;<a href="mailto:bclark@grasshopper.com" target="_blank">bclark@grasshopper.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><div link="blue" vlink="purple" lang="EN-US"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Hey Chris,<u></u><u></u></span></p>




<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Could you explain what you mean by clustering FS?  I get the idea of clustering, in general, but I what do you mean in this context?<u></u><u></u></span></p>




<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Thanks!<u></u><u></u></span></p>




<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Brett<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p>




<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> <a href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a> [mailto:<a href="mailto:freeswitch-users-bounces@lists.freeswitch.org" target="_blank">freeswitch-users-bounces@lists.freeswitch.org</a>] <b>On Behalf Of </b>Christopher Rienzo<br>




<b>Sent:</b> Friday, September 07, 2012 12:14 PM</span></p><div><br><b>To:</b> FreeSWITCH Users Help<br><b>Subject:</b> Re: [Freeswitch-users] best FS interface for development<u></u><u></u></div><p></p><p class="MsoNormal">




<u></u> <u></u></p><p class="MsoNormal" style="margin-bottom:12.0pt">For arbitrarily large and complex systems, I&#39;d keep FreeSWITCH as dumb as possible so that you can easily cluster them.  So, modules that allow external control (mod_event_socket, mod_erlang_event, mod_httapi, mod_xml_curl) are all good choices.  <br>




</p><div><div><br>Event socket is pretty popular; Plivo and Adhearsion both use it.  The 2600hz guys use mod_erlang_event.  And I&#39;ve heard of plenty of people that use mod_xml_curl.<br><br>Chris<br><br><br>
<u></u><u></u></div></div><p></p><div><div><div><p class="MsoNormal">On Fri, Sep 7, 2012 at 9:43 AM, Brett Clark - Grasshopper &lt;<a href="mailto:bclark@grasshopper.com" target="_blank">bclark@grasshopper.com</a>&gt; wrote:<u></u><u></u></p>




<div><div><p class="MsoNormal">There seems to be at least 4 general ways for customizing FS:<u></u><u></u></p><p class="MsoNormal">- Use the event socket and build an app to interface with it<u></u><u></u></p><p class="MsoNormal">




- Use mod lua, or similar, to develop in a particular language<u></u><u></u></p><p class="MsoNormal">- Develop your own ‘module’ to interface directly with the core<u></u><u></u></p><p class="MsoNormal">- Use the XML interface to implement IVR, PBX, and voicemail type functionality and all the rest.<u></u><u></u></p>




<p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">How prevalent is each approach in the community?  It seems like everyone is doing a little of both, but maybe someone has a better handle of what the actual ratios are?  <u></u><u></u></p>




<p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Which is best suited for an arbitrarily large and complex application?  I realize this isn’t a simple question—what I want is to understand the most evolved and featureful way to interface with FS?  I don’t want to adopt an approach which isn’t being actively maintained or is missing features.  As new stuff is added to FS, which approach will allow me to adopt those new features most easily?<u></u><u></u></p>




<p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Thanks!<span style="color:#888888"><br><span>Brett</span></span><u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p></div></div></div></div></div></div></div>




<br></div></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>
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" 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>
<br></div></blockquote></div><br>
<br>_________________________________________________________________________<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>
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" 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>
<br></blockquote></div><br></div>
<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>
<br></blockquote></div><br><br clear="all"><br>-- <br>Michael S Collins<br>Twitter: @mercutioviz<br><a href="http://www.FreeSWITCH.org" target="_blank">http://www.FreeSWITCH.org</a><br><a href="http://www.ClueCon.com" target="_blank">http://www.ClueCon.com</a><br>
<a href="http://www.OSTAG.org" target="_blank">http://www.OSTAG.org</a><br><br><br>