Introducing the myasteriskconf gem
Usage
The most basic example illustrates registering a couple of phones.
file: myasteriskconf1.md
# Asterisk ## SIP externaddr: 81.110.222.62 localnet: 192.168.4.0/255.255.0.0 ## Phones C7912:1234/210 C7905:1234/220
require 'myasteriskconf'
mac = MyAsteriskConf.new('/home/james/myasteriskconf1.md', debug: false)
puts mac.to_sip
[general] localnet=192.168.4.0/255.255.0.0 externaddr = 81.110.222.62 [c7912] defaultuser=c7912 secret=1234 type=friend host=dynamic qualify=yes context=my-phones insecure=invite,port canreinvite=no disallow=all ; better for custom-tunning codec selection allow=ulaw allow=alaw allow=gsm [c7905] defaultuser=c7905 secret=1234 type=friend host=dynamic qualify=yes context=my-phones insecure=invite,port canreinvite=no disallow=all ; better for custom-tunning codec selection allow=ulaw allow=alaw allow=gsm
puts mac.to_extensions
[my-phones] exten => 210,1, Answer() exten => 210,n,Dial(SIP/C7912,40) exten => 210,n,Hangup() exten => 220,1, Answer() exten => 220,n,Dial(SIP/C7905,40) exten => 220,n,Hangup() exten => 1009,1,Dial(SIP/c7912&SIP/c7905,40) exten => 1009,n,Hangup()
In the example below, the SIP registration provider is added.
file: myasteriskconf2.md
# Asterisk ## SIP externaddr: 81.110.222.32 localnet: 192.168.4.0/255.255.0.0 ### Register 5258619:secret@sipgate.co.uk/2012 ## Phones C7912:1234/210 C7905:1234/220
require 'myasteriskconf'
mac = MyAsteriskConf.new('/home/james/myasteriskconf2.md', debug: false)
puts mac.to_sip
[general]
localnet=192.168.4.0/255.255.0.0
externaddr = 81.110.222.32
register => 5258619:secret@sipgate.co.uk/2012
[sipgate]
disable=all
type=peer
context=from-sipgate
defaultuser=5258619
fromuser=5258619
authuser=5258619
secret=secret
host=sipgate.co.uk
fromdomain=sipgate.co.uk
dtmfmode=rfc2833
insecure=invite,port
qualify=yes
canreinvite=no
nat=force_rport,comedia
disallow=all
;allow=ulaw
allow=alaw
allow=gsm
allow=g729
[c7912]
defaultuser=c7912
secret=1234
type=friend
host=dynamic
qualify=yes
context=my-phones
insecure=invite,port
canreinvite=no
disallow=all ; better for custom-tunning codec selection
allow=ulaw
allow=alaw
allow=gsm
[c7905]
defaultuser=c7905
secret=1234
type=friend
host=dynamic
qualify=yes
context=my-phones
insecure=invite,port
canreinvite=no
disallow=all ; better for custom-tunning codec selection
allow=ulaw
allow=alaw
allow=gsm
puts mac.to_extensions
[my-phones] exten => 210,1, Answer() exten => 210,n,Dial(SIP/C7912,40) exten => 210,n,Hangup() exten => 220,1, Answer() exten => 220,n,Dial(SIP/C7905,40) exten => 220,n,Hangup() exten => 1009,1,Dial(SIP/c7912&SIP/c7905,40) exten => 1009,n,Hangup() [from-sipgate] exten => 2012,n,Goto(my-phones,1009,1) exten => 2012,n,Hangup()
In this 3rd example below, a few outbound extensions are added.
file: myasteriskconf3.md
# Asterisk
## SIP
externaddr: 81.110.222.32
localnet: 192.168.4.0/255.255.0.0
### Register
5258619:secret@sipgate.co.uk/2012
## Phones
C7912:1234/210
C7905:1234/220
## Extensions
### Outbound
\d{6}: 0131(EXTEN)
\d{11}: (EXTEN)
999: (EXTEN)
101: (EXTEN)
9.: (EXTEN1)
require 'myasteriskconf'
mac = MyAsteriskConf.new('/home/james/myasteriskconf3.md', debug: false)
puts mac.to_sip
[general]
localnet=192.168.4.0/255.255.0.0
externaddr = 81.110.222.32
register => 5258619:secret@sipgate.co.uk/2012
[sipgate]
disable=all
type=peer
context=from-sipgate
defaultuser=5258619
fromuser=5258619
authuser=5258619
secret=secret
host=sipgate.co.uk
fromdomain=sipgate.co.uk
dtmfmode=rfc2833
insecure=invite,port
qualify=yes
canreinvite=no
nat=force_rport,comedia
disallow=all
;allow=ulaw
allow=alaw
allow=gsm
allow=g729
[c7912]
defaultuser=c7912
secret=1234
type=friend
host=dynamic
qualify=yes
context=my-phones
insecure=invite,port
canreinvite=no
disallow=all ; better for custom-tunning codec selection
allow=ulaw
allow=alaw
allow=gsm
[c7905]
defaultuser=c7905
secret=1234
type=friend
host=dynamic
qualify=yes
context=my-phones
insecure=invite,port
canreinvite=no
disallow=all ; better for custom-tunning codec selection
allow=ulaw
allow=alaw
allow=gsm
puts mac.to_extensions
[my-phones]
exten => 210,1, Answer()
exten => 210,n,Dial(SIP/C7912,40)
exten => 210,n,Hangup()
exten => 220,1, Answer()
exten => 220,n,Dial(SIP/C7905,40)
exten => 220,n,Hangup()
exten => 1009,1,Dial(SIP/c7912&SIP/c7905,40)
exten => 1009,n,Hangup()
exten => _XXXXXX,1,Dial(SIP/0131${EXTEN}@sipgate,60,tr)
exten => _XXXXXX,n,Playback(invalid)
exten => _XXXXXX,n,Hangup
exten => _XXXXXXXXXXX,1,Dial(SIP/${EXTEN}@sipgate,60,tr)
exten => _XXXXXXXXXXX,n,Playback(invalid)
exten => _XXXXXXXXXXX,n,Hangup
exten => 999,1,Dial(SIP/${EXTEN}@sipgate,60,tr)
exten => 999,n,Playback(invalid)
exten => 999,n,Hangup
exten => 101,1,Dial(SIP/${EXTEN}@sipgate,60,tr)
exten => 101,n,Playback(invalid)
exten => 101,n,Hangup
exten => _9.,1,Dial(SIP/(EXTEN1)@sipgate,60,tr)
exten => _9.,n,Playback(invalid)
exten => _9.,n,Hangup
[from-sipgate]
exten => 2012,n,Goto(my-phones,1009,1)
exten => 2012,n,Hangup()
Resources
- myasteriskconf https://rubygems.org/gems/myasteriskconf
asterisk sipgate config conf configuration