IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Contingut

Què és Asterisk?

TODO:

People often tend to think of Asterisk as an "open source PBX" because that was the focus of the original development effort. But calling Asterisk a PBX is both selling it short (it is much more) and overstating it (it can be much less). It is true that Asterisk started out as a phone system for a small business (see the "Brief History" section for the juicy details) but in the decade since it was originally released it has grown into a universal tool for building communications applications. Today Asterisk powers not only IP PBX systems but also VoIP gateways, call center systems, conference bridges, voicemail servers and all kinds of other applications that involve real-time communications.

Asterisk is not a PBX but is the engine that powers PBXs. Asterisk is not an IVR but is the engine that powers IVRs. Asterisk is not a call center ACD but is the engine that powers ACD/queueing systems.

Asterisk is to communications applications what the Apache web server is to web applications. Apache is a web server. Asterisk is a communication server. Apache handles all the low-level details of sending and receiving data using the HTTP protocol. Asterisk handles all the low level details of sending and receiving data using lots of different communication protocols. When you install Apache, you have a web server but its up to you to create the web applications. When you install Asterisk, you have a communications server but its up to you to create the communications applications.

Web applications are built out of HTML pages, CSS style sheets, server-side processing scripts, images, databases, web services, etc. Asterisk communications applications are built out Dialplan scripts, configuration files, audio recordings, databases, web services, etc. For a web application to work, you need the web server connected to the Internet. For a communications application to work, you need the communications server connected to communication services (VoIP or PSTN). For people to be able to access your web site you need to register a domain name and set up DNS entries that point "www.yourdomain.com" to your server. For people to access your communications system you need phone numbers or VoIP URIs that send calls to your server.

In both cases the server is the plumbing that makes your application work. The server handles the low-level complexities and allows you, the application developer, to concentrate on the application logic and presentation. You don't have to be an expert on HTTP to create powerful web applications, and you don't have to be an expert on SIP or Q.931 to create powerful communications applications.

Here's a simple example. The following HTML script, installed on a working web server, prints "Hello World" in large type:

Conceptes

  • SIP Account: Es defineixen comptes SIP per a cada extensió. Els comptes SIP es defineixen al fitxer sip.conf.

Els fitxers de configuració estan dividits en seccions, cada secció té un nom que es posa entre brackets. Exemple

[nom-seccio]

Els noms de secció no poden tenir noms i són case-sensitive.

Arquitectura

TODO

Exemple pas a pas d'una trucada (Call Flow + Bridging Model)

Call Flow and Bridging Model

Skip to end of metadata

   Added by malcolmd, last edited by Malcolm Davenport on Sep 23, 2010  (view change)
   show comment

Go to start of metadata

Now that you know about the various modules that Asterisk uses, let's talk about the ways that calls flow through an Asterisk system. To explain this clearly, let's say that Alice wants to talk to Bob, and they both have SIP phones connected to their Asterisk system. Let's see what happens!

Should we add a graphic to help explain the call flow model?

   Alice dials extension 6002, which is Bob's extension on the Asterisk system.
   A SIP message goes from Alice's phone to the SIP channel driver in Asterisk
   The SIP channel driver authenticates the call. If Alice's phone does not provide the proper credentials, Asterisk rejects the call.
   At this point, we have Alice's phone communicating with Asterisk.
   Now the call goes from the SIP channel driver into the core of Asterisk. Asterisk looks for a set of instructions to follow for extension 6002 in the dialplan.
   Extension 6002 in the dialplan tells Asterisk to call Bob's phone
   Asterisk makes a call out through the SIP channel driver to Bob's phone.
   Bob answers his phone.
   Now we have two independent calls on the Asterisk system: one from Alice, and to Bob. Asterisk now bridges the audio between these two calls (known as channels in Asterisk parlance).
   When one channel hangs up, Asterisk signals the other channel to hang up.

And there we have it! We've shown how calls flow from external devices, through the channel drivers to the core of Asterisk, and back out through the channel drivers to external devices.

Recursos:

Asterisk SIP channels

Asterisk SIP channels

Asterisk SIP Channel Module

El mòdul asterisk SIP Channel Module permet a Asterisk utilitzar el protocol SIP per a les comunicacions VOIP. Asterisk des de la perspectiva de SIP pot ser:

  • SIP client: Asterisk es registra com un client en un servidor SIP remot i rep i realitza les trucades utilitzant aquest servidor remot. Incoming calls are routed to an Asterisk extension.
  • SIP server: Asterisk can be configured so that SIP clients (phones, software clients) register to the Asterisk server and set up SIP sessions with the server, i.e. calls and answers incoming calls. This said, Asterisk is not a full-feature SIP server like SIP express router or OpenSER. If you are going to have thousands of SIP phones, you should use SER or OpenSER and forward calls to Asterisk for voicemail or PSTN access.
  • SIP gateway: Asterisk acts as a Media gateway between SIP, IAX, MGCP, H.323 and PSTN connections. As an example, an Asterisk server can be connected to ISDN to give your SIP clients connectivity to the switched telephony network.

Asterisk però no és un SIP proxy?

Vegeu també SIP channels.

La configuració a Asterisk dels SIP Channels es realitza al fitxer sip.conf, vegeu:

http://www.voip-info.org/wiki/view/Asterisk+config+sip.conf

Recursos:

Asterisk no és un servidor SIP proxy

Why is Asterisk not a SIP Proxy?

Asterisk is *not* a SIP proxy. A SIP proxy handles call control on behalf of other user agents (UA) and usually does not maintain state during a call and therefore is never the endpoint of a call.

Asterisk, as a server, is:

If it is 'controlling' or relaying a call from a SIP phone to another SIP phone, it simply acts as an endpoint UA to the originating call leg and then creates a new call to the receiving phone. Therefore, it stays "in the middle of the call," maintaining state and controlling, and optionally bridging, each remote endpoint.

IMPORTANT: The audio channels (RTP) may go directly from phone to phone or may go through Asterisk's media bridge.

Asterisk can thus be described best as a "back-to-back user agent" (B2BUA), which is also consistent with the use of the term PBX. Because of this architecture, fairly simple SIP functions, such as REFER (transfer) involve more aspects of the Asterisk core. On the other hand, the architecture provides additional power and flexibility, because each call leg can just as easily be replaced with a different technology channel (ZAP, H323, MGCP, etc) and, thus, Asterisk becomes a powerful media gateway.

Open Source SIP Proxys

Excellent open source SIP Proxys are available on the Internet. Check

  • FreeSwitch: SIP Proxy and PBX
  • SIP Express Router: SER is used by many SIP providers standalone or in conjunction with Asterisk. openSER
  • Vovida.org
  • sipX from Sipfoundry is a native SIP proxy but also a complete SIP PBX
  • OpenSER: - scalable and robust SIP server with TLS support

TODO:

See also

   FreeSwitch: Combining Asterisk and SIP Proxy
   Asterisk at large: Combining SER and Asterisk
   Asterisk cmd SIPRedirect: Sending out a 302 temporarily moved with Asterisk 1.2.x
   Realtime Integration Of Asterisk With OpenSER - step by step integration of Asterisk with OpenSER to provide media services (voicemail service with MWI, conferencing, IVR, ...) to large number of VoIP subscribers
   http://lists.digium.com/pipermail/asterisk-users/2007-July/191607.html: Attempt on asterisk-user Mailinglist to explain Asterisk vs. SIP-Proxy
   Free SIP Proxy Service OnSIP offers free SIP proxy service which underlies it's hosted voip offering.

Asterisk Media handling

Asterisk suporta 3 mètodes de media handling:

