The first thing I found with the basic setup of FreeSWITCH was that calls between my own clients still went to my provider. This seemed like a waste to me. To handle calls coming in I generate an XML file called dialplan/public/00_Local.xml. Here is an example entry from it. <extension name="Local_4164251212"> <condition field="destination_number" expression="^(4164251212)$"> <action application="export" data="dialed_extension=$1"/> <action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/> <action application="bind_meta_app" data="2 b s record_session::$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/> <action application="bind_meta_app" data="4 b s execute_extension::att_xfer XML features"/> <action application="set" data="ringback=${us-ring}"/> <action application="set" data="transfer_ringback=$${hold_music}"/> <action application="set" data="call_timeout=30"/> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="continue_on_fail=true"/> <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/> <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/> <action application="bridge" data="user/${dialed_extension}@${domain_name}"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/> </condition> </extension> I am still trying to figure out exactly what everything in there does but it seems to do the job. Calls originating outside get delivered to the correct client's phone. Calls between clients go out to the provider and then come back in as if it was external. I worked around this by symlinking this file to the dialplan/default directory. This works but I wonder if this is the best way to accomplish this. Side question, can I create a simple alias for all of my DIDs and make one condition that tests that alias somehow? Cheers. -- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
You can use modules like mod_enum or mod_easyroute to route the calls first before hitting your SIP provider. The wiki is a great place to start for this type of scenario On Sun, Sep 23, 2012 at 8:01 AM, D'Arcy Cain <darcy@vex.net> wrote:
The first thing I found with the basic setup of FreeSWITCH was that calls between my own clients still went to my provider. This seemed like a waste to me. To handle calls coming in I generate an XML file called dialplan/public/00_Local.xml. Here is an example entry from it.
<extension name="Local_4164251212"> <condition field="destination_number" expression="^(4164251212)$"> <action application="export" data="dialed_extension=$1"/> <action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/> <action application="bind_meta_app" data="2 b s record_session::$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/> <action application="bind_meta_app" data="4 b s execute_extension::att_xfer XML features"/> <action application="set" data="ringback=${us-ring}"/> <action application="set" data="transfer_ringback=$${hold_music}"/> <action application="set" data="call_timeout=30"/> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="continue_on_fail=true"/> <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/> <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/> <action application="bridge" data="user/${dialed_extension}@${domain_name}"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/> </condition> </extension>
I am still trying to figure out exactly what everything in there does but it seems to do the job. Calls originating outside get delivered to the correct client's phone. Calls between clients go out to the provider and then come back in as if it was external.
I worked around this by symlinking this file to the dialplan/default directory. This works but I wonder if this is the best way to accomplish this.
Side question, can I create a simple alias for all of my DIDs and make one condition that tests that alias somehow?
Cheers.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
_________________________________________________________________________ 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
On Sun, 23 Sep 2012 10:24:22 -0700 curriegrad2004 <curriegrad2004@gmail.com> wrote:
You can use modules like mod_enum or mod_easyroute to route the calls first before hitting your SIP provider. The wiki is a great place to start for this type of scenario
Thanks. Yes, lots of stuff in the wiki. The problem is finding what you need in it. Pointers like this are very helpful. -- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
here's a piece of my dialplan in "default" context. It simply catches such calls and transfers them directly to the public context. The public context matches local DID numbers and transfers them to corresponding extensions in default context: <extension name="internal_did"> <condition field="destination_number" expression="^($${default_did_prefix}\d+)$"> <action application="transfer" data="$1 XML public"/> </condition> </extension> The "default_did_prefix" variable holds my DID number block.
________________________________ From: D'Arcy Cain <darcy@Vex.Net> To: FreeSWITCH-users@lists.freeswitch.org Sent: Sunday, September 23, 2012 5:01 PM Subject: [Freeswitch-users] Keeping local calls local
The first thing I found with the basic setup of FreeSWITCH was that calls between my own clients still went to my provider. This seemed like a waste to me. To handle calls coming in I generate an XML file called dialplan/public/00_Local.xml. Here is an example entry from it.
<extension name="Local_4164251212"> <condition field="destination_number" expression="^(4164251212)$"> <action application="export" data="dialed_extension=$1"/> <action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/> <action application="bind_meta_app" data="2 b s record_session::$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/> <action application="bind_meta_app" data="4 b s execute_extension::att_xfer XML features"/> <action application="set" data="ringback=${us-ring}"/> <action application="set" data="transfer_ringback=$${hold_music}"/> <action application="set" data="call_timeout=30"/> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="continue_on_fail=true"/> <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/> <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/> <action application="bridge" data="user/${dialed_extension}@${domain_name}"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/> </condition> </extension>
I am still trying to figure out exactly what everything in there does but it seems to do the job. Calls originating outside get delivered to the correct client's phone. Calls between clients go out to the provider and then come back in as if it was external.
I worked around this by symlinking this file to the dialplan/default directory. This works but I wonder if this is the best way to accomplish this.
Side question, can I create a simple alias for all of my DIDs and make one condition that tests that alias somehow?
Cheers.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
_________________________________________________________________________ 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
On Sun, 23 Sep 2012 11:17:37 -0700 (PDT) Stanislav Sinyagin <ssinyagin@yahoo.com> wrote:
here's a piece of my dialplan in "default" context. It simply catches such calls and transfers them directly to the public context. The public context matches local DID numbers and transfers them to corresponding extensions in default context:
<extension name="internal_did"> <condition field="destination_number" expression="^($${default_did_prefix}\d+)$"> <action application="transfer" data="$1 XML public"/> </condition> </extension>
The "default_did_prefix" variable holds my DID number block.
Looks good but my problem is that I do not have a DID block. Clients are porting their numbers so they are all over the place. My first three numbers in the system are from three different area codes. I would need to include all of my numbers in the expression somehow. Wit just three I can use '|' but that won't be practical when I have hundreds or thousands. -- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
well, that was only a hint, but not the whole solution :) In your case, it would require some database lookup, or maybe the dialplan should go through the customer numbers before sending the call to PSTN. enum would be a good option instead of database lookup, as was already proposed on the list. In any case, this all requires a bit of engineering and design effort.
________________________________ From: D'Arcy Cain <darcy@Vex.Net> To: FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> Cc: Stanislav Sinyagin <ssinyagin@yahoo.com> Sent: Sunday, September 23, 2012 10:04 PM Subject: Re: [Freeswitch-users] Keeping local calls local
On Sun, 23 Sep 2012 11:17:37 -0700 (PDT) Stanislav Sinyagin <ssinyagin@yahoo.com> wrote:
here's a piece of my dialplan in "default" context. It simply catches such calls and transfers them directly to the public context. The public context matches local DID numbers and transfers them to corresponding extensions in default context:
<extension name="internal_did"> <condition field="destination_number" expression="^($${default_did_prefix}\d+)$"> <action application="transfer" data="$1 XML public"/> </condition> </extension>
The "default_did_prefix" variable holds my DID number block.
Looks good but my problem is that I do not have a DID block. Clients are porting their numbers so they are all over the place. My first three numbers in the system are from three different area codes. I would need to include all of my numbers in the expression somehow. Wit just three I can use '|' but that won't be practical when I have hundreds or thousands.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
Basically your inbouind and outbound calls should go through the same sequence of checkups, and look for a local user number. Then outbound calls should resort in your PSTN trunk, and inbound calls resort in a 404 Not Found. Also I guess you want to charge your users the same rate regardless if it's on-net or off-net calls, so CDR need to be taken care of too.
________________________________ From: Stanislav Sinyagin <ssinyagin@yahoo.com> To: FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> Sent: Sunday, September 23, 2012 10:31 PM Subject: Re: [Freeswitch-users] Keeping local calls local
well, that was only a hint, but not the whole solution :) In your case, it would require some database lookup, or maybe the dialplan should go through the customer numbers before sending the call to PSTN.
enum would be a good option instead of database lookup, as was already proposed on the list.
In any case, this all requires a bit of engineering and design effort.
________________________________ From: D'Arcy Cain <darcy@Vex.Net> To: FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> Cc: Stanislav Sinyagin <ssinyagin@yahoo.com> Sent: Sunday, September 23, 2012 10:04 PM Subject: Re: [Freeswitch-users] Keeping local calls local
On Sun, 23 Sep 2012 11:17:37 -0700 (PDT) Stanislav Sinyagin <ssinyagin@yahoo.com> wrote:
here's a piece of my dialplan in "default" context. It simply catches such calls and transfers them directly to the public context. The public context matches local DID numbers and transfers them to corresponding extensions in default context:
<extension name="internal_did"> <condition field="destination_number" expression="^($${default_did_prefix}\d+)$"> <action application="transfer" data="$1 XML public"/> </condition> </extension>
The "default_did_prefix" variable holds my DID number block.
Looks good but my problem is that I do not have a DID block. Clients are porting their numbers so they are all over the place. My first three numbers in the system are from three different area codes. I would need to include all of my numbers in the expression somehow. Wit just three I can use '|' but that won't be practical when I have hundreds or thousands.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
_________________________________________________________________________ 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
Mod_lcr? On Sep 23, 2012 6:01 PM, "Stanislav Sinyagin" <ssinyagin@yahoo.com> wrote:
Basically your inbouind and outbound calls should go through the same sequence of checkups, and look for a local user number. Then outbound calls should resort in your PSTN trunk, and inbound calls resort in a 404 Not Found. Also I guess you want to charge your users the same rate regardless if it's on-net or off-net calls, so CDR need to be taken care of too.
------------------------------ *From:* Stanislav Sinyagin <ssinyagin@yahoo.com> *To:* FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> *Sent:* Sunday, September 23, 2012 10:31 PM *Subject:* Re: [Freeswitch-users] Keeping local calls local
well, that was only a hint, but not the whole solution :) In your case, it would require some database lookup, or maybe the dialplan should go through the customer numbers before sending the call to PSTN.
enum would be a good option instead of database lookup, as was already proposed on the list.
In any case, this all requires a bit of engineering and design effort.
------------------------------ *From:* D'Arcy Cain <darcy@Vex.Net> *To:* FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> *Cc:* Stanislav Sinyagin <ssinyagin@yahoo.com> *Sent:* Sunday, September 23, 2012 10:04 PM *Subject:* Re: [Freeswitch-users] Keeping local calls local
On Sun, 23 Sep 2012 11:17:37 -0700 (PDT) Stanislav Sinyagin <ssinyagin@yahoo.com> wrote:
here's a piece of my dialplan in "default" context. It simply catches such calls and transfers them directly to the public context. The public context matches local DID numbers and transfers them to corresponding extensions in default context:
<extension name="internal_did"> <condition field="destination_number" expression="^($${default_did_prefix}\d+)$"> <action application="transfer" data="$1 XML public"/> </condition> </extension>
The "default_did_prefix" variable holds my DID number block.
Looks good but my problem is that I do not have a DID block. Clients are porting their numbers so they are all over the place. My first three numbers in the system are from three different area codes. I would need to include all of my numbers in the expression somehow. Wit just three I can use '|' but that won't be practical when I have hundreds or thousands.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
_________________________________________________________________________ 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
_________________________________________________________________________ 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
Hi folks, Fair enough, but ... the original problem is that the users are/will be porting their current phone numbers, so they're all over the map. That's going to make routing/pattern matching a challenge, because there IS no obvious routeset pattern. Honestly, ENUM is easier in that scenario. all the best, Lawrence On 23 Sep 2012, at 23:03, Brian Foster wrote:
Mod_lcr? On Sep 23, 2012 6:01 PM, "Stanislav Sinyagin" <ssinyagin@yahoo.com> wrote:
Basically your inbouind and outbound calls should go through the same sequence of checkups, and look for a local user number. Then outbound calls should resort in your PSTN trunk, and inbound calls resort in a 404 Not Found. Also I guess you want to charge your users the same rate regardless if it's on-net or off-net calls, so CDR need to be taken care of too.
------------------------------ *From:* Stanislav Sinyagin <ssinyagin@yahoo.com> *To:* FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> *Sent:* Sunday, September 23, 2012 10:31 PM *Subject:* Re: [Freeswitch-users] Keeping local calls local
well, that was only a hint, but not the whole solution :) In your case, it would require some database lookup, or maybe the dialplan should go through the customer numbers before sending the call to PSTN.
enum would be a good option instead of database lookup, as was already proposed on the list.
In any case, this all requires a bit of engineering and design effort.
------------------------------ *From:* D'Arcy Cain <darcy@Vex.Net> *To:* FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> *Cc:* Stanislav Sinyagin <ssinyagin@yahoo.com> *Sent:* Sunday, September 23, 2012 10:04 PM *Subject:* Re: [Freeswitch-users] Keeping local calls local
On Sun, 23 Sep 2012 11:17:37 -0700 (PDT) Stanislav Sinyagin <ssinyagin@yahoo.com> wrote:
here's a piece of my dialplan in "default" context. It simply catches such calls and transfers them directly to the public context. The public context matches local DID numbers and transfers them to corresponding extensions in default context:
<extension name="internal_did"> <condition field="destination_number" expression="^($${default_did_prefix}\d+)$"> <action application="transfer" data="$1 XML public"/> </condition> </extension>
The "default_did_prefix" variable holds my DID number block.
Looks good but my problem is that I do not have a DID block. Clients are porting their numbers so they are all over the place. My first three numbers in the system are from three different area codes. I would need to include all of my numbers in the expression somehow. Wit just three I can use '|' but that won't be practical when I have hundreds or thousands.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
_________________________________________________________________________ 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
_________________________________________________________________________ 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
_________________________________________________________________________ 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
enum or a DB query to your routing table for inbound calls, e.g. using mod_odbc_query <http://wiki.freeswitch.org/wiki/Mod_odbc_query>. -Avi On Mon, Sep 24, 2012 at 12:36 AM, Lawrence Conroy <lconroy@insensate.co.uk>wrote:
Hi folks, Fair enough, but ... the original problem is that the users are/will be porting their current phone numbers, so they're all over the map. That's going to make routing/pattern matching a challenge, because there IS no obvious routeset pattern. Honestly, ENUM is easier in that scenario.
all the best, Lawrence
On 23 Sep 2012, at 23:03, Brian Foster wrote:
Mod_lcr? On Sep 23, 2012 6:01 PM, "Stanislav Sinyagin" <ssinyagin@yahoo.com> wrote:
Basically your inbouind and outbound calls should go through the same sequence of checkups, and look for a local user number. Then outbound calls should resort in your PSTN trunk, and inbound calls resort in a 404 Not Found. Also I guess you want to charge your users the same rate regardless if it's on-net or off-net calls, so CDR need to be taken care of too.
------------------------------ *From:* Stanislav Sinyagin <ssinyagin@yahoo.com> *To:* FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> *Sent:* Sunday, September 23, 2012 10:31 PM *Subject:* Re: [Freeswitch-users] Keeping local calls local
well, that was only a hint, but not the whole solution :) In your case, it would require some database lookup, or maybe the dialplan should go through the customer numbers before sending the call to PSTN.
enum would be a good option instead of database lookup, as was already proposed on the list.
In any case, this all requires a bit of engineering and design effort.
------------------------------ *From:* D'Arcy Cain <darcy@Vex.Net> *To:* FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> *Cc:* Stanislav Sinyagin <ssinyagin@yahoo.com> *Sent:* Sunday, September 23, 2012 10:04 PM *Subject:* Re: [Freeswitch-users] Keeping local calls local
On Sun, 23 Sep 2012 11:17:37 -0700 (PDT) Stanislav Sinyagin <ssinyagin@yahoo.com> wrote:
here's a piece of my dialplan in "default" context. It simply catches such calls and transfers them directly to the public context. The public context matches local DID numbers and transfers them to corresponding extensions in default context:
<extension name="internal_did"> <condition field="destination_number" expression="^($${default_did_prefix}\d+)$"> <action application="transfer" data="$1 XML public"/> </condition> </extension>
The "default_did_prefix" variable holds my DID number block.
Looks good but my problem is that I do not have a DID block. Clients are porting their numbers so they are all over the place. My first three numbers in the system are from three different area codes. I would need to include all of my numbers in the expression somehow. Wit just three I can use '|' but that won't be practical when I have hundreds or thousands.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
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
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
_________________________________________________________________________ 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
_________________________________________________________________________ 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
On Mon, 24 Sep 2012 00:40:37 +0200 Avi Marcus <avi@avimarcus.net> wrote:
enum or a DB query to your routing table for inbound calls, e.g. using mod_odbc_query <http://wiki.freeswitch.org/wiki/Mod_odbc_query>.
I considered this but balked at the idea of using ODBC. I didn't want to add another layer. I am considering creating an application in Python to connect to my database and get all the needed details. -- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
you probably don't need to program it in Python: Daniel-Constantin wrote a nice guide where a Lua script generates per-user XML on the fly from an SQL database: http://asipto.com/u/k33fs ----- Original Message -----
From: D'Arcy Cain <darcy@Vex.Net> To: FreeSWITCH Users Help <freeswitch-users@lists.freeswitch.org> Cc: Sent: Monday, September 24, 2012 7:52 PM Subject: Re: [Freeswitch-users] Keeping local calls local
On Mon, 24 Sep 2012 00:40:37 +0200 Avi Marcus <avi@avimarcus.net> wrote:
enum or a DB query to your routing table for inbound calls, e.g. using mod_odbc_query <http://wiki.freeswitch.org/wiki/Mod_odbc_query>.
I considered this but balked at the idea of using ODBC. I didn't want to add another layer. I am considering creating an application in Python to connect to my database and get all the needed details.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
_________________________________________________________________________ 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
... python is also an extra layer. Odbc query should be a high performance interpreter-less mod. I use it to route and rate inbound public calls. -Avi On Sep 24, 2012 10:06 PM, "Stanislav Sinyagin" <ssinyagin@yahoo.com> wrote: you probably don't need to program it in Python: Daniel-Constantin wrote a nice guide where a Lua script generates per-user XML on the fly from an SQL database: http://asipto.com/u/k33fs ----- Original Message -----
From: D'Arcy Cain <darcy@Vex.Net> To: FreeSWITCH Users Help <f...
Sent: Monday, September 24, 2012 7:52 PM Subject: Re: [Freeswitch-users] Keeping local calls loc...
_________________________________________________________________________ Professional FreeSWITC...
On Mon, 24 Sep 2012 00:40:37 +0200 Avi Marcus <avi@avimarcus.net> wrote:
enum or a DB query to your routing table for inbound calls, e.g. using mod_odbc_query <http://wiki.freeswitch.org/wiki/Mod_odbc_query>.
After some investigation I stumbled across "user_exists" and thought that something like this might work in dialplan/default.xml and public.xml. <extension name="user_found"> <condition field="${user_exists(id ${destination_number} $${domain})}" expression="true"> <action application="transfer" data="${destination_number}" /> </extension> I also tried "bridge" instead of "transfer" but either way FreeSWITCH fails to restart. Stopping FreeSWITCH. Killing: 14561 Waiting for PIDS: 14561. Starting freeswitch. WARNING: Wasting up to 8 megs of memory per thread. 16555 Backgrounding. FreeSWITCH[16554] System Ready pid:16555 [ERROR] fs_cli.c:1376 main() Error Connecting [Socket Connection Error] There is nothing in the log. Can anyone see what I am doing wrong here? -- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
On Tue, 25 Sep 2012 08:44:58 -0400 D'Arcy Cain <darcy@Vex.Net> wrote:
<extension name="user_found"> <condition field="${user_exists(id ${destination_number} $${domain})}" expression="true"> <action application="transfer" data="${destination_number}" /> </extension>
Never mind. BCAS error. Here is what works. <extension name="VEX_user_found"> <condition field="${user_exists(id ${destination_number} $${domain})}" expression="true"> <action application="bridge" data="user/${destination_number}@$${domain}"/> </condition> </extension> -- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
Hi there, full disclosure -- on ENUM, I'm biased :). Seriously, if you think you'll have a lot of users, and those users will be spread over the map, a relatively straightforward way of doing this is to have your own private ENUM tree in DNS (apex of which could be in e164.vex.net, for example). You provision the sub-domains matching your user's numbers with E2U+sip NAPTRs pointing at your server. If there IS no hit in this private ENUM tree, fire the call off to your provider. Your users dial the "full" number, that full number hits the ENUM tree, and if the DN is one of yours, mod_enum will extract the SIP URL from the matching DNS domain and does its stuff. Done. (you can do this with a very basic XML dialplan -- just make sure that the ENUM lookup comes ->first<-, and that the dialplan processing continues if there is no ENUM hit). Cost -- a local DNS server plus some script to provision the DNS record into your private DNS tree. [and a mental squint headache when writing the script to converting from a phone number like +15552345987 to 7.8.9.5.4.3.2.5.5.5.1.e164.vex.net.] I've used BIND/DLZ&PSQL, but Bert's PowerDNS should be fine as well. Remember that you'll be doing a DNS query for every call attempt, so DO keep the DNS server "close", and don't use some "less than perfect" DNS software. Is it worth it for a few 10s of users? Nah (unless you're a propellor head, or expect to grow). Is it worth it for hundreds of users? Yup. Is it worth it for thousands or millions of users? [I have reason to believe this is what a certain nationwide cable company C does internally for its customers across the 'States -- avoiding number dips saves a shedload of money] Just a thought. all the best, Lawrence [author of RFC6116 ;] On 23 Sep 2012, at 21:04, D'Arcy Cain wrote:
On Sun, 23 Sep 2012 11:17:37 -0700 (PDT) Stanislav Sinyagin <ssinyagin@yahoo.com> wrote:
here's a piece of my dialplan in "default" context. It simply catches such calls and transfers them directly to the public context. The public context matches local DID numbers and transfers them to corresponding extensions in default context:
<extension name="internal_did"> <condition field="destination_number" expression="^($${default_did_prefix}\d+)$"> <action application="transfer" data="$1 XML public"/> </condition> </extension>
The "default_did_prefix" variable holds my DID number block.
Looks good but my problem is that I do not have a DID block. Clients are porting their numbers so they are all over the place. My first three numbers in the system are from three different area codes. I would need to include all of my numbers in the expression somehow. Wit just three I can use '|' but that won't be practical when I have hundreds or thousands.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
On Sun, 23 Sep 2012 22:54:53 +0100 Lawrence Conroy <lconroy@insensate.co.uk> wrote:
Hi there, full disclosure -- on ENUM, I'm biased :).
Not having much joy with enum. I tried the CLI example and got nothing back. I also tried some other numbers including ones suggested on the e164.org site with no better luck. I then tried one of my own numbers and FreeSWITCH crashed with a socket error. -- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
Hi again, Interesting -- socket error crasher. OK. This stuff -should- be pretty simple. Normally, I write my own (or get some poor programmer to suffer [for] me), so I haven't looked at mod_enum's code yet. Q: What version of FS were you using (and what platform)? I'll set up a test config and see if I can reproduce this (won't be until the weekend, I'm afraid). all the best, Lawrence On 24 Sep 2012, at 18:55, D'Arcy Cain wrote:
On Sun, 23 Sep 2012 22:54:53 +0100 Lawrence Conroy <lconroy@insensate.co.uk> wrote:
Hi there, full disclosure -- on ENUM, I'm biased :).
Not having much joy with enum. I tried the CLI example and got nothing back. I also tried some other numbers including ones suggested on the e164.org site with no better luck. I then tried one of my own numbers and FreeSWITCH crashed with a socket error.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
going back to your original message, 1. having a separate condition for every user means that the switch will have to search through hundreds of regular expressions on every call. Not nice and a waste of cpu time. So, you need to look up some database instead. 2. after an unsuccessful bridge, you resort in voicemail. Are you sure all your users want voicemail? Some will prefer the call to be unanswered, and some will want to forward the call if unsuccessful. Also some will want to always forward the calls. So, again you need to look up in user preferences database. also probably it makes sense to offload the user authentication and location database to an OpenSIPS or some other proxy, and let FreeSWITCH deal with call routing, media and voicemail.
________________________________ From: D'Arcy Cain <darcy@Vex.Net> To: FreeSWITCH-users@lists.freeswitch.org Sent: Sunday, September 23, 2012 5:01 PM Subject: [Freeswitch-users] Keeping local calls local
The first thing I found with the basic setup of FreeSWITCH was that calls between my own clients still went to my provider. This seemed like a waste to me. To handle calls coming in I generate an XML file called dialplan/public/00_Local.xml. Here is an example entry from it.
<extension name="Local_4164251212"> <condition field="destination_number" expression="^(4164251212)$"> <action application="export" data="dialed_extension=$1"/> <action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/> <action application="bind_meta_app" data="2 b s record_session::$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/> <action application="bind_meta_app" data="4 b s execute_extension::att_xfer XML features"/> <action application="set" data="ringback=${us-ring}"/> <action application="set" data="transfer_ringback=$${hold_music}"/> <action application="set" data="call_timeout=30"/> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="continue_on_fail=true"/> <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/> <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/> <action application="bridge" data="user/${dialed_extension}@${domain_name}"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/> </condition> </extension>
I am still trying to figure out exactly what everything in there does but it seems to do the job. Calls originating outside get delivered to the correct client's phone. Calls between clients go out to the provider and then come back in as if it was external.
I worked around this by symlinking this file to the dialplan/default directory. This works but I wonder if this is the best way to accomplish this.
Side question, can I create a simple alias for all of my DIDs and make one condition that tests that alias somehow?
Cheers.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
_________________________________________________________________________ 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
Im still liking the mod_lcr idea since you should be doing it anyway for something like this. On Sep 23, 2012 7:41 PM, "Stanislav Sinyagin" <ssinyagin@yahoo.com> wrote:
going back to your original message,
1. having a separate condition for every user means that the switch will have to search through hundreds of regular expressions on every call. Not nice and a waste of cpu time. So, you need to look up some database instead.
2. after an unsuccessful bridge, you resort in voicemail. Are you sure all your users want voicemail? Some will prefer the call to be unanswered, and some will want to forward the call if unsuccessful. Also some will want to always forward the calls. So, again you need to look up in user preferences database.
also probably it makes sense to offload the user authentication and location database to an OpenSIPS or some other proxy, and let FreeSWITCH deal with call routing, media and voicemail.
________________________________ From: D'Arcy Cain <darcy@Vex.Net> To: FreeSWITCH-users@lists.freeswitch.org Sent: Sunday, September 23, 2012 5:01 PM Subject: [Freeswitch-users] Keeping local calls local
The first thing I found with the basic setup of FreeSWITCH was that calls between my own clients still went to my provider. This seemed like a waste to me. To handle calls coming in I generate an XML file called dialplan/public/00_Local.xml. Here is an example entry from it.
<extension name="Local_4164251212"> <condition field="destination_number" expression="^(4164251212)$"> <action application="export" data="dialed_extension=$1"/> <action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/> <action application="bind_meta_app" data="2 b s record_session::$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/> <action application="bind_meta_app" data="4 b s execute_extension::att_xfer XML features"/> <action application="set" data="ringback=${us-ring}"/> <action application="set" data="transfer_ringback=$${hold_music}"/> <action application="set" data="call_timeout=30"/> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="continue_on_fail=true"/> <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/> <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/> <action application="bridge" data="user/${dialed_extension}@ ${domain_name}"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/> </condition> </extension>
I am still trying to figure out exactly what everything in there does but it seems to do the job. Calls originating outside get delivered to the correct client's phone. Calls between clients go out to the provider and then come back in as if it was external.
I worked around this by symlinking this file to the dialplan/default directory. This works but I wonder if this is the best way to accomplish this.
Side question, can I create a simple alias for all of my DIDs and make one condition that tests that alias somehow?
Cheers.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
_________________________________________________________________________ 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
_________________________________________________________________________ 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
Brian, sorry, but mod_lcr for routing internal DIDs sounds like a terrible idea. a) it's not DRY -- you'll have to duplicate your internal routing tables. b) if it fails to connect to the "local" endpoint.. then if you're using mod_lcr for the routing too, it will then try the external carriers... which come back in and it surely won't work better than connecting directly! -Avi On Mon, Sep 24, 2012 at 3:08 AM, Brian Foster <bdfoster@endigotech.com>wrote:
Im still liking the mod_lcr idea since you should be doing it anyway for something like this. On Sep 23, 2012 7:41 PM, "Stanislav Sinyagin" <ssinyagin@yahoo.com> wrote:
going back to your original message,
1. having a separate condition for every user means that the switch will have to search through hundreds of regular expressions on every call. Not nice and a waste of cpu time. So, you need to look up some database instead.
2. after an unsuccessful bridge, you resort in voicemail. Are you sure all your users want voicemail? Some will prefer the call to be unanswered, and some will want to forward the call if unsuccessful. Also some will want to always forward the calls. So, again you need to look up in user preferences database.
also probably it makes sense to offload the user authentication and location database to an OpenSIPS or some other proxy, and let FreeSWITCH deal with call routing, media and voicemail.
________________________________ From: D'Arcy Cain <darcy@Vex.Net> To: FreeSWITCH-users@lists.freeswitch.org Sent: Sunday, September 23, 2012 5:01 PM Subject: [Freeswitch-users] Keeping local calls local
The first thing I found with the basic setup of FreeSWITCH was that calls between my own clients still went to my provider. This seemed like a waste to me. To handle calls coming in I generate an XML file called dialplan/public/00_Local.xml. Here is an example entry from it.
<extension name="Local_4164251212"> <condition field="destination_number" expression="^(4164251212)$"> <action application="export" data="dialed_extension=$1"/> <action application="bind_meta_app" data="1 b s execute_extension::dx XML features"/> <action application="bind_meta_app" data="2 b s record_session::$${recordings_dir}/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> <action application="bind_meta_app" data="3 b s execute_extension::cf XML features"/> <action application="bind_meta_app" data="4 b s execute_extension::att_xfer XML features"/> <action application="set" data="ringback=${us-ring}"/> <action application="set" data="transfer_ringback=$${hold_music}"/> <action application="set" data="call_timeout=30"/> <action application="set" data="hangup_after_bridge=true"/> <action application="set" data="continue_on_fail=true"/> <action application="hash" data="insert/${domain_name}-call_return/${dialed_extension}/${caller_id_number}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${dialed_extension}/${uuid}"/> <action application="set" data="called_party_callgroup=${user_data(${dialed_extension}@${domain_name} var callgroup)}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/${called_party_callgroup}/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial_ext/global/${uuid}"/> <action application="hash" data="insert/${domain_name}-last_dial/${called_party_callgroup}/${uuid}"/> <action application="bridge" data="user/${dialed_extension}@ ${domain_name}"/> <action application="answer"/> <action application="sleep" data="1000"/> <action application="bridge" data="loopback/app=voicemail:default ${domain_name} ${dialed_extension}"/> </condition> </extension>
I am still trying to figure out exactly what everything in there does but it seems to do the job. Calls originating outside get delivered to the correct client's phone. Calls between clients go out to the provider and then come back in as if it was external.
I worked around this by symlinking this file to the dialplan/default directory. This works but I wonder if this is the best way to accomplish this.
Side question, can I create a simple alias for all of my DIDs and make one condition that tests that alias somehow?
Cheers.
-- D'Arcy J.M. Cain System Administrator, Vex.Net http://www.Vex.Net/ IM:darcy@Vex.Net
_________________________________________________________________________ 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
_________________________________________________________________________ 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
_________________________________________________________________________ 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
participants (6)
-
Avi Marcus
-
Brian Foster
-
curriegrad2004
-
D'Arcy Cain
-
Lawrence Conroy
-
Stanislav Sinyagin