How to Use MySipSwitch
Some nice examples ! but if i understand correctly, with all these examples. the first 2 digits or not dialled out ? what if i want to dial out all keyed in digits ?
I want to convert my dialplan to Ruby:
exten =~ ^(8|613|612|958|514),1,Switch(FWD)
exten =~ ^(1800|1866|1877),1,Switch(*${EXTEN}@FWD)
exten => _08X.,1,Switch(*318${EXTEN:2}@FWD)
exten => _1777X.,1,Switch(CALLCENTRIC)
exten => _*75X.,1,Switch(*75${EXTEN:3}@CALLCENTRIC,true)
exten => _*1X.,1,Switch(${EXTEN:2}@BRUJULA)
Do i need to make something for my incoming calls also, if all incoming calls should go to my MSS account ?
I want to convert my dialplan to Ruby:
exten =~ ^(8|613|612|958|514),1,Switch(FWD)
exten =~ ^(1800|1866|1877),1,Switch(*${EXTEN}@FWD)
exten => _08X.,1,Switch(*318${EXTEN:2}@FWD)
exten => _1777X.,1,Switch(CALLCENTRIC)
exten => _*75X.,1,Switch(*75${EXTEN:3}@CALLCENTRIC,true)
exten => _*1X.,1,Switch(${EXTEN:2}@BRUJULA)
Do i need to make something for my incoming calls also, if all incoming calls should go to my MSS account ?
Thanks, The Fug.
gear: my ISP's Zyxel Modem/Router in bridge, Sitecom WL309 Router, Siemens Gigaset 301D
gear: my ISP's Zyxel Modem/Router in bridge, Sitecom WL309 Router, Siemens Gigaset 301D
Hi TheFug,
Based on what you have there a Ruby equivalent Ruby dial plan would be
Regards,
Aaron
Based on what you have there a Ruby equivalent Ruby dial plan would be
Code: Select all
sys.Log("call received on #{req.URI.ToString()} from #{req.Header.From.FromURI.ToString()} at #{Time.now}.")
if sys.Out then
sys.Log("Outgoing call from user domain=#{sys.FromDomain}.")
case req.URI.User
when /^(8|613|612|958|514)/ then sys.Dial("FWD")
when /^(1800|1866|1877)/ then sys.Dial("*${dst}@FWD")
when /^08/ then sys.Dial("*318${dst:2}@FWD")
when /^1777/ then sys.Dial("CALLCENTRIC")
when /^\*75/ then sys.Dial("*75${dst:3}@CALLCENTRIC")
when /^\*1/ then sys.Dial("${dst:2}@BRUJULA")
end
else
sys.Log("Incoming call to domain=#{sys.ToDomain} from host #{req.Header.From.FromURI.Host}.")
if sys.IsAvailable() then
sys.Log("#{sys.Username} is online.")
sys.Dial("#{sys.Username}@local")
else
sys.Log("#{sys.Username} is not online.")
sys.Respond(480, "#{sys.Username} Not online")
end
end
Aaron
It didn't worked the first time because i forgot to add .....#Ruby...... stupid me
And now it stopped, i hear a 3 tone response in the handset...
I guess i made a start now, with Ruby, i let it rest for now, i'll pick it up ..monday, with a fresh start...
And now it stopped, i hear a 3 tone response in the handset...
I guess i made a start now, with Ruby, i let it rest for now, i'll pick it up ..monday, with a fresh start...
Thanks, The Fug.
gear: my ISP's Zyxel Modem/Router in bridge, Sitecom WL309 Router, Siemens Gigaset 301D
gear: my ISP's Zyxel Modem/Router in bridge, Sitecom WL309 Router, Siemens Gigaset 301D
TheFug wrote:It didn't worked the first time because i forgot to add .....#Ruby...... stupid me
And now it stopped, i hear a 3 tone response in the handset...
I guess i made a start now, with Ruby, i let it rest for now, i'll pick it up ..monday, with a fresh start...
Well, i noticed some other things where not working also, so i restarted everything, pc, modem, C450IP, and YES ! it works perfect with the Ruby dialplan ! thankyou, Aaron ! this is great !
This opens a new door to more advanced features i had in mind....
Thanks, The Fug.
gear: my ISP's Zyxel Modem/Router in bridge, Sitecom WL309 Router, Siemens Gigaset 301D
gear: my ISP's Zyxel Modem/Router in bridge, Sitecom WL309 Router, Siemens Gigaset 301D
Thank you, for your help Aaron, made some additions on what you gave me,
and it now looks like this:
For some providers, i want to have a SIPtrace function switched on,
have searched for this in the older posts, but couldn't find it,
can this be done per provider ?
and it now looks like this:
Code: Select all
#Ruby
sys.Log("call received on #{req.URI.ToString()} from #{req.Header.From.FromURI.ToString()} at #{Time.now}.")
if sys.Out then
sys.Log("Outgoing call from user domain=#{sys.FromDomain}.")
case req.URI.User
when /^(8|613|612|958|514)/ then sys.Dial("FWD")
when /^(1800|1866|1877)/ then sys.Dial("*${dst}@FWD")
when /^(0|00)/ then sys.Dial("${dst}@INTERVOIP")
when /^08/ then sys.Dial("*318${dst:2}@FWD")
when /^1777/ then sys.Dial("CALLCENTRIC")
when /^\*75/ then sys.Dial("*75${dst:3}@CALLCENTRIC")
when /^\*1/ then sys.Dial("${dst:2}@BRUJULA")
when /^\*2/ then sys.Dial("${dst:2}@SIPGATE")
when /^\*3/ then sys.Dial("${dst:2}@ORBTALK")
when /^\*4/ then sys.Dial("${dst:2}@FWD")
when /^\*5/ then sys.Dial("${dst:2}@IXCALL")
when /^\*6/ then sys.Dial("${dst:2}@VOXALOT")
when /^\*7/ then sys.Dial("${dst:2}@CALLCENTRIC")
end
else
sys.Log("Incoming call to domain=#{sys.ToDomain} from host #{req.Header.From.FromURI.Host}.")
if sys.IsAvailable() then
sys.Log("#{sys.Username} is online.")
sys.Dial("#{sys.Username}@local")
else
sys.Log("#{sys.Username} is not online.")
sys.Respond(480, "#{sys.Username} Not online")
end
end
have searched for this in the older posts, but couldn't find it,
can this be done per provider ?
Thanks, The Fug.
gear: my ISP's Zyxel Modem/Router in bridge, Sitecom WL309 Router, Siemens Gigaset 301D
gear: my ISP's Zyxel Modem/Router in bridge, Sitecom WL309 Router, Siemens Gigaset 301D
Hi all,
I posted a quick guide about the default dial plan in Ruby :
The Default Ruby Dial Plan Demystified
HTH
Guillaume
I posted a quick guide about the default dial plan in Ruby :
The Default Ruby Dial Plan Demystified
HTH
Guillaume
Blueface [url=http://www.blueface.ie/]Phone[/url] Service
Available Ruby Modules
(for more see http://www.mysipswitch.com/forum/viewtopic.php?t=399 )
CallBack Module
sys.Callback(string dest1, string dest2) - Initiates a call to dest1 and if successful then calls dest2 and bridges the calls together. The dest1 and dest2 parameters are SIP Provider constructs.
sys.Callback(string dest1, string dest2, int delay) - After specified delay, it initiates a call to dest1 and if successful then calls dest2 and bridges the calls together. The dest1 and dest2 parameters are SIP Provider constructs.
Dial Module
A note about the sys.Dial () function.
It can be used in a few forms:
-sys.Dial("ProviderName")
When used in this form, the number called via the specified provider by default is the value stored in the variable req.URI.User
When you are placing a call, req.URI.user is the number you're calling.
When an incoming call is coming in, req.URI.user is your account or subaccount username.
-sys.Dial("1${dst}@ProviderName")
This form is more useful when used for outgoing call routing, allowing one to modify how the number you've dialed is actually dialed via the specified provider. In this case ${dst} is the actual number as you dialed it.
sys.Dial(string provider) - The provider parameter must match a SIP Provider name.
The Dial command will forward the number as dialed to the SIP Provider.
The Dial command will forward the number with modifications (eg. add 1 to front) to the SIP Provider.
sys.Dial(string provider, int timeout)- Dial number, and if there is no answer after specified length of time (in seconds) then move to the next command
Number modification can also be applied (to adjust number entered based on requirements of each provider):
eg.
sys.Dial(string number@provider&string number2@provider)- Simultaneous calls to two or more destinations
sys.Dial(provider1|provider2|provider3)- Number called is passed to the first provider, should it fail, the call is attempted over the second provider, then the third and so on (for those familiar with Asterisk terms, this is the equivalent of FallBack Trunks).
Number modification can also be applied (to adjust number entered based on requirements of each provider):
eg.
sys.RegexMatch (variable, "value-to-match") - A matching statement to check the value of the specific variable. Should the match be 'True' then other actions can be allowed to occur when this is part of an if statement.
During and Incoming Call
req.URI.User = The Username of the MSS acct. receiving the call (this the username of your acct., or sub-account, or 'anything.mssuser', if it is a call for anything.mssuser@sip.mysipswitch.com)
req.URI.Host = The host portion of the URI for which the call is coming in (eg. sip.mysipswitch.com or the corresponding IP)
req.Header.From.FromName = Name of Caller
req.Header.From.FromURI.User = Number of Caller (or their username if the call is coming from another MSS or VoIP user )
req.Header.From.FromURI.Host = The Host of the caller (this is usually an IP adress that indentifies the provider your caller is using to call you)
During an Outgoing call
req.URI.User = Number you are calling
req.Header.From.FromURI.User = Your account username (account doing the calling)
req.Header.from.FromURI.Host = Your provider with which you're registering (this is usually the IP for sip.mysipswitch.com )
req.Header.From.FromName = Your Name
Adjusting Outgoing Caller ID:
(this is one way to adjust the outgoing CID, you can also make modifications to the 'From Header' field when setting up a provider)
During an outgoing or Forwarded Call, you can adjust the three fields above to set your customize your Caller ID.
eg.
The above script would result in a From header of:
From: "Joe Bloggs" <sip:01234567@mydomain.com>
But PLEASE NOTE that the field that is generally used for authentication is req.Header.From.FromURI.User so be aware your calls could fail if it is modified.
(for more see http://www.mysipswitch.com/forum/viewtopic.php?t=399 )
CallBack Module
sys.Callback(string dest1, string dest2) - Initiates a call to dest1 and if successful then calls dest2 and bridges the calls together. The dest1 and dest2 parameters are SIP Provider constructs.
Code: Select all
# Ruby dialplan example for sys.Callback
sys.Log("call received uri=#{req.URI.User}")
sys.Callback("012345@blueface", "023456@voipstunt")
sys.Callback(string dest1, string dest2, int delay) - After specified delay, it initiates a call to dest1 and if successful then calls dest2 and bridges the calls together. The dest1 and dest2 parameters are SIP Provider constructs.
Code: Select all
# Ruby dialplan example for sys.Callback
sys.Log("call received uri=#{req.URI.User}")
sys.Callback("012345@blueface", "023456@voipstunt" , 10)
A note about the sys.Dial () function.
It can be used in a few forms:
-sys.Dial("ProviderName")
When used in this form, the number called via the specified provider by default is the value stored in the variable req.URI.User
When you are placing a call, req.URI.user is the number you're calling.
When an incoming call is coming in, req.URI.user is your account or subaccount username.
-sys.Dial("1${dst}@ProviderName")
This form is more useful when used for outgoing call routing, allowing one to modify how the number you've dialed is actually dialed via the specified provider. In this case ${dst} is the actual number as you dialed it.
sys.Dial(string provider) - The provider parameter must match a SIP Provider name.
The Dial command will forward the number as dialed to the SIP Provider.
Code: Select all
# Ruby dialplan example for sys.Dial
sys.Log("call received uri=#{req.URI.User}")
sys.Dial("ProviderName")
Code: Select all
# Ruby dialplan example for sys.Dial
sys.Log("call received uri=#{req.URI.User}")
sys.Dial("1${dst}@ProviderName")
Code: Select all
# Ruby dialplan example for sys.Dial
sys.Log("call received uri=#{req.URI.User}")
sys.Dial("Provider1", 10)
sys.Dial("Provider2", 10)
sys.Dial("Provider3", 10)
eg.
Code: Select all
sys.Dial("1${dst}@Provider1", 10)
sys.Dial("00${dst}@Provider2", 10)
sys.Dial("${dst:3}@Provider3", 10)
Code: Select all
# Ruby dialplan example for sys.Dial
sys.Log("call received uri=#{req.URI.User}")
sys.Dial("Number@Provider1&Number2@Provider1&Number3@Provider2)
Code: Select all
# Ruby dialplan example for sys.Dial
sys.Log("call received uri=#{req.URI.User}")
sys.Dial("Provider1|Provider2|Provider3)
eg.
Code: Select all
sys.Dial("1${dst}@Provider1|00${dst}@Provider2|${dst:3}Provider3")
Code: Select all
if sys.RegexMatch(req.URI.User, "skype.mocierion") then
sys.log("Other modules can be added here, like sys.Dial or sys.Callback")
req.URI.User = The Username of the MSS acct. receiving the call (this the username of your acct., or sub-account, or 'anything.mssuser', if it is a call for anything.mssuser@sip.mysipswitch.com)
req.URI.Host = The host portion of the URI for which the call is coming in (eg. sip.mysipswitch.com or the corresponding IP)
req.Header.From.FromName = Name of Caller
req.Header.From.FromURI.User = Number of Caller (or their username if the call is coming from another MSS or VoIP user )
req.Header.From.FromURI.Host = The Host of the caller (this is usually an IP adress that indentifies the provider your caller is using to call you)
During an Outgoing call
req.URI.User = Number you are calling
req.Header.From.FromURI.User = Your account username (account doing the calling)
req.Header.from.FromURI.Host = Your provider with which you're registering (this is usually the IP for sip.mysipswitch.com )
req.Header.From.FromName = Your Name
Adjusting Outgoing Caller ID:
(this is one way to adjust the outgoing CID, you can also make modifications to the 'From Header' field when setting up a provider)
During an outgoing or Forwarded Call, you can adjust the three fields above to set your customize your Caller ID.
eg.
Code: Select all
req.Header.From.FromURI.User = "01234567"
req.Header.from.FromURI.Host = "mydomain.com"
req.Header.From.FromName = "Joe Bloggs"
From: "Joe Bloggs" <sip:01234567@mydomain.com>
But PLEASE NOTE that the field that is generally used for authentication is req.Header.From.FromURI.User so be aware your calls could fail if it is modified.
You can use a wizard to create your 1st ruby dial plan, see : http://www.mysipswitch.com/rubyzard.aspx
Blueface [url=http://www.blueface.ie/]Phone[/url] Service
Excellent! good and necessary workgbonnet wrote:You can use a wizard to create your 1st ruby dial plan, see : http://www.mysipswitch.com/rubyzard.aspx