1 bridging: media (audio, video) is received on one channel, handed over to Asterisk's core, forwarded to the bridged channel, and sent out again.
2 native-bridging (see also below): if both bridged channels use the same technology then (WRONG! This is confused with P2P, see below) media can be bridged directly in the channel driver, no need to feed the media into Asterisk's core. For example SIP-to-SIP calls or DAHDI-to-DAHDI calls.
3 bypass: here, the media flow bypasses Asterisk directly. AFAIK this works only with SIP as channel technology. This comes in 2 flavors:
3a) During call setup the media will be forwarded via Asterisk. Once the call is set-up, Asterisk will send reINVITEs to both clients using the clients original SDP contact information. For this you must set canreinvite=yes (1.4) or directmedia=yes (1.6) in sip.conf. Of course Asterisk will initiate the direct media only if the media is not needed in Asterisk, e.g. if you monitor a call, the media will always be routed via Asterisk.
3b) Media will bypass Asterisk from the beginning. Therefore you have to set directrtpsetup=yes. This is still experimental and causes weird reINVITEs (e.g. after call setup to lock down on a certain codec or after call termination to redirect media to Asterisk before hanging up).

Both bypass modes Note only work if either there are no NATs at all, or the clients are behind the same NAT and do not use STUN.

Packet2Packet Bridging (aka P2P) = Audio is not going through the Asterisk core, it comes into the RTP stack and goes directly out. This decreases the amount of memory allocation that happens, and things require less processing.

With native bridging, the audio flows outside of Asterisk between the endpoints. With P2P bridging, the audio comes into the RTP layer of Asterisk but does not pass through the Asterisk core. This allows for Asterisk to intercept DTMF or play warning files to the bridged parties.

Note that also the jitter buffer and packet loss concealment (aka PLC) features of Asterisk are affected by the decision how to route the RTP media traffic.


Recursos:

Asterisk Channel Driver

TODO:

Mobile Channel

Es poden consultar els canals amb:

SERVER*CLI> core show channeltypes
Type        Description                              Devicestate  Indications  Transfer    
----------  -----------                              -----------  -----------  --------    
IAX2        Inter Asterisk eXchange Driver (Ver 2)   yes          yes          yes         
SIP         Session Initiation Protocol (SIP)        yes          yes          yes         
Feature     Feature Proxy Channel Driver             no           yes          no          
Local       Local Proxy Channel Driver               yes          yes          no          
Zap         Zapata Telephony Driver                  no           yes          no          
Agent       Call Agent Proxy Channel                 yes          yes          no          
----------
6 channel drivers registered.


Pattern matching


Sintaxi

Includes

TODO:

There are two other constructs we can use within our configuration files. They are #include and #exec.

The #include construct tells Asterisk to read in the contents of another configuration file, and act as though the contents were at this location in this configuration file. The syntax is #include filename, where filename is the name of the file you'd like to include. This construct is most often used to break a large configuration file into smaller pieces, so that it's more manageable.

The #exec takes this one step further. It allows you to execute an external program, and place the output of that program into the current configuration file. The syntax is #exec program, where program is the name of the program you'd like to execute.

Enabling #exec Functionality

The #exec construct is not enabled by default, as it has some risks both in terms of performance and security. To enable this functionality, go to the asterisk.conf configuration file (by default located in /etc/asterisk) and set execincludes=yes in the [options] section. By default both the [options] section heading and the execincludes=yes option have been commented out, you you'll need to remove the semicolon from the beginning of both lines.

Let's look at example of both constructs in action. [section-name] setting=true

  1. include otherconfig.conf  ; include another configuration file
  2. exec otherprogram  ; include output of otherprogram

Instal·lació

Ubuntu 11.10

$ sudo apt-get install asterisk

passos debconf:


TODO: Captures de pantalla

Els paquets instal·lats són:

$ dpkg -l | grep asterisk
ii  asterisk                                  1:1.8.13.1~dfsg-1ubuntu2                  i386         Open Source Private Branch Exchange (PBX)
ii  asterisk-config                           1:1.8.13.1~dfsg-1ubuntu2                  all          Configuration files for Asterisk
ii  asterisk-core-sounds-en                   1.4.22-1                                  all          asterisk PBX sound files - US English
ii  asterisk-core-sounds-en-gsm               1.4.22-1                                  all          asterisk PBX sound files - en-us/gsm
ii  asterisk-modules                          1:1.8.13.1~dfsg-1ubuntu2                  i386         loadable modules for the Asterisk PBX
ii  asterisk-moh-opsound-gsm                  2.03-1                                    all          asterisk extra sound files - English/gsm
ii  asterisk-voicemail                        1:1.8.13.1~dfsg-1ubuntu2                  i386         simple voicemail support for the Asterisk PBX

La versió instal·lada és:

$ asterisk -r
Asterisk 1.8.4.4

Fitxers de configuració

Els fitxers de configuració es troben a /etc/asterisk. Depenent del paquet tenim uns fitxers o uns altres:

$ dpkg -L asterisk | grep etc
/etc
/etc/init.d
/etc/init.d/asterisk
/etc/default
/etc/default/asterisk
/etc/logrotate.d
/etc/logrotate.d/asterisk
/etc/asterisk

Com podeu veure es tracta d'un servei System V

/etc/asterisk/sip.conf
$ sudo grep -v \; /etc/asterisk/sip.conf | grep -v '^#\|^$\|^;'
[general]
[authentication]
       dtmfmode=rfc2833
       context=from-office
       type=friend
       nat=yes
       directmedia=no
       host=dynamic
       nat=no
       directmedia=yes
       disallow=all
       allow=ilbc
       allow=g729
       allow=gsm
       allow=g723
       allow=ulaw
       disallow=all
       allow=ulaw
Crear comptes sip

Exemple:

[common](!) ; this is template.
type=friend
context=internal
host=dynamic
disallow=all
allow=ulaw
allow=alaw
allow=g723
allow=g729
dtmfmode=rfc2833

[1000](common)
username=1000
secret=1000

[1001](common)
username=1001
secret=1001

[1002](common)
username=1002
secret=1002

[1003](common)
username=1003
secret=1003

[1004](common)
username=1004
secret=1004

Recursos:

Registrar telèfons i comprovar el registre SIP

Entreu a Asterisk CLI:

server*CLI> sip show peers
Name/username              Host            Dyn NAT ACL Port     Status
demo-alice                 (Unspecified)    D       A  5060     Unmonitored
demo-bob                   192.168.5.105    D       A  5060     Unmonitored 
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0 offline]

Us mostrarà qui està connectat i qui no. A l'exemple Alice no està registrada i Bob si.

Per depurar els registres SIP cal entrar la Asterisk CLI amb l'opció verbose (-v). Es recomana en nivell 3 és a dir 3 vs.

> asterisk -rvvv
NOTICE[22214]: chan_sip.c:20824 handle_request_register: Registration from '"Alice" 
<sip:demo-alice@192.168.5.50>' failed for '192.168.5.103' - Wrong password

A l'exemple podem veure que l'usuari no coincideix.

Creant extensions Dialplan

Ara cal fer possible que les extensions es puguin trucar entre ells, per això cal configurar el dialplan i concretament les extensions del Dialplan.

IMPORTANT: Oco amb el concepte d'extensió a Asterisk! Que és una extensió asterisk? Doncs no fa referència a un dispositiu físic o telèfon IP, vaja no fa referència al concepte clàsic d'extensió. Una extensió Asterisk és simplement un conjunt d'accions al dialplan que poden afectar a un telèfon físic o no. Per exemple es pot crear una extensió per a un menú automàtic (IVR) una sala de conferències o altres opcions "avançades"

El dialplan es configura al fitxer /etc/asterisk/extensions.conf

Hi ha dos seccions generals:

[general] i [globals]

Qualsevol secció per sota d'estes dos és coneix com a context. El fitxer d'exemple extensions.conf té dos contextes exemple:

