arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
320 lines (216 loc) • 10.8 kB
Markdown
[Asterisk](http://www.asterisk.org) is a complete PBX (private branch exchange) in software. It runs on Linux, BSD, Windows and macOS and provides all of the features you would expect from a PBX and more. Asterisk does voice over IP in four protocols, and can interoperate with almost all standards-based telephony equipment using relatively inexpensive hardware.
Asterisk provides voice-mail services with directory, call conferencing, interactive voice response and call queuing. It has support for three-way calling, caller ID services, ADSI, IAX, SIP, H.323 (as both client and gateway), MGCP (call manager only) and SCCP/Skinny.
This article will show you how to configure a simple in house network enabling us to use a SIP [softphone](/index.php/Softphone "Softphone") to talk to another SIP softphone on your LAN.
## Contents
* [1 Installation](#Installation)
* [2 Configuration](#Configuration)
* [2.1 SIP](#SIP)
* [2.2 Music on hold](#Music_on_hold)
* [2.3 Voicemail](#Voicemail)
* [2.4 Connecting to the PSTN](#Connecting_to_the_PSTN)
* [2.4.1 General set-up](#General_set-up)
* [2.4.1.1 sip.conf](#sip.conf)
* [2.4.1.2 extensions.conf](#extensions.conf)
* [2.4.1.3 iax.conf](#iax.conf)
* [2.4.1.4 extensions.conf](#extensions.conf_2)
* [2.5 Sounds](#Sounds)
* [2.6 MeetMe](#MeetMe)
* [3 Asterisk console and softphones](#Asterisk_console_and_softphones)
* [4 Troubleshooting](#Troubleshooting)
## Installation
Install the [asterisk](https://aur.archlinux.org/packages/asterisk/) package. If you are using Cisco-based phones it is recommended to use the [asterisk-cisco](https://aur.archlinux.org/packages/asterisk-cisco/) package instead as this is prepatched with the presence patch. (See [https://issues.asterisk.org/jira/browse/ASTERISK-13145](https://issues.asterisk.org/jira/browse/ASTERISK-13145))
[Start](/index.php/Start "Start") the server with `asterisk.service`.
You will also need a SIP [softphone](/index.php/Softphone "Softphone") and at least two machines. Recommendations for SIP phones are [Linphone](http://www.linphone.org/) ([linphone](https://aur.archlinux.org/packages/linphone/) package) or [X-Lite](http://www.counterpath.com/x-lite/) ([xlite_bin](https://aur.archlinux.org/packages/xlite_bin/) package).
To enable ilbc codec support add the following to the very beginning of the `build` section of the PKGBUILD:
```
cd ${srcdir}/${pkgname}-${pkgver}/contrib/scripts
echo | ./get_ilbc_source.sh
```
## Configuration
### SIP
Assuming your asterisk server is up and running, we will only need to edit two files: `sip.conf` and `extensions.conf`. Change to your asterisk configuration directory (should be `/etc/asterisk`). Edit sip.conf and place the following:
```
[me1]
type=friend
username=me1
secret=PASSWORD
host=dynamic
context=house
[me2]
type=friend
username=me2
secret=PASSWORD
host=dynamic
context=house
```
This creates our two SIP users `me1` and `me2` with a password of `PASSWORD` in the `house` context.
We will be defining the context next -- edit extensions.conf with the following:
```
[house]
exten => 100,1,Dial(SIP/me1)
exten => 101,1,Dial(SIP/me2)
```
This creates the context `house` and assigns extension 100 to the SIP user `me1`, and extension 101 to the SIP user `me2`. Now all thats left is to see if it works.
### Music on hold
Music on hold is a really sweet feature. And once again easy to install and configure. Edit `/etc/asterisk/musiconhold.conf` and add, or make sure it is uncommented:
```
[default]
mode=files
directory=mohmp3
```
And that is all there is to it. Just copy your favorite legally obtained MP3 to `/var/lib/asterisk/mohmp3`.
### Voicemail
Voicemail is another feature of asterisk. There are many ways to configure it, however this article only covers a simple approach.
Create/edit your `voicemail.conf`:
```
[general]
format=gsm|wav49|wav
serveremail=asterisk
attach=no
mailcmd=/usr/sbin/sendmail -t
maxmessage=180
maxgreet=60
[default]
100 => 1234,Me,me@mydomain.com
```
What does this mean? Most of the `[general]` is pretty self-explanatory. However, do note that if you have postfix set up right the PBX will send an email notifying the user of a new voice-mail and if `attach=yes` is defined it will attach the file.
Now for the actual mailbox. The format is:
```
mailbox => password,user,email
```
In this case, we gave 'Me' (email me@mydomain.com) mailbox 100, with a password of 1234.
Now we have to have a way to leave messages to this voice-mail, and a way to access it. For this, we go back to the `extensions.conf` and modify your existing entry as follows:
```
exten => 100,1,Dial(SIP/me1,20)
exten =>100,2,Voicemail(100@default)
```
The 20 on the end of the first 'exten' tells 'Dial()' to call for 20 seconds. If no one answers it heads to voice-mail box 100 in the default context.
Next is actually accessing your voicemail. For this we add:
```
exten => 600,1,VoiceMailMain,s100@default
```
So when we call 600, the application 'VoiceMailMain' goes to 100 in the default context. The `s` allows for automatic login.
**Note:** The 'VoiceMail' applications have a significant amount of options, so it is suggested reading over some additional documentation. This is just for a basic, home use setup. Also note that it is generally a good idea to use extensions higher then your users extensions for accessing 'VoiceMail'. This way someone dialing 208 does not hit someone's voice-mail at 205.
### Connecting to the PSTN
Now that you have the previous setup, it is time to actually connect to the outside world. To do this, you will need a provider such as [OnSIP](https://www.onsip.com/). Your provider should have instructions on connecting to asterisk, so this section is very general.
#### General set-up
##### sip.conf
```
[general]
register => username:password@sip.specific.com
[whatever]
fromdomain=specific.com
host=sip.specific.com
insecure=very ; check with provider
username=usernameduh
secret=passwordduh
type=peer
```
##### extensions.conf
```
[outboundwithCID] ; this can be whatever
exten => _1NXXNXXXXXX,1,SetCIDNum(15555551234)
exten => _1NXXNXXXXXX,2,Dial(SIP/${EXTEN}@whatever)
exten => _1NXXNXXXXXX,3,Congestion()
exten => _1NXXNXXXXXX,103,Busy()
[default] ; This should be set in your sip.conf for incoming calls
;These should to be changed to your actual number
; ie 15555555555
exten => 1NXXNXXXXXX,1,Answer()
exten => 1NXXNXXXXXX,2,Playback(ttt-weasels)
exten => 1NXXNXXXXXX,3,HangUp()
```
* In the outbound context, any number dialed will be sent out to your service provider. The 'whatever' in the 2 priority should match what you have in your sip.conf.
* Of course, the inbound dial-plan can be modified to do what you want. For instance, you can have `Dial(SIP/me1)` so when someone calls your number they are routed to your SIP phone on your computer. Then add in voice-mail and so on.
##### iax.conf
The first step is to log into FWD and enable their side of IAX. It is under extra features, and keep in mind that the authors claim it takes a little while to activate.
Now edit your iax.conf with the following in the 'general' section:
```
register => FWDNUMBER:PASSWORD@iax2.fwdnet.net
disallow = all
allow = ulaw
```
And at the bottom add:
```
[iaxfwd]
type=user
context=fromiaxfwd
auth=rsa
inkeys=freeworlddialup
```
This allows calls from FWD.
##### extensions.conf
Place this at the top under '[globals]':
```
FWDNUMBER=MYFWDNUMBER ; your calling number
FWDCIDNAME="MyName"; your caller id
FWDPASSWORD=MYFWDPASSWORD ; your password
FWDRINGS=sip/office ; the phone to ring
FWDVMBOX=1000 ; the VM box for this user
```
Next, add this to a context for outgoing:
```
exten => _393.,1,SetCallerId,${FWDCIDNAME}
exten => _393.,2,Dial(IAX2/${FWDNUMBER}:${FWDPASSWORD}@iax2.fwdnet.net/${EXTEN:3},60,r)
exten => _393.,3,Congestion
```
You can change the '393' to whatever you want. This is what you will dial before dialing a 'fwd' number. For instance, to dial '744561' you would dial '393744561'.
And lastly, the incoming calls:
```
[fromiaxfwd]
exten => ${FWDNUMBER},1,Dial(${FWDRINGS},20,r)
exten => ${FWDNUMBER},2,Voicemail,u${FWDVMBOX}
exten => ${FWDNUMBER},102,Voicemail,b${FWDVMBOX}
```
**Note:** If you have problems try removing the variables from `extensions.conf`. These instructions are from FWD's site and I have not been tested by this article's author.
Extensions to try calling are 55555 (a volunteer maned test line) and 514 (conference).
### Sounds
Sounds are stored in the folder `/var/lib/asterisk/xx`, `xx` stands for the code of the language for example "en" for English. To add new sounds copy them to the folder. Preserve the following folder structure:
```
/var/lib/asterisk/sounds/xx
/var/lib/asterisk/sounds/xx/digits
/var/lib/asterisk/sounds/xx/letters
/var/lib/asterisk/sounds/xx/phonetic
```
Edit the language parameter in the `sip.conf`
```
[general]
...
language=en
...
```
Possible sources for sounds are:
* [http://downloads.asterisk.org/pub/telephony/sounds/](http://downloads.asterisk.org/pub/telephony/sounds/)
* [https://packages.debian.org/wheezy/all/asterisk-prompt-xx](https://packages.debian.org/wheezy/all/asterisk-prompt-xx)
* [fr](https://packages.debian.org/wheezy/all/asterisk-prompt-fr)
* [de](https://packages.debian.org/wheezy/all/asterisk-prompt-de)
* ...
* [voip-info.org](http://www.voip-info.org/wiki/view/Asterisk+sound+files+international)
### MeetMe
MeetMe is the application that allows you to do conference calling. Same as everything, basic setup is easy.
Edit `meetme.conf`:
```
conf => 1000
```
Next is extensions.conf
```
exten => 999,1,MeetMe(1000|M)
```
Now dial 999 to get into conference 1000\. The enables music on hold if no one is in there. It will automatically go away when someone joins the conference.
**Note:** You *must* have the zaptel package in order for MeetMe to work. Install it and run `modprobe ztdummy` before running asterisk. This provides digium timing for us without cards so we can utilize TDM.
## Asterisk console and softphones
Now lets get Asterisk going:
```
# asterisk -vvvvvvc
```
This will give us the Asterisk CLI with verbose output. If Asterisk is already running you will need to use:
```
# asterisk -r
```
Now fire up your SIP clients and set them up with the information in the sip.conf. Switch back to your Asterisk CLI and you should see:
```
Registered SIP 'me1' at 192.168.0.142 port 5061 expires 60
```
Now you should be able to dial `101` from `me1` and talk to `me2`.
## Troubleshooting
If you receive a 404 Not Found error check your `extensions.conf` and the number you dialed.