fbpx

Asterisk och Megaphone

OBS: Användning av denna dokumentation sker på egen risk!

Denna text har skapats (filer bifogade) som ett självändamål för att spara in tid och hårbortfall vid eventuella framtida omkonfigurationer av Asterisk, om detta behov någon gång skulle uppstå. Det finns ingen egentlig support i bemärkelsen ”Hej, hur gör man detta? Jag får inte rätt på det!” – allt som egentligen behövs är mycket tålamod och lite engelska kunskaper, eftersom grundhjälpen har inhämtats från http://www.voip-info.org/. Vill du ha riktig hjälp, läs förslagsvis där innan du börjar ställa frågor som saknar svar. Har du några frågar som jag KAN besvara, så gör jag givetvis det.

Om detta inlägg
Informationen i denna text bygger på att man har fler SIP-baserade abonnemang hos telefoni-operatören Megaphone. Hur din konfiguration kommer fungera hos någon annan operatör har jag ingen aning om. Ej heller har jag någon aning om den kommer att fungera hos dig om du tar del av den. Det grundläggande upplägget som bör räcka för att få flera telefonnummer (eller ett!) att fungera för både in- och utgående telefoni beskrivs dock, enligt nedan. Det är som tidigare skrivet, ej garanterat att detta fungerar för alla.

Konfigurationen öppnar möjligheten att ta emot ett samtal på flera telefoner, där den som svarar först tar samtalet. Utgående telefoni fungerar också, men skall man kunna ringa ut från två olika nummer måste också Asterisk anpassas efter möjligheterna, med lite fulkod. Jag kallar detta för ”fusktrunk” även om benämningen troligen är helt felaktig (konfigurationen är inkluderad enligt nedan, vilket innebär att om man med denna konfiguration använder en extra nolla i början av riktnumret så används linje 2 för utgående samtal).

Operatörens egna forking-möjligheter rekommenderas starkt, eftersom operatören då tillhandahåller denna tjänst i stället för dig. Detta lär vara stabilare samt ger en del andra fördelar – såsom faktisk support. I Asterisk får du klara dig själv om telefonen plötsligt slutar fungera. Observera även att Asterisk i dessa exempel innehåller specialkonfiguration för andra ändamål också, främst intern röstbrevlåda. Detta kan medföra att allt inte kommer att fungera på önskat sätt för andra som installerat Asterisk då all konfigurering utöver dessa exempel är individuell och nedanstående har av oförklarlig anledning skrivits på engelska.

Övriga frågor och svar följer under dessa konfigurationer.

sip.conf