[demo] i [default].

Més endavant explicarem els contexts amb més detall però el que heu de tenir clar és que si di la extensió a la que truqueu no té un context associat la trucada serà denegada per part d'asterisk.

Ara afegim un nou contexte [users] al final del fitxer:

NOTA: Posant nom als contextes: Els noms que poseu als contextes poden ser e lque vulgueu però és bona idea que siguin noms representatius. Es una bona pràctica doncs anomenar als contextes igual als noms d'usuari.

Vegem un exemple senzill però útil inicialment:

[users]
exten=>6001,1,Dial(SIP/demo-alice,20)
exten=>6002,1,Dial(SIP/demo-bob,20)

Que permet crear l'extensió 6001 que trucarà durant 20 segons a l'usuari SIP demo-alice i la 6002 que farà el mateix per l'usuari demo-bob

Ara feu un reload del servidor:

$ sudo /etc/init.d/asterisk reload

o feu un reload per l'Asterisk CLI.

Es pot comprovar que ha llegit correctament la configuració amb:

server*CLI> dialplan show users
[ Context 'users' created by 'pbx_config' ]
 '6001' =>         1. Dial(SIP/demo-alice,20)                    [pbx_config]
 '6002' =>         1. Dial(SIP/demo-bob,20)                      [pbx_config]
-= 2 extensions (2 priorities) in 1 context. =-  

Ara podem provar de fer una trucada de test per veure si funciona

Fer una trucada i depurar

Abans de fer la trucada prepareu la terminal Asterisk amb mode verbose per veure missatges associats a les trucades:

$ asterisk -rvvv
server*CLI>     -- Executing [6002@users:1] Dial("SIP/demo-alice-00000000", "SIP/demo-bob,20")  
in new stack
   -- Called demo-bob
   -- SIP/demo-bob-00000001 is ringing
   -- SIP/demo-bob-00000001 answered SIP/demo-alice-00000000
   -- Native bridging SIP/demo-alice-00000000 and SIP/demo-bob-00000001
== Spawn extension (users, 6002, 1) exited non-zero on 'SIP/demo-alice-00000000'

Si no us va repaseu:

  • Mireu la CLI amb asterisk -rvvv i fixeu-vos si hi ha algun missatge d'error
  • Assegureu-vos los dos telèfons que participen de la comunicació estan registrats:
> sip show peers 

Consulteu que els contextes estan bé:

> sip show users

Mostreu el dialplan del context users (suposem que li heu dit així i no gheu canviat el nom del contexte sinó canvieu coherentment l'exemple) amb:

> dialplan show users

Per comprovar quina extensió es crear al trucar a XXX poseu:

> dialplan show XXX@users


Recursos:

Dialplans

Recursos:

Configuració gràfica

Asterisk CLI

Per entrar a l'Asterisk CLI:

$ sudo asterisk -r

Si voleu més informació de depuració:

$ asterisk -vvvvvr

Recursos:

Indications per a Espanya

POsar es al contexte [general] de les extensions?

Al fitxer indications.conf:

[es]
description = Spain
ringcadence = 1500,3000
dial = 425
busy = 425/200,0/200
ring = 425/1500,0/3000
congestion = 425/200,0/200,425/200,0/200,425/200,0/600
callwaiting = 425/175,0/175,425/175,0/3500
dialrecall = !425/200,!0/200,!425/200,!0/200,!425/200,!0/200,425
record = 1400/500,0/15000
info = 950/330,0/1000 
dialout = 500 

Registre de trucades CDR

/var/log/asterisk/cdr-csv

Fitxer CSV:

/persistent/var/log/asterisk/cdr-csv/Master.csv

TODO

root:/persistent> find / | grep cdr
/usr/lib/asterisk/modules/app_cdr.so
/usr/lib/asterisk/modules/func_cdr.so
/usr/lib/asterisk/modules/cdr_manager.so
/usr/lib/asterisk/modules/app_forkcdr.so
/usr/lib/asterisk/modules/cdr_csv.so
/usr/lib/asterisk/modules/cdr_custom.so
/usr/lib/asterisk/modules/app_setcdruserfield.so
/var/lib/asterisk/static-http/config/manager_cdr.html
/var/lib/asterisk/static-http/config/cdr_conf.html
/var/lib/asterisk/static-http/config/cdr.html
/var/lib/asterisk/static-http/config/cdr-csv
/persistent/var/log/asterisk/cdr-csv
/persistent/var/log/asterisk/cdr-csv/Master.csv
/persistent/etc/rotatecdr.sh
/persistent/etc/asterisk/cdr_manager.conf
/persistent/etc/asterisk/cdr_custom.conf
/persistent/etc/asterisk/cdr.conf
/etc/rotatecdr.sh

Fitxers de configuració

  • /etc/asterisk/zaptel.conf: Here, we’ll do low-level configuration for the hardware interface. We’ll set up one FXO channel and one FXS channel. This configures the driver for the Linux kernel.
  • /etc/asterisk/zapata.conf: In this file, we’ll configure Asterisk’s interface to the hardware. This file contains a slightly higher-level configuration of the hardware in the Asterisk user-level process.
  • /etc/asterisk/extensions.conf: The dialplans we create will be extremely primitive, but they will prove that the system is working.
  • /etc/asterisk/sip.conf: This is where we’ll configure the SIP protocol.
  • /etc/asterisk/iax.conf: This is where we’ll configure incoming and outgoing IAX channels.


Channels

Els tipus de canals més habituals són:

  • FXO: a Foreign eXchange Office (FXO) channel
  • FXS: a Foreign eXchange Station (FXS) channel
  • SIP: Initiation Protocol (SIP) channel
  • IAX: Inter-Asterisk eXchange (IAX) channel

Canals zap

FXO vs FXS

The difference between an FXO channel and an FXS channel is simply which end of the connection provides the dial tone. An FXO port does not generate a dial tone; it accepts one. A common example is the dial tone provided by your phone company. An FXS port provides both the dial tone and ringing voltage to alert the station user of an inbound call. Both interfaces provide bidirectional communication (i.e., communica- tion that is transmitted and received in both directions simultaneously).§ § Bidirectional communication is also known as full duplex in some circles. Half duplex means communication is only traveling in one direction at a time. Setting Up the Dialplan for Some Test Calls | 73 If your Asterisk server has a compatible FXO port, you can plug a telephone line from your telephone company (or “telco”) into this port. Asterisk can then use the telco line to place and receive telephone calls. By the same token, if your Asterisk server has a compatible FXS port, you may plug an analog telephone into your Asterisk server, so that Asterisk may call the phone and you may place calls. Ports are defined in the configuration by the signaling they use, as opposed to the physical type of port they are. For instance, a physical FXO port will be defined in the configuration with FXS signaling, and an FXS port will be defined with FXO signaling. This can be confusing until you understand the reasons for it. FX_ cards are named not according to what they are, but rather according to what is connected to them. An FXS card, therefore, is a card that connects to a station. Since that is so, you can see that in order to do its job, an FXS card must behave like a central office and use FXO signaling. Similarly, an FXO card connects to a central office (CO), which means it will need to behave like a station and use FXS signaling. The modem in your computer is a classic example of an FXO device. The older Digium X100P card used a Motorola chipset, and the X101P (which Digium sold before completely switching to the TDM400P) is based on the Ambient/Intel MD3200 chipset. These cards are modems with drivers adapted to utilize the card as a single FXO device (the tel- ephone interface cannot be used as an FXS port). Support for the X101P card has been dropped in favor of the TDM series of cards. These cards (or their clones) SHOULD NOT be used in production en- vironments. They are $10 on eBay for a reason. The X100P/X101P cards are poor cards for production use due to their tendency to introduce echo into your telephone calls, and their lack of remote disconnect supervision. Do yourself a favor and don’t waste your time with this hardware. You will find that if you ask the community for support of these cards, many responses

Dialplans

Fonaments

Contexts, Estensions, Priorities i Applications:

Els dialplans estan organitzats en varies seccions anomenades contextes (contexts). Els contextes són la unitat bàsica d'organització dels dialplans. Les diferents seccions d'un mateix dialplan són independents entre sí. De fet els contextes o seccions s'utilitzen per tal de definir els limits de seguretat entre diferents parts d'un mateix dialplan i també per proveir de diferents serveis a diferents grups d'usuaris.

La sintaxi d'un context és exactament igual que la de qualsevol secció de qualsevol fitxer de configuració d'Asterisk. Simplement s'ha de posar el nom del context entre square brackets.

Per exemple:

[users]

Dins de cada context es poden definir una o més extensions. Una extensió no és res més que un conjunt d'accions que tenen un nom (quelcom similar a una funció). Cadascuna de les accions d'una extensió s'executen en una seqüència ordenada cada com que la extensió es marcada.

La sintaxi d'una extensió és:

exten => number,priority,application([parameter[,parameter2...]])

Per exemple:

exten => 6001,1,Dial(SIP/demo-alice,20)

En aquest cas el número de la extensió és 6001, la prioritat és 1 i l'apliació utilitzada és Dial() (trucar) i s'utilitzen dos paràmetres: SIP/demo-alice i 20

Dins de cada extensió pot haver-hi una o més prioritats. La prioritat indica simplement el número de seqüència de l'acció de forma que primer s'executen les prioritats baixes i després les altes.

Priority numbers

Han de començar per 1 i es poden incrementar seqüencial ment (2,3,4...). Si Asterisk no troba el següent número de la seqüència, aleshores s'atura la trucada (això s'anomena auto-fallthrough). Per exemple:

