Asterisk/Instellen: verschil tussen versies
k (Categorieën erbij) |
k (ElephantTalk is Pareteum geworden per 1 November 2016) |
||
(20 tussenliggende versies door 5 gebruikers niet weergegeven) | |||
Regel 1: | Regel 1: | ||
− | [[Category:Asterisk]] [[Category:Howto]] | + | [[Category:Asterisk]] [[Category:Howto]] [[Category:DIY]] |
+ | Op deze pagina wordt uitgelegd hoe je je eigen Asterisk-server opzet en interconnect met Limesco/SpeakUp. Aanvullingen en wijzigingen op deze pagina zijn welkom: deze wiki is vrij wijzigbaar door geregistreerde gebruikers. Eventuele twijfels of vragen kun je stellen op de [[Overleg:Asterisk instellen|Overlegpagina]]. | ||
− | + | Als je de uitgebreide uitleg niet hoeft te lezen, maak dan gebruik van onze '''[[Asterisk/Quickstart|Quickstart]]'''-aanwijzingen. | |
− | |||
− | ''' | ||
'''Kom je afkortingen of woorden tegen die je niet kent? Kijk dan op de [[terminologie]]-pagina!''' | '''Kom je afkortingen of woorden tegen die je niet kent? Kijk dan op de [[terminologie]]-pagina!''' | ||
Regel 9: | Regel 8: | ||
=De infrastructuur= | =De infrastructuur= | ||
− | [http://www.speakup.nl/ SpeakUp] heeft de infrastructuur (via [http://www. | + | Er is ook een [[Instellen|algemene uitleg van de setup]] die niet uitwijdt over Asterisk. |
+ | |||
+ | [http://www.speakup.nl/ SpeakUp] heeft de infrastructuur (via [http://www.pareteum.com/ Pareteum], de [[terminologie#MVNE|MVNE]]) met het [http://www.t-mobile.nl/corporate/htdocs/page/over-t-mobile/property-management/het-netwerk-van-t-mobile.aspx T-Mobilenetwerk] zo geregeld dat alle verkeer '''vanaf''' de mobiele telefoons van SpeakUp-klanten direct uitkomt bij de [[terminologie#PBX|PBX]] bij SpeakUp. Daar zal hun Asterisk-installatie controleren of er een alternatieve [[terminologie#SIP|SIP]]-server is ingesteld voor het telefoonnummer in kwestie, en zo ja de SIP-verbinding doorsturen. Je Asterisk-server kan dan kiezen wat er met dat uitgaande gesprek gebeurt. De meest waarschijnlijke optie voor de meeste nummers is het gewoon weer terug doorsturen naar SpeakUp, die dan een route zal kiezen naar dat nummer. Zodra een PBX het gesprek accepteert, zal vanaf dan een [[terminologie#RTP|RTP]]-stream worden opgezet tussen de servers van SpeakUp en de ontvanger (jouw server, een server bij SpeakUp, of een VoIP-eindpunt) waar de gespreksdata overheen kan gaan. | ||
Op deze pagina wordt uitgelegd hoe je die eigen Asterisk-server opzet. We zullen ervoor zorgen dat gesprekken uitkomen op je server, en dan een regel definiëren waarmee je server alles terugstuurt naar SpeakUp (je PBX is daardoor 'transparant'). Daarna zorgen we ervoor dat ook inkomende gesprekken correct naar je telefoon terug komen. En daarna geven we wat voorbeelden van leuke dingen om te proberen :) | Op deze pagina wordt uitgelegd hoe je die eigen Asterisk-server opzet. We zullen ervoor zorgen dat gesprekken uitkomen op je server, en dan een regel definiëren waarmee je server alles terugstuurt naar SpeakUp (je PBX is daardoor 'transparant'). Daarna zorgen we ervoor dat ook inkomende gesprekken correct naar je telefoon terug komen. En daarna geven we wat voorbeelden van leuke dingen om te proberen :) | ||
Regel 32: | Regel 33: | ||
</pre> | </pre> | ||
− | = | + | = De SIM verbinden met Asterisk = |
+ | |||
+ | SpeakUp heeft een gateway staan die de normale [[terminologie#PLMN|PLMN]]-signalen omzet naar SIP-signalen en vice versa. Die gateway verandert iedere mobiele telefoon in een SIP-softphone die verbindt naar je Asterisk-PBX. Kies zelf voor de telefoon een gebruikersnaam, wachtwoord en als je wil een intern nummer. Gebruikersnaam mag ook gelijk zijn aan een (intern/extern) nummer, of bijvoorbeeld aan het SIM-kaartnummer. '''Pak bij interne nummers liever niet de 1xx-range: daarin zitten ook de alarmnummers (112, 144) en die zijn special-cased: ze zullen nooit uitkomen bij je PBX maar bij de alarmcentrale.''' | ||
+ | |||
+ | Schrijf nu in <tt>/etc/asterisk/sip.conf</tt> de volgende softphone-definitie, waarbij je %GEBRUIKER% en %WACHTWOORD% en %NUMMER% uiteraard verandert: | ||
+ | |||
+ | <pre> | ||
+ | [%NUMMER%] | ||
+ | type=friend ; toegang op basis van authenticatie ipv. IP-adres, voor terugbellen wordt SIP-registratie gebruikt | ||
+ | callerid="Mijn mobiele telefoon" <%NUMMER%> ; caller-ID als je uitbelt, voor in het From-veld | ||
+ | host=dynamic ; softphone verbindt naar ons toe | ||
+ | username=%GEBRUIKER% | ||
+ | secret=%WACHTWOORD% | ||
+ | context=from-sim ; context in het dialplan waarin het gesprek binnenkomt | ||
+ | mailbox=%NUMMER%@default | ||
+ | insecure=invite,port | ||
+ | canreinvite=yes | ||
+ | </pre> | ||
+ | |||
+ | Herlaad nu in de Asterisk-console (zie hierboven) de SIP-configuratie: <tt>sip reload</tt>. Stel indien nodig je firewall in zodat IP-adressen 193.169.138.0/23 en 91.232.130.0/24 mogen registreren op de PBX. | ||
+ | |||
+ | Het daadwerkelijk instellen van de PBX voor een mobiel nummer moet SpeakUp doen. Als het goed is heeft [[Support|Limesco Support]] je om een aantal van bovenstaande gegevens gevraagd; daar kun je nu een reply op sturen. Zodra de gegevens zijn ingeregeld door SpeakUp en je zet je telefoon aan of je maakt de eerste call, zie je in je Asterisk-logs iets als: | ||
− | + | <pre> | |
+ | NOTICE[...]: chan_sip.c:20788 handle_response_peerpoke: Peer 'nummer' is now Reachable. (150ms / 2000ms) | ||
+ | </pre> | ||
− | + | Tevens zie je de SIM staan als je het commando <tt>sip show peers</tt> uitvoert: | |
− | Asterisk laadt bij het opstarten een "dial-plan" in het geheugen. Een dialplan is een set instructies voor | + | <pre> |
+ | Name/username Host Dyn Forcerport ACL Port Status | ||
+ | %NUMMER%/%GEBRUIKER% 193.169... D N 8044 Unmonitored | ||
+ | </pre> | ||
+ | |||
+ | Je kunt nu vanaf de SIM bellen en dat komt op je PBX uit -- maar die calls zijn nog niet routeerbaar: er zijn nog geen instructies om oproepen vanaf die telefoon af te handelen. Je kunt dit wel alvast testen: zet met <tt>sip set debug on</tt> debugging-informatie aan, en doe een oproep vanaf de telefoon, bijvoorbeeld naar het magische nummer [[0vast0]]1234. Je zou dan in je Asterisk-console iets moeten zien als: | ||
+ | |||
+ | <pre> | ||
+ | <--- SIP read from UDP:193.169.[...]:8044 ---> | ||
+ | INVITE sip:1234@[...] SIP/2.0 | ||
+ | [...] | ||
+ | Max-Forwards: 68 | ||
+ | From: <sip:[...jouw-sip-contact...]>;tag=... | ||
+ | To: <sip:1234@switch2.sip.speakup.nl:5060> | ||
+ | </pre> | ||
+ | |||
+ | Met <tt>sip set debug off</tt> zet je debugging-informatie weer uit. Krijg je bovenstaande output niet in je Asterisk-console, ondanks dat je PBX al wel is ingeregeld door SpeakUp, ga dan naar de Troubleshooting-sectie hieronder. | ||
+ | |||
+ | = Asterisk verbinden met het telefoonnetwerk = | ||
+ | |||
+ | In het vorige kopje verbonden we Asterisk met de SIM-kaart zo dat de SIM naar Asterisk kan bellen en Asterisk naar de SIM. In dit kopje bekijken we de externe verbinding: Asterisk moet nationale en internationale telefoonnummers op het telefoonnet kunnen bellen, en als iemand daar je telefoonnummer belt moet dat bij Asterisk uitkomen. | ||
+ | |||
+ | Om calls vanuit je PBX weer het telefoonnetwerk op te kunnen routeren, vertel je Asterisk eerst dat die servers bestaan (je voegt "peer"-definities toe). Daarvoor heb je je SpeakUp-gebruiker en -wachtwoord nodig, die je van [[Support|Limesco Support]] gekregen hebt. Dat doe je als volgt in <tt>sip.conf</tt>: | ||
+ | |||
+ | <pre> | ||
+ | [to-speakup](!) ; een template voor een verbinding naar speakup toe | ||
+ | type=friend | ||
+ | insecure=invite | ||
+ | pedantic=no | ||
+ | canreinvite=no | ||
+ | nat=no | ||
+ | port=5060 | ||
+ | context=from-speakup | ||
+ | qualify=4000 | ||
+ | username=%TRUNKUSER% | ||
+ | secret=%TRUNKPASS% | ||
+ | disallow=all | ||
+ | allow=alaw | ||
+ | allow=ulaw | ||
+ | allow=gsm | ||
+ | allow=g726 | ||
+ | |||
+ | [speakup01](to-speakup) ; instantie van de template, voor server #1 | ||
+ | host=proxy1.sip.speakup.nl | ||
+ | |||
+ | [speakup02](to-speakup) ; instantie van de template, voor server #2 | ||
+ | host=proxy2.sip.speakup.nl | ||
+ | </pre> | ||
+ | |||
+ | Als je nu in je Asterisk-console <tt>sip reload</tt> uitvoert voegt Asterisk definities toe voor deze twee servers, en kun je ze vervolgens in je dialplan gebruiken. Hoe je dat doet zien we straks. Eerst bevestigen we dat de servers inderdaad zijn toegevoegd, d.m.v. <tt>sip show peers</tt>: | ||
+ | |||
+ | <pre> | ||
+ | Name/username Host Dyn Forcerport ACL Port Status | ||
+ | %NUMMER%/%GEBRUIKER% 193.169... D N 8044 Unmonitored | ||
+ | speakup01/%TRUNKUSER% 193.169... 5060 OK (16 ms) | ||
+ | speakup02/%TRUNKUSER% 193.169... 5060 OK (15 ms) | ||
+ | </pre> | ||
+ | |||
+ | Nu komt de laatste stap in het verbinding leggen met de buitenwereld: je PBX registreren bij SpeakUp. Daarvoor is slechts één regel nodig, die je helemaal bovenaan in de <tt>[general]</tt>-sectie van <tt>sip.conf</tt> toevoegt: | ||
+ | |||
+ | <pre> | ||
+ | [general] | ||
+ | ... | ||
+ | register => %TRUNKUSER%:%TRUNKPASS%@sip.speakup.nl | ||
+ | </pre> | ||
+ | |||
+ | Als je nu <tt>sip reload</tt> uitvoert, voert Asterisk een registratie uit bij SpeakUp voor je account, en daarmee je nummer. Met <tt>sip set debug on</tt> kun je precies zien hoe dat gaat (na nog een <tt>sip reload</tt>). Je kunt controleren dat het goed is gegaan met <tt>sip show registry</tt>: | ||
+ | |||
+ | <pre> | ||
+ | Host dnsmgr Username Refresh State Reg.Time | ||
+ | sip.speakup.nl:5060 N %TRUNKUSER% 105 Registered Sun, 15 Sep 2013 20:35:12 | ||
+ | 1 SIP registrations. | ||
+ | </pre> | ||
+ | |||
+ | = Het dialplan = | ||
+ | |||
+ | We hebben nu de volgende situatie: | ||
+ | * Asterisk kent het adres om naar je SIM te bellen | ||
+ | * Je SIM kan naar Asterisk bellen | ||
+ | * Asterisk kent het adres om naar het telefoonnetwerk te bellen | ||
+ | * Het telefoonnetwerk kan naar Asterisk bellen | ||
+ | |||
+ | Oftewel: Asterisk heeft controle over het telefoonverkeer. Alleen: het programma is nog niet ingesteld, dus alle oproepen zullen eindigen in een <tt>SIP/2.0 404 Not Found</tt>: Asterisk kan geen instructies vinden voor het gebelde nummer. Die instructies gaan we nu toevoegen. | ||
+ | |||
+ | In de twee peer-definities die je eerder hebt toegevoegd stond allebei een regel "context": die is "from-sim" voor de definitie van je SIM-kaart en "from-speakup" voor de definitie van de SpeakUp-trunk. Die contexts zijn startpunten in het dialplan dat Asterisk gebruikt om alle gesprekken bij het juiste eindpunt te laten komen. Dat dialplan staat gedefinieerd in <tt>extensions.conf</tt>. Laten we eerst de simpelste configuratie opnemen: een oproep naar je nummer eindigt bij je telefoon; een oproep van je telefoon eindigt bij de SpeakUp-trunk. Voeg daarvoor deze regels toe in <tt>extensions.conf</tt>: | ||
+ | |||
+ | <pre> | ||
+ | [from-sim] | ||
+ | exten => _X.,1,Verbose(Call from Limesco SIM [${CALLERID(num)}] to [${EXTEN}]) | ||
+ | same => n,Dial(SIP/speakup01/${EXTEN}) | ||
+ | |||
+ | [from-speakup] | ||
+ | ; Vervang ... door de rest van je DIY-nummer: | ||
+ | exten => 316...,1,Verbose(Call from SpeakUp [${CALLERID(num)}] to [${EXTEN}]) | ||
+ | same => n,Dial(SIP/316.../${EXTEN}) | ||
+ | </pre> | ||
+ | |||
+ | Voer nu <tt>dialplan reload</tt> in in de Asterisk-console om het bestand te herladen. Pak de telefoon met je DIY-SIM en bel een bekend nummer. Je ziet dan in de Asterisk-log een melding als <tt>Call from Limesco SIM [316...] to [316...]</tt> als je dialplan goed is opgepakt. De telefoon met het nummer moet nu overgaan: als je daar opneemt, hoor je elkaar. Andersom: bel met een bekend nummer het nummer van je DIY-SIM; er verschijnt weer een melding in je log en de DIY-SIM-telefoon moet overgaan. Je hebt nu een standaardconfiguratie. | ||
+ | |||
+ | Voor meer informatie kun je ook kijken naar [http://support.speakup.nl/faq/Asterisk/dialplan/sipkoppeling/ de SpeakUp-pagina over SIP-koppeling]. | ||
+ | |||
+ | Eventuele andere uplinks kun je op een vergelijkbare manier instellen. | ||
+ | |||
+ | == Meer over het dialplan == | ||
+ | |||
+ | Asterisk laadt bij het opstarten een "dial-plan" in het geheugen. Een dialplan is een set instructies voor telefoonnummers (of ''extensions''), die Asterisk zal uitvoeren zodra één van die nummers wordt gebeld. Iedere instructie heeft een regelnummer; Asterisk zal beginnen bij regelnummer 1 van de juiste extension en regelnummers zullen in volgorde worden afgehandeld tot het eerstvolgende regelnummer niet meer bestaat. Als een telefoongesprek tegen het einde van een set instructies niet (succesvol) is doorgeschakeld, aangenomen of geweigerd, zal Asterisk zelf de juiste foutcode proberen te raden (b.v. aan de hand van een gefaalde operatie). Er bestaat een opdracht <tt>GoTo</tt> om naar een andere extension of een ander regelnummer te springen. Dit is bijvoorbeeld een correcte set instructies om een MP3'tje af te spelen en op te hangen wanneer het nummer ''300'' gebeld wordt: | ||
<pre> | <pre> | ||
Regel 46: | Regel 175: | ||
</pre> | </pre> | ||
− | Alle regels beginnen met "exten =>" | + | Alle regels beginnen met "exten =>"; daarna volgt het telefoonnummer, het regelnummer (of "n" voor next, het vorige regelnummer plus één) en de instructie om uit te voeren. De instructies die je kunt gebruiken vind je (o.a.) in de console: |
<pre> | <pre> | ||
Regel 64: | Regel 193: | ||
</pre> | </pre> | ||
− | Naast telefoonnummers kun je als extension ook nog patterns opgeven. Die beginnen met een underscore (_) en kunnen bepaalde characters matchen vanaf het begin (maar niet vanaf het eind). Zie voor meer informatie [http://www.voip-info.org/wiki/view/Asterisk+Dialplan+Patterns http://www.voip-info.org/wiki/view/Asterisk+Dialplan+Patterns]. | + | Naast hele telefoonnummers kun je als extension ook nog patterns opgeven. Die beginnen met een underscore (_) en kunnen bepaalde characters matchen vanaf het begin (maar niet vanaf het eind). Zie voor meer informatie [http://www.voip-info.org/wiki/view/Asterisk+Dialplan+Patterns http://www.voip-info.org/wiki/view/Asterisk+Dialplan+Patterns]. |
Asterisk maakt in een extensionlijstje nooit vanzelf een sprong naar een regelnummer méér dan één hoger dan het huidige regelnummer. Dit werkt dus niet: | Asterisk maakt in een extensionlijstje nooit vanzelf een sprong naar een regelnummer méér dan één hoger dan het huidige regelnummer. Dit werkt dus niet: | ||
Regel 71: | Regel 200: | ||
exten => 300,1,Answer | exten => 300,1,Answer | ||
[...] | [...] | ||
− | exten => 300,10, | + | exten => 300,10,Nop |
exten => 300,100,HangUp | exten => 300,100,HangUp | ||
</pre> | </pre> | ||
Regel 79: | Regel 208: | ||
<pre> | <pre> | ||
exten => 300,1,Answer | exten => 300,1,Answer | ||
− | exten => 300,n,GoTo( | + | exten => 300,n,GoTo(ophangen) |
− | exten => 300,100( | + | exten => 300,100(ophangen),HangUp |
</pre> | </pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Huidige versie van 19 jul 2017 om 15:22
Op deze pagina wordt uitgelegd hoe je je eigen Asterisk-server opzet en interconnect met Limesco/SpeakUp. Aanvullingen en wijzigingen op deze pagina zijn welkom: deze wiki is vrij wijzigbaar door geregistreerde gebruikers. Eventuele twijfels of vragen kun je stellen op de Overlegpagina.
Als je de uitgebreide uitleg niet hoeft te lezen, maak dan gebruik van onze Quickstart-aanwijzingen.
Kom je afkortingen of woorden tegen die je niet kent? Kijk dan op de terminologie-pagina!
Inhoud
De infrastructuur
Er is ook een algemene uitleg van de setup die niet uitwijdt over Asterisk.
SpeakUp heeft de infrastructuur (via Pareteum, de MVNE) met het T-Mobilenetwerk zo geregeld dat alle verkeer vanaf de mobiele telefoons van SpeakUp-klanten direct uitkomt bij de PBX bij SpeakUp. Daar zal hun Asterisk-installatie controleren of er een alternatieve SIP-server is ingesteld voor het telefoonnummer in kwestie, en zo ja de SIP-verbinding doorsturen. Je Asterisk-server kan dan kiezen wat er met dat uitgaande gesprek gebeurt. De meest waarschijnlijke optie voor de meeste nummers is het gewoon weer terug doorsturen naar SpeakUp, die dan een route zal kiezen naar dat nummer. Zodra een PBX het gesprek accepteert, zal vanaf dan een RTP-stream worden opgezet tussen de servers van SpeakUp en de ontvanger (jouw server, een server bij SpeakUp, of een VoIP-eindpunt) waar de gespreksdata overheen kan gaan.
Op deze pagina wordt uitgelegd hoe je die eigen Asterisk-server opzet. We zullen ervoor zorgen dat gesprekken uitkomen op je server, en dan een regel definiëren waarmee je server alles terugstuurt naar SpeakUp (je PBX is daardoor 'transparant'). Daarna zorgen we ervoor dat ook inkomende gesprekken correct naar je telefoon terug komen. En daarna geven we wat voorbeelden van leuke dingen om te proberen :)
Asterisk installeren
Dit hangt natuurlijk af van je distro, maar ik heb dit onder Debian Testing geprobeerd met Asterisk 1:1.8.11.1~dfsg-1. De configuratiebestanden staan dan onder /etc/asterisk. De server zelf runt als de user "asterisk". Om een volledige console-log te krijgen heb ik logger.conf aangepast en daar onder [logfiles] een console-regel veranderd naar:
console => debug,notice,warning,error,verbose,dtmf,fax
Onder de meeste distro's zal Asterisk vanzelf gestart zijn; anders moet je 'm nu zelf even starten (bijvoorbeeld met service asterisk start). Nu kunnen we verbinden naar Asterisk, met een asterisk -R (bij een "unable to connect" even opnieuw proberen als de user waarmee asterisk runt, b.v. sudo -u asterisk asterisk -R, of als je het wel gelooft gewoon als root).
sjors@foo:~$ sudo asterisk -R [...] Connected to asterisk 1.8.11.1~dfsg-1 currently running on foo (pid = 8051) Verbosity is at least 3 foo*CLI> core show version Asterisk 1.8.11.1~dfsg-1 built by pbuilder @ boomtime on a x86_64 running Linux on 2012-04-25 17:59:19 UTC
De SIM verbinden met Asterisk
SpeakUp heeft een gateway staan die de normale PLMN-signalen omzet naar SIP-signalen en vice versa. Die gateway verandert iedere mobiele telefoon in een SIP-softphone die verbindt naar je Asterisk-PBX. Kies zelf voor de telefoon een gebruikersnaam, wachtwoord en als je wil een intern nummer. Gebruikersnaam mag ook gelijk zijn aan een (intern/extern) nummer, of bijvoorbeeld aan het SIM-kaartnummer. Pak bij interne nummers liever niet de 1xx-range: daarin zitten ook de alarmnummers (112, 144) en die zijn special-cased: ze zullen nooit uitkomen bij je PBX maar bij de alarmcentrale.
Schrijf nu in /etc/asterisk/sip.conf de volgende softphone-definitie, waarbij je %GEBRUIKER% en %WACHTWOORD% en %NUMMER% uiteraard verandert:
[%NUMMER%] type=friend ; toegang op basis van authenticatie ipv. IP-adres, voor terugbellen wordt SIP-registratie gebruikt callerid="Mijn mobiele telefoon" <%NUMMER%> ; caller-ID als je uitbelt, voor in het From-veld host=dynamic ; softphone verbindt naar ons toe username=%GEBRUIKER% secret=%WACHTWOORD% context=from-sim ; context in het dialplan waarin het gesprek binnenkomt mailbox=%NUMMER%@default insecure=invite,port canreinvite=yes
Herlaad nu in de Asterisk-console (zie hierboven) de SIP-configuratie: sip reload. Stel indien nodig je firewall in zodat IP-adressen 193.169.138.0/23 en 91.232.130.0/24 mogen registreren op de PBX.
Het daadwerkelijk instellen van de PBX voor een mobiel nummer moet SpeakUp doen. Als het goed is heeft Limesco Support je om een aantal van bovenstaande gegevens gevraagd; daar kun je nu een reply op sturen. Zodra de gegevens zijn ingeregeld door SpeakUp en je zet je telefoon aan of je maakt de eerste call, zie je in je Asterisk-logs iets als:
NOTICE[...]: chan_sip.c:20788 handle_response_peerpoke: Peer 'nummer' is now Reachable. (150ms / 2000ms)
Tevens zie je de SIM staan als je het commando sip show peers uitvoert:
Name/username Host Dyn Forcerport ACL Port Status %NUMMER%/%GEBRUIKER% 193.169... D N 8044 Unmonitored
Je kunt nu vanaf de SIM bellen en dat komt op je PBX uit -- maar die calls zijn nog niet routeerbaar: er zijn nog geen instructies om oproepen vanaf die telefoon af te handelen. Je kunt dit wel alvast testen: zet met sip set debug on debugging-informatie aan, en doe een oproep vanaf de telefoon, bijvoorbeeld naar het magische nummer 0vast01234. Je zou dan in je Asterisk-console iets moeten zien als:
<--- SIP read from UDP:193.169.[...]:8044 ---> INVITE sip:1234@[...] SIP/2.0 [...] Max-Forwards: 68 From: <sip:[...jouw-sip-contact...]>;tag=... To: <sip:1234@switch2.sip.speakup.nl:5060>
Met sip set debug off zet je debugging-informatie weer uit. Krijg je bovenstaande output niet in je Asterisk-console, ondanks dat je PBX al wel is ingeregeld door SpeakUp, ga dan naar de Troubleshooting-sectie hieronder.
Asterisk verbinden met het telefoonnetwerk
In het vorige kopje verbonden we Asterisk met de SIM-kaart zo dat de SIM naar Asterisk kan bellen en Asterisk naar de SIM. In dit kopje bekijken we de externe verbinding: Asterisk moet nationale en internationale telefoonnummers op het telefoonnet kunnen bellen, en als iemand daar je telefoonnummer belt moet dat bij Asterisk uitkomen.
Om calls vanuit je PBX weer het telefoonnetwerk op te kunnen routeren, vertel je Asterisk eerst dat die servers bestaan (je voegt "peer"-definities toe). Daarvoor heb je je SpeakUp-gebruiker en -wachtwoord nodig, die je van Limesco Support gekregen hebt. Dat doe je als volgt in sip.conf:
[to-speakup](!) ; een template voor een verbinding naar speakup toe type=friend insecure=invite pedantic=no canreinvite=no nat=no port=5060 context=from-speakup qualify=4000 username=%TRUNKUSER% secret=%TRUNKPASS% disallow=all allow=alaw allow=ulaw allow=gsm allow=g726 [speakup01](to-speakup) ; instantie van de template, voor server #1 host=proxy1.sip.speakup.nl [speakup02](to-speakup) ; instantie van de template, voor server #2 host=proxy2.sip.speakup.nl
Als je nu in je Asterisk-console sip reload uitvoert voegt Asterisk definities toe voor deze twee servers, en kun je ze vervolgens in je dialplan gebruiken. Hoe je dat doet zien we straks. Eerst bevestigen we dat de servers inderdaad zijn toegevoegd, d.m.v. sip show peers:
Name/username Host Dyn Forcerport ACL Port Status %NUMMER%/%GEBRUIKER% 193.169... D N 8044 Unmonitored speakup01/%TRUNKUSER% 193.169... 5060 OK (16 ms) speakup02/%TRUNKUSER% 193.169... 5060 OK (15 ms)
Nu komt de laatste stap in het verbinding leggen met de buitenwereld: je PBX registreren bij SpeakUp. Daarvoor is slechts één regel nodig, die je helemaal bovenaan in de [general]-sectie van sip.conf toevoegt:
[general] ... register => %TRUNKUSER%:%TRUNKPASS%@sip.speakup.nl
Als je nu sip reload uitvoert, voert Asterisk een registratie uit bij SpeakUp voor je account, en daarmee je nummer. Met sip set debug on kun je precies zien hoe dat gaat (na nog een sip reload). Je kunt controleren dat het goed is gegaan met sip show registry:
Host dnsmgr Username Refresh State Reg.Time sip.speakup.nl:5060 N %TRUNKUSER% 105 Registered Sun, 15 Sep 2013 20:35:12 1 SIP registrations.
Het dialplan
We hebben nu de volgende situatie:
- Asterisk kent het adres om naar je SIM te bellen
- Je SIM kan naar Asterisk bellen
- Asterisk kent het adres om naar het telefoonnetwerk te bellen
- Het telefoonnetwerk kan naar Asterisk bellen
Oftewel: Asterisk heeft controle over het telefoonverkeer. Alleen: het programma is nog niet ingesteld, dus alle oproepen zullen eindigen in een SIP/2.0 404 Not Found: Asterisk kan geen instructies vinden voor het gebelde nummer. Die instructies gaan we nu toevoegen.
In de twee peer-definities die je eerder hebt toegevoegd stond allebei een regel "context": die is "from-sim" voor de definitie van je SIM-kaart en "from-speakup" voor de definitie van de SpeakUp-trunk. Die contexts zijn startpunten in het dialplan dat Asterisk gebruikt om alle gesprekken bij het juiste eindpunt te laten komen. Dat dialplan staat gedefinieerd in extensions.conf. Laten we eerst de simpelste configuratie opnemen: een oproep naar je nummer eindigt bij je telefoon; een oproep van je telefoon eindigt bij de SpeakUp-trunk. Voeg daarvoor deze regels toe in extensions.conf:
[from-sim] exten => _X.,1,Verbose(Call from Limesco SIM [${CALLERID(num)}] to [${EXTEN}]) same => n,Dial(SIP/speakup01/${EXTEN}) [from-speakup] ; Vervang ... door de rest van je DIY-nummer: exten => 316...,1,Verbose(Call from SpeakUp [${CALLERID(num)}] to [${EXTEN}]) same => n,Dial(SIP/316.../${EXTEN})
Voer nu dialplan reload in in de Asterisk-console om het bestand te herladen. Pak de telefoon met je DIY-SIM en bel een bekend nummer. Je ziet dan in de Asterisk-log een melding als Call from Limesco SIM [316...] to [316...] als je dialplan goed is opgepakt. De telefoon met het nummer moet nu overgaan: als je daar opneemt, hoor je elkaar. Andersom: bel met een bekend nummer het nummer van je DIY-SIM; er verschijnt weer een melding in je log en de DIY-SIM-telefoon moet overgaan. Je hebt nu een standaardconfiguratie.
Voor meer informatie kun je ook kijken naar de SpeakUp-pagina over SIP-koppeling.
Eventuele andere uplinks kun je op een vergelijkbare manier instellen.
Meer over het dialplan
Asterisk laadt bij het opstarten een "dial-plan" in het geheugen. Een dialplan is een set instructies voor telefoonnummers (of extensions), die Asterisk zal uitvoeren zodra één van die nummers wordt gebeld. Iedere instructie heeft een regelnummer; Asterisk zal beginnen bij regelnummer 1 van de juiste extension en regelnummers zullen in volgorde worden afgehandeld tot het eerstvolgende regelnummer niet meer bestaat. Als een telefoongesprek tegen het einde van een set instructies niet (succesvol) is doorgeschakeld, aangenomen of geweigerd, zal Asterisk zelf de juiste foutcode proberen te raden (b.v. aan de hand van een gefaalde operatie). Er bestaat een opdracht GoTo om naar een andere extension of een ander regelnummer te springen. Dit is bijvoorbeeld een correcte set instructies om een MP3'tje af te spelen en op te hangen wanneer het nummer 300 gebeld wordt:
exten => 300,1,Answer exten => 300,n,MP3Player(/tmp/Sad-Trombone.mp3) exten => 300,n,Hangup
Alle regels beginnen met "exten =>"; daarna volgt het telefoonnummer, het regelnummer (of "n" voor next, het vorige regelnummer plus één) en de instructie om uit te voeren. De instructies die je kunt gebruiken vind je (o.a.) in de console:
foo*CLI> core show applications -= Registered Asterisk Applications =- AddQueueMember: Dynamically adds queue members. [...] Zapateller: Block telemarketers with SIT. -= 176 Applications Registered =- foo*CLI> core show application Zapateller -= Info about application 'Zapateller' =- [Synopsis] Block telemarketers with SIT. [....]
Naast hele telefoonnummers kun je als extension ook nog patterns opgeven. Die beginnen met een underscore (_) en kunnen bepaalde characters matchen vanaf het begin (maar niet vanaf het eind). Zie voor meer informatie http://www.voip-info.org/wiki/view/Asterisk+Dialplan+Patterns.
Asterisk maakt in een extensionlijstje nooit vanzelf een sprong naar een regelnummer méér dan één hoger dan het huidige regelnummer. Dit werkt dus niet:
exten => 300,1,Answer [...] exten => 300,10,Nop exten => 300,100,HangUp
Om een sprong te maken, neem je een GoTo op (zie ook core show application goto). Dat kan direct naar een specifiek regelnummer, maar werkt wat overzichtelijker met labels:
exten => 300,1,Answer exten => 300,n,GoTo(ophangen) exten => 300,100(ophangen),HangUp