Kod:
[general]
  context=default                                                ; Default context for incoming calls
  allowoverlap=no                                                ; Disable overlap dialing support. (Default is yes)
  bindport=5060                                                  ; UDP Port to bind to (SIP standard port is 5060)
  bindaddr=0.0.0.0                             ; IP address to bind to (0.0.0.0 binds to all)
  srvlookup=yes                                                  ; Enable DNS SRV lookups on outbound calls
  realm=asterisk
  domain=my.sip.domain                     ; Set default domain for this host
                                                                        ; If configured, Asterisk will only allow
                                                                        ; INVITE and REFER to non-local domains
                                                                        ; Use "sip show domains" to list local domains
  ;disallow=all                                    ; First disallow all codecs
  allow=ulaw                                     ; Allow codecs in order of preference
  allow=ulaw
  allow=alaw
  allow=g729
  rtptimeout=60                                                  ; Terminate call if 60 seconds of no RTP or RTCP activity
  rtpholdtimeout=300                          ; Terminate call if 300 seconds of no RTP or RTCP activity
   
  ; Be careful with this
  sipdebug = yes                                                 ; Turn on SIP debugging by default, from
  recordhistory=yes                            ; Record SIP history by default 
  dumphistory=yes                             ; Dump SIP history at end of SIP dialogue
   
  ;; SIP Phone 1
  register => username.megaphone.se:[email protected]
   
  ;; SIP Phone 2
  ; /1001 = Connect immediately to extension 1001 and pass by any automated messages...
  ; (this seem to be linked to the extension-config)
  register => username.megaphone.se:[email protected]/1001
   
  localnet=10.0.0.0/255.0.0.0
  localnet=192.168.0.0/255.255.0.0
  nat=yes                                                           ; Global NAT settings  (Affects all peers and users)
  canreinvite=no                                ; Asterisk by default tries to redirect the
   
  [authentication]
  ; Obviously not required (Dual stuff)
  ;;;auth=username.megaphone.se:[email protected]
  ;;;auth=username.megaphone.se:[email protected]
   
  ;;;; USER CONFIGURATION
   
  ; Main extension for home
  [self]
  type=friend
  username=me
  secret=mypassword
  host=dynamic
  context=myextension
  regexten=1001
   
  ; Let the Vood have its own extension if this runs on SIP
  [self-vood]
  type=friend
  username=self-vood
  secret=voodpassword
  host=dynamic
  context=myextension
  regexten=1011
   
  ; Let the Nokia on!
  [selfmobile]
  type=friend
  username=selfmobile
  secret=mobilepassword
  host=dynamic
  context=myextension
  regexten=1010
   
  [user1]
  type=friend
  username=user1
  secret=password1
  host=dynamic
  context=user1
  regexten=2000
   
  [user2]
  type=friend
  username=user2
  secret=password2
  host=dynamic
  context=user2
  regexten=2001
   
   
  ; The PEERS (Megaphone)
  [NUM1]
  type=peer
  username=username.megaphone.se
  fromdomain=sip.megaphone.se
  insecure=very
  qualify=yes
  nat=yes
  secret=password
  host=sip.megaphone.se
  context=default
   
  [NUM2]
  type=peer
  username=username.megaphone.se
  fromdomain=sip.megaphone.se
  insecure=very
  qualify=yes
  nat=yes
  secret=password
  host=sip.megaphone.se
  context=default




extensions.conf

Kod:
 
  [general]
  static=yes
  writeprotect=no
  clearglobalvars=no
  priorityjumping=yes
  ;#include "filename.conf"
  [globals]
  CONSOLE=Console/dsp                                                        ; Console interface for demo
  ;TRUNK=Zap/G2                                                                                  ; Trunk interface
   
  ; Never required... (This is dual number!)
  ;;;SIPtrunk=SIP/username.megaphone.se:[email protected]    ; SIP trunk
  ;;;SIPtrunk=SIP/username.megaphone.se:[email protected]    ; SIP trunk
   
  ; Used by everybody! (Incoming connections)
  [default]
  include => allextensions
  exten => s,1,NoOp(${SIP_HEADER})
  exten => s,n,NoOp(${CALLERID})
  exten => s,n,Wait(1)
  exten => s,n,Answer
  ; Play a message!
  exten => s,n,BackGround(welcome)
  ; Wait for a beep for about 2 sec!
  exten => s,n,WaitExten(2)
  ; Play another message (in this case: "redirecting your call")
  exten => s,n,BackGround(calling_dittsamtal)
  ; If no extension set above, dial those number for 30 sec
  exten => s,n,Dial(SIP/self&SIP/selfmobile&SIP/self-vood,30)
  ; Then check status...
  exten => s,n,Goto(s-${DIALSTATUS},1)                                 ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
  ; And send to voicemail for extension 1001 on no answer
  exten => s-NOANSWER,1,VoiceMail(1001,u)
   
  [self]
  include => default
  include => outgoing
   
  [self-vood]
  include => default
  include => allextensions
  include => outgoing
   
  [selfmobile]
  include => default
  include => outgoing
   
  ; Only allow internal calls for user 1
  [user1]
  include => allextensions
  exten => 1000,1,Voicemailmain(1000)
   
  ; Allow the same as "self" for user2
  [user2]
  include => allextensions
  include => outgoing
  exten => 1000,1,Voicemailmain(1000)
  exten => _X.,1,Dial(SIP/${EXTEN}@NUM1,30,r) 
   
  ; All outgoing extensions
  [outgoing]
  ; Allow yourself to dial between your external extensions
  exten => NUM1,1,Dial(SIP/${EXTEN}@NUM2,30,r)
  exten => NUM2,1,Dial(SIP/${EXTEN}@NUM1,30,r)
  ; Anything else goes out through NUM1
  exten => _X.,1,Dial(SIP/${EXTEN}@NUM1,30,r) 
  ; But if any call starts with an extra zero, use NUM2
  ; This makes both numbers available for outbound traffic
  exten => _00X.,1,Dial(SIP/${EXTEN:1}@NUM2,30,r)
  exten => s,n,Goto(s-${DIALSTATUS},1)                                 ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
  exten => s-NOANSWER,n,VoiceMail(${ARG1},u)
   
  ; Internal usage
  [allextensions]
  ; Extension 1000 - Voicemail!
  exten => 1000,1,Voicemailmain(1000)
   
  ; Self extension and the default! Try for 20 sec
  exten => 1001,1,Dial(SIP/self&SIP/self-vood&SIP/selfmobile,20)
  ; Missed calls goes to voicemail
  exten => 1001,2,VoiceMail(1001,u)
   
  ; Others
  exten => 1010,1,Dial(SIP/selfmobile,20)
  exten => 1010,2,VoiceMail(1001,u)
  exten => 1011,1,Dial(SIP/self-vood,20)
  exten => 1011,2,VoiceMail(1001,u)
   
  ; User 1
  exten => 2000,1,Dial(SIP/user1,20)
  exten => 2000,2,VoiceMail(2000,u)
   
  ; User 2
  exten => 2001,1,Dial(SIP/user2,20)
  exten => 2001,2,VoiceMail(2001,u)
   
  ; Invalid extensions goes to voicemail
  exten => i,1,VoiceMail(1001,u)