exten => 6123,1,do something
exten => 6123,2,do something else
exten => 6123,4,do something different

En aquest cas s'executarà el 1 i el 2 i s'aturarà la trucada. La prioritat 4 mai serà executada. Es pot utilitzar la lletra n (next) com a prioritat (només per a les prioritats 2 o superior)

exten => 6123,1,do something
exten => 6123,n,do something else
exten => 6123,n,do something different

També es poden assignar labels a una prioritat per tal de poder-les anomenar i reutilitzar més endavant:

exten => 6123,1,do something
exten => 6123,n(repeat),do something else
exten => 6123,n,do something different

TODO: Included in the Asterisk 1.6.2 branch (and later) there is a way to avoid having to repeat the extension name/number or pattern using the same => prefix.

exten => _1NXXNXXXXXX,1,do something
same => n(repeat),do something else
same => n,do something different

Cada prioritat d'un dialplan crida a una aplicació. Una aplicació realitza alguna feina o tasca al canal, com per exemple respondre a una trucada o fer sonar una locució o só. Hi ha molta varietat d'aplicacions, es pot consultar la llista completa amb l'ordre:

core show applications

NOTA: Depenen dels mòduls instal·lats es poden tenir menys o més aplicacions

La majoria d'aplicacions poden tenir un o més paràmetres, separats per comes. Exemple:

exten => 6123,1,application(one,two,three)

NOTA: La separació de paràmetres amb el caràcter

Més sobre les extensions

Context:

El format és:

[nom_extensio]

El nom no ha de tenir espais i els caràcters vàlids són: lletres de la A a la Z (minúscules o majúscules), els números de 0 a 9, i els caràcters hyphen (-) i underscore (_).

Hi ha dos contextes que sempre existeixen:

[general] i [globals]

Extensions:

Es guarden al fitxer:

/etc/asterisk/extensions.conf

Les extensions tenen la sintaxi:

exten => name,priority,application()

On name és el nom de la extensió i la prioritat pot ser:

  • Un número
  • n: indica la següent prioritat
  • Poden tenir un label:
exten => 123,n(label),application()

Exemple:

exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()

NOTA: Cal tenir en compte les diferències entre Playback() i Background(). En el primer cas no hi ha interacció amb l'usuari, en canvi amb backgroun es pot aturar la locució premen alguna tecla

Extensió start (extensió s)

Hi ha una extensió especial anomenada start que es representa per una s:

[incoming]
exten => s,1,Answer()
exten => s,n,Playback(hello-world)
exten => s,n,Hangup()

ÉS la extensió inicial al executar el canal.

Entrades invàlides (extensió 1) i timeouts (extensió t).

El default timeout sol ser 10 segons.

[incoming]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person)
exten => 123,n,WaitExten()
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(incoming,123,1)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(incoming,123,1)
exten => 3,1,Playback(digits/3)
exten => 3,n,Goto(incoming,123,1)
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(incoming,123,1)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()

Utilitzem les extensions especials i (entrada invàlida) i t (timeout) per tal de fer dialplans més robustos i user-friendly.

NOTA: Compte amb les extensions ambigües, si tenim la extensió 123 i 1, i premem un aleshores el telefon s'esperarà un cert temps (timeout) per veure si estem intentant escriure 123 o realment simplement volem la extensió 1

Macros

A Asterisk una macro és un tipus especial de context que pot ser expandit dins dun altre context. El nom d'un context macro comença amb:

macro-

Una macro s'expandeix utilitzant la comanda o aplicació Macro.

Totes les línies d'una macro només poden utilitzar la extensió especial s. La extensió real vindrà donada per la línia des de on s'ha cridat la macro.

A dins de la macro es poden utilitzar les variables ${MACRO_EXTEN} per tal de referir-se a la extensió real.

verbose i depurar

[globals]
[general]
[default]
exten => s,1,Verbose(1|Unrouted call handler)
exten => s,n,Answer()
exten => s,n,Wait(1)
exten => s,n,Playback(tt-weasels)
exten => s,n,Hangup()
[incoming_calls]
[internal]
exten => 500,1,Verbose(1|Echo test application)
exten => 500,n,Echo()
exten => 500,n,Hangup()
[phones]
include => internal

echo

Whatever you say, the Echo() application will relay back to you. Per exemple per provar un port FX0:

[incoming]
; incoming calls from the FXO port are directed to this context
;from zapata.conf
exten => s,1,Answer()
exten => s,n,Echo()

on zapata.conf:

; default
usecallerid=yes
hidecallerid=no
callwaiting=no
threewaycalling=yes
transfer=yes
echocancel=yes
echotraining=yes
; define channels
context=incoming
signaling=fxs_ks
channel => 2
; Incoming calls go to [incoming] in extensions.conf
; Use FXS signaling for an F

Whatever you say, the Echo() application will relay back to you.

Dialplan. /etc/asterisk/extensions.conf

Les extensions són grups d'accions que instrueixen al servidor Asterisk de com s'han de gestionar les trucades telefòniques. Les extensions consisteixen típicament un nombre de prioritats que contenen múltiples accions agrupades en contexts.

Cada context conté un grup lògic d'accions (extensions). El conjunt d'extensions defineixen el dialplan.

NOTA: El concepte d'extensió a Asterisk és molt flexible i poderós i pot ser utilitzat per tal de crear aplicacions de telefònica complexes

Aplicacions

Dial

Aquesta aplicació intenta fer sonar (ring) un dispositiu extern (per exemple un telèfon IP) i si el dispositiu contesta aleshores es connecten (bridge) els dos canals i es fa qualsevol conversió de protocols o codecs.

També es gestiona la senyalització SIP per tal de mostrar el missatges de progres:

busy, no-answer, ringing

Cal tenir en compte que si l'aplicació Dial s'executa correctament i es connecten dos canals, aleshores la trucada ja no fa cap més progrés dins del dialplan. És a dir, qualsevol acció que tingui una prioritat posterior només s'executarà si el Dial falla.

