Thanks Anthony,<br><br>I dropped the ball on this bigtime.  I posted my question and somehow the messages didnt thread properly in my list and didn&#39;t see any responses until now.<br><br>I&#39;ll try your suggestions, it sounds like exactly what I was looking for.  Unfortunately we just released our product with FreeSWITCH (alpha) support so it will have be included in a future update.<br>


<br>For this version, if the Saflet (event handler app) doesn&#39;t hang up the call and the caller remains on the line, in some cases the call remains in park indefinitely.  I see this as more of an annoyance than a major issue but definitely something we want to address quickly.<br>
<br>In case you were interested the download site is <a href="http://www.safisystems.com/downloads">http://www.safisystems.com/downloads</a><br><br>We&#39;re still lacking somewhat in the documentation department but the existing screencasts and walkthroughs we have apply to both FreeSWITCH and Asterisk.<br>
<br>Thanks,<br>Zac<br>

<br><div class="gmail_quote">On Tue, Jan 11, 2011 at 2:45 PM, Anthony Minessale <span dir="ltr">&lt;<a href="mailto:anthony.minessale@gmail.com" target="_blank">anthony.minessale@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">


What condition would you want to use to have the park terminate?<br>
<br>
Once you app is controlling the session, it would be up to you to<br>
enforce when it hangs up from the FS side.<br>
<br>
Based on what you describe the only issue could be when your remote<br>
application either misses the event or is restarted while calls are up<br>
so what I can suggest is this:<br>
<br>
in your C app, you could wait there for some timeout period just<br>
calling switch_ivr_sleep for 1 second up to 10 tries to wait a total<br>
of 10 seconds.<br>
<br>
If your app gets the event it can then transfer it to park using<br>
uuid_transfer, this would break the sleep loop and you could do<br>
something at the end of the loop like:<br>
<br>
if (switch_channel_ready(channel)) {<br>
   switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);<br>
}<br>
<br>
so when it was already hung or being transfered that could would not<br>
execute but if your loop ended from waiting too long and it was still<br>
active it would hangup.<br>
<br>
you could do something similar with just dp logic if you used park_timeout of 10<br>
then in your event handler app, use uuid_setvar to unset park_timeout,<br>
then uuid_transfer it back to park now with now timeout<br>
<br>
uuid_transfer &lt;uuid&gt; set:park_timeout=,park inline<br>
<br>
You should come and present this at ClueCon if you have it done in time.<br>
<div><br>
<br>
<br>
On Mon, Jan 10, 2011 at 4:03 PM, Zac Wolfe &lt;<a href="mailto:zacw@safisystems.com" target="_blank">zacw@safisystems.com</a>&gt; wrote:<br>
</div><div><div></div><div>&gt; Hi guys,<br>
&gt;<br>
&gt; First some good news:  we&#39;re finally close to releasing our free IVR<br>
&gt; Development platform SafiServer/SafiWorkshop (<a href="http://www.safisystems.com" target="_blank">www.safisystems.com</a>) with<br>
&gt; FreeSWITCH support! It&#39;s happening much later than we originally anticipated<br>
&gt; as we&#39;ve been unexpectedly busy with contracting opportunities but I think<br>
&gt; it will be worth the wait.  Currently everything is working fine with one<br>
&gt; minor exception:  if the user-created script (we call them Saflets) doesn&#39;t<br>
&gt; explicitly hang up the call, the call will remain parked until the caller<br>
&gt; hangs up.  Some details:<br>
&gt;<br>
&gt; In Asterisk we invoke our server-side scripting applications via the<br>
&gt; extensions.conf using the following syntax:<br>
&gt;<br>
&gt; exten =<br>
&gt; 1111,1,Agi(agi://<a href="http://192.168.0.10:3573/safletEngine.agi?saflet=project1/callflow1" target="_blank">192.168.0.10:3573/safletEngine.agi?saflet=project1/callflow1</a>)<br>
&gt;<br>
&gt; Here &#39;192.168.0.10&#39; is the IP address of the SafiServer and<br>
&gt; project1/callflow1 identifies the Saflet to be executed.  Asterisk creates a<br>
&gt; socket connection to the SafiServer and, once the socket is disconnected,<br>
&gt; the call proceeds to the next entry in the dialplan (typically &#39;hangup&#39;).<br>
&gt;<br>
&gt; For FreeSWITCH, the process is slightly different.  Currently, rather than<br>
&gt; create a separate socket connection for each incoming call, we&#39;re invoking<br>
&gt; an event that informs the SafiServer that there is a new incoming call.  The<br>
&gt; event contains the contextual information including the Saflet name.  For<br>
&gt; example:<br>
&gt;<br>
&gt; &lt;extension name=&quot;9194&quot;&gt;<br>
&gt;       &lt;condition field=&quot;destination_number&quot; expression=&quot;9194$&quot;&gt;<br>
&gt;         &lt;action inline=&quot;true&quot; application=&quot;set&quot; data=&quot;saficall=true&quot;/&gt;<br>
&gt;         &lt;action application=&quot;event&quot;<br>
&gt; data=&quot;Event-Subclass=saficall::incoming,Event-Name=CUSTOM,saflet_project=test,saflet=flow1,new_saficall=true&quot;/&gt;<br>
&gt;<br>
&gt;        &lt;!-- &lt;action application=&quot;set&quot; data=&quot;park_timeout=10&quot;/&gt; --&gt;<br>
&gt;         &lt;action application=&quot;park&quot; /&gt;<br>
&gt;       &lt;/condition&gt;<br>
&gt;     &lt;/extension&gt;<br>
&gt;<br>
&gt; So once the event is fired, the call is parked to prevent further execution<br>
&gt; within the dialplan.  From there on, SafiServer is controlling the call via<br>
&gt; Inbound Mod event socket.<br>
&gt;<br>
&gt; So this works perfectly, except that if the invoked Saflet doesn&#39;t<br>
&gt; explicitly hang-up the call it will remain parked until the caller hangs<br>
&gt; up.  My question is, is there a better way to do this?  Is there some better<br>
&gt; alternative to park in this case?  Ideally I&#39;d like to initiate a &#39;session&#39;<br>
&gt; of some kind when the SafiServer is &quot;controlling&quot; the call and then exit<br>
&gt; that session as soon as the Saflet is complete, at which point the call<br>
&gt; would continue on to the next entry in the dialplan.  I understand I could<br>
&gt; use Outbound sockets to achieve this but, as I mentioned, I&#39;d like to avoid<br>
&gt; the overhead of a separate socket connection for each incoming call.<br>
&gt;<br>
&gt; I actually have a mod_saficall.c app that does basically the the same thing<br>
&gt; as I described in the dialplan entry.  Perhaps there&#39;s something more I<br>
&gt; could do in code that would allow me to be notified when the session is<br>
&gt; complete.  Here&#39;s the relevant code I have so far:<br>
&gt;<br>
&gt;     switch_channel_t *channel = NULL;<br>
&gt;     switch_event_t *event;<br>
&gt;     const char *safiCallFlag = NULL;<br>
&gt;     channel = switch_core_session_get_channel(session);<br>
&gt;<br>
&gt;     safiCallFlag = switch_channel_get_variable(channel, &quot;saficall&quot;);<br>
&gt;<br>
&gt;     if (!safiCallFlag)<br>
&gt;         switch_channel_set_variable(channel, &quot;saficall&quot;, &quot;true&quot;);<br>
&gt;<br>
&gt;<br>
&gt;     if (switch_event_create_subclass(&amp;event, SWITCH_EVENT_CUSTOM,<br>
&gt; &quot;saficall::incoming&quot;) == SWITCH_STATUS_SUCCESS) {<br>
&gt;<br>
&gt;         switch_event_add_header_string(event, SWITCH_STACK_BOTTOM,<br>
&gt; &quot;new_saficall&quot;, safiCallFlag ? &quot;false&quot; : &quot;true&quot;);<br>
&gt;<br>
&gt;         switch_channel_event_set_data(channel, event);<br>
&gt;         switch_event_fire(&amp;event);<br>
&gt;         switch_ivr_park(session, NULL);<br>
&gt;     }<br>
&gt;<br>
&gt; Any ideas you might have on this are welcome.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Zac Wolfe<br>
&gt; Safi Systems LLC<br>
&gt; <a href="http://www.safisystems.com" target="_blank">www.safisystems.com</a><br>
&gt;<br>
</div></div><div>&gt; _______________________________________________<br>
&gt; FreeSWITCH-users mailing list<br>
&gt; <a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
&gt; <a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
&gt; UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
&gt; <a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div>--<br>
Anthony Minessale II<br>
<br>
FreeSWITCH <a href="http://www.freeswitch.org/" target="_blank">http://www.freeswitch.org/</a><br>
ClueCon <a href="http://www.cluecon.com/" target="_blank">http://www.cluecon.com/</a><br>
Twitter: <a href="http://twitter.com/FreeSWITCH_wire" target="_blank">http://twitter.com/FreeSWITCH_wire</a><br>
<br>
AIM: anthm<br>
<a href="mailto:MSN%3Aanthony_minessale@hotmail.com" target="_blank">MSN:anthony_minessale@hotmail.com</a><br>
GTALK/JABBER/<a href="mailto:PAYPAL%3Aanthony.minessale@gmail.com" target="_blank">PAYPAL:anthony.minessale@gmail.com</a><br>
IRC: <a href="http://irc.freenode.net" target="_blank">irc.freenode.net</a> #freeswitch<br>
<br>
FreeSWITCH Developer Conference<br>
<a href="mailto:sip%3A888@conference.freeswitch.org" target="_blank">sip:888@conference.freeswitch.org</a><br>
<a href="mailto:googletalk%3Aconf%2B888@conference.freeswitch.org" target="_blank">googletalk:conf+888@conference.freeswitch.org</a><br>
pstn:+19193869900<br>
<div><div></div><div><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>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Zac Wolfe<br>Safi Systems LLC<br><a href="http://www.safisystems.com" target="_blank">www.safisystems.com</a><br>