Specialanpassningar

Jag har ju två nummer… men när det ringer in vet jag inte vilket av numren jag söks på!

I de fall då tester har utförts med Asterisk så visas inkommande telefonnummer i stil med

Kod:
To: "0435xxxxxx"



Detta leder givetvis till problem eftersom SIP_HEADER(TO) inte kan användas på det sätt som var tänkt (denna information kan med sökningsfunktioner återfinnas på voip-info, se länk ovan). Så vitt jag förstått det, så är det ”s@xxx” som ställer till det, då numret egentligen skulle visats där istället (i stil med ”0435xxxxx@”), vilket gör att man inte kan identifiera destinationen med sip-headern. Att destinationen omnämns på samma rad spelar heller ingen roll.

Därför skrev jag om några rader i konfigurationsfilerna. Dels så lade jag in följande exten-rad i extensions.conf, efter callerid-raden:

Kod:
exten => s,n,Set(CALLERID(num)=${CALLERID(num)} to 0435xxxxxx)



Detta gör att jag kan se till vilket nummer någon ringer, åtminstone I SIP-klienten (X-lite). Hur det blir i en vanlig nummerpresentatör kan jag faktiskt inte svara på (det är mycket troligt att resultatet dels är för långt och jag misstänker att alla nummerpresentatörer inte klarar av formateringen på numret). Resultatet blir nämligen, exempelvis:

Kod:
0812345677 to [email protected]



I sip.conf har jag tidigare angett att mitt andra nummer skall gå direkt till en specifik extension:

Kod:
register => username.megaphone.se:[email protected]/1001



Detta ändrar jag nu på, till:

Kod:
register => username.megaphone.se:[email protected]/1020



Sedan lägger jag upp en ny extension under [allextensions]:

Kod:
exten => 1020,1,Set(CALLERID(num)=${CALLERID(num)} to 0435xxxxxx)
  exten => 1020,n,Dial(SIP/self&SIP/self-vood&SIP/selfmobile,20)


Nu kommer displayen, när det ringer på det andra numret visa upp till exempel:

Kod:
0812345677 to [email protected]
OBS: Användning av denna dokumentation sker på egen risk!