Hi ha 4 paràmetres:

  • Devices: El primer paràmetre és una llista de dispositius als que es vol trucar. La sintaxi és la següent:
Technology_or_channel driver/device_or_account_name

Per exemple:

SIP/demo-alice

Utilitzarà el canal SIP per enviar la trucada a demo-alice que serà una secció del fitxer sip.conf.

Altres exemples:

IAX2/demo-george
DAHDI/1

Quan es truca a través d'un gateway o un proveïdor de serveis la sintaxi és:

technology/device/number

Per exemple:

SIP/my_provider/5551212

Per trucar a múltiples al mateix temps utilitzeu &

exten => 6003,1,Dial(SIP/demo-alice&SIP/demo-bob,30)
  • Timeout: El número de segons que sonarà el dispositiu abans d'abortar la trucada i passar a l'acció de següent prioritat.
  • Options: Aquest paràmetres és opcional. Hi ha multitud d'opcions. Escriviu:
core show application dial

Al CLI per veure una llista completa. Per utilitzar més d'una opció a l'hora es concaten, per exemple mH són les opcions m i H.

  • URL: TODO The fourth parameter is a URL that will be sent to the endpoint. Few endpoints do anything with the URL, but there are a few (softphones mostly) that do act on the URL.


Answer, Playback, i Hangup

TODO

As its name suggests, the Answer() application answers an incoming call. The Answer() application takes a delay (in milliseconds) as its first parameter. Adding a short delay is often useful for ensuring that the remote endpoing has time to begin processing audio before you play a sound prompt. Otherwise, you may not hear the very beginning of the prompt.

Knowing When to Answer a Call

When you're first learning your way around the Asterisk dialplan, it may be a bit confusing knowing when to use the Answer() application, and when not to.

If Asterisk is simply going to pass the call off to another device using the Dial() application, you probably don't want to call the answer the call first. If, on the other hand, you want Asterisk to play sound prompts or gather input from the caller, it's probably a good idea to call the Answer() application before doing anything else.

The Playback() application loads a sound prompt from disk and plays it to the caller, ignoring any touch tone input from the caller. The first parameter to the dialplan application is the filename of the sound prompt you wish to play, without a file extension. If the channel has not already been answered, Playback() will answer the call before playing back the sound prompt, unless you pass noanswer as the second parameter.

To avoid the first few milliseconds of a prompt from being cut off you can play a second of silence. For example, if the prompt you wanted to play was hello-world which would look like this in the dialplan: exten => 1234,1,Playback(hello-world)

You could avoid the first few seconds of the prompt from being cut off by playing the silence/1 file: exten => 1234,1,Playback(silence/1) exten => 1234,n,Playback(hello-world)

Alternatively this could all be done on the same line by separating the filenames with an ampersand (&): exten => 1234,1,Playback(silence/1&hello-world)


Configuració de SIP. Fitxer /etc/asterisk/sip.conf

És un fitxer organitzat per seccions. Un exemple molt reduït:

[general]
port=5060
bindaddr=0.0.0.0
disallow=all
allow=ulaw

[100]
type=peer
host=dynamic
secret=100
context=users
mailbox=100@default 

[200]
type=peer
host=dynamic
secret=200
context=users
mailbox=200@default 

[VoIPProvider]
type=peer
host=proxy.voipprovider.net
username=wilber
fromuser=wilber
secret=supersecure
canreinvite=no


A l'exemple trobem les seccions:

  • General: Configuracions generals i valors per defecte de SIP
  • Extensions: A l'exemple definim la 100 i la 200. Normalment telefons IP connectats a la centraleta
  • VoIPProvider: aquesta secció és un exemple de definició d'una troncal SIP que defineix la connexió a proveïdor de veuIP.

Secció general:

[general]                                                                                 
context=default                 ; Default context for incoming calls                      
;allowguest=no                  ; Allow or reject guest calls (default is yes)            
allowoverlap=no                 ; Disable overlap dialing support. (Default is yes)       
;allowtransfer=no               ; Disable all transfers (unless enabled in peers or users)   
                                ; Default is enabled                                         
;realm=mydomain.tld             ; Realm for digest authentication                            
                                ; defaults to "asterisk". If you set a system name in        
                                ; asterisk.conf, it defaults to that system name             
                                ; Realms MUST be globally unique according to RFC 3261       
                                ; Set this to your host name or domain name                  
bindport=5060                   ; UDP Port to bind to (SIP standard port is 5060)            
                                ; bindport is the local UDP port that Asterisk will listen on
bindaddr=0.0.0.0                ; IP address to bind to (0.0.0.0 binds to all)               
srvlookup=no                    ; Enable DNS SRV lookups on outbound calls                   
                               ; Note: Asterisk only uses the first host                    
                               ; in SRV records                                             
                               ; Disabling DNS SRV lookups disables the                     
                               ; ability to place SIP calls based on domain                 
                               ; names to some other SIP users on the Internet              
                                                                                            
;domain=mydomain.tld            ; 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               
;pedantic=yes                   ; Enable checking of tags in headers,                        
                               ; international character conversions in URIs                
                               ; and multiline formatted headers for strict                 
                               ; SIP compatibility (defaults to "no")               
TODO: Starting with Asterisk v1.6.0: The previously deprecated options "insecure=very" and "insecure=yes" have now 
been removed. "insecure=invite,port" is the equivalent of "insecure=very"

Contexts d'extensions:

Les opcions més habituals són:

  • host=dynamic: indica a asterisk que els telèfons SIP es registraran ells mateixos al servidor SIP, molt possiblement per que tenen una IP dinàmica.
  • secret: és el secret compartit entre client SIP i servidor SIP (paraula de pas). Els telefons el necessiten per autenticar-se.
  • context: indica la secció (context) del Dialplan (fitxer extensions.conf) a on les trucades d'aquest dispositiu s'enviaran.
  • mailbox: Defineix els voicemail
  • canreinvite]: TODO: is a specific option informing Asterisk to not attempt to re-invite or change any settings of the call. Re-invites are typically one cause of one-way audio or no audio at all, when behind NAT or firewalls.


SIP Accounts

El fitxer que configura el SIP Channel Driver és sip.conf. Un exemple de configuració de dos comptes SIP (els comptes SIP solen estar després de les seccions General i Authentication):

[demo-alice]
type=friend
host=dynamic
secret=verysecretpassword ; put a strong, unique password here instead
context=users
deny=0.0.0.0/0
permit=192.168.5.0/255.255.255.0 ; replace with your network settings
 
[demo-bob]
type=friend
host=dynamic
secret=othersecretpassword ; put a strong, unique password here instead
context=users
deny=0.0.0.0/0
permit=192.168.5.0/255.255.255.0 ; replace with your network settings

http://www.asterisk.org/security/webinar/.

Per aplicar els canvis en la configuració de SIP cal anar al CLI i escriure:

server*CLI> sip reload

SIP Registrations

El registre SIP és el pas que realitzen tots els telèfons IP al registrar-se a una centraleta.

Una de les formes més habituals de registrar els telèfons SIP és que el registre el facin ells mateixos de forma dinàmica.

NOTA: es poden configurar altres formes al configurar el SIP channel driver).

El registre SIP és un mecanisme simple. El telèfon IP informa al servidor que està disponible, s'autentica amb un usuari i paraula de pas i informa al servidor en quina adreça IP està disponible.

