I haven't had a chance to familiarize my self with the Lua/dbh way of connecting to a database so I'll have to defer to Chad and the other hardcore Lua gurus. This much I can tell you: there is a valet_info API that you can run at fs_cli or from Lua that will tell you what parking spots are currently in use. -MC On Fri, Nov 30, 2012 at 3:35 AM, Nitin Tomer <ntomer@newgen.co.in> wrote:
Hi Michael,****
** **
I’ve decided to do it through Lua. I’ve written a Lua script which will check whether an entry for an extension exists in the database. And if it doesn’t, it’ll assume that extension as free and will park the call there. ****
** **
I’ve made the following changes in the dialplan –****
** **
<extension>****
<condition field="destination_number" expression="^(450)$">****
<action application="play_and_get_digits" data="10 16 3 3000 # say:'Press your account number, followed by hash key' say:'Wrong Input' res \d+" />** **
<action application="phrase" data="spell,${res}"/>****
<action application="set" data="caller_id_name=Change Address Request" />****
<action application="set" data="call_timeout=60" />****
<action application="set" data="originate_timeout=60" />****
<action inline="true" application="lua" data="test.lua "/>****
<action application="db" data="insert/testapp/${parkednumber}/${res}" />****
<action application="valet_park" data="my_lot ${parkednumber}" />****
</condition>****
</extension>****
** **
Test.lua:****
** **
local dbh = freeswitch.Dbh("freeswitch-connector", "root", "system123#")** **
** **
if dbh:connected() then****
if stream then****
stream:write("result - database connected\n\n")****
else****
print("database connected")****
end****
else ****
if stream then****
stream:write("result - database error\n")****
else****
print("database error")****
end****
return****
end****
** **
-- set variable - or print to console if no session is available ****
local function sv(key, val)****
if session then****
session:setVariable("parkednumber", val)****
print("value set in session")****
elseif stream then****
stream:write(string.format("%25s : %s\n", key, val))****
else -- a script executed using luarun does not have a stream****
print(key .. " : " .. val)****
end****
end****
** **
number = 8501****
** **
while(number < 8600)****
local my_query = "select data from db_data where data_key = '" .. tries .. “’”****
** **
assert(dbh:query(my_query, function(row)****
for key, val in pairs(row) do -- in this example only one* ***
row with one column will be returned****
sv(key, val) -- so here key = 'user'****
end****
end))****
tries = tries + 1****
end****
** **
I want to execute the above query, and check whether any result came. If results came, then I want to proceed to next number. And if no result came, then I want to set it in the session variable and break from the while loop. But I could only find the syntax for assert, no way to check whether the query returned any result or not. Please help me out.****
** **
Regards****
** **
Nitin****
** **
*From:* freeswitch-users-bounces@lists.freeswitch.org [mailto: freeswitch-users-bounces@lists.freeswitch.org] *On Behalf Of *Nitin Tomer *Sent:* Friday, November 30, 2012 10:03 AM
*To:* 'FreeSWITCH Users Help' *Subject:* Re: [Freeswitch-users] valet_park help needed****
** **
Dear Michael,****
** **
Thanks for your response.****
** **
If I can’t suppress the announcement of location to caller, then I will have to look at an alternative approach.****
** **
I make entries for every location on which a call is parked in my database, so will it be possible for me to do –****
** **
**1. **Suppose I have assigned extension 8501 to 8599 for parking.** **
**2. **Run a for loop, from 8501 to 8599****
**3. **Check whether an entry exists for that extension in the database****
**4. **If an entry exists, it means a call is parked at that extension, move to next extension****
**5. **If no entry exists, it means extension is free. Park the call there and make entry in database****
**6. **Break the loop****
** **
Will it work? And if it will, please guide me on how to do that. I am new to Freeswitch and not very well-versed with it.****
** **
Regards****
** **
Nitin****
** **
*From:* freeswitch-users-bounces@lists.freeswitch.org [mailto: freeswitch-users-bounces@lists.freeswitch.org] *On Behalf Of *Michael Collins *Sent:* Friday, November 30, 2012 8:30 AM *To:* FreeSWITCH Users Help *Subject:* Re: [Freeswitch-users] valet_park help needed****
** **
As far as I know you can't suppress the announcement of the location to the caller.
For the event socket you have a lot of homework to do. I recommend: FS Book<https://www.packtpub.com/freeswitch-1-0-6-build-robust-high-performance-telephony-systems/book>, chapter 9 FS Cookbook <http://link.packtpub.com/nuIOlX>, chapter 4 Wiki event socket (see link on left)
For a really quick dive into what events look like: launch fs_cli and type: /log 0 /events plain all
You'll see EVERY event that the system throws. Try this to narrow it down just to valet events:
/filter Event-Class valet_parking::info
I typed most of this off the top of my head, so standard disclaimer<http://wiki.freeswitch.org/wiki/Reporting_Bugs#Standard_Disclaimer>applies. Hope this helps you get started! -MC****
On Thu, Nov 29, 2012 at 6:09 PM, Nitin Tomer <ntomer@newgen.co.in> wrote:* ***
Dear Michael,
Thanks for your help.
About thsis - "Using 'auto in' the system will announce the parking location. If you are sending a call in from an IVR then the caller will hear their park location. The only way to know where the call went would be to watch the event socket for relevant valet events. "
Yes, right now the extension where call is parked, is announced to the caller. I don't want that to happen. I don't want it announced to caller, rather I want it retruned to me, so that I can store it in database. So that my agents can pick the call after seeing the extension where it is parked.
Please tell me more details about how to watch the event socket for valet events.
Regards
Nitin
On Friday, 30-11-2012 on 6:38 Michael Collins wrote:****
Answers inline...****
On Thu, Nov 29, 2012 at 2:15 AM, Nitin Tomer <ntomer@newgen.co.in> wrote:* ***
Hi,****
****
I am using valet_park. I’ve configure a IVR menu of an extension, based on user’s input call is forwarded to other extensions.****
****
Extension on which end-users will call –****
****
<extension name="ivr_nitin"> <condition field="destination_number" expression="^5002$"> <action application="answer"/> <action application="sleep" data="500"/> <action application="ivr" data="nitin_ivr"/> </condition> </extension>****
****
The IVR configuration XML is –****
****
<include> <menu name="nitin_ivr" greet-long="say:Welcome to Newgen General Insurance Company. Press 1 for Changing Address, 2 for Changing Nominee or 3 for Close Policy." greet-short="say:Welcome to Newgen. Press 1 for Changing Address, 2 for Changing Nominee or 3 for Close Policy." invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav" exit-sound="voicemail/vm-goodbye.wav" confirm-macro="" confirm-key="" tts-engine="flite" tts-voice="slt" confirm-attempts="3" timeout="3000" inter-digit-timeout="2000" max-failures="3" max-timeouts="3" digit-len="4">
<entry action="menu-exec-app" digits="1" param="transfer 450 XML default"/> <!-- Change Address --> <entry action="menu-exec-app" digits="2" param="transfer 451 XML default"/> <!-- Change Nominee --> <entry action="menu-exec-app" digits="3" param="transfer 452 XML default"/> <!-- Close Policy -->
</menu> </include>****
Once user presses “1”, call is forwarded to 450, for this extension dialplan entry is –****
****
<extension> <condition field="destination_number" expression="^(450)$"> <action application="play_and_get_digits" data="10 16 3 3000 # say:'Press your account number, followed by hash key' say:'Wrong Input' res \d+" /> <action application="phrase" data="spell,${res}"/> <action application="db" data="insert/testapp/newcall1/${res}" /> <action application="set" data="caller_id_name=Change Address Request" /> <action application="set" data="call_timeout=60" /> <action application="set" data="originate_timeout=60" /> <action application="valet_park" data="my_lot auto in 8501 8599" /> ****
</condition> </extension>****
****
Here, the call is parked at any available extension between 8501 to 8599.* ***
****
Then I’ve set up an extension to pick up calls –****
****
<extension name="park-out"> <condition field="destination_number" expression="^(85\d\d)$"> <action application="answer"/> <action application="valet_park" data="my_lot $1"/> </condition> </extension>****
****
I have a few questions –****
****
1. Valet_park parks the call on any available extension between 8501 to 8599 (<action application="valet_park" data="my_lot auto in 8501 8599" />). Is there any way to let me know on which extension the call have been parked?****
Using 'auto in' the system will announce the parking location. If you are sending a call in from an IVR then the caller will hear their park location. The only way to know where the call went would be to watch the event socket for relevant valet events. ****
2. How can I get the number from which call was made in extension 450. The idea is to use the caller number as key and entered value as value while making entry in database (<action application="db" data="insert/testapp/newcall1/${res}" />)?****
Do you mean the caller id number? That's literally in channel variable ${caller_id_number} ****
3. If two users call on extension 5002 (where IVR menu is played), what will happen? Will the second user have to wait for first to finish or whether both will be connected parallel?****
Both can be in the IVR at the same time and they won't affect each other at all.
-MC ****
****
Please help me out.****
****
Regards****
****
Nitin****
** ** Disclaimer :- This e-mail and any attachment may contain confidential, proprietary or legally privileged information. If you are not the original intended recipient and have erroneously received this message, you are prohibited from using, copying, altering or disclosing the content of this message. Please delete it immediately and notify the sender. Newgen Software Technologies Ltd (NSTL) accepts no responsibilities for loss or damage arising from the use of the information transmitted by this email including damages from virus and further acknowledges that no binding nature of the message shall be implied or assumed unless the sender does so expressly with due authority of NSTL. ****
** **
_________________________________________________________________________ Professional FreeSWITCH Consulting Services: consulting@freeswitch.org http://www.freeswitchsolutions.com
FreeSWITCH-powered IP PBX: The CudaTel Communication Server http://www.cudatel.com
Official FreeSWITCH Sites http://www.freeswitch.org http://wiki.freeswitch.org http://www.cluecon.com
FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org****
-- Michael S Collins Twitter: @mercutioviz http://www.FreeSWITCH.org http://www.ClueCon.com http://www.OSTAG.org****
** ** Disclaimer :- This e-mail and any attachment may contain confidential, proprietary or legally privileged information. If you are not the original intended recipient and have erroneously received this message, you are prohibited from using, copying, altering or disclosing the content of this message. Please delete it immediately and notify the sender. Newgen Software Technologies Ltd (NSTL) accepts no responsibilities for loss or damage arising from the use of the information transmitted by this email including damages from virus and further acknowledges that no binding nature of the message shall be implied or assumed unless the sender does so expressly with due authority of NSTL. ****
** **
_________________________________________________________________________ Professional FreeSWITCH Consulting Services: consulting@freeswitch.org http://www.freeswitchsolutions.com
FreeSWITCH-powered IP PBX: The CudaTel Communication Server http://www.cudatel.com
Official FreeSWITCH Sites http://www.freeswitch.org http://wiki.freeswitch.org http://www.cluecon.com
FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org****
-- Michael S Collins Twitter: @mercutioviz http://www.FreeSWITCH.org http://www.ClueCon.com http://www.OSTAG.org****
** ** Disclaimer :- This e-mail and any attachment may contain confidential, proprietary or legally privileged information. If you are not the original intended recipient and have erroneously received this message, you are prohibited from using, copying, altering or disclosing the content of this message. Please delete it immediately and notify the sender. Newgen Software Technologies Ltd (NSTL) accepts no responsibilities for loss or damage arising from the use of the information transmitted by this email including damages from virus and further acknowledges that no binding nature of the message shall be implied or assumed unless the sender does so expressly with due authority of NSTL. ****
** **
Disclaimer :- This e-mail and any attachment may contain confidential, proprietary or legally privileged information. If you are not the original intended recipient and have erroneously received this message, you are prohibited from using, copying, altering or disclosing the content of this message. Please delete it immediately and notify the sender. Newgen Software Technologies Ltd (NSTL) accepts no responsibilities for loss or damage arising from the use of the information transmitted by this email including damages from virus and further acknowledges that no binding nature of the message shall be implied or assumed unless the sender does so expressly with due authority of NSTL.
_________________________________________________________________________ Professional FreeSWITCH Consulting Services: consulting@freeswitch.org http://www.freeswitchsolutions.com
FreeSWITCH-powered IP PBX: The CudaTel Communication Server http://www.cudatel.com
Official FreeSWITCH Sites http://www.freeswitch.org http://wiki.freeswitch.org http://www.cluecon.com
FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
-- Michael S Collins Twitter: @mercutioviz http://www.FreeSWITCH.org http://www.ClueCon.com http://www.OSTAG.org