Denna text har skapats (filer bifogade) som ett självändamål för att spara in tid och hårbortfall vid eventuella framtida omkonfigurationer av Asterisk, om detta behov någon gång skulle uppstå. Det finns ingen egentlig support i bemärkelsen ”Hej, hur gör man detta? Jag får inte rätt på det!” – allt som egentligen behövs är mycket tålamod och lite engelska kunskaper, eftersom grundhjälpen har inhämtats från http://www.voip-info.org/. Vill du ha riktig hjälp, läs förslagsvis där innan du börjar ställa frågor som saknar svar. Har du några frågar som jag KAN besvara, så gör jag givetvis det.

Om detta inlägg

Informationen i denna text bygger på att man har fler SIP-baserade abonnemang hos telefoni-operatören Megaphone. Hur din konfiguration kommer fungera hos någon annan operatör har jag ingen aning om. Ej heller har jag någon aning om den kommer att fungera hos dig om du tar del av den. Det grundläggande upplägget som bör räcka för att få flera telefonnummer (eller ett!) att fungera för både in- och utgående telefoni beskrivs dock, enligt nedan. Det är som tidigare skrivet, ej garanterat att detta fungerar för alla.

Konfigurationen öppnar möjligheten att ta emot ett samtal på flera telefoner, där den som svarar först tar samtalet. Utgående telefoni fungerar också, men skall man kunna ringa ut från två olika nummer måste också Asterisk anpassas efter möjligheterna, med lite fulkod. Jag kallar detta för ”fusktrunk” även om benämningen troligen är helt felaktig (konfigurationen är inkluderad enligt nedan, vilket innebär att om man med denna konfiguration använder en extra nolla i början av riktnumret så används linje 2 för utgående samtal).Operatörens egna forking-möjligheter rekommenderas starkt, eftersom operatören då tillhandahåller denna tjänst i stället för dig. Detta lär vara stabilare samt ger en del andra fördelar – såsom faktisk support. I Asterisk får du klara dig själv om telefonen plötsligt slutar fungera.

Observera även att Asterisk i dessa exempel innehåller specialkonfiguration för andra ändamål också, främst intern röstbrevlåda. Detta kan medföra att allt inte kommer att fungera på önskat sätt för andra som installerat Asterisk då all konfigurering utöver dessa exempel är individuell och nedanstående har av oförklarlig anledning skrivits på engelska.

Övriga frågor och svar följer under dessa konfigurationer.

sip.conf