Normalment les dades que cal aportar al telèfon IP per tal de configurar-lo són:

  • Registrar/Registration Server: La adreça IP o nom de màquina del servidor Asterisk.
  • SIP User Name/Account Name/Address: El nom d'usuari. El nom d'usuari correspon directament al nom de seccio (el valor entre brackets) del fitxer sip.conf
  • SIP Authentication User/Auth User: A Asterisk sol ser el mateix valor que l'anterior.
  • Proxy Server/Outbound Proxy Server: Aquesta és la adreça IP del servidor Asterisk que s'utilitzarà per fer les trucades cap a l'exterior. Pot ser el mateix servidor que el de registre o un altre de diferent. En molts casos sól ser la mateixa màquina.

Per veure els registres SIP actuals utilitzeu l'ordre del CLI:

$ asterisk -r
server*CLI> sip show peers
Name/username              Host            Dyn NAT ACL Port     Status
demo-alice                 (Unspecified)    D       A  5060     Unmonitored
demo-bob                   192.168.5.105    D       A  5060     Unmonitored
2 sip peers [Monitored: 0 online, 0 offline Unmonitored: 2 online, 0 offline]

A l'exemple anterior demo-alice està registrat correctament i en canvi demo-bob no.

Recursos

Depurant els registres SIP. SIP Registrations

Per depurar cal establir el verbosity level com a mínim a 3 i mentrestant rebootar el telefon IP. Un exemple del que es pot veure:

NOTICE[22214]: chan_sip.c:20824 handle_request_register: Registration from '"Alice" 
<sip:demo-alice@192.168.5.50>' failed for '192.168.5.103' - Wrong password

Asterisk com a client SIP

Definir proveïdors SIP

Al fitxer sip.conf a la secció:

[general]

Cal definir el registre SIP amb el següent format:

register => user[:secret[:authuser]]@host[:port][/extension]

o

register => fromuser@fromdomain:secret@host

o

register => fromuser@fromdomain:secret:authuser@host:port/extension

On:

  • user: és el user ID (identificador d'usuari) per al servidor SIP
  • authuser: és opcional. Authorization user for the SIP server ???
  • secret: la paraula de pas de l'usuari
  • host: és la IP o el nom de màquina del servidor SIP.
  • port: és el port del servidor SIP. Per defecte 5060
  • /extension: és el que s'anomena la Contact Extension. Per exemple /1234. Aquest valor es posa al contact header del missatge SIP REGISTER. Aquesta extensió és utilitzada pel servidor SIP remot quan necessita enviar una trucada al servidor Asterisk que estem configurant. El valor per defecte sol ser s.

Un exemple:

 ; Register 2345@mysipprovider.com with authname 2345 at mysipprovider.com at sip provider as 1234 here:
 register => 2345:password@mysipprovider.com/1234
 ; Register 1235@mysipprovider.com with authname 1235 and realm mysipprovider.com at proxyof.mysipprovider.com as s here.
 ; (as needed by budgetphone.nl):
 register => 1235@mysipprovider.com:password:1235@proxyof.mysipprovider.com



NOTA: {{{1}}}


Agreed, it's not very good to have a lot of cleartext passwords in this text file, but that's how it works now. You only need to register if a) you want to be called, and b) you appear to the other side as having a dynamic IP address. Check the success of your own server's registrations at the CLI with "SIP SHOW REGISTRY", whereas you can obtain a list of clients that registered with your server with the help of "SIP SHOW PEERS". You may examine all details of a peer's registration with "SIP SHOW PEER <NAME>". Enter "HELP SIP" at the CLI for additional commands.

SIP Dial Strings

La sintaxi segons la documentació és:

;-----------------------------------------------------------
; In the dialplan (extensions.conf) you can use several
; syntaxes for dialing SIP devices.
;        SIP/devicename
;        SIP/username@domain   (SIP uri)
;        SIP/username[:password[:md5secret[:authname[:transport]]]]@host[:port]
;        SIP/devicename/extension
;        SIP/devicename/extension/IPorHost
;        SIP/username@domain//IPorHost

On:

