Asterisk och Megaphone
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äggInformationen 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
[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
[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
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:
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:
0812345677 to [email protected]
I sip.conf har jag tidigare angett att mitt andra nummer skall gå direkt till en specifik extension:
register => username.megaphone.se:[email protected]/1001
Detta ändrar jag nu på, till:
register => username.megaphone.se:[email protected]/1020
Sedan lägger jag upp en ny extension under [allextensions]:
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:
0812345677 to [email protected]
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
[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
[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
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:
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:
0812345677 to [email protected]
I sip.conf har jag tidigare angett att mitt andra nummer skall gå direkt till en specifik extension:
register => username.megaphone.se:[email protected]/1001
Detta ändrar jag nu på, till:
register => username.megaphone.se:[email protected]/1020
Sedan lägger jag upp en ny extension under [allextensions]:
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:
0812345677 to [email protected]
Upptäck mer från Tornevall
Prenumerera för att få de senaste inläggen skickade till din e-post.