Kod:
[general]
  context=default                                                ; Default context for incoming calls
  allowoverlap=no                                                ; Disable overlap dialing support. (Default is yes)
  bindport=5060                                                  ; UDP Port to bind to (SIP standard port is 5060)
  bindaddr=0.0.0.0                             ; IP address to bind to (0.0.0.0 binds to all)
  srvlookup=yes                                                  ; Enable DNS SRV lookups on outbound calls
  realm=asterisk
  domain=my.sip.domain                     ; Set default domain for this host
                                                                        ; If configured, Asterisk will only allow
                                                                        ; INVITE and REFER to non-local domains
                                                                        ; Use "sip show domains" to list local domains
  ;disallow=all                                    ; First disallow all codecs
  allow=ulaw                                     ; Allow codecs in order of preference
  allow=ulaw
  allow=alaw
  allow=g729
  rtptimeout=60                                                  ; Terminate call if 60 seconds of no RTP or RTCP activity
  rtpholdtimeout=300                          ; Terminate call if 300 seconds of no RTP or RTCP activity
   
  ; Be careful with this
  sipdebug = yes                                                 ; Turn on SIP debugging by default, from
  recordhistory=yes                            ; Record SIP history by default 
  dumphistory=yes                             ; Dump SIP history at end of SIP dialogue
   
  ;; SIP Phone 1
  register => username.megaphone.se:[email protected]
   
  ;; SIP Phone 2
  ; /1001 = Connect immediately to extension 1001 and pass by any automated messages...
  ; (this seem to be linked to the extension-config)
  register => username.megaphone.se:[email protected]/1001
   
  localnet=10.0.0.0/255.0.0.0
  localnet=192.168.0.0/255.255.0.0
  nat=yes                                                           ; Global NAT settings  (Affects all peers and users)
  canreinvite=no                                ; Asterisk by default tries to redirect the
   
  [authentication]
  ; Obviously not required (Dual stuff)
  ;;;auth=username.megaphone.se:[email protected]
  ;;;auth=username.megaphone.se:[email protected]
   
  ;;;; USER CONFIGURATION
   
  ; Main extension for home
  [self]
  type=friend
  username=me
  secret=mypassword
  host=dynamic
  context=myextension
  regexten=1001
   
  ; Let the Vood have its own extension if this runs on SIP
  [self-vood]
  type=friend
  username=self-vood
  secret=voodpassword
  host=dynamic
  context=myextension
  regexten=1011
   
  ; Let the Nokia on!
  [selfmobile]
  type=friend
  username=selfmobile
  secret=mobilepassword
  host=dynamic
  context=myextension
  regexten=1010
   
  [user1]
  type=friend
  username=user1
  secret=password1
  host=dynamic
  context=user1
  regexten=2000
   
  [user2]
  type=friend
  username=user2
  secret=password2
  host=dynamic
  context=user2
  regexten=2001
   
   
  ; The PEERS (Megaphone)
  [NUM1]
  type=peer
  username=username.megaphone.se
  fromdomain=sip.megaphone.se
  insecure=very
  qualify=yes
  nat=yes
  secret=password
  host=sip.megaphone.se
  context=default
   
  [NUM2]
  type=peer
  username=username.megaphone.se
  fromdomain=sip.megaphone.se
  insecure=very
  qualify=yes
  nat=yes
  secret=password
  host=sip.megaphone.se
  context=default




extensions.conf

Kod:
  [general]
  static=yes
  writeprotect=no
  clearglobalvars=no
  priorityjumping=yes
  ;#include "filename.conf"
  [globals]
  CONSOLE=Console/dsp                                                        ; Console interface for demo
  ;TRUNK=Zap/G2                                                                                  ; Trunk interface
   
  ; Never required... (This is dual number!)
  ;;;SIPtrunk=SIP/username.megaphone.se:[email protected]    ; SIP trunk
  ;;;SIPtrunk=SIP/username.megaphone.se:[email protected]    ; SIP trunk
   
  ; Used by everybody! (Incoming connections)
  [default]
  include => allextensions
  exten => s,1,NoOp(${SIP_HEADER})
  exten => s,n,NoOp(${CALLERID})
  exten => s,n,Wait(1)
  exten => s,n,Answer
  ; Play a message!
  exten => s,n,BackGround(welcome)
  ; Wait for a beep for about 2 sec!
  exten => s,n,WaitExten(2)
  ; Play another message (in this case: "redirecting your call")
  exten => s,n,BackGround(calling_dittsamtal)
  ; If no extension set above, dial those number for 30 sec
  exten => s,n,Dial(SIP/self&SIP/selfmobile&SIP/self-vood,30)
  ; Then check status...
  exten => s,n,Goto(s-${DIALSTATUS},1)                                 ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
  ; And send to voicemail for extension 1001 on no answer
  exten => s-NOANSWER,1,VoiceMail(1001,u)
   
  [self]
  include => default
  include => outgoing
   
  [self-vood]
  include => default
  include => allextensions
  include => outgoing
   
  [selfmobile]
  include => default
  include => outgoing
   
  ; Only allow internal calls for user 1
  [user1]
  include => allextensions
  exten => 1000,1,Voicemailmain(1000)
   
  ; Allow the same as "self" for user2
  [user2]
  include => allextensions
  include => outgoing
  exten => 1000,1,Voicemailmain(1000)
  exten => _X.,1,Dial(SIP/${EXTEN}@NUM1,30,r) 
   
  ; All outgoing extensions
  [outgoing]
  ; Allow yourself to dial between your external extensions
  exten => NUM1,1,Dial(SIP/${EXTEN}@NUM2,30,r)
  exten => NUM2,1,Dial(SIP/${EXTEN}@NUM1,30,r)
  ; Anything else goes out through NUM1
  exten => _X.,1,Dial(SIP/${EXTEN}@NUM1,30,r) 
  ; But if any call starts with an extra zero, use NUM2
  ; This makes both numbers available for outbound traffic
  exten => _00X.,1,Dial(SIP/${EXTEN:1}@NUM2,30,r)
  exten => s,n,Goto(s-${DIALSTATUS},1)                                 ; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
  exten => s-NOANSWER,n,VoiceMail(${ARG1},u)
   
  ; Internal usage
  [allextensions]
  ; Extension 1000 - Voicemail!
  exten => 1000,1,Voicemailmain(1000)
   
  ; Self extension and the default! Try for 20 sec
  exten => 1001,1,Dial(SIP/self&SIP/self-vood&SIP/selfmobile,20)
  ; Missed calls goes to voicemail
  exten => 1001,2,VoiceMail(1001,u)
   
  ; Others
  exten => 1010,1,Dial(SIP/selfmobile,20)
  exten => 1010,2,VoiceMail(1001,u)
  exten => 1011,1,Dial(SIP/self-vood,20)
  exten => 1011,2,VoiceMail(1001,u)
   
  ; User 1
  exten => 2000,1,Dial(SIP/user1,20)
  exten => 2000,2,VoiceMail(2000,u)
   
  ; User 2
  exten => 2001,1,Dial(SIP/user2,20)
  exten => 2001,2,VoiceMail(2001,u)
   
  ; Invalid extensions goes to voicemail
  exten => i,1,VoiceMail(1001,u)