; Devicename
;        devicename is defined as a peer in a section below.
;
; username@domain
;        Call any SIP user on the Internet
;        (Don't forget to enable DNS SRV records if you want to use this)
;
; devicename/extension
;        If you define a SIP proxy as a peer below, you may call
;        SIP/proxyhostname/user or SIP/user@proxyhostname
;        where the proxyhostname is defined in a section below
;        This syntax also works with ATA's with FXO ports
;
; SIP/username[:password[:md5secret[:authname]]]@host[:port]
;        This form allows you to specify password or md5secret and authname
;        without altering any authentication data in config.
;        Examples:
;
;        SIP/*98@mysipproxy
;        SIP/sales:topsecret::account02@domain.com:5062
;        SIP/12345678::bc53f0ba8ceb1ded2b70e05c3f91de4f:myname@192.168.0.1
;
; IPorHost
;        The next server for this call regardless of domain/peer
;
; All of these dial strings specify the SIP request URI.
; In addition, you can specify a specific To: header by adding an
; exclamation mark after the dial string, like
;
;         SIP/sales@mysipproxy!sales@edvina.net

Exemple de dialplan amb SIP

Un cop s'han definit comptes SIP ara cal definir al dialplan com es pot accedir a aquestes extensions.

IMPORTANT: Cal tenir en compte que a Asterisk el terme extensió no representa només un dispositiu fixe com un telèfon IP. De fet també pot representar un menú IVR o qualsevol altre cosa. De fer una extensió Asterisk no és res més que un conjunt d'accions amb un nom

Les extensions es defineixen al fitxer extensions.conf (/etc/asterisk/extensions.conf). Per exemple per definir les extensions dels usuaris es pot crear un contexr anomenat users:

[users]
exten=>6001,1,Dial(SIP/demo-alice,20)
exten=>6002,1,Dial(SIP/demo-bob,20)

Estem definint que al trucar al 6001 ens posarem en contacte amb l'usuari SIP demoa-alice i al trucar al 6002 amb demo-bob.

Apliqueu els canvis al servidor i confirmeu els usuaris amb:

server*CLI> dialplan show users
[ Context 'users' created by 'pbx_config' ]
  '6001' =>         1. Dial(SIP/demo-alice,20)                    [pbx_config]
  '6002' =>         1. Dial(SIP/demo-bob,20)                      [pbx_config]
 -= 2 extensions (2 priorities) in 1 context. =-  

Recursos:

IVR menús

Interactive_Voice_Response TODO


Background(), WaitExten(), i Goto()

Background(), WaitExten(), i Goto()

WaitExten() -> Un cop acabada la locució de background s'espera un temps per defecte a que s'esculli una extensió o conjunt de tecles del telèfon.

Es pot utilitzar:

exten => 123,n,WaitExten(5)

I en aquest cas el timeout serà 5 segons.

Goto té la sintaxi:

exten => 123,n,Goto(context,extension,priority)

Un exemple:

[incoming]
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(incoming,123,1)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(incoming,123,1)

Estem creant un loop que fa tornar al menu principal un cop escollida una opció.

TODO: If you look up the details of the Goto() application, you’ll find that you
can actually pass either one, two, or three arguments to the application.
If you pass a single argument, Asterisk will assume it’s the destination
priority in the current extension. If you pass two arguments, Asterisk
will treat them as the extension and priority to go to in the current
context.

Seguretat

TODO:

Qüestions a tenir en compte amb la configuració per defecte:

; Note: Please read the security documentation for Asterisk in order to
; 	understand the risks of installing Asterisk with the sample
;	configuration. If your Asterisk is installed on a public
;	IP address connected to the Internet, you will want to learn
;	about the various security settings BEFORE you start
;	Asterisk. 
;
;	Especially note the following settings:
;		- allowguest (default enabled)
;		- permit/deny - IP address filters
;		- contactpermit/contactdeny - IP address filters for registrations
;		- context - Which set of services you offer various users


Altres mesures

TODO:

La PABX Asterisk que administro, lleva 5 años en Internet, y con algunas medidas de seguridad es fácil mantener el 5060 abierto, pero ojo...cuidado porque si tenéis una línea personal hay bots que van buscando asterisk abiertos para poder entrar, al igual que el FreePBX es vulnerable al ataque de "asteriskuser/amp111" que es el user/pass que viene por defecto y no se cambia.

Existen alternativas para evitar los ataques de fuerza bruta:

Luego algunas consideraciones de seguridad:

Dentro de sip.conf

[general]
alwaysauthreject=yes

Llevar todo el dialplan a otro contexto que no sea [default] En extensions.conf

[default]
exten => _X.,1,Answer()
exten => _X.,n,Hangup()

Sorry por no contestar antes, seguro que me dejo todavía más cosas para restringir el acceso no autorizado. Estas son algunas recomendaciones.

Con respecto al tema del piloto de VoIP seguimos trabajando en la instalación de Kamailio, pero ando muy pillado con el curro (pues tengo que irme a Alemania a montar asterisk en breve) y apenas dispongo de tiempo libre.

De nuevo disculpad por el retraso en contestar Saludos cordiales Atte.

Veus en català

Ja tenim el fitxer amb les veus grabades en Català. Al veuip2.guifi.net ja hi estan instal·lades.

La instal·lació SOBREESCRIU TOTS ELS FITXERS QUE PUGUIN EXISTIR A LA RUTA /var/lib/asterisk/sounds/ca.

S'HAURIA DE REALITZAR UNA CÒPIA DE SEGURETAT PRÈVIA A AQUESTA INSTAL·LACIÓ PERQUÈ ELS SONS QUE HI HAGIN ES TREPITJARAN.

Per instal·lar, situat al directori de sons d'Asterisk (generalment /var/lib/asterisk/sounds) i executa la següent ordre:

$ wget http://casal.upc.es/~silvia29/asterisk-sounds-ca-1.1.tar.gz
$ tar -zxvf asterisk-sounds-ca-1.1.tar.gz

Això crearà la carpeta 'ca' dins de sounds. Per utilitzar-los només cal afegir als nostres fitxers de configuració (extensions.conf, sip.conf i iax.conf, dins l'apartat general) l'ordre:

language=ca

Caldrà tornar a carregar la nova configuració. Es pot fer:

asterisk -r

i dins:

reload
exit

Missatges i voicemail

es pot enviar un missatge directament amb:

#extensio

Per exemple:

#6001

CLI

Control del servei asterisk

Les comandes més importants en aquest àmbit són:

core stop now: Atura el servei asterisk de forma immediata finalitzant qualsevol trucada en progrés.
core stop gracefully: Impedeix noves trucades però espera a que les trucades en curs es finalitzin abans  d'aturar la màquina.
core stop when convenient: Permet noves trucades i continuen les que estan en progrés i l'asterisk no s'atura fins que no hi hagui cap trucada en progrés

De forma similar per a reiniciar tenim:

core restart now
core restart gracefully
core restart when convenient

També es pot executar:

core abort shutdown : per tal de cancelar una operació d'aturada o reinici pendent.

SIP debug

Asterisk té dos tipus de missatges que apareixeran al CLI:

  • Verbose messages: Aquest missatges donen informació sobre les trucades del sistema així com notices, warnings i errors. Aquest tipus de missatges estan pensants per als administradors del sistema.
  • debug messages: Aquest tipus de missatges estan pensats per als desenvolupadors Asterisk.

Asterisk permet canviar el nivell de verbositat (verbosity level) de la CLI. El nivell va des del més baix (0 zero) i per sobre del nivell 3 hi ha molts pocs missatges.

Per canviar aquest nivell dels missatges verbose:

server*CLI> core set verbose 3
Verbosity was 0 and is now 3

Per canviar aquest nivell dels missatges de debug:

server*CLI> core set debug 4
Core debug was 0 and is now 4

Per activar el debug:

> sip debug on

Per desactivar-lo:

> sip set debug off

També es pot augmentar (però no disminuir) el nivell de log al arranca asterisk:

# asterisk -vvvr

IMPORTANT: No abuseu dels nivells de log ja que sobrecarreguen el sistema. Només s'han d'activar per resoldre problemes o per aprendre i cal aturar-los en entorns de producció.

Usuaris i peers SIP

Useful CLI commands to check peers/users:
;   sip show peers		Show all SIP peers (including friends)
;   sip show users		Show all SIP users (including friends)
;   sip show registry		Show status of hosts we register with
;
;   sip debug			Show all SIP messages
;
;   reload chan_sip.so		Reload configuration file
;				Active SIP peers will not be reconfigured

Un exemple de com veure els peers:

TortosaAlcanyiz26PBX*CLI> sip show peers
Name/username              Host            Dyn Nat ACL Port     Status               
0034912691219/0034912691219  91.121.129.20               5060     Unmonitored           
6005/6005                  (Unspecified)    D   N      0        Unmonitored           
6004/6004                  (Unspecified)    D   N      0        Unmonitored           
6003/6003                  (Unspecified)    D          0        Unmonitored           
6002/6002                  192.168.111.13   D          5060     Unmonitored           
6001/6001                  192.168.111.4    D          5060     Unmonitored           
6 sip peers [Monitored: 0 online, 0 offline Unmonitored: 3 online, 3 offline]

Per mostrar els usuaris (compte que mostra les paraules de pas):

TortosaAlcanyiz26PBX*CLI> sip show users
Username                   Secret           Accountcode      Def.Context      ACL  NAT       
0034912691219              SECRET1                          DID_00349126902  No   RFC3581   
6005                       SECRET2                          DLPN_DialPlan1O  No   Always    
6004                       SECRET3                          DLPN_DialPlan1O  No   Always    
6003                       SECRET4                          DLPN_DialPlan1O  No   RFC3581   
6002                       SECRET5                          DLPN_DialPlan1O  No   RFC3581   
6001                       SECRET6                          DLPN_DialPlan1O  No   RFC3581   

Mostrar els registres SIP com a client:

TortosaAlcanyiz26PBX*CLI> sip show registry
Host                            Username       Refresh State                Reg.Time                 
sip.ovh.es:5060                 003491269121       105 Registered           Thu, 09 Feb 2012 09:29:06

Asterisk i Google Talk o Jabber

Exemples

Entrar al CLI d'Asterisk

Per línia de comandes escriviu:

$ asterisk -r

Saber la versió d'asterisk

Entreu al CLI i us dirà la versió:

$ asterisk -r
Asterisk 1.4.21.2, Copyright (C) 1999 - 2008 Digium, Inc. and others.

Altres

Aplication Dial():

exten => 123,1,Dial(Zap/1)

IMPORTANT: HI ha un timeout al fer un dial que estableix el temps màxim per establir la trucada. Si en aquest temps no contesta es determinarà el canal com no disponible:

exten => 123,1,Dial(Zap/1,10)
exten => 123,n,Playback(vm-nobodyavail)
exten => 123,n,Hangup()

Permet trucar a un canal especific.

Un altre exemple:

[incoming]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person)
exten => 123,n,WaitExten()
exten => 1,1,Dial(Zap/1,10)
exten => 1,n,Playback(vm-nobodyavail)
exten => 1,n,Hangup()
exten => 2,1,Dial(SIP/Jane,10)
exten => 2,n,Playback(vm-nobodyavail)
exten => 2,n,Hangup()
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(incoming,123,1)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()

Tenin en compte el següent:

As in previous examples, we’ve assumed that an FXS analog channel
(Zap/1, in this case) has already been configured, and that your
zapata.conf file is configured so that any calls originated by Zap/1 begin
in the [employees] context. For a few examples at the end of the chapter,
we’ll also assume that an FXO Zap channel has been configured as Zap/
4, with calls coming in on this channel being sent to the [incoming]
context.
We’ve also assumed you have at least one SIP channel (named SIP/
Jane) that is configured to originate in the [employees] context. We’ve
done this to introduce you to using other types of channels.
I f you don’t have hardware for the channels listed above (such as Zap/
4), or if you’re using hardware with different channel names (e.g., not
SIP/Jane), just change the examples to match your particular system
configuration 


[incoming]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person)
exten => 123,n,WaitExten()
exten => 1,1,Dial(Zap/1,10)
exten => 1,n,Playback(vm-nobodyavail)
exten => 1,n,Hangup()
exten => 2,1,Dial(SIP/Jane,10)
exten => 2,n,Playback(vm-nobodyavail)
exten => 2,n,Hangup()
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(incoming,123,1)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()

[employees]
exten => 101,1,Dial(Zap/1)
exten => 102,1,Dial(SIP/Jane)

En aquest cas hem definit dos extensions, la 101 i la 102, una de tipus zap i l'altre de tipus zip dins de employees.

Variables:

Com establir el valor d'una variable:

[globals]
JOHN=Zap/1
[employees]
exten => 124,1,Set(GLOBAL(GEORGE)=SIP/George)

Per utilizar-les:

exten => 555,1,Dial(${JOHN})


Common technology types include Zap (for analog and T1/E1/J1 channels), SIP, and IAX2. For example, let’s assume that we want to call a Zap endpoint identified by Zap/1, which is an FXS channel with an analog phone plugged into it. The technology is Zap, and the resource is 1. Similarly, a call to a SIP device (as defined in sip.conf) might have a destination of SIP/Jane, and a call to an IAX device (defined in iax.conf) might have a destination of IAX2/Fred. If we wanted Asterisk to ring the Zap/1 channel when extension 123 is reached in the dialplan, we’d add the following extension: exten => 123,1,Dial(Zap/1) We can also dial multiple channels at the same time, by concatenating the destinations with an ampersand (&), like this: exten => 123,1,Dial(Zap/1&Zap/2&SIP/Jane) The Dial() application will ring the specified destinations simultaneously, and bridge the inbound call with whichever destination channel answers the call first. If the Dial () application can’t contact any of the destinations, Asterisk will set a variable called DIALSTATUS with the reason that it couldn’t dial the destinations, and continue on with the next priority in the extension.* The Dial() application also allows you to connect to a remote VoIP endpoint not pre- viously defined in one of the channel configuration files. The full syntax for this type of connection is: Dial(technology/user[:password]@remote_host[:port][/remote_extension]) As an example, you can dial into a demonstration server at Digium using the IAX2 protocol by using the following extension: exten => 500,1,Dial(IAX2/guest@misery.digium.com/s) The full syntax for the Dial() application is slightly different when dealing with Zap channels, as shown: Dial(Zap/[gGrR]channel_or_group[/remote_extension]) For example, here is how you would dial 1-800-555-1212 on Zap channel number 4. exten => 501,1,Dial(Zap/4/18005551212) The second argument to the Dial() application is a timeout, specified in seconds. If a timeout is given, Dial() will attempt to call the destination(s) for that number of sec- onds before giving up and moving on to the next priority in the extension. If no timeout is specified, Dial() will continue to dial the called channel(s) until someone answers or the caller hangs up. Let’s add a timeout of 10 seconds to our extension: exten => 123,1,Dial(Zap/1,10)

  • Don’t worry, we’ll cover variables (in “Using Variables”) and show you how to have your dialplan

Troubleshooting. Resol·lució de problemes

Bàsic Troubleshooting

El primer es activar el verbosity level a 3 o més:

I aleshores observar la línia de comandes (CLI) en busca d'errors.

També es útil:

1) Verificar que els telèfons estan registrats:

> sip show peers 


2) Veure a quins contextes els telèfons sip enviaran les trucades:

> sip show users.

3) Per veure les extensions en un contexte concret:

> dialplan show NOM_CONTEXT.

4) Per veure quina extensió s'executarà al trucar a una extensió concreta (a l'exemple 6002 i context users)

> dialplan show 6002@users.

Depurant SIP

Consulteu Asterisk#SIP_debug

Depurant una trucada entre extensions

Comprovem que les extensions estan registrades:

# asterisk -r
> sip show peers
Name/username              Host            Dyn Nat ACL Port     Status                        
...
6003/6003                  192.168.111.2    D          5060     Unmonitored           
6001/6001                  192.168.111.4    D          5060     Unmonitored          
... 
6 sip peers [Monitored: 0 online, 0 offline Unmonitored: 4 online, 2 offline]

Al nostre cas les extensions són la 6003 i la 6001. Abans de trucar activem la depuració

> core set verbose 3

Per la línia de comandes quan feu la trucada apareixerà:

TortosaAlcanyiz26PBX*CLI> 
   -- Executing [6003@DLPN_DialPlan1Orange:1] Macro("SIP/6001-005a200c", "stdexten|6003|SIP/6003&IAX2/6003") in new stack
   -- Executing [s@macro-stdexten:1] Dial("SIP/6001-005a200c", "SIP/6003&IAX2/6003|80") in new stack
   -- Called 6003
[Feb 10 12:49:00] WARNING[14564]: app_dial.c:1183 dial_exec_full: Unable to create channel of type 'IAX2' (cause 3 - No route to destination)
   -- SIP/6003-00620004 is ringing
   -- SIP/6003-00620004 answered SIP/6001-005a200c

En canvi si utilitzem un proveïdor SIP per trucar de la extensió 6001 a un telèfon extern:

Executing [0679525437@DLPN_DialPlan1Orange:1] Macro("SIP/6001-00620004", "trunkdial-failover-0.3|SIP/0034912690219/679525437||0034912690219|0034912690219") in new stack
   -- Executing [s@macro-trunkdial-failover-0.3:1] Set("SIP/6001-00620004", "CALLERID(name)=Casa Bego i Sergi") in new stack
   -- Executing [s@macro-trunkdial-failover-0.3:2] NoOp("SIP/6001-00620004", "6001") in new stack
   -- Executing [s@macro-trunkdial-failover-0.3:3] Goto("SIP/6001-00620004", "1-dial|1") in new stack
   -- Goto (macro-trunkdial-failover-0.3,1-dial,1)
   -- Executing [1-dial@macro-trunkdial-failover-0.3:1] Dial("SIP/6001-00620004", "SIP/0034912690219/679525437") in new stack
   -- Called 0034912690219/679525437
   -- SIP/0034912690219-00678004 is ringing
   -- SIP/0034912690219-00678004 is making progress passing it to SIP/6001-00620004
   -- SIP/0034912690219-00678004 answered SIP/6001-00620004
 == Spawn extension (macro-trunkdial-failover-0.3, 1-dial, 1) exited non-zero on 'SIP/6001-00620004' in macro 'trunkdial-failover-0.3'
 == Spawn extension (macro-trunkdial-failover-0.3, 1-dial, 1) exited non-zero on 'SIP/6001-00620004'



Esborrar missatges

Cal anar entrar per SSH al servidor asterisk i anar a:

$ cd /persistent/sounds/voicemail/default

Aquí hi haurà una carpeta per extensió. Per exemple per esborrar els missatges nous i antics de la extensió 601 cal esborrar:

$ cd 6001/INBOX
$ rm -rf *
$ cd -
$ cd 6001/Old
$ rm -rf *

No es pot accedir als missatges. Login incorrect

Al accedir als missatges trucant al 6750 us demana quina és la vostra extensió i la paraula de pas (només hauria de demanar la paraula de pas). Poseu el que poseu sempre dona login incorrect.

El problema és que el telèfon estava en:

DTMF Mode: RFC2833

Si es posa:

DTMF Mode: inband

Ja funciona.

GUIs

Vegeu també

Enllaços externs