<html><body><span style="font-family:Verdana; color:#000000; font-size:10pt;"><div>I use mod_fifo to hold the caller while I am working with the callee.&nbsp; mod_fifo also allows me to set an action after a timeout occurs if the callee is not available.&nbsp; I do this using two lua scripts.<br></div><div><br></div><div>I use this in my dialplan to deal with FIFO:</div><div>&nbsp;&nbsp;&nbsp; &lt;extension name="FIFOTimeout"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;condition field="destination_number" expression="^FIFOTimeout$"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;action application="lua" data="${base_dir}/scripts/${rcFIFOTimeoutScript}.lua"/&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/condition&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/extension&gt;<br><br><br></div><div>When the incoming call is answered:<br></div><div><br></div><div>if (session: ready()) then</div><div>&nbsp; &nbsp; &nbsp; session:answer()</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- park call in fifo<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session:setVariable("rcFIFOTimeoutScript", fifo_script)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session:setVariable("fifo_orbit_exten", "FIFOTimeout:" .. timeout)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session:execute("fifo", "IncomingPark in undef " .. ring_tone)<br></div><div><br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local cUUID = session:getVariable("uuid")<br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- call destination</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; local route = "{callerUUID="..cUUID..",origination_caller_id_number=14805551313,"..</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "leg_timeout=60,group_confirm_key=exec,group_confirm_file=lua callOut.lua}"..</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "sofia/gateway/agateway/14805551212"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session:originate(route)<br></div><div>end</div><div><br></div><div>NOTES:</div><div>"timeout" is the amount of time the caller can sit on hold, if this time elapses, the caller is transfered to a new lua script<br></div><div>"fifo_script" is the name of the lua script that should be executed if the timeout occurs </div><div>"ring_tone" is a SOUND FILE that has the correct ring tone to play to the caller</div><div>"cUUID" is the UUID of the caller's leg.</div><div>"origination_caller_id_number" sets the caller ID on the outgoing call</div><div>"leg_timeout" sets the timeout for the caller to answer</div><div>"group_confirm_file" is the script to attach to the outgoing call (see below)</div><div><br></div><div>The second script is for the callee when they pickup:</div><div>if (session:ready()) then</div><div>&nbsp; session:answer()</div><div>&nbsp; -- play whatever you want to the callee</div><div><br></div><div>&nbsp; local cUUID = session:getVariable("callerUUID")<br></div><div><br></div><div>&nbsp; -- bridge the call</div><div>&nbsp; session:execute("bridge", cUUID)</div><div><br></div><div>&nbsp; -- OR transfer the call</div><div>&nbsp; local api = freeswitch.API()</div><div>&nbsp; api:execute("uuid_transfer", cUUID .. " some_extension")</div><div><br></div><div>&nbsp; -- OR hang up the call</div><div>&nbsp; local api = freeswitch.API()</div><div>&nbsp; api:execute("uuid_kill", cUUID)</div><div>&nbsp; </div><div>&nbsp; -- OR transfer the caller to a different script (basically, this forces them out of fifo)</div><div>&nbsp; local api = freeswitch.API()</div>
<div>&nbsp; api:execute("uuid_setVar", cUUID.. " rcFIFOTimeoutScript ".. some_script_name)</div><div>&nbsp; api:execute("uuid_transfer", cUUID .. " FIFOTimeout XML public")</div><div><br></div><div>end</div><div><br></div><div>Hope this helps<br></div><div>-p<br></div>
<blockquote id="replyBlockquote" webmail="1" style="border-left: 2px solid blue; margin-left: 8px; padding-left: 8px; font-size: 10pt; color: black; font-family: verdana;" mce_style="border-left: 2px solid blue; margin-left: 8px; padding-left: 8px; font-size: 10pt; color: black; font-family: verdana;">
<div   >
-------- Original Message --------<br>
Subject: [Freeswitch-users] More playing with sessions in lua<br>
From: Troy Anderson &lt;troy@tlainvestments.com&gt;<br>
Date: Mon, January 18, 2010 12:11 pm<br>
To: freeswitch-users@lists.freeswitch.org<br>
<br>
I think there may be other ways to do this, but if I could understand how to do it from lua, I think it would help me understand more about what's going on and make the mod_lua even more valuable to me and anyone else struggling with this kind of issue.<br>
<br>
I am trying to answer a call in lua, exchange a bit of information with the caller, then I want to originate a call to another endpoint, and depending on what their response to some audio questions is, connect the original caller to them, or send the original caller away.  The problem is that I want the original caller to her ring tones or music on hold while they're waiting.  In addition to the way presented here, I've tried parking the caller using uuid_park, but still can't figure out how to play music/ringback for them.<br>
<br>
session:answer();<br>
session:sleep(1000);<br>
session:execute("playback","pleasehold.wav")<br>
<br>
local targetEndpoint = "1100@default" -- or wherever<br>
<br>
-- ringback works only AFTER the bridge line, below.  How do I get it to start immediately?<br>
local destSession = freeswitch.Session("{ringback='myringback.wav'}".. targetEndpoint)        -- this "originates" a call to targetEndpoint<br>
<br>
local digit destSession:playAndGetDigits(1,1,3,3000,"#","instructions.wav","[1-3]")<br>
<br>
if (digit == "1") then<br>
        freeswitch.bridge(session,destSession)<br>
else<br>
        session:execute("playback","goodbye.wav")<br>
        session:hangup()<br>
        destSession:hangup()<br>
end<br>
<br>
<br>
I appreciate any help on this.<br>
<br>
-Troy<br>
<br>
_______________________________________________<br>
FreeSWITCH-users mailing list<br>
FreeSWITCH-users@lists.freeswitch.org<br>
<a target="_blank" href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" mce_href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a target="_blank" href="http://lists.freeswitch.org/mailman/options/freeswitch-users" mce_href="http://lists.freeswitch.org/mailman/options/freeswitch-users">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a target="_blank" href="http://www.freeswitch.org" mce_href="http://www.freeswitch.org">http://www.freeswitch.org</a><br>

</div>
</blockquote></span></body></html>