Specialanpassningar

Jag har ju två nummer… men när det ringer in vet jag inte vilket av numren jag söks på!

I de fall då tester har utförts med Asterisk så visas inkommande telefonnummer i stil med

Kod:
To: "0435xxxxxx"


Detta leder givetvis till problem eftersom SIP_HEADER(TO) inte kan användas på det sätt som var tänkt (denna information kan med sökningsfunktioner återfinnas på voip-info, se länk ovan). Så vitt jag förstått det, så är det ”s@xxx” som ställer till det, då numret egentligen skulle visats där istället (i stil med ”0435xxxxx@”), vilket gör att man inte kan identifiera destinationen med sip-headern. Att destinationen omnämns på samma rad spelar heller ingen roll.

Därför skrev jag om några rader i konfigurationsfilerna. Dels så lade jag in följande exten-rad i extensions.conf, efter callerid-raden:

Kod:
exten => s,n,Set(CALLERID(num)=${CALLERID(num)} to 0435xxxxxx)



Detta gör att jag kan se till vilket nummer någon ringer, åtminstone I SIP-klienten (X-lite). Hur det blir i en vanlig nummerpresentatör kan jag faktiskt inte svara på (det är mycket troligt att resultatet dels är för långt och jag misstänker att alla nummerpresentatörer inte klarar av formateringen på numret). Resultatet blir nämligen, exempelvis:

Kod:
0812345677 to [email protected]



I sip.conf har jag tidigare angett att mitt andra nummer skall gå direkt till en specifik extension:

Kod:
register => username.megaphone.se:[email protected]/1001



Detta ändrar jag nu på, till:

Kod:
register => username.megaphone.se:[email protected]/1020



Sedan lägger jag upp en ny extension under [allextensions]:

Kod:
exten => 1020,1,Set(CALLERID(num)=${CALLERID(num)} to 0435xxxxxx)
  exten => 1020,n,Dial(SIP/self&SIP/self-vood&SIP/selfmobile,20)


Nu kommer displayen, när det ringer på det andra numret visa upp till exempel:

Kod:
0812345677 to [email protected]

Upptäck mer från Tornevall

Prenumerera för att få de senaste inläggen skickade till din e-post.

You may also like