_images/logo1.png

Welcome to FusionPBX Docs

FusionPBX

An open source project that provides a customizable and flexible web interface to the very powerful and highly scalable multi-platform voice switch called FreeSWITCH.

FusionPBX will run on a variety of operating systems (Optimized for Debian 8+) and hardware of your choice. FusionPBX provides a GUI for QR Code soft phone provisioning, unlimited extensions, voicemail-to-email, music on hold, call parking, analog lines or high density T1/E1 circuits, and many other features. FusionPBX provides the functionality that business need and provides corporate level phone system features to small, medium and large businesses. Click here for the FusionPBX youtube channel .

Benefits of FusionPBX

  1. Adding extra functionality to the incredibly robust FreeSWITCH VoIP Platform.
  2. Makes FreeSWITCH easy to administer while at the same time still allowing you to work directly within FreeSWITCH Command Line Interface (fs_cli) when you need to.
  3. Gives your users and tenants an attractive GUI interface to interact with.

Our Ecosystem

We are a global community that has an open and very friendly ecosystem. We encourage community engagement, contribution and feedback. Please join us by getting involved with giving feedback, new feature ideas, helping out with code or Documentation.

Most of the core folks who develop and use FusionPBX can be found hanging out in Freenode IRC in the #fusionpbx channel. Come join us and meet the team.

Getting Started

Getting Started

Welcome! Let’s install FusionPBX. Follow the menu to the left and you will have a working PBX in no time. For PDF and Epub formats of this documentation click the bottom left on v:latest and a menu will pop-up to choose from.

Note

There are many ways to install FusionPBX depending on how you want to build your solution. What is presented here represents the quickest, easiest, best supported way to a FusionPBX system. For advanced topics like Bi Directional Replication or High Availability, consider attending the in person or online training at https://www.fusionpbx.com/training.php. Additional FusionPBX training is available via Continuing Education. This is a monthly affordable option to keep you current and ahead of the competition!

Training

FusionPBX offers different levels of training. We love helping people and companies succeed.

  • Small family business.
  • Someone that loves to tinker with technology.
  • Major companies all around the world.

Free

FusionPBX has content available in this document and video’s on youtube to help get you started.

Paid Training and technical support

FusionPBX offers an Admin class, Advanced class and an affordable Continuing Education class. If you want to accelerate your understanding of how to use FusionPBX and unleash your full potential these classes are for you.

  • Admin Class
    • Online or Webex
    • Access to Class Documentation
    • Recorded video of the class for you to keep
    • Interactive question and answer with the FusionPBX founder and trainer
    • Covers the basics and some advanced topics with FusionPBX
    • Plus much more…
  • Advanced Class
    • Online or Webex
    • Access to Class Documentation
    • Recorded video of the class for you to keep
    • Interactive question and answer with the FusionPBX founder and trainer
    • Covers advanced topics and methods
    • Plus much more…
  • Continuing Education
    • Monthly Webex meeting on changes with FusionPBX
    • Option to take the advanced or admin over again (included in the monthly price)
    • Report bugs or ask questions that might not have came up until now
    • Get a closer more indepth look into FusionPBX
    • Know how to use new features when they are added
    • Know how to upgrade to the next release version
    • Plus much more…

Quick Install

_images/logo_right1.png

Welcome to the FusionPBX installation guide.


FusionPBX can be installed on several different operating systems. However this guide assumes you are starting with a minimal install of Debian 9 with SSH enabled. This install has been designed to be fast, simple and modular, and generally takes 5 minutes or less. Installation times depend on factors like CPU, RAM, disk I/O and bandwidth. Install Video https://youtu.be/YmIht8hEHYU

1. Run the following commands as root. The script installs FusionPBX, FreeSWITCH release package and its dependencies, iptables, Fail2ban, NGINX, PHP-FPM and PostgreSQL.

Start with a minimal install of Debian 9 with SSH enabled. Paste the following commands in the console window one line at a time.

wget -O - https://raw.githubusercontent.com/fusionpbx/fusionpbx-install.sh/master/debian/pre-install.sh | sh; cd /usr/src/fusionpbx-install.sh/debian && ./install.sh


If using Debian on Proxmox LXC containers please run the following BEFORE starting the FusionPBX install.

apt-get update && apt-get upgrade
apt-get install systemd
apt-get install systemd-sysv
apt-get install ca-certificates
reboot

2. At the end of the install, the script will instruct you to go to the ip address of the server (or domain name) in your web browser to login. The script will also provide a username and secure random password for you to use. This can be changed after you login. The install script builds the fusionpbx database. If you need the database password it is located in /etc/fusionpbx/config.php .

Installation has completed.

Use a web browser to login.
   domain name: https://000.000.000.000
   username: admin
   password: zxP5yatwMxejKXd

The domain name in the browser is used by default as part of the authentication.
If you need to login to a different domain then use username@domain.
   username: admin@000.000.000.000

Official FusionPBX Training
   Admin Training    24 - 26 Jan (3 Days)
   Advanced Training 31 Jan - Feb 2 (3 Days)
   Continuing Education Last Thursday Monthly (1 Day)
   Timezone: https://www.timeanddate.com/worldclock/usa/boise
   For more info visit https://www.fusionpbx.com/training.php

Additional information.
   https://fusionpbx.com/support.php
   https://www.fusionpbx.com
   http://docs.fusionpbx.com
   https://www.fusionpbx.com/training.php

_images/ilogin.jpg

After the install script has completed go to your web browser and login with the information provided by the install script.

After the installation script finishes, the option for anything to register to the ip address is ENABLED.

  • If you plan on registering devices to the FusionPBX ip address then no further action is required.

It is however recommended to register to a domain name (FQDN) since most scripted attacks happen to the public ip. Registering to the ip address will be blocked by the fail2ban rules freeswitch-ip and auth-challenge once these rules are set to true.

  • To help secure your FusionPBX installation, enable the fail2ban rules [freeswitch-ip] and [auth-challenge-ip] in /etc/fail2ban/jail.local.
[freeswitch-ip]
enabled  = true
[auth-challenge-ip]
enabled  = true

Let’s Encrypt

Let’s Encrypt is one of the most recent and widely used form of free SSL security and supports wildcard DNS. You can use Let’s Encrypt with your FusionPBX install and WebRTC like Verto Communicator.

Certbot (Alternative Option)

Certbot is optional and is more of a manual way of using Let’s Encrypt SSL. Some still use this process but most use the recommended way with the Dehydrated script.

More info on NGINX with Let’s Encrypt https://www.nginx.com/blog/free-certificates-lets-encrypt-and-nginx

Clone Let’s Encrypt

git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Execute certbot-auto

cd /opt/letsencrypt
chmod a+x ./certbot-auto
./certbot-auto
cd /etc/letsencrypt/
mkdir -p configs
cd configs

Copy code example from link in step #2 section and edit domains, key size, email then put into: /etc/letsencrypt/configs/domain.tld.conf (Edit domain.tld to reflect your domain)

touch /etc/letsencrypt/configs/domain.tld.conf
vim /etc/letsencrypt/configs/domain.tld.conf

Edit /etc/nginx/sites-available/fusionpbx

vim  /etc/nginx/sites-available/fusionpbx
Add this after the ssl_ciphers line

location /.well-known/acme-challenge {
        root /var/www/letsencrypt;
    }

Reload and check Nginx
nginx -t && nginx -s reload
Should output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Execute Let’s Encrypt script (Edit domain.tld to reflect your domain) You can make up to 100 subdomain requests with using -d sub.domain.tld -d sub1.domain.tld

cd /opt/letsencrypt
./letsencrypt-auto --config /etc/letsencrypt/configs/domain.tld.conf certonly
Should output:
- Congratulations! And a paragraph about the keys made and where the live.

Edit sites-available (Edit domain.tld to reflect your domain)

Comment out and add
vim  /etc/nginx/sites-available/fusionpbx
       #ssl_certificate         /etc/ssl/certs/nginx.crt;
       #ssl_certificate_key     /etc/ssl/private/nginx.key;
       ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem;
       ssl_certificate_key /etc/letsencrypt/live/domain.tld/privkey.pem;

Systemctl restart nginx

Now check the padlock and see if it’s green!

Auto Renew certificate

Note

This will work with certbot

Renew with Crontab

Crontab can be used to renew let’s encrypt.

Create crontab -e

2 3 * * * /usr/bin/certbot renew &>/var/log/fusionpbx_certbot.cronlog

This executes daily at 3:02 AM (local time). Certbot will check your existing certificate. If it has less than 30 days’ validity remaining, it will attempt to renew the certificate. It runs daily in case a renewal attempt fails, it will just try again the next day.

List crontabs

crontab -l

Before setting up multiple domains, make sure you have SSL working on your main domain using the instructions above.

Create shared nginx host file for all domains

vim /etc/nginx/includes/fusionpbx-default-config

Paste the code below into the file

ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers             HIGH:!ADH:!MD5:!aNULL;

#letsencrypt
location /.well-known/acme-challenge {
  root /var/www/letsencrypt;
}

#REST api
if ($uri ~* ^.*/api/.*$) {
  rewrite ^(.*)/api/(.*)$ $1/api/index.php?rewrite_uri=$2 last;
  break;
}

#algo
rewrite "^.*/provision/algom([A-Fa-f0-9]{12})\.conf" /app/provision/?mac=$1&file=algom%7b%24mac%7d.conf last;

#mitel
rewrite "^.*/provision/MN_([A-Fa-f0-9]{12})\.cfg" /app/provision/index.php?mac=$1&file=MN_%7b%24mac%7d.cfg last;
rewrite "^.*/provision/MN_Generic.cfg" /app/provision/index.php?mac=08000f000000&file=MN_Generic.cfg last;

#grandstriam
rewrite "^.*/provision/cfg([A-Fa-f0-9]{12})(\.(xml|cfg))?$" /app/provision/?mac=$1;

#aastra
rewrite "^.*/provision/aastra.cfg$" /app/provision/?mac=$1&file=aastra.cfg;
#rewrite "^.*/provision/([A-Fa-f0-9]{12})(\.(cfg))?$" /app/provision/?mac=$1 last;

#yealink common
rewrite "^.*/provision/(y[0-9]{12})(\.cfg)?$" /app/provision/index.php?file=$1.cfg;

#yealink mac
rewrite "^.*/provision/([A-Fa-f0-9]{12})(\.(xml|cfg))?$" /app/provision/index.php?mac=$1 last;

#polycom
rewrite "^.*/provision/000000000000.cfg$" "/app/provision/?mac=$1&file={%24mac}.cfg";
#rewrite "^.*/provision/sip_330(\.(ld))$" /includes/firmware/sip_330.$2;
rewrite "^.*/provision/features.cfg$" /app/provision/?mac=$1&file=features.cfg;
rewrite "^.*/provision/([A-Fa-f0-9]{12})-sip.cfg$" /app/provision/?mac=$1&file=sip.cfg;
rewrite "^.*/provision/([A-Fa-f0-9]{12})-phone.cfg$" /app/provision/?mac=$1;
rewrite "^.*/provision/([A-Fa-f0-9]{12})-registration.cfg$" "/app/provision/?mac=$1&file={%24mac}-registration.cfg";

#cisco
rewrite "^.*/provision/file/(.*\.(xml|cfg))" /app/provision/?file=$1 last;

#Escene
rewrite "^.*/provision/([0-9]{1,11})_Extern.xml$"       "/app/provision/?ext=$1&file={%24mac}_extern.xml" last;
rewrite "^.*/provision/([0-9]{1,11})_Phonebook.xml$"    "/app/provision/?ext=$1&file={%24mac}_phonebook.xml" last;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

client_max_body_size 80M;
client_body_buffer_size 128k;

location / {
  root /var/www/fusionpbx;
  index index.php;
}

location ~ \.php$ {
  fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
  #fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  include fastcgi_params;
  fastcgi_param   SCRIPT_FILENAME /var/www/fusionpbx$fastcgi_script_name;
}

# Disable viewing .htaccess & .htpassword & .db
location ~ .htaccess {
  deny all;
}
location ~ .htpassword {
  deny all;
}
location ~^.+.(db)$ {
  deny all;
}

Create a file to contain config for additional domains

touch /etc/nginx/includes/fusionpbx-domains

make default file read configs for additional domains

vim /etc/nginx/sites-available/fusionpbx

Add the line below at the very end of the file after the trailing “}”

include /etc/nginx/includes/fusionpbx-domains;

By now you are all set to start using SSL on multiple domains for your FusionPBX installation.

Follow the steps below everytime your add a new domain

Create a conf file for the new domain (repalce example.com with your own domain)

vim /etc/letsencrypt/configs/example.com.conf

Paste this into the .conf file (don’t forget to change the defaults, especially the domain)

# the domain we want to get the cert for;
# technically it's possible to have multiple of this lines, but it only worked
# with one domain for me, another one only got one cert, so I would recommend
# separate config files per domain.
domains = my-domain

# increase key size
rsa-key-size = 2048 # Or 4096

# the current closed beta (as of 2015-Nov-07) is using this server
server = https://acme-v01.api.letsencrypt.org/directory

# this address will receive renewal reminders
email = my-email

# turn off the ncurses UI, we want this to be run as a cronjob
text = True

# authenticate by placing a file in the webroot (under .well-known/acme-upatechallenge/)
# and then letting LE fetch it
authenticator = webroot
webroot-path = /var/www/letsencrypt/

Obtain the cert from Let’s Encrypt (again, replce example.com with your domain)

cd /opt/letsencrypt
./letsencrypt-auto --config /etc/letsencrypt/configs/example.com.conf certonly

Set cert to auto renew with other domains

cd /etc/fusionpbx
vim renew-letsencrypt.sh

Add the line below right below where it says “cd /opt/letsencrypt/” (again replace example.com with your domain)

./certbot-auto --config /etc/letsencrypt/configs/example.com.conf certonly --non-interactive --keep-until-expiring --agree-tos --quiet

Finally add your new domain to be loaded

vim /etc/nginx/includes/fusionpbx-domains

Paste the below at the very end of the file (again replace example.com with your domain)

server {
        listen 443;
        server_name example.com;
        ssl                     on;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

        include /etc/nginx/includes/fusionpbx-default-config;
}

You’re all set! Restart nginx for changes to take effect

service nginx restart

Provision

Automatic

Auto provisioning is disabled by default. This is to give a chance to secure provisioning server with HTTP Authentication or CIDR. HTTP Authentication requires the phone to send hash of the combined username and password in order to get configuration. CIDR is an IP address restriction that can be used to restrict which IP addresses are allowed to get the device configuration. An example of CIDR is xxx.xxx.xxx.xxx/32 the /32 represents a single IP address. To set one of these values go to Advanced > Default Settings and find the Provision category from there used the edit button to set a value. After this is done it is safe to set enabled equal to true.

Manual

How to setup the device using the phone’s web interface.

Advanced > Default Settings

In the Provisioning section, there are a few key options that have to be set in order to turn auto provisioning on.

  • enabled Must be enabled and set to value true and enabled True. It is disabled by default.
  • http_auth_username Must be enabled and set to value true and enabled True. It is disabled by default. Be sure to use a strong username.
  • http_auth_password Must be enabled and set to value true and enabled True. It is disabled by default. Be sure to use a strong password.
  • cidr Optional security option to allow configuration request limited to specific IP version 4 ranges. Type array allows multiple ranges of IP addresses.

Phone Book

Remote phone book (Address Book) are based on the FusionPBX Contacts App.

Phone Book Settings

In order to use the phone book a few steps are needed.

_images/fusionpbx_remote_phonebook.jpg
  • Set Enabled True for contact_extensions, contact_users and contact_groups in Default Settings.
_images/fusionpbx_phone_book1.jpg
  • From the phone, go into the menu to update the phone book.

Security

Similar to medieval fortifications it is recommended to provide your servers with multiple layers of defenses. Be sure to use Firewalls, Strong passwords, SSH, and make sure your servers are kept up to date for all software being used. This includes the operating system, FreeSWITCH and FusionPBX.

FusionPBX

The latest Debian install script configures IPTables firewall for you. FusionPBX extensions set strong passwords for you by default. You can increase the password complexity using settings in Advanced -> Default Settings to increase the length of the passwords that are generated by default.

Firewall

Although the new install script configured IPTables for you it is recommended that you review the settings. On Debian and Ubuntu you can check your firewall with the following command.

iptables -L

SSL / TLS

SSL and TLS are very necessary in today’s internet applications from VOIP to Websites. FusionPBX by default uses a self signed certificate. However you can use certificate providers where you can purchase certificates and there are free options as well. With domain based multi-tenant wildcard certificates can be useful. Also when deciding on which certificate provider to use you should look at the phones manufacturers documentation to find one that is compatible HTTPS provisioning.

Let’s Encrypt provides free certificates for a single domain but they don’t support wildcard certificates.

Upgrade

Security problems are fixed as they are discovered and are updated for master and the latest release. Upgrades are considered an important part of keeping the server secure. Upgrades always need to be done on the operating system, FreeSWITCH and FusionPBX. On Debian and Ubuntu you can check your firewall with the following command.

Latest install script will install FreeSWITCH packages by default to upgrade them and operating system packages run the following commands.

apt-get update
apt-get upgrade

If you need help upgrading safely please consider paid support.

XML RPC

New install mod_xml_rpc is not enabled by default. It is recommended to run a firewall on all FusionPBX servers. The latest debian install script configures the firewall by default. However it is recommended to check to make sure it is installed and running.

Mod_xml_rpc allows running remote commands to FreeSWITCH. Ensure you have a firewall that is protecting the XML RPC port. Consider changing the XML RPC password. At very least do not allow access to the public. Advanced -> Settings page in the interface allows you to change the password or the port. Do not allow public access to the XML RPC port.

Latest Debian install script installs iptables firewall which prevents public access to the mod_xml_rpc port. If you are not using a firewall on the server you should even if its protected by by an external firewall. Some not informed co-worker could expose the server to the public internet at some point in the future. Multiple layers of security is considered best practice.

XML RPC is secure by default for 2 reasons.
  • The module is disabled by default.
  • Install script firewalls XML RPC port 8787 and does not allow access to it by default outside of 127.0.0.1.

If you were to start the module and open port 8787 on the firewall you would want to set a really good password for it under Advanced -> Settings. It would be recommended to use a VPN to like OpenVPN to access XML RPC over port 8787 instead of opening port 8787 on the firewall.

Fail2ban

Fail2ban is also used to protect SSH, FreeSWITCH, the web server as well as other services. You can view the IP addresses blocked by Fail2ban with the following command.

iptables -L

SSH

Use strong passwords with SSH or even better use SSH keys for better protection of your servers.

Backup


It’s always good to have a backup method in place. Here are the steps to a basic backup method with FusionPBX.

Command Line

Be sure to change the password by replacing the zzzzzzzz in PGPASSWORD=”zzzzzzzz” with your database password. You can get the password from /etc/fusionpbx/config.php.

cd /etc/cron.daily
nano fusionpbx-backup.sh

#!/bin/sh
now=$(date +%Y-%m-%d)
echo "Server Backup"
export PGPASSWORD="zzzzzzzz"
mkdir -p /var/backups/fusionpbx/postgresql
#delete postgres logs older than 7 days
find /var/log/postgresql/postgresql-9.4-main* -mtime +7 -exec rm {} \;
#delete freeswitch logs older 3 days
find /usr/local/freeswitch/log/freeswitch.log.* -mtime +2 -exec rm {} \;
pg_dump --verbose -Fc --host=$database_host --port=$database_port -U fusionpbx fusionpbx --schema=public -f /var/backups/fusionpbx/postgresql/fusionpbx_pgsql_$now.sql
echo "Backup Complete";

To save the file press ctrl + x then y to save it.

You should have the script ready to execute. (Default the script will use FreeSWITCH package paths. If you have an older install using source be sure to change this by commenting the package line #22 and uncomment the source line #25.)

Crontab

Setting crontab -e

crontab -e
Choose 1 for nano
Goto the last blank line and paste in the next line.
0 0 * * * /bin/sh /etc/cron.daily/fusionpbx-backup.sh
press enter then save and exit.

Once this is complete you will have the backup ready to execute by ./fusionpbx-backup.sh or from the daily cron job.

Web Interface (optional)

FreeSWITCH Package install paths.

_images/fusionpbx_backup_source1.jpg

Goto Advanced > Default Settings.

Settings for FreeSWITCH package backup paths.

path           array  /var/backups/fusionpbx/postgresql                True    postgresql
path           array  /usr/share/freeswitch/scripts                    True    scripts
path           array  /var/www/fusionpbx                               True    fusionpbx
path           array  /var/lib/freeswitch/storage                      True    storage
path           array  /var/lib/freeswitch/recordings                   True    recordings
path           array  /etc/freeswitch                          True    conf

Click "Reload" at the top of the page.

FreeSWITCH Source install paths.

_images/fusionpbx_backup_source1.jpg
Settings for FreeSWITCH source backup paths.

path  array   /var/backups/fusionpbx/postgresql       True    postgresql
path           array   /usr/local/freeswitch/scripts           True    scripts
path           array   /usr/local/freeswitch/recordings        True    recordings
path           array   /var/www/fusionpbx                      True    fusionpbx
path           array   /usr/local/freeswitch/conf              True    conf
path           array   /usr/local/freeswitch/storage           True    storage

Click "Reload" at the top of the page.

Download Backups

From Advanced > Backup you can download the backup from the web interface this is optional. You would need to make sure that PHP doesn’t timeout while compressing your backup and that it has enough access to RAM to do the work.

FreeSWITCH Source install paths.

_images/fusionpbx_backup_source.jpg

FreeSWITCH Package install paths.

_images/fusionpbx_backup_package1.jpg

Restore


It’s always good to have a restore method of a backup in place. Here are the steps to a basic restore method with FusionPBX.

Note

It is important to know if your installation is from package or source as the paths are different for FreeSWITCH. Always test the backups and restore methods on test machines first.

  • To create the script use an editor such as vi or nano.
  • Copy/Paste from the code block below and save the file as fusionpbx-restore.sh
  • Replace zzz with your database password
  • chmod + x fusionpbx-restore.sh and then run the script ./fusionpbx-restore.sh
  • edit the script as needed and run this script from the server you are restoring on.
#!/bin/sh
now=$(date +%Y-%m-%d)
ssh_server=x.x.x.x
database_host=127.0.0.1
database_port=5432
export PGPASSWORD="zzz"

#run the remote backup
ssh -p 22 root@$ssh_server "nice -n -20 /etc/cron.daily/./fusionpbx-backup.sh"

#delete freeswitch logs older 7 days
find /var/log/freeswitch/freeswitch.log.* -mtime +7 -exec rm {} \;

#synchronize the backup directory
#rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/backups/fusionpbx /var/backups
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/backups/fusionpbx/postgresql /var/backups/fusionpbx
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/www/fusionpbx /var/www
rsync -avz -e 'ssh -p 22' root@$ssh_server:/etc/fusionpbx /etc
find /var/backups/fusionpbx/postgresql -mtime +2 -exec rm {} \;

rsync -avz -e 'ssh -p 22' root@$ssh_server:/etc/freeswitch/ /etc
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/lib/freeswitch/storage /var/lib/freeswitch
rsync -avz -e 'ssh -p 22' root@$ssh_server:/var/lib/freeswitch/recordings /var/lib/freeswitch
rsync -avz -e 'ssh -p 22' root@$ssh_server:/usr/share/freeswitch/scripts /usr/share/freeswitch
rsync -avz -e 'ssh -p 22' root@$ssh_server:/usr/share/freeswitch/sounds /usr/share/freeswitch

echo "Restoring the Backup"
#extract the backup from the tgz file
#tar -xvpzf /var/backups/fusionpbx/backup_$now.tgz -C /

#remove the old database
psql --host=$database_host --port=$database_port  --username=fusionpbx -c 'drop schema public cascade;'
psql --host=$database_host --port=$database_port  --username=fusionpbx -c 'create schema public;'
#restore the database
pg_restore -v -Fc --host=$database_host --port=$database_port --dbname=fusionpbx --username=fusionpbx /var/backups/fusionpbx/postgresql/fusionpbx_pgsql_$now.sql

#restart freeswitch
service freeswitch restart
echo "Restore Complete";

Firewall

Basic ports used

  • SIP TCP/UDP
    • 5060-5090
  • RTP UDP
    • 16384-32768
  • SSH
    • 22
  • HTTP
    • 80, 443

Iptables

Iptables are used in the Debian install script.

Basic Rules
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 5060:5069 -j ACCEPT
iptables -A INPUT -p udp --dport 5060:5069 -j ACCEPT
iptables -A INPUT -p tcp --dport 5080 -j ACCEPT
iptables -A INPUT -p udp --dport 5080 -j ACCEPT
iptables -A INPUT -p udp --dport 16384:32768 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Optional Rules
OPENVPN: iptables -A INPUT -p udp --dport 1194 -j ACCEPT
ICMP: iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Friendly Scanner

Rules to block not so friendly scanner

iptables -I INPUT -j DROP -p tcp --dport 5060 -m string --string "friendly-scanner" --algo bm
iptables -I INPUT -j DROP -p tcp --dport 5080 -m string --string "friendly-scanner" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "friendly-scanner" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5080 -m string --string "friendly-scanner" --algo bm
Optional
iptables -I INPUT -j DROP -p tcp --dport 5060 -m string --string "VaxSIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "VaxIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5080 -m string --string "VaxSIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p tcp --dport 5080 -m string --string "VaxIPUserAgent" --algo bm
iptables -I INPUT -j DROP -p tcp --dport 5060 -m string --string "VaxSIPUserAgent/3.1" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5060 -m string --string "VaxSIPUserAgent/3.1" --algo bm
iptables -I INPUT -j DROP -p udp --dport 5080 -m string --string "VaxSIPUserAgent/3.1" --algo bm
iptables -I INPUT -j DROP -p tcp --dport 5080 -m string --string "VaxSIPUserAgent/3.1" --algo bm
Show iptable rules

sudo iptables -L -v

Show line numbers

iptables -L -v --line-numbers

Delete a line

Delete line 2

iptables -D INPUT 2

Flush Out Iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
Open a Port for a Specific IP Address

iptables -A INPUT -j ACCEPT -p tcp –dport 5432 -s x.x.x.x/32

Block IP address

iptables -I INPUT -s 62.210.245.132 -j DROP

Flush iptables

How to flush iptables without loosing access to ssh.

iptables -P INPUT ACCEPT
iptables -F
Save Changes

Debian / Ubuntu

apt-get install iptables-persistent
service iptables-persistent save
dpkg-reconfigure iptables-persistent

Fail2ban

Fail2ban is also used to protect SSH, FreeSWITCH, the web server as well as other services.

After the installation script finishes, the option for anything to register to the ip address is ENABLED.

  • If you plan on registering devices to the FusionPBX ip address then no further action is required.

It is however recomended to register to a domain name (FQDN) since most scripted attacks happen to the public ip. Registering to the ip address will be blocked by the fail2ban rules freeswitch-ip and auth-challenge once these rules are set to true.

  • To help secure your FusionPBX installation, enable the fail2ban rules [freeswitch-ip] and [auth-challenge-ip] in /etc/fail2ban/jail.local.
[freeswitch-ip]
enabled  = true
[auth-challenge-ip]
enabled  = true

Warning

If you find that your FusionPBX web interface isn’t loading then check and see if fail2ban is blocking your ip. Getting blocked by any fail2ban rule will block ssh, www, and phones registering if you don’t have your ip in the /etc/fail2ban/jail.conf ignoreip= field .

You can view the IP addresses blocked by Fail2ban with the following command.

iptables -L -n

To check the status of one of the fail2ban jails

fail2ban-client status freeswitch-ip

Fail2ban configuration files are located in.

cd /etc/fail2ban/

To exclude an IP so that it isn’t blocked by any filters edit the jails.conf file.

nano /etc/fail2ban/jail.conf

Find ignoreip and add the IP address, CIDR or DNS hostname that need to be white listed. Use a space as a delimitter between each one. Restart fail2ban to apply the changes to the ignoreip list.

ignoreip = 127.0.0.1/8 192.168.0.0/16

Note

To help keep the ip and hostnames you want unblocked it is a good idea to add customers and carriers to the ignoreip list.

Filters are defined in the following directory.

/etc/fail2ban/filter.d

Inside jail.local points to filters and defines maxretry, bantime, logpath, ports to block and more.

/etc/fail2ban/jail.local

Clear all blocked addresses by restarting fail2ban.

service fail2ban restart

Fail2ban logs the addresses that it blocks with the filter that triggered it.

/var/log/fail2ban.log

More information about Fail2ban can be found at http://www.fail2ban.org/wiki

Note

You can use a dynamic ip address service like dyndns to whitelist a dynamic ip address.

PF

Packet Filter is used in the FreeBSD setup script.

Basic Rules
set skip on lo0
scrub in all
antispoof for lo0
table <fail2ban> persist
pass out quick all
pass quick on lo0 all
block in all
block in quick from <fail2ban>
pass in quick inet proto icmp all
pass in quick inet6 proto icmp6 all
pass in quick inet proto tcp from any to any port 22 keep state
pass in quick inet proto tcp from any to any port 80 keep state
pass in quick inet proto tcp from any to any port 443 keep state
pass in quick inet proto tcp from any to any port 5060 keep state
pass in quick inet proto udp from any to any port 5060 keep state
pass in quick inet proto tcp from any to any port 5080 keep state
pass in quick inet proto udp from any to any port 5080 keep state
pass in quick inet proto udp from any to any port 16384:32768 keep state
Disable

pfctl -d

Enable

pfctl -e

Show Rules

pfctl -s rules

Languages

FusionPBX has multilingual capabilities. This will allow for different languages to be used in your FusionPBX installation. Languages can be set globally, per tenant and per user. In addition to your FusionPBX installation web interface, there are options to upload audio files for FreeSWITCH to use via command line.

Fusionpbx Settings

Global

Advanced > Default Settings

Setting the language from here will set the language for the entire FusionPBX installation.

_images/fusionpbx_global_language.jpg
Domain (Tenant)

Advanced > Domains then click the plus at the bottom right and fill in the required fields.

Setting the language from here will set the language for the entire domain (tenant) in your FusionPBX installation. This can override the Global language settings.

_images/fusionpbx_domain_language.jpg
User

Accounts > Users then edit the user.

Setting the language from here will set the language for this specific user and will override Global and Domain language settings.

_images/fusionpbx_user_language.jpg

FreeSWITCH Sound Files

FreeSWITCH sound files location are dependent on operating system and installation method.

Package Install
  • Most if not all recent installations of FusionPBX are using packages for FreeSWITCH.
  • File system location:
/usr/share/freeswitch/sounds/en/us/
Source Install
  • Older installs, custom installs, or personal preference are using source compiled versions.
  • File system location:
/usr/local/freeswitch/sounds/en/us/

app_languages.php

Guidelines The words used in the text variable name

  • separated with a dash.
  • begin with a prefix
  • are lower case

Prefixes

  • title: The title of the page
  • header: The header of the page
  • description: Information to describe the page or an item on the page
  • button: The label for the buttons
  • confirm: A message used to confirm and action like delete
  • message: The response after an action is taken
  • label: The label for items on the page
  • option: The options in an html select box

Languages

Each word, phrase, or sentence has the language declared with the 2 language code with s dash seperating the region. There is one difference the region is entirely in lower case. For additional information see the following.

http://www.w3.org/International/articles/language-tags/

http://www.iana.org/assignments/language-subtag-registry

  • en-us
  • es-mx
  • de-ch
  • de-at
  • fr-ca
  • fr-ch
  • pt-pt
  • pt-br

Example File

An excerpt from the app_languages.php for Conference Center.

<?php

       $text['title-conference-center']['en-us'] = 'Conference Center';
       $text['title-conference-center']['pt-pt'] = '';

       $text['header-conference-center']['en-us'] = 'Conference Center';
       $text['header-conference-center']['pt-pt'] = '';

       $text['description-conference-center']['en-us'] = 'Conference Center is used to setup one or more conference rooms with a name, extension number, a required pin number length, and a description.';
       $text['description-conference-center']['pt-pt'] = '';

       $text['label-name']['en-us'] = 'Name';
       $text['label-name']['pt-pt'] = '';

       $text['label-extension']['en-us'] = 'Extension';
       $text['label-extension']['pt-pt'] = '';

       $text['label-delete']['en-us'] = 'Delete';
       $text['label-delete']['pt-pt'] = '';

       $text['label-edit']['en-us'] = 'Edit';
       $text['label-edit']['pt-pt'] = '';

       $text['button-view']['en-us'] = 'View';
       $text['button-view']['pt-pt'] = '';

       $text['button-back']['en-us'] = 'Back';
       $text['button-back']['pt-pt'] = 'Voltar';

       $text['confirm-update']['en-us'] = 'Update Complete';
       $text['confirm-update']['pt-pt'] = 'Actualização Completa';

       $text['confirm-delete']['en-us'] = 'Do you really want to delete this?';
       $text['confirm-delete']['pt-pt'] = '';

       $text['button-add']['en-us'] = 'Add';
       $text['button-add']['pt-pt'] = '';

       $text['button-save']['en-us'] = 'Save';
       $text['button-save']['pt-pt'] = 'Guardar';

?>

To use inside the code on each page that displays text. Place the following code at the top just after the permision_exists

//add multi-lingual support
       require_once "app_languages.php";
       foreach($text as $key => $value) {
               $text[$key] = $value[$_SESSION['domain']['language']['code']];
       }

To place a word, phrase or sentence it would be used in the code like the following example.

echo "<td align='left' width='30%' nowrap='nowrap'><b>".$text['title-conference-centers']."</b></td>\n";

An additional example.

echo " <tr>\n";
echo "         <td align='left' colspan='2'>\n";
echo "                 ".$text['description-conference-centers']."\n";
echo "         </td>\n";
echo " </tr>\n";
echo "</table>\n";

Home

Home

The Home menu gives access to Account Settings, Dashboard and the option to Logout.

Account Settings

_images/fusionpbx_account_settings.jpg
  • User Name: The user name.
  • Password: The password.
  • Confirm Password: Must match the password.
  • Language: Choose a language for the user.
  • Time Zone: Time zone specific to the user.
  • Status: Used for call center and operator panel.
  • Contact: The users contact. Is used in a phone directory or Apps > Contacts.
  • Groups: Group the user is in and relates to what the user can see and do in the menus.
  • Domain: Domain specific to the user.
  • Enabled: Enable or disable the account.

Dashboard

Quickly access information and tools related to your account. Depending on the user permissions, the user may see less options on this screen.

_images/fusionpbx_home_dashboard.jpg
  • Voicemail: New and total voicemails related to the users voicemail box. A user can be assigned to more than 1 voicemail box.
  • Missed Calls: Missed calls for the user.
  • Recent Calls: Number of calls in the last 24 hours.
  • System Status: Disk usage in percentage, FusionPBX version, FreeSWITCH version, FreeSWITCH uptime, OS Uptime, CPU Usage, DB Connections, Channels and Registrations.
  • Call Routing: See if call forward, follow me, do not disturb is set and a quick wat to edit those options if needed.
  • Ring Group Forward: See the name, extension number, if forwarding is enabled and what number it is forwarded to.
  • System Counts: Number of Domains, Devices, Extensions, Gateways, Users, Destinations, CC Queues, IVR Menus, Ring Groups, Voicemail and if they are disabled.

Logout

Logout when you are done, after an upgrade or specific setting change that requires a new session.

_images/fusionpbx_logout.jpg

Accounts

Accounts

In the Accounts menu you have access to devices, extensions, gateways, providers and users.

Devices

Used to define the information needed to assign SIP accounts and keys to provision the devices.

  • Click the plus icon to add a device.
  • Click the edit pencil icon to edit a device.
_images/fusionpbx_devices.jpg
  • Enter the mac address of the phone.
  • Add a label.
  • Select from the drop down box the make/model.
  • Populate the lines section.
  • Populate the Key section.
  • (Optional) Populate the Settings section. These settings are the same as the variables from Advanced > Default Settings > Provisioning and can be overridden in this settings section. Just set the variable for the device you are adding.
  • Edit other fields as needed.
  • Click Save
_images/fusionpbx_device_settings.jpg

Device Vendors

Vendors can be added or removed to help fine tune the devices page when configuring specific vendor phones.

_images/fusionpbx_accounts_devices_vendors.jpg

Profiles

Define a set of keys as a profile. Any changes to the profile effect all devices assigned to the profile.

_images/fusionpbx_accounts_devices_profiles.jpg

Extensions

Extensions define the information needed for an endpoint such as a hard phone, soft phone or some other device to connect to the SIP server. The extension is the SIP username and the password is the secret used for authentication. The domain name servers (DNS) to purposes it, locates the server to register to and is the realm that determines which domain the endpoint is registering to.

_images/fusionpbx_accounts_extensions.jpg

Basic Settings

  • Extension
    Enter the alphanumeric extension. The default configuration allows 2 - 7 digit extensions.
  • Number Alias
    If the extension is numeric then number alias is optional. The primary purpose of this field is when the extension is not a number then the number alias is required. Note a numeric extension and number alias does not currently work.
  • Range
    Enter the number of extensions to create. Increments each extension by 1.
  • Voicemail Password
    Enter the numeric voicemail password here.
  • Account Code
    Used with billing systems if you don’t have a billing system then its optional.
  • Effective caller ID Name
    Internal Caller ID name
  • Effective Caller ID Number
    Internal caller ID number usually set to the extension number.
  • Outbound Caller ID Name
    Used by the outbound route for external caller ID name. Business or Organization typically is set here.
  • Outbound Caller ID Number
    Used by the outbound route for external caller ID number here. Business or Organization number goes here.
  • Emergency Caller ID Name
    This is used when calling out to an emergency service like 911.
  • Emergency Caller ID Number
    This is used when calling out to an emergency service like 911.
  • Directory Full Name
    The first and last name used in the directory. You can call that directory with *411
  • Directory Visible
    Select whether to hide the name from the directory.
  • Directory Extension Visible
    Select whether announce the extension when calling the directory.
  • Limit Max
    Set max number of outgoing calls for this user.
  • Limit Destination
    Set the destination to send the calls when the max number of outgoing calls has been reached.
  • Voicemail Enabled
    Enable or disable voicemail for this extension.
  • Voicemail Mail To
    The email address for sending voicemail to email.
  • Voicemail File
    Select whether to send the voicemail as an attachment or as a link in the email.
  • Voicemail Keep Local
    Choose whether to keep the voicemail in the system after sending the email notification.
  • Missed Call
    Set the missed call to true and set the email address if you want to receive an email for missed calls that were routed through the dialplan to and was not answered by the extension.
  • Toll Allow
    Enter the toll allow value here. (Examples: domestic,international,local) This can be set to any name you want it sets a variable that can be a condition on the outbound routes.
  • Call Timeout
    Set the timeout for the call ringing.
  • Call Group
    You can define any call group you want the following groups are examples: sales, support, billing. These are used for group intercept or calls can be sent to the call group.
  • Call Screen
    Call screen if set will ask the caller to identify themselves their response will be recorded and offered to the person reciving the call.
  • Record
    Whether to record local, inbound, outbound, or all calls that were sent directly to this extension.
  • Hold Music
    Select music or ring tones that will be used for music on hold for this extension.
  • Context
    The context is set by default to match the domain name or IP addres. It is usually correct by default and doesn’t need to be changed in most cases.
  • Enabled
    Extension enabled or disabled.
  • Description
    A description for the extension.

Advanced Settings

Advanced settings in extensions. Be sure to know what and why you are changing these settings or you will risk causing issues for the extention.

_images/fusionpbx_accounts_extensions_advanced.jpg
  • Auth ACL
    Advanced auth acl uses.
  • CIDR
    Advanced cidr uses.
  • SIP Force Contact
    Choose whether to rewrite the contact port, or rewrite both the contact IP and port.
  • SIP Force Expires
    To prevent stale registrations SIP Force expires can override the client expire.
  • MWI Account
    MWI Account with user@domain of the voicemail to monitor.
  • SIP Bypass Media
    Choose whether to send the media stream point to point or in transparent proxy mode.
  • Absolute Codec String
    Absolute Codec String for the extension.
  • Force ping
    Use OPTIONS to detect if extension is reacheable.
  • Domain
    The domain the extension is currently saved on.
  • Dial String
    Location of the endpoint.

Gateways

Gateways define the location and settings for other VoIP servers or Providers. After defining the Gateways use the Outbound routes to direct calls through the gateways. Required items are in bold. Its a good idea to start with the required items test it and then make adjustments as needed.

_images/logo_right.png

Gateways provide access into other voice networks. These can be voice providers or other systems that require SIP registration. Check out the Youtube video .

In this example we will be using VoiceTel . Each Gateway provider has their own setings to use.

_images/fusionpbx_voicetel.jpg

Click to visit

Select Accounts from the drop-down list and click on Gateways.

_images/fusionpbx_gateway.jpg _images/fusionpbx_gateway1.jpg

Click the

_images/plus.png

button on the right. Enter the gateway information below and Click on Save once complete.

Gateway: VoiceTel
Username: 0123456789
Password: 1b3d5f7h9j
From user: 0123456789
From domain: sbc.voicetel.com
Proxy: sbc.voicetel.com
Register: true
Enabled: true

_images/fusionpbx_gateway2.jpg

Basic Settings

  • Gateway: The name of the Gateway. The company name or domain name of th VoIP provider is commonly used for the name.
  • Username: This is the username for SIP registration provided by the carrier.
  • Password: This is the password for SIP registrations it is provided by the carrier.
  • From User: Optional: Set a specific SIP From User
  • From Domain: Optional: Sets a specific SIP From Domain.
  • Proxy: Required: Proxy server address used by the carrier. This will vary by carrier.
  • Realm: Optional: Required by some carriers
  • Expire Seconds: Optional: The time until the registration with carrier expires.
  • Register: Required: Set to true if the carrier uses a username and password. Set to false if the carrier uses IP authentication. If false, you will need to specify all of the carrier IP’s in the Advanced > Access Controls.
  • Context: Required: Default is set to public and usually the correct value.
  • Profile: Required: The SIP profile used by default external is used. If you disable the external profile make sure to change the SIP profile to one that is enabled.
  • Hostname: This should usually be left empty. When the hostname is set the gateway will only start on the matching server with same hostname. If the hostname is left blank the gateway will start regardless of the server’s hostname.
  • Enabled: Required: If the gateway is enabled or disabled.
  • Description: It is helpful to provide a good description for the gateway.

Advanced Settings

Most settings in the Advanced Gateway Settings can remain the same. Some carriers will require slight changes in this section to help with outbound caller ID.

  • Distinct To:
  • Auth Username:
  • Extension: Usually used for testing and not for production. Hard codes a set number and all calls would be hard coded to that number for inbound calls from that gateway.
  • Register Transport: Tells the switch to use SIP with TCP, UDP or TLS.
  • Register Proxy: Enter the hostname or IP address of the register proxy. host[:port].
  • Outbound Proxy: Enter the hostname or IP address of the outbound proxy. host[:port].
  • Caller ID In From: If you caller ID isn’t working setting this to true will often fix the problem.
  • Supress CNG: Set this value to true to disable comfort noise.
  • Sip CID Type: The SIP caller id type: none, pid, and rpid.
  • Codec Preferences: Enter the codec preferences as a list. Ex: PCMA,PCMU,G722,OPUS
  • Extension In Contact: Option to set the Extension In Contact.
  • Ping: If your server is behind NAT then the ping option can be used to keep the connection alive through the firewall. The ping interval is in seconds.
  • Domain: If the gateway will be used on a specific domain or global to all tenants.

Note

To see which Gateway a call is using. Advanced > Command and in the switch command section type show channels as xml and then press the execute button. In the output that is returned, look for the string sofia/gateway/ and the gateway name. This is the gateway your call is using.

Providers

List of VoIP providers that support FusionPBX. This feature provides a simple and fast way to add gateways, outbound routes and access control lists that will enable calls through the carrier to the public switched telephone network (PSTN).

_images/fusionpbx_providers_voicetel.jpg _images/fusionpbx_providers_skyetel.jpg

Note

If you would like your carrier to be included in this section, please reach out to support@fusionpbx.com to discuss how.

Users

_images/fusionpbx_users_4_5.jpg

Define the users information to login to the web interface.

  • Username
    User id to be used to login.
  • Password
    Secret password used to login.
  • Language
    Per user language to override the domain or global language.
  • Time Zone
    Per user time zone only needed if it needs to be different from the global time zone.
  • Status
    Set the user’s presence.
  • Contact
    Assign a contact to this user account. View
  • Groups
    The group the user is assigned.
  • Domain
    The domain the user is assigned to.
  • API Key
    Generates an API Key
  • Message Key
    Generates a Key to use with Messages Application.
  • Enable
    Whether the user is enabled.

Users Default Settings

Click the link above for Users default settings.

Dialplans

Dialplans

In the Dialplan menu you have access to Destinations, Dialplan Manager, Inbound Routes and Outbound Routes.

Destinations

Inbound destinations are the DID/DDI, DNIS or Alias for inbound calls. Click here for the youtube video

Configure Inbound Destinations: (This will auto-configure an Inbound Route also)

Tip

Outbound destinations can be created also.

Select Dialplan from the drop-down list and then click Destinations.

To add a destination click on the plus button on the right.

_images/fusionpbx_destinations.jpg

Enter the route information below and Click Save once complete.

_images/fusionpbx_destinations1.jpg
  • Type: Inbound or Outbound. Choose if this is an inbound destination or outbound destination.
  • Destination: This is usually the DID a caller will call.
  • Context: This will usually be public.
  • Actions: Choose where the call will go after it enters FusionPBX.
    • Dialplans can also be used as an action. To enable a dialplan to be visable go to Dialplan > Dialplan Manager and edit a dialplan. Select True from the Destination field and click save. This applies to dialplans that have a value in the Number field.
  • Caller ID Name Prefix: Adds a name to the Caller ID that will display to the endpoint and call detail records.
  • Record: Record all calls made to the destination.
  • Account Code: Used in some billing systems.
  • Domain: The domain can be global to all domains or domain specific.
  • Enabled: Enabled will enable the destination or Disabled to disable the destination.
  • Description: A way to label and organize what the destination is for.
  • Inbound Routes

Note

Optional: Replace ^(?:+?1)?(d{10})$ in Inbound Routes with either 0123456789 or a DID Number depending on the Route Destination setting.

Dialplan Manager

The dialplan is used to setup call destinations based on conditions and context. You can use the dialplan to send calls to gateways, auto attendants, external numbers, to scripts, or any destination.

Dialplan Name Dialplan Number
caller-details  
  • Details about the caller.
not-found:  
  • Used to help trigger fail2ban from bogus calls.
call-limit:  
  • Limit calls based on number of calls and more.
speed_dial: *0[ext]
  • Uses LUA for extension speed dial.
agent_status: *22
  • Agent login to call center.
page-extension: *8[ext]
  • Password protected paging of an extension.
eavesdrop: *33[ext]
  • Password protected evesdropping on extensions.
send_to_voicemail: *99[ext]
  • Sending an active call to an extensions voicemail.
cf: cf
echo: *9196
  • Real time echo test.
milliwatt: *9197
  • Plays a milliwatt test tone.
recordings: *732
  • Password protected way to record audio that can be used in

other applications like IVR.

directory: *411
  • Directory of users.
user_exists:  
  • Determines if a user exists on the switch.
caller-details:  
  • Logic to decifer caller details.
call-direction:  
  • Determines the direction of the call.
variables:  
  • Set variables on a domain level.
is_local:  
  • Can be used to evaluate calls as local.
call_block:  
  • Block calls from reaching endpoints.
user_record:  
  • Used to record calls.
redial: *870
  • Dial the last number that was dialed.
default_caller_id:  
  • Caller ID that can be set per domain.
agent_status_id: *23
  • Status of the agent.
provision: *11,*12
  • Used with devices.
clear_sip_auto_answer:  
nway_conference nway
cidlookup:  
group-intercept: *8
  • Intercepts a call from a defined group.
page: *724
  • Password protected paging defined set of extensions.
conf-xfer:  
call_privacy: *67[d+]
  • Send a privacy header to the carrier to hide caller id.
call_return: *69
  • Call the last number that called the endpoint.
extension_queue: *800[ext]
intercept-ext: **[ext]
  • Password protected intercept of an extension.
dx: dx
  • Direct transfer.
att_xfer: att_xfer
  • Attended transfer.
extension-to-voicemail: [ext]
  • Used for extension to voicemail.
vmain *98
  • Main menu to access any voicemail using a pin number.
xfer_vm xfer_vm
  • Transfer to voicemail.
is_transfer is_transfer
  • Used for call transfering.
vmain_user *97
  • Endpoint’s voicemail using a pin number.
delay_echo *9195
  • Play back an echo with a 5 second delay.
please_hold  
  • Plays an audio file when on hold.
is_zrtp_secure  
is_secure is_secure
tone_stream *9198
  • tones that stream and sound like Tetris music.
hold_music *9664
  • Play music on hold. Good for testing on an endpoint.
freeswitch_conference *9888
  • An easy way to join the Cluecon Weekly call.
disa *3472
  • Call in to a phone number and provide a pin to dial out.
wake-up *925
  • Schedule date and time for an automated call.
extension_queue  
valet_park park+*5901-*5999
  • Default range to valet park calls.
valet_park_in park+*5900
  • Default number to send valet calls to.
valet_park_out park+*5901-*5999
  • Default range to retreive valet parked calls.
operator 0
  • Configurable option for an operator.
operator-forward *000
  • Uses dial_string.lua.
do-not-disturb *77,*78,*79
  • Turn on, toggle, turn off do not disturb.
call-forward *72,*73,*74
  • Turn on, toggle on/off and turn off call forwarding.
follow-me *21
  • Forwards call to defined list of phone numbers or extensions.
bind_digit_action  
call_screen [ext]
  • Play an audio file and give options to the caller to record a

short message for the call recipient. Call recipient can then accept or reject the call.

local_extension [ext]
  • Examines to see if the extension is local.
voicemail [ext]
  • Voicemail for extensions.

Dialplan Details

Global

Global specific dialplans are global to all tennants(domains). These can be changed, however the changes apply to all tennants.

Not Found
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition         0 5
action set call_direction=inbound   TRUE 0 10
action log [inbound routes] 404 not found ${sip_network_ip}   TRUE 0 15
Call Forward All
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition ${user_exists} TRUE     0 5
condition ${forward_all_enabled} TRUE     0 10
action transfer ${forward_all_destination} XML ${domain_name}     0 15
Intercept Ext Polycom
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*97(d+)$     0 5
action answer       0 10
action lua intercept.lua $1     0 15
Talking Clock Date
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*9171$     0 5
action answer       0 10
action sleep 1000     0 15
action say ${default_language} CURRENT_DATE pronounced ${strepoch()}     0 20
action hangup       0 25
Talking Clock Date And Time
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*9172$     0 5
action answer       0 10
action sleep 1000     0 15
action say ${default_language} CURRENT_DATE_TIME pronounced ${strepoch()}     0 20
action hangup       0 25
Outbound Route Example
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition ${user_exists} FALSE     0 0
condition destination_number ^+?1?(d{10})$     0 10
action set sip_h_X-accountcode=${accountcode}     0 20
action export call_direction=outbound     0 30
action unset call_timeout     0 40
action set hangup_after_bridge=true     0 50
action set effective_caller_id_name=${outbound_caller_id_name}     0 60
action set effective_caller_id_number=${outbound_caller_id_number}     0 70
action set inherit_codec=true     0 80
action set ignore_display_updates=true     0 90
action set callee_id_number=$1     0 100
action set continue_on_fail=true     0 110
action bridge sofia/gateway/72d236fb-945b-4c86-8e75-af7c6bcf2862/$1     0 120
action bridge sofia/gateway/72d236fb-945b-4c86-8e75-af7c6bcf2862/$1     0 130
Talking Clock Time
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*9170$     0 5
action answer       0 10
action sleep 1000     0 15
action say ${default_language} CURRENT_TIME pronounced ${strepoch()}     0 20
action hangup       0 25





Domain Specific

Domain specific dialplans are all the same initially but can be changed. Those changes are per domain, thus helps FusionPBX acheive multitennancy.

Hold Music
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*9664$     0 5
condition ${sip_has_crypto} ^(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)$     0 10
action answer       0 15
action execute_extension is_secure XML ${context}     0 20
action playback $${hold_music}     0 25
anti-action set zrtp_secure_media=true     0 30
anti-action answer       0 35
anti-action playback silence_stream://2000     0 40
anti-action execute_extension is_zrtp_secure XML ${context}     0 45
anti-action playback $${hold_music}     0 50
Agent Status
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*22$     0 5
action set agent_id=${sip_from_user}     0 10
action lua app.lua agent_status     0 15
Agent Status ID
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*23$     0 5
action set agent_id=     0 10
action lua app.lua agent_status     0 15
DISA
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*(3472)$     0 5
action answer       0 10
action set pin_number=36227215     0 15
action set dialplan_context=${context}     0 20
action lua disa.lua     0 25
Provision
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*11$ on-true   0 5
action set reboot=true     0 10
action set action=login     0 15
action lua app.lua provision     0 20
condition destination_number ^*12$     1 30
action set reboot=true     1 35
action set action=logout     1 40
action lua app.lua provision     1 45
Call Forward
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*72$ on-true   0 5
action set request_id=false     0 10
action set enabled=true     0 15
action lua call_forward.lua     0 20
condition destination_number ^*73$ on-true   1 30
action set request_id=false     1 35
action set enabled=false     1 40
action lua call_forward.lua     1 45
condition destination_number ^*74$ on-true   2 55
action set request_id=false     2 60
action set enabled=toggle     2 65
action lua call_forward.lua     2 70
condition destination_number ^forward+(Q${caller_id_number}E)(?:/(d+))?$ on-true   3 80
action set enabled=toggle     3 85
action set forward_all_destination=$2     3 90
action lua call_forward.lua     3 95
Call Block
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition ${call_direction} ^inbound$     0 5
action lua app.lua call_block     0 10
Do Not Disturb
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*77$ on-true   0 5
action set enabled=toggle     0 10
action lua do_not_disturb.lua     0 15
condition destination_number ^*78$|*363$ on-true   1 25
action set enabled=true     1 30
action lua do_not_disturb.lua     1 35
condition destination_number ^*79$ on-true   2 45
action set enabled=false     2 50
action lua do_not_disturb.lua     2 55
condition destination_number ^dnd+${caller_id_number}$ on-true   3 65
action set enabled=toggle     3 70
action lua do_not_disturb.lua     3 75
Voicemail(Vmain User)
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*97$     0 5
action answer       0 10
action sleep 1000     0 15
action set voicemail_action=check     0 20
action set voicemail_id=${caller_id_number}     0 25
action set voicemail_profile=default     0 30
action lua app.lua voicemail     0 35
Vmain
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^vmain$|^*4000$|^*98$ never   0 5
action answer       0 10
action sleep 1000     0 15
action set voicemail_action=check     0 20
action set voicemail_profile=default     0 25
action lua app.lua voicemail     0 30
condition destination_number ^(vmain$|^*4000$|^*98)(d{2,12})$     1 40
action answer       1 45
action sleep 1000     1 50
action set voicemail_action=check     1 55
action set voicemail_id=$2     1 60
action set voicemail_profile=default     1 65
action set voicemail_authorized=false     1 70
action lua app.lua voicemail     1 75
Directory
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*411$     0 5
action lua directory.lua     0 10
Follow Me
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*21$     0 5
action answer       0 10
action lua follow_me.lua     0 15
Recordings
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*(732)$     0 5
action answer       0 10
action set pin_number=37775310     0 15
action set recording_slots=true     0 20
action set recording_prefix=recording     0 25
action lua recordings.lua     0 30
Call Privacy
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*67(d+)$     0 5
action privacy full     0 10
action set sip_h_Privacy=id     0 15
action set privacy=yes     0 20
action transfer $1 XML ${context}     0 25
Page
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*724$     0 5
action set caller_id_name=Page     0 10
action set caller_id_number=     0 15
action set pin_number=48760243     0 20
action set destinations=101-103,105     0 25
action set moderator=false     0 30
action set mute=true     0 35
action set set api_hangup_hook=conference page-${destination_number} kick all     0 40
action lua page.lua     0 45
Valet Park In
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^(park+)?(*5900)$     0 5
action valet_park park@${domain_name} auto in 5901 5999     0 10
Valet Park Out
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^(park+)?*(59[0-9][0-9])$     0 5
action answer       0 10
action valet_park park@${domain_name} $2     0 15
Valet Parking
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^(park+)?(*59[0-9][0-9])$ never   0 5
condition ${sip_h_Referred-By} sip:(.*)@.* never   0 10
action set referred_by_user=$1     0 15
condition destination_number ^(park+)?(*59[0-9][0-9])$ never   1 25
action set park_in_use=false   TRUE 1 30
action set park_lot=$2   TRUE 1 35
condition destination_number ^(park+)?(*59[0-9][0-9])$     2 45
condition ${cond ${sip_h_Referred-By} == ‘’ ? false : true} TRUE never   2 50
action set park_in_use=${regex ${valet_info park@${domain_name}}|${park_lot}}   TRUE 2 55
condition ${park_in_use} TRUE never   3 65
action transfer ${referred_by_user} XML ${context}     3 70
anti-action set valet_parking_timeout=180     3 75
anti-action set valet_hold_music=${hold_music}     3 80
anti-action set valet_parking_orbit_exten=${referred_by_user}     3 85
anti-action valet_park park@${domain_name} ${park_lot}     3 90
User Exists
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition         0 5
action set user_exists=${user_exists id ${destination_number} ${domain_name}}   TRUE 0 10
condition ${user_exists} ^true$     1 20
action set extension_uuid=${user_data ${destination_number}@${domain_name} var extension_uuid}   TRUE 1 25
action set hold_music=${user_data ${destination_number}@${domain_name} var hold_music}   TRUE 1 30
action set forward_all_enabled=${user_data ${destination_number}@${domain_name} var forward_all_enabled}   TRUE 1 35
action set forward_all_destination=${user_data ${destination_number}@${domain_name} var forward_all_destination}   TRUE 1 40
action set forward_busy_enabled=${user_data ${destination_number}@${domain_name} var forward_busy_enabled}   TRUE 1 45
action set forward_busy_destination=${user_data ${destination_number}@${domain_name} var forward_busy_destination}   TRUE 1 50
action set forward_no_answer_enabled=${user_data ${destination_number}@${domain_name} var forward_no_answer_enabled}   TRUE 1 55
action set forward_no_answer_destination=${user_data ${destination_number}@${domain_name} var forward_no_answer_destination}   TRUE 1 60
action set forward_user_not_registered_enabled=${user_data ${destination_number}@${domain_name} var forward_user_not_registered_enabled}   TRUE 1 65
action set forward_user_not_registered_destination=${user_data ${destination_number}@${domain_name} var forward_user_not_registered_destination}   TRUE 1 70
action set do_not_disturb=${user_data ${destination_number}@${domain_name} var do_not_disturb}   TRUE 1 75
action set call_timeout=${user_data ${destination_number}@${domain_name} var call_timeout}   TRUE 1 80
action set missed_call_app=${user_data ${destination_number}@${domain_name} var missed_call_app}   TRUE 1 85
action set missed_call_data=${user_data ${destination_number}@${domain_name} var missed_call_data}   TRUE 1 90
action set toll_allow=${user_data ${destination_number}@${domain_name} var toll_allow}   TRUE 1 95
action set call_screen_enabled=${user_data ${destination_number}@${domain_name} var call_screen_enabled}   TRUE 1 100
Caller Details
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition     never   0 5
action set caller_destination=${destination_number}   TRUE 0 10
action set caller_id_name=${caller_id_name}   TRUE 0 15
action set caller_id_number=${caller_id_number}   TRUE 0 20
Call Direction
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition ${call_direction} ^(inbound|outbound|local)$ never   0 5
anti-action export call_direction=local     0 10
Variables
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition         0 5
action export origination_callee_id_name=${destination_number}     0 10
action set RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)}     0 15
Call Limit
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition ${call_direction} ^(inbound|outbound)$     0 5
action limit hash inbound ${domain_uuid} ${max_calls} !USER_BUSY     0 10
Is Local
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition ${user_exists} FALSE     0 5
action lua app.lua is_local     0 10
User Record
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition         0 5
action set user_record=${user_data ${destination_number}@${domain_name} var user_record}   TRUE 0 10
action set from_user_exists=${user_exists id ${sip_from_user} ${sip_from_host}}   TRUE 0 15
condition ${user_exists} ^true$ never   1 25
condition ${user_record} ^all$ never   1 30
action set record_session=true   TRUE 1 35
condition ${user_exists} ^true$ never   2 45
condition ${call_direction} ^inbound$ never   2 50
condition ${user_record} ^inbound$ never   2 55
action set record_session=true   TRUE 2 60
condition ${user_exists} ^true$ never   3 70
condition ${call_direction} ^outbound$ never   3 75
condition ${user_record} ^outbound$ never   3 80
action set record_session=true   TRUE 3 85
condition ${user_exists} ^true$ never   4 95
condition ${call_direction} ^local$ never   4 100
condition ${user_record} ^local$ never   4 105
action set record_session=true   TRUE 4 110
condition ${from_user_exists} ^true$ never   5 120
action set from_user_record=${user_data ${sip_from_user}@${sip_from_host} var user_record}   TRUE 5 125
condition ${from_user_exists} ^true$ never   6 135
condition ${from_user_record} ^all$ never   6 140
action set record_session=true   TRUE 6 145
condition ${from_user_exists} ^true$ never   7 155
condition ${call_direction} ^inbound$ never   7 160
condition ${from_user_record} ^inbound$ never   7 165
action set record_session=true   TRUE 7 170
condition ${from_user_exists} ^true$ never   8 180
condition ${call_direction} ^outbound$ never   8 185
condition ${from_user_record} ^outbound$ never   8 190
action set record_session=true   TRUE 8 195
condition ${from_user_exists} ^true$ never   9 205
condition ${call_direction} ^local$ never   9 210
condition ${from_user_record} ^local$ never   9 215
action set record_session=true   TRUE 9 220
condition ${record_session} ^true$     10 230
action set record_path=${recordings_dir}/${domain_name}/archive/${strftime(%Y)}/${strftime(%b)}/${strftime(%d)}   TRUE 10 235
action set record_name=${uuid}.${record_ext}   TRUE 10 240
action set recording_follow_transfer=true   TRUE 10 245
action set record_append=true   TRUE 10 250
action set record_in_progress=true   TRUE 10 255
action record_session ${record_path}/${record_name}   FALSE 10 260
Redial
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^(redial|*870)$ on-true   0 5
action transfer ${hash(select/${domain_name}-last_dial/${caller_id_number})}     0 10
condition     never   1 20
action hash insert/${domain_name}-last_dial/${caller_id_number}/${destination_number}     1 25
Speed Dial
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*0(.*)$     0 5
action lua app.lua speed_dial $1     0 10
Default Caller ID
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition ${emergency_caller_id_number} ^$ never   0 5
action set emergency_caller_id_name=${default_emergency_caller_id_name}   TRUE 0 10
action set emergency_caller_id_number=${default_emergency_caller_id_number}   TRUE 0 15
condition ${outbound_caller_id_number} ^$ never   1 25
action set outbound_caller_id_name=${default_outbound_caller_id_name}   TRUE 1 30
action set outbound_caller_id_number=${default_outbound_caller_id_number}   TRUE 1 35
Group Intercept
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*8$     0 5
condition ${sip_h_X-intercept_uuid} ^(.+)$ on-true   0 10
action intercept $1     0 15
condition         1 25
action answer       1 30
action lua intercept_group.lua     1 35
Conf Xfer
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^conf_add_begin$ on-true   0 5
action set api_result=${conference(${conf_xfer_number} unmute ${conference_member_id} quiet)}     0 10
action bind_digit_action conf-xfer,*0,api:lua,transfer2.lua ${uuid} conf_enter_number::XML::conf-xfer@${domain_name} conf_enter_to::XML::conf-xfer@${domain_name}     0 15
action bind_digit_action conf-xfer,##,api:lua,transfer2.lua ${uuid} conf_enter_number::XML::conf-xfer@${domain_name} ::KILL:     0 20
action bind_digit_action conf-xfer,*#,api:lua,transfer2.lua ${uuid} conf_add_end::XML::conf-xfer@${domain_name} ::KILL:     0 25
action bind_digit_action conf,*#,exec:execute_extension,conf_add_begin XML conf-xfer@${domain_name}     0 30
action bind_digit_action none,NONE,api:sleep,1     0 35
action set continue_on_fail=true     0 40
action transfer conf_enter_number XML conf-xfer@${domain_name}     0 45
condition destination_number ^conf_add_end$ on-true   1 55
action digit_action_set_realm conf     1 60
action set api_result=${conference(${conf_xfer_number} mute ${conference_member_id})}     1 65
action conference ${conf_xfer_number}@page     1 70
condition destination_number ^conf_enter_number$ on-true   2 80
action digit_action_set_realm none     2 85
action read 2 11 ‘tone_stream://%(10000,0,350,440)’ target_num 30000 #     2 90
action execute_extension conf_bridge_${target_num} XML conf-xfer@${domain_name}     2 95
condition destination_number ^conf_bridge_$ on-true   3 105
action execute_extension conf_add_end XML conf-xfer@${domain_name}     3 110
condition destination_number ^conf_bridge_*$ on-true   4 120
action execute_extension conf_add_end XML conf-xfer@${domain_name}     4 125
condition destination_number ^conf_bridge_(d{2,7})$ on-true   5 135
action digit_action_set_realm conf-xfer     5 140
action bridge {conf_xfer_number=${conf_xfer_number},transfer_after_bridge=conf_enter_to:XML:conf-xfer@${domain_name}}user/$1@${domain_name}     5 145
action execute_extension conf_enter_number XML conf-xfer@${domain_name}     5 150
condition destination_number ^conf_bridge_ on-true   6 160
action playback voicemail/vm-that_was_an_invalid_ext.wav     6 165
action execute_extension conf_enter_number XML conf-xfer@${domain_name}     6 170
condition destination_number ^conf_enter_to$ on-true   7 180
action unbind_meta_app       7 185
action bind_digit_action conf,*#,exec:execute_extension,conf_add_begin XML conf-xfer@${domain_name}     7 190
action digit_action_set_realm conf     7 195
action answer       7 200
action playback tone_stream://L=1;%(500, 0, 640)     7 205
action conference ${conf_xfer_number}@page     7 210
condition destination_number ^conf_xfer_from_dialplan$     8 220
action lua transfer2.lua ${uuid} conf_add_begin::XML::conf-xfer@${domain_name} conf_enter_to::XML::conf-xfer@${domain_name}     8 225
Page Extension
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*8(d{2,7})$     0 5
action set destinations=$1     0 10
action set pin_number=87462988     0 15
action set mute=true     0 20
action set moderator=false     0 25
action lua page.lua     0 30
Eavesdrop
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*33(d{2,7})$     0 5
action answer       0 10
action set pin_number=03667751     0 15
action lua eavesdrop.lua $1     0 20
Call Return
Dialplan Detail Tag Dialplan Detail Type Dialplan DetailDdata Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*69$     0 5
action transfer ${hash(select/${domain_name}-call_return/${caller_id_number})}     0 10
Extension Queue
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*800(.*)$     0 5
action set fifo_music=$${hold_music}     0 10
action set extension_queue=queue_$1@${domain_name}     0 15
action set fifo_simo=1     0 20
action set fifo_timeout=30     0 25
action set fifo_lag=10     0 30
action set fifo_destroy_after_use=true     0 35
action set fifo_extension_member=$1@${domain_name}     0 40
action lua extension_queue.lua     0 45
Wake Up
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*(925)$     0 5
action answer       0 10
action set pin_number=14509639     0 15
action set time_zone_offset=-7     0 20
action lua wakeup.lua     0 25
dx
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^dx$     0 5
action answer       0 10
action read 11 11 ‘tone_stream://%(10000,0,350,440)’ digits 5000 #     0 15
action transfer -bleg ${digits}     0 20
ATT Xfer
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^att_xfer$     0 5
action read 2 6 ‘tone_stream://%(10000,0,350,440)’ digits 30000 #     0 10
action set origination_cancel_key=#     0 15
action att_xfer user/${digits}@${domain_name}     0 20
Evesdrop
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*33(d{2,7})$     0 5
action answer       0 10
action set pin_number=03667751     0 15
action lua eavesdrop.lua $1     0 20
Please Hold
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition ${user_exists} ^true$     0 5
action set transfer_ringback=$${hold_music}     0 10
action answer       0 15
action sleep 1500     0 20
action playback ivr/ivr-hold_connect_call.wav     0 25
Cluecon Weekly
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^*9(888|8888|1616|3232)$     0 5
action export hold_music=silence     0 10
action bridge sofia/${use_profile}/$1@conference.freeswitch.org     0 15
Bind Digit Action
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition ${sip_authorized} TRUE never   0 5
action set bind_target=both   TRUE 0 10
anti-action set bind_target=peer   TRUE 0 15
condition         1 25
action bind_digit_action local,*1,exec:execute_extension,dx XML ${context},${bind_target}     1 30
action bind_digit_action local,*2,exec:record_session,$${recordings_dir}/${domain_name}/archive/${strftime(%Y)}/${strftime(%b)}/${strftime(%d)}/${uuid}.${record_ext},${bind_target}     1 35
action bind_digit_action local,*3,exec:execute_extension,cf XML ${context},${bind_target}     1 40
action bind_digit_action local,*4,exec:execute_extension,att_xfer XML ${context},${bind_target}     1 45
action digit_action_set_realm local     1 50
cf
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data Dialplan Detail Break Dialplan Detail Inline Dialplan Detail Group Dialplan Detail Order
condition destination_number ^cf$     0 5
action answer       0 10
action transfer -both 30${dialed_extension:2} XML ${context}     0 15

Dialplan Application

Dialplan Application uses FreeSWITCH show application to build the dropdown lists that are found in FusionPBX dialplans. This is a list from a default install and the list can change depending on how many FreeSWITCH modules are installed.

name description syntax ikey  
answer Answer the call   mod_dptools  
att_xfer Attended Transfer <channel_url> mod_dptools  
bgsystem Execute a system command in the background <command> mod_dptools  
bind_digit_action bind a key sequence or regex to an action <realm>,<digits|~regex>,<string>[,<value>][,<dtmf target leg>][,<event target leg>] mod_dptools  
bind_meta_app Bind a key to an application <key> [a|b|ab] [a|b|o|s|i|1] <app> mod_dptools  
block_dtmf Block DTMF   mod_dptools  
break Break   mod_dptools  
bridge Bridge Audio <channel_url> mod_dptools  
bridge_export Export a channel variable across a bridge <varname>=<value> mod_dptools  
callcenter CallCenter queue_name mod_callcenter  
capture capture data into a var <varname>|<data>|<regex> mod_dptools  
check_acl Check an ip against an ACL list <ip> <acl | cidr> [<hangup_cause>] mod_dptools  
clear_digit_action clear all digit bindings <realm>|all[,target] mod_dptools  
clear_speech_cache Clear Speech Handle Cache   mod_dptools  
cng_plc Do PLC on CNG frames   mod_dptools  
conference conference   mod_conference  
conference_set_auto_outcall conference_set_auto_outcall   mod_conference  
db Insert to the db [insert|delete]/<realm>/<key>/<val> mod_db  
decode_video decode picture [max_pictures] mod_fsv  
deduplicate_dtmf Prevent duplicate inband + 2833 dtmf [only_rtp] mod_dptools  
deflect Send call deflect <deflect_data> mod_dptools  
delay_echo echo audio at a specified delay <delay ms> mod_dptools  
detect_audio detect_audio <threshold> <audio_hits> <timeout_ms> [<file>] mod_dptools  
detect_silence detect_silence <threshold> <silence_hits> <timeout_ms> [<file>] mod_dptools  
detect_speech Detect speech <mod_name> <gram_name> <gram_path> [<addr>] OR grammar <gram_name> [<path>] OR nogrammar <gram_name> OR grammaron/grammaroff <gram_name> OR grammarsalloff mod_dptools  
  OR pause OR resume OR start_input_timers OR stop OR param <name> <value>
digit_action_set_realm change binding realm <realm>[,<target>] mod_dptools  
displace_session Displace File <path> [<flags>] [+time_limit_ms] mod_dptools  
early_hangup Enable early hangup   mod_dptools  
eavesdrop eavesdrop on a uuid [all | <uuid>] mod_dptools  
echo Echo   mod_dptools  
enable_heartbeat Enable Media Heartbeat [0|<seconds>] mod_dptools  
enable_keepalive Enable Keepalive [0|<seconds>] mod_dptools  
endless_playback Playback File Endlessly <path> mod_dptools  
enum Perform an ENUM lookup [reload | <number> [<root>]] mod_enum  
eval Do Nothing   mod_dptools  
event Fire an event   mod_dptools  
execute_extension Execute an extension <extension> <dialplan> <context> mod_dptools  
export Export a channel variable across a bridge <varname>=<value> mod_dptools  
fax_detect Detect faxes   mod_dptools  
fifo Park with FIFO <fifo name>[!<importance_number>] [in [<announce file>|undef] [<music file>|undef] | out [wait|nowait] [<announce file>|undef] [<music file>|undef]] mod_fifo  
fifo_track_call Count a call as a fifo call in the manual_calls queue <fifo_outbound_uuid> mod_fifo  
fire fire the message   mod_sms  
flush_dtmf flush any queued dtmf   mod_dptools  
gentones Generate Tones <tgml_script>[|<loops>] mod_dptools  
group Manage a group [insert|delete]:<group name>:<val> mod_db  
hangup Hangup the call [<cause>] mod_dptools  
hash Insert into the hashtable [insert|insert_ifempty|delete|delete_ifmatch]/<realm>/<key>/<val> mod_hash  
hold Send a hold message [<display message>] mod_dptools  
info Display Call Info   mod_sms  
info Display Call Info   mod_dptools  
intercept intercept [-bleg] <uuid> mod_dptools  
ivr Run an ivr menu   mod_dptools  
jitterbuffer Send session jitterbuffer <jitterbuffer_data> mod_dptools  
limit Limit <backend> <realm> <id> [<max>[/interval]] [number [dialplan [context]]] mod_dptools  
limit_execute Limit <backend> <realm> <id> <max>[/interval] <application> [application arguments] mod_dptools  
limit_hash Limit <realm> <id> [<max>[/interval]] [number [dialplan [context]]] mod_dptools  
limit_hash_execute Limit <realm> <id> <max>[/interval] <application> [application arguments] mod_dptools  
log Logs to the logger <log_level> <log_string> mod_dptools  
loop_playback Playback File looply [+loops] <path> mod_dptools  
media_reset Reset all bypass/proxy media flags   mod_dptools  
mkdir Create a directory <path> mod_dptools  
multiset Set many channel variables [^^<delim>]<varname>=<value> <var2>=<val2> mod_dptools  
multiunset Unset many channel variables [^^<delim>]<varname> <var2> <var3> mod_dptools  
mutex block on a call flow only allowing one at a time <keyname>[ on|off] mod_dptools  
novideo Refuse Inbound Video   mod_dptools  
park Park   mod_dptools  
park_state Park State   mod_dptools  
phrase Say a Phrase <macro_name>,<data> mod_dptools  
pickup Pickup [<key>] mod_dptools  
play_and_detect_speech Play and do speech recognition <file> detect:<engine> {param1=val1,param2=val2}<grammar> mod_dptools  
play_and_get_digits Play and get Digits <min> <max> <tries> <timeout> <terminators> <file> <invalid_file> <var_name> <regexp> [<digit_timeout>] [‘<failure_ext> [failure_dp [failure_context]]’] mod_dptools  
play_fsv play a fsv file <file> mod_fsv  
play_yuv play a yvv file <file> [width] [height] mod_fsv  
playback Playback File <path> mod_dptools  
pre_answer Pre-Answer the call   mod_dptools  
preprocess pre-process   mod_dptools  
presence Send Presence <rpid> <status> [<id>] mod_dptools  
privacy Set privacy on calls off|on|name|full|number mod_dptools  
push Set a channel variable <varname>=<value> mod_dptools  
queue_dtmf Queue dtmf to be sent <dtmf_data> mod_dptools  
read Read Digits <min> <max> <file> <var_name> <timeout> <terminators> <digit_timeout> mod_dptools  
record Record File <path> [<time_limit_secs>] [<silence_thresh>] [<silence_hits>] mod_dptools  
record_fsv record an fsv file <file> mod_fsv  
record_session Record Session <path> [+<timeout>] mod_dptools  
record_session_mask Mask audio in recording <path> mod_dptools  
record_session_unmask Resume recording <path> mod_dptools  
recovery_refresh Send call recovery_refresh   mod_dptools  
redirect Send session redirect <redirect_data> mod_dptools  
remove_bugs Remove media bugs [<function>] mod_dptools  
rename Rename file <from_path> <to_path> mod_dptools  
reply reply to a message   mod_sms  
respond Send session respond <respond_data> mod_dptools  
ring_ready Indicate Ring_Ready   mod_dptools  
rxfax FAX Receive Application <filename> mod_spandsp  
say say <module_name>[:<lang>] <say_type> <say_method> [<say_gender>] <text> mod_dptools  
sched_broadcast Schedule a broadcast in the future [+]<time> <path> [aleg|bleg|both] mod_dptools  
sched_cancel cancel scheduled tasks [group] mod_dptools  
sched_hangup Schedule a hangup in the future [+]<time> [<cause>] mod_dptools  
sched_heartbeat Enable Scheduled Heartbeat [0|<seconds>] mod_dptools  
sched_transfer Schedule a transfer in the future [+]<time> <extension> <dialplan> <context> mod_dptools  
send send the message as-is   mod_sms  
send_display Send session a new display <text> mod_dptools  
send_dtmf Send dtmf to be sent <dtmf_data> mod_dptools  
send_info Send info <info> mod_dptools  
session_loglevel session_loglevel <level> mod_dptools  
set set a variable   mod_sms  
set Set a channel variable <varname>=<value> mod_dptools  
set_audio_level set volume   mod_dptools  
set_global Set a global variable <varname>=<value> mod_dptools  
set_media_stats Set Media Stats   mod_dptools  
set_mute set mute   mod_dptools  
set_name Name the channel <name> mod_dptools  
set_profile_var Set a caller profile variable <varname>=<value> mod_dptools  
set_user Set a User <user>@<domain> [prefix] mod_dptools  
set_zombie_exec Enable Zombie Execution   mod_dptools  
sleep Pause a channel <pausemilliseconds> mod_dptools  
socket Connect to a socket <ip>[:<port>] mod_event_socket  
sofia_sla private sofia sla function <uuid> mod_sofia  
soft_hold Put a bridged channel on hold <unhold key> [<moh_a>] [<moh_b>] mod_dptools  
sound_test Analyze Audio   mod_dptools  
spandsp_detect_tdd Detect TDD data   mod_spandsp  
spandsp_inject_tdd Send TDD data   mod_spandsp  
spandsp_send_tdd Send TDD data   mod_spandsp  
spandsp_start_dtmf Detect dtmf   mod_spandsp  
spandsp_start_fax_detect start fax detect <app>[ <arg>][ <timeout>][ <tone_type>] mod_spandsp  
spandsp_start_tone_detect Start background tone detection with cadence <name> mod_spandsp  
spandsp_stop_detect_tdd stop sending tdd   mod_spandsp  
spandsp_stop_dtmf stop inband dtmf   mod_spandsp  
spandsp_stop_fax_detect stop fax detect   mod_spandsp  
spandsp_stop_inject_tdd stop sending tdd   mod_spandsp  
spandsp_stop_tone_detect Stop background tone detection with cadence   mod_spandsp  
speak Speak text <engine>|<voice>|<text> mod_dptools  
start_dtmf Detect dtmf   mod_dptools  
start_dtmf_generate Generate dtmf   mod_dptools  
stop stop execution   mod_sms  
stop Do Nothing   mod_dptools  
stop_displace_session Stop Displace File <path> mod_dptools  
stop_dtmf stop inband dtmf   mod_dptools  
stop_dtmf_generate stop inband dtmf generation [write] mod_dptools  
stop_record_session Stop Record Session <path> mod_dptools  
stop_tone_detect stop detecting tones   mod_dptools  
stop_video_write_overlay Stop video write overlay <path> mod_dptools  
stopfax Stop FAX Application   mod_spandsp  
strftime strftime [<epoch>|]<format string> mod_dptools  
system execute a system command   mod_sms  
system Execute a system command <command> mod_dptools  
t38_gateway Convert to T38 Gateway if tones are heard   mod_spandsp  
three_way three way call with a uuid <uuid> mod_dptools  
tone_detect Detect tones   mod_dptools  
transfer Transfer a channel <exten> [<dialplan> <context>] mod_dptools  
transfer_vars Transfer variables <~variable_prefix|variable> mod_dptools  
txfax FAX Transmit Application <filename> mod_spandsp  
unbind_meta_app Unbind a key from an application [<key>] mod_dptools  
unblock_dtmf Stop blocking DTMF   mod_dptools  
unhold Send a un-hold message   mod_dptools  
unloop Tell loopback to unfold   mod_loopback  
unset unset a variable   mod_sms  
unset Unset a channel variable <varname> mod_dptools  
unshift Set a channel variable <varname>=<value> mod_dptools  
valet_park valet_park <lotname> <extension>|[ask [<min>] [<max>] [<to>] [<prompt>]|auto [in|out] [min] [max]] mod_valet_parking  
verbose_events Make ALL Events verbose.   mod_dptools  
video_decode Set video decode. [[on|wait]|off] mod_dptools  
video_refresh Send video refresh. [manual|auto] mod_dptools  
video_write_overlay Video write overlay <path> [<pos>] [<alpha>] mod_dptools  
wait_for_answer Wait for call to be answered   mod_dptools  
wait_for_silence wait_for_silence <silence_thresh> <silence_hits> <listen_hits> <timeout_ms> [<file>] mod_dptools  

Inbound Routes

Route incoming calls to destinations based on one or more conditions. It can send incoming calls to:

  • IVR Menu
  • Call Group
  • Extension
  • External Number
  • Script

Directs public inbound calls to an internal destination on the system. Note that the only difference between the inbound route dial plan and the normal dial plan is that the inbound route dial plan works on all calls that are in the public context whereas the normal dial plan works on the domain context.

Inbound Call Routing is used to route incoming calls to destinations based on one or more conditions and context. It can send incoming calls to an auto attendant, huntgroup, extension, external number, or a script. Order is important when an anti-action is used or when there are multiple conditions that match.

Inbound routes can be used for advanced reasons. Dialplan > Destinations will create and configure the Inbound Route for you.

_images/fusionpbx_inbound_routes1.jpg
  • Name: The name of the Inbound Route.
  • Number: The Number (DID) an outside caller will call.
  • Context: Context of the Inbound Route. Usually will be public.
  • Hostname: Usually blank, otherwise for advanced use.
  • Order: Order where the inbound route will be used in the dialplan.
  • Enabled: If the Inbound Route is enabled or disabled.
  • Description: A way to organize what the inbound route is used for.

Edit/Add Inbound Routes

_images/fusionpbx_inbound_routes_2.jpg
  • Name: The name of the Inbound Route.
  • Number: The Number (DID) an outside caller will call.
  • Context: Context of the Inbound Route. Usually will be public.
  • Order: Order where the inbound route will be used in the dialplan.
  • Domain: Can be global to all domains or specific to one domain.
  • Continue: If you want the call to continue through the order of the remaining dialplans. This is usually set as false.
  • Enabled: If the Inbound Route is enabled or disabled.
  • Description: A way to organize what the inbound route is used for.

XML example

Route based on CallerID Name or Number.

Example used to send unwanted callers. (telemarketers that won’t stop)

<extension name="gotolennyCIDnumber" >
 <condition field="context" expression="public"/>
 <condition field="caller_id_number" expression="^1235554321$|^1235551234$">
    <action application="answer"/>
    <action application="bridge" data="sofia/${use_profile}/lenny@sip.itslenny.com:5060"/>
 </condition>
</extension>

<extension name="gotolennyCIDname" >
 <condition field="context" expression="public"/>
  <condition field="caller_id_name" expression="^.*THE.*ANNOYING.*COMPANY.*$|^.*OTHER.*ANNOYING.*CALLER.*$">
      <action application="answer"/>
      <action application="bridge" data="sofia/${use_profile}/lenny@sip.itslenny.com:5060"/>
  </condition>
</extension>

Outbound Routes

Route outbound calls to gateways, tdm, enum and more. When a call matches the conditions the call to outbound routes. Check out the youtube video .

Configuring an Outbound Route.

  • Select Dialplan from the drop-down list and then click Outbound Routes .
  • Click the plus button on the right. Enter the route information below and Click Save once entry is complete.
_images/fusionpbx_outbound1.jpg

_images/fusionpbx_outbound2.jpg


Gateway: VoiceTel
Dialplan Expression: ^(?:\+?1)?(\d{10})$ (You can also choose more than one from the drop down list also as needed)
Order: 000
Enabled: true
Description: VoiceTel-out


By using VoiceTel you help support FusionPBX. Thank you for your support!

Pin Numbers

To have the system ask for a PIN number before a call is made. A good use is if you don’t want every user on the system to be able to call international destinations. This can be done with a single PIN or multiple PINs by using the “PIN Number APP”.

To use a single PIN number for all calls

Before the bridge action on the outbound route add the following actions

action set     pin_number=(Whatever pin number you choose)
action lua     pin_number.lua
To use the PIN Number App to manage multiple PINs
  • First enable access to the “PIN Number” app by giving permissions to the group of users you want to have access in Advanced > Group Manager. Make sure the “PIN Number” App is displayed in the menu by selecting the groups that can view it in Advanced > Menu Manager.
  • Set the PINs you would like to use in Apps > PIN Numbers

Before the bridge action on the outbound route add the following actions

action set     pin_number=database
action lua     pin_number.lua
Which gateway is my call using?

If you want to know the gateway your call is using there is currently no way to do this with FusionPBX’s GUI. Instead you can do it this way.

  • Go to Advanced -> Command and in the switch command dropdown section type
show channels as xml and then press the execute button.
  • In the output that is returned, look for the string sofia/gateway/ and the gateway name. This is the gateway your call is using.

Advanced Dialplans

FusionPBX installs several default dialplans. FusionPBX also gives the option to make new dialplans. This gives you the power for more advanced functions, and produce the desired result.

Adding a Dialplan

You can create a new dialplan or copy and modify an existing dialplan.

  • Go to Dialplan > Dialplan Manager
  • Click the Plus icon at the top right.
  • Complete required fields and click save.
_images/fusionpbx_dialplan_advanced.jpg

Edit a Dialplan

Find the dialplan you want to edit and click the edit icon.

_images/fusionpbx_dialplan_advanced1.jpg

Once you enter data into the empty fields at the bottom and click save, more blank fileds will populate if needed.

_images/fusionpbx_dialplan_advanced2.jpg

Enable a Dialplan Destination

Dialplans that have a value in the Number filed can be enabled and used in Dialplan > Destinations. Setting the destination field to True will enable the dialplan to be visable and used as an action in Dialplan > Destinations.

_images/fusionpbx_dialplan_destination.jpg

Dialplan example

This example will be for calling an extension on another tenant. This can be done several ways.

  • We can use the adding a dialplan example and modify it for this example.
_images/fusionpbx_dialplan_advanced2.jpg
Cross Tenant Calling

This would require a prefix of 5 followed by 4 digit extensions. The prefix can be any number that you choose to use and the 4 digit extension must match the destination tenant. So if the destination extensions are 3 digit then you would use 3 instead of 4.

Tag Type Data Break Inline Group Order
condition ${destination_number} ^5(d{4})$       5
action set domain_name=customer.domain.tld   True   10
action set domain_uuid=correct-uuid-for-the-domain   True   15
action transfer $1 XML ${domain_name}       20
  • Be sure to set the Continue dropdown box True
  • Finally we have the desired dialplan to call from tenant A to tenant B.
_images/fusionpbx_custom_dialplan.jpg

Note

A quick way to find a domains uuid is by going to Advanced > Domains. Then click the edit icon on the domain you want to know the uuid of. The uuid will be at the end of the url.

Applications

Applications

In the Applications menu (Apps) section you will find Bridges, Call Block, Call Broadcast, Call Center, Call Detail Records, Call Flows, Conference Center, Conference Controls, Conference Profiles, Contacts, Fax Server, Follow Me, Grandstream Wave, IVR Menu, Music on Hold, Operator Panel, Phrases, Queues, Recordings, Ring Groups, Streams, Time Conditions and Voicemail. Other apps can be added also.

Bridges

Bridge statements are used to send calls directly to other destinations like another PBX, Carrier or External SIP to TDM Gateway and more. The bridge statements are added to destination select list.

_images/fusionpbx_applications_bridges.jpg
  • Click the Plus icon to add a bridge
  • Click the edit icon on the right to edit a bridge
  • Click the X to delete a bridge

Bridge Examples

Bridges are how ring groups are made. The code in FusionPBX simplifies that for you. You can however manually do what ring groups do and with bridges.

Bridge Statement advanced options

  • For multiple destinations. Multiple destinations are allowed as long as you use a , | or :_:
Comma , Means simultaneous
Pipe |  Means In a sequence
colon under score colon  :_: Means Enterprise

Loopback to an external number

loopback/12085551234

Loopback to multiple external numbers simultaneously

loopback/12085551234,loopback/12085552222,loopback/12085553333

To another sip server, sip gateway, or another carrier

sofia/internal/$1@xxx.xxx.xxx.xxx:5060

To a user

user/1001
or
sofia_contact(*/501@example.fusionpbx.com)

Using LCR

lcr/12085551234

Using variables

{abc=123}sofia/internal/$1@xxx.xxx.xxx.xxx:5060

Using variables in sequence with a sip server

{abc=123}sofia/internal/$1@xxx.xxx.xxx.xxx:5060|sofia/internal/$1@xxx.xxx.xxx.xxx:5060

Using variables in sequence with a sip server

[server=d1]sofia/internal/$1@xxx.xxx.xxx.xxx:5060|[server=d2]sofia/internal/$1@xxx.xxx.xxx.xxx:5060

Call block

A list of numbers from which to block calls.

_images/fusionpbx_call_block1.jpg
  • To block a call click on the plus icon on the right
  • Fill out the fields with pertinent information
Action:
Reject- Will reject the call
Busy- Will send a busy signal
Hold- Will put the call on hold
Voicemail- Will send the call to the specified voicemail box

_images/fusionpbx_call_block.jpg

Enhanced call-blocking introduced in Master branch 2.5.0: Call-blocking does an exact match on the inbound caller-id number by default. This behaviour can be changed to use SQL “like” comparison or regex based comparison by adding the following variable to the Default Settings:

_images/fusionpbx_call_block_matching.jpg

Call Broadcast

Broadcast calls (a light dialer) to a defined list of phone numbers.

_images/fusionpbx_call_broadcast.jpg
  • To create a call broadcast click the plus on the right

Fill in the following fields

  • Name- Name for the Call Broadcast.
  • Accountcode Used by some billing systems.
  • Timeout- Amount of time till hangup.
  • Concurrent Limit- Used to pace the calls calls if the timeout was 60 and the concurent

limit is 100 then we would schedule 100 calls every 60 seconds.

  • Caller ID Name- Name that will be used on outbound caller id.
  • Caller ID Number- Number that will be used on outbound caller id.
  • Destination Number- This is the internal number to call. Send the call to an IVR Menu or

some other number. If sending to a conference room make sure the room has a pin number or something that requires user input you don’t want to add voiemail messages into the conference room.

For example *9198
  • Phone Number List- List of phone numbers to call in the call broadcast.

This is the external number to call. Set a list of phone numbers one per row in the following format: 123-123-1234|Last Name, First Name

5551231234|example 1
5551231234|example 2
5551231234|example 3
  • Voicemail Detection- Set True or false to detect an answering machine.
  • Description Help organize and label what the call broadcast is for.
_images/fusionpbx_call_broadcast1.jpg
  • Once you have everything filled out click the Call Broadcast name you just created. On the top right click the Send Broadcast button to start the call broadcast. To stop the call broadcast click STOP BROADCAST on the top right.

Uses sched_api to schedule an API call in the future. Is used to schedule calls to the provided number/extensions and send them to the extension an IVR Menu, Conference Room, or any other number. Could be used among other things to schedule a Conference.

Call Center

List of queues for the call center.

_images/fusionpbx_call_center1.jpg

Call Center Queues

_images/fusionpbx_call_center_queue.jpg
  • To add a Call Center Queue click the plus edit icon on the right
  • Once a Queue is created click the edit pencil icon on the right. At the top right you can view, stop, start, restart and save the queue

Call Center Agents

List of call center agents.

_images/fusionpbx_call_center_agents.jpg
  • From Apps > Call Center click Agents at the top right to access Call Center Agents
  • Click the plus icon on the top right to add agents

Call Center Strategies

_images/fusionpbx_call_center_strategy.jpg
  • Agent With Least Talk Time: Rings the Agent will ring that has the least time talking.
  • Agent With Fewest Calls: Agent will ring that has the least calls.
  • Longest Idle Agent: The agent will ring who idles the longest depending on their tier level.
  • Ring All: All agents ring simultaneously.
  • Random: Rings Agents will ring randomly in not particular order.
  • Ring Progressively: Agents will ring the same as top-down and will progress until each agent ends up ringing.
  • Round Robin: Will ring the next agent available in line.
  • Sequentially By Agent Order: Agents will ring in a sequence by the tier and the tiers order.
  • Top Down: Agent rings in order starting from one.

Agents

Select agents from the drop down list and specify tier level and tier position.

Music On Hold

Select the desired hold music. Music on hold, streams and ringtones can be used.

Record

Save the recording

Time base score

  • Queue: Caller in queue time will start. If the caller goes to another queue the time will start over.
  • System: Caller in queue will have their wait calculated as soon as they enter the system. If a caller chooses the wrong queue, when they get to the correct queue the timer won’t start over again.

Max Wait Time

A value of 0 is the default and equals an infinate amount of time. Any other numeric value is calculated in seconds.

Max Wait Time with No Agent

Enter the max wait time with no agent. FusionPBX sets the default to 90 seconds and the Timeout Action will be used if there are no agents available.

Max Wait Time with No Agent Time Reached

Enter the max wait time with no agent. FusionPBX sets the default to 30 seconds and the Timeout Action will be used if there are no agents available.

Timeout Action

Set the action to perform when the max wait time is reached.

Tier Rules Apply

  • True: Set the tier rule rules apply to true. The defined tiers will be used.
  • False: Set the tier rule rules apply to false. All tiers will be used.

Tier Rule Wait Second

30 seconds is default. Enter the tier rule wait seconds.

Tier Rule Wait Multiply Level

  • True: The amount of seconds the caller waits until the next tier. This value will increase(multiply) if Tier Rule Wait Multiply Level is marked true.
  • False: Tier Rule Wait Multiply Level is marked false then after the set amount of seconds pass the tiers in order will execute with no wait.

Tier Rule No Agent No Wait

  • True: Setting is enabled.
  • False: Setting is disabled.

Discard Abandoned After

Default is 900 seconds. Sets the discard abandonded after seconds.

Abandoned Resume Allowed

  • True: Setting is enabled. Permits a call to resume their posistion in the queue but only in the amount of seconds set in discard abandonded after .
  • False: Setting is disabled.

Caller ID Name Prefix

Set a prefix on the caller ID name.

Announce Sound

A sound to play to a caller every announce sound seconds. Needs the full path to the .wav file.

Announce Frequency

How often the announce sound is played in seconds.

Exit Key

Keys to quit the current queue waiting.

Description

Enter a description to help organize and define what the queue is for.

Agent Call Center Login

Agents can login to call center with *22 from the phone or via the FusionPBX web interface. Admin and Super Admin accounts can also log other agents in or out.

Call Detail Records

Call Detail Records (CDRs) are detailed information on the calls. Use the fields to filter the information for the specific call records that are desired. Records in the call list can be saved locally using the Export button.

_images/fusionpbx_cdr.jpg
  • CID Name Caller ID Name
  • Source Where the call came from
  • Destination Where the call went to
  • Recording A link will appear if the call recorded
  • Start Time the call entered the system
  • TTA Time To Answer the call
  • Duration How long the call was
  • PDD Post Dial Delay
  • MOS Mean Opinion Score is a measure of voice call quality
  • Hangup Cause Details about the entire calls. Usually will be “Normal Clearing”

Call Detail Records are detailed information on the calls. The information contains source, destination, duration, and other useful call details. Use the fields to filter the information for the specific call records that are desired. Then view the calls in the list or download them as comma seperated file by using the CSV button.

Note that this page makes use of XML CDR for reporting.

Post Dial Delay (PDD)

Post Dial Delay (PDD) is experienced by the sender as the time from the sending of the final dialed digit to the point at which the sender hears ring tone or other in-band information. In other words, the PDD would be the time from when the sender sends the INVITE to receiving the first ringing response.

That said, PDD does not take into account the time it takes the receiver to hear the call coming in due to the various factors on how they are setup for inbound calls. For example, call forwarding may affect the time it takes the receiver to know that someone is calling because of call forwarding. The sender might hear a ring tone almost instantly from the time it dials the final digit because they sent out an INVITE, but the receiver of the call might have setup inbound calls to be forwarded to their cell phone, in which now the call must travel through their phone system, to their phone system’s gateway carrier to deliver the sender’s call to the receiver’s cell phone carrier network in order for the cell phone carrier to deliver the sender’s call to the receiver’s cell phone.

Recordings

Any calls which have the entry in the name column underlined (ie. the name is a link) have a recording available. Clicking on the name will playback the recording in a new window. In such cases the number entry will also be a link - clicking on this link will download the recording to your computer as a wav file.

Possible issues

No records showing up under Apps-Call Detail Records

Possible causes:

1. The module is disabled

  • Older installations of FusionPBX had the CDR CSV module enabled and the XML CDR module disabled.
  • If you reverse this situation you will then get call detail records. You will also need to start the XML CDR module after you have done this.
  • If you want to see your old CDR CSV records after the change or you really want to continue using CDR CSV you can go to Menu Manager and unhide the CDR CSV menu.
  • Call recordings can be downloaded from the Call Detail Records page, but this capability is not currently provided in CDR CSV so if you need to use call recordings it would be better to use XML CDR.

2. Wrong xml_cdr.conf.xml config

  • check <param name=”url” value=”http://127.0.0.1/app/xml_cdr/v_xml_cdr_import.php”/> and adapt it to your situation.
  • FusionPBX menu bar disappears under certain circumstances when viewing Call Detail Records
    • If this happens to you it may be because you are using an old version of xml_cdr.conf.xml
  • Compare your version (advanced-script editor-files-autoload_configs-xml_cdr.conf.xml) with the current default one that is included in FusionPBX (advanced-php editor-files-includes-templates-conf-autoload_configs-xml_cdr.conf.xml). If it is different copy the default one over yours.
  • Then edit the line <param name=”url” value=”http://{v_domain}/mod/xml_cdr/v_xml_cdr_import.php”/> and replace {v_domain} with the domain or IP address of your FusionPBX server.
  • Then edit the line <param name=”cred” value=”{v_user}:{v_pass}”/> and replace {v_user} with a complex name of upper and lowercase and numeric characters so it is really ugly and secure, and do the same for v_pass.
  • Make each of them completely unique.
  • Be aware that these don’t have to match anything else on your server at all. This is because FusionPBX does something very simple but clever here. The xml_cdr module uses this account when it does an http post to FusionPBX of the new data. FusionPBX looks at the same xml_cdr.conf.xml file that the module uses in order to check if the module is using a valid account and password. Since they both look at the same config file they are using the same account and password and will happily talk to each other!

Once you’ve made these changes you can save the file. You could restart your server, or you could reloadxml and then restart the xml_cdr module. Either is ok, it is up to you. Then your changes will have taken effect and you should no longer lose your menu bar when looking at CDR information.

XML CDR configuration

For more detailed configuration go to the XML editor (Advanced menu) and in autoload configs look at xml_cdr.conf.xml

Note

By default only the a-leg of the call is logged therefore if you make a recording of the b-leg you won’t be able to retrieve it using the Call Detail Records. If you want the b-leg as well you need to change log-b-leg=true in this config.

Harddrive space usage

Note

XML CDR data adds up fast, therefore you may need to clear this data at some point in the future. By default freeswitch keeps this in (source install) /usr/local/freeswitch/log/cdr-csv or (package install) /var/log/freeswitch/xml_cdr and inside that by year, month and day. Recordings also take up space and have to be manually deleted if you want the space back these are kept in (source install) /usr/local/freeswitch/recordings/{Domian_Name} or (package install) /etc/freeswitch/recordings/{Domain Name} and inside that by year, month and day.

Call Flows

Direct calls between two destinations by calling a feature code.

_images/fusionpbx_call_flow1.jpg


  • Name: Define the name of the call flow
  • Extension: Define what extension to use. (This will make an extension not allready created)
  • Feature Code: Define what * number to use
  • Context: Domain context (typically leave as is)
  • Status: Define what currently is in use.
  • Pin Number: Define a pin number in order to execute either mode.
  • Destination: Define where the call will go in the intial mode.
  • Sound: Define the sound that will play once mode is engaged.
  • Destination: Define what the destination will be.
  • Alternative Label: Label that will show when alternative mode is in use.
  • Alternative Sound: Define the sound that will play once alternative mode is engaged.
  • Alternative Destination: Define where the call will go in the alternative mode.
  • Description: Label what this call flow does.


Call Flow Example

In the Call Flow example below we have the name as Call Flow. Made the Extension number 30 that didn’t exist until now. Feature code we made with a *code as *30. Kept the context as is with training.fusionpbx.com . Status to show which mode. Made a pin number to help secure the call flow. Made the detination label as Day Mode. Picked a sound to familiarize which mode is activated. Choose a destination for the alternative mode. Made the alternative detination label as Night Mode. Picked an alternative sound to familiarize which mode is activated. Choose a destination for the alternative mode. Finally describe what this call flow does.



_images/fusionpbx_call_flow.jpg

Call Recordings

Shows the call recordings with name, length, date and time, and call direction.

_images/fusionpbx_call_recordings.jpg
  • Click the eye icon on the right to view more details
  • Click the X to delete a recording
  • Click multiple check boxes to delete multiple at once.

Call Routing

Directs incoming calls for the extension

_images/fusionpbx_call_routing1.jpg
  • To access call routing goto Accounts > click the edit pencil icon on the right of the extension
_images/fusionpbx_call_routing.jpg
  • Click CALL ROUTING on the top right

Call Forward and Do No Disturb

This will allow phones to sync CFWD and DND over SIP.

A few things need to be configured to enable this feature and restart freeswitch:

Uncomment this line in lua.conf.xml.

<hook event="PHONE_FEATURE_SUBSCRIBE" subclass="" script="app.lua feature_event"/>

Add to Default Settings:

Category = Device
Subcategory = feature_sync
Type = Boolean
Value = true
Enable Feature Sync on the Device
  • Yealink
    • Web Interface -> Features -> General Information -> Feature Key Synchronization set to Enabled
    • Config Files -> features.feature_key_sync.enable
    • Might be addition settings needed for the latest firmware. I tested with 81.0.110
  • Polycom
    • reg.{$row.line_number}.serverFeatureControl.cf=”1”
    • reg.{$row.line_number}.serverFeatureControl.dnd=”1”
  • Cisco SPA

Conference

Conferences is used to setup conference rooms with a name, description, and optional pin number.

Note

For advanced conferencing use Apps -> Conference Center

_images/fusionpbx_conferences.jpg

Conference Settings

_images/fusionpbx_conference_add.jpg
  • Name: Name for the conference.
  • Extension: The number for the extension the user will dial.(Be sure it doesn’t exist before creating it.)
  • Pin Number: If you want to add a layer of security to enter the conference.
  • Profile:
    • Default- The default audio quality rate and video.
    • wait-mod- Wait Mod setting.
    • wideband- Wideband audio quality rate and video.
    • ultra-wideband- Ultra wideband quality rate and video.
    • cdquality- CD Quality rate and video.
    • page- Page setting.
  • Flags: mute|deaf|waste|moderator (Other values are available also)
  • Order: The order of the conference.
  • Enabled: If the conference is enabled.
  • Description: A way to organize what the conference purpose is.

Enable Conferences

By default Conferences use to be hidden from the menu.

  • To add Conferences to the menu goto Advanced > Menu Manager and click the pencil edit icon on the right
  • Then click the pencil edit icon on the right of Conferences
_images/fusionpbx_conferences1.jpg
  • Select from the Groups dropdown list superadmin and click add then save
_images/fusionpbx_conferences2.jpg

Conference Center

Conference Centers are a group of conference rooms. They can be organized by cost center, geographically, or other criteria.

_images/fusionpbx_conference_center.jpg
  • To Acess Conference Center goto Apps > Conference Center
  • To view rooms click the ROOMS at the top right.

Note

For basic conferencing use Apps -> Conferences

Conference Center Options

_images/fusionpbx_conference_center_add.jpg
  • Name: Name of the Conference Center.
  • Extension: Extension of the Conference Center. (Be sure to not use an extension already in use)
  • Greeting: Choose a greeting to play.
  • PIN Length: Add a layer of security for entering the Conference Center.
  • Enabled: Enable or disable the Conference Center.
  • Description: A way to organize what the Conference Center is for.

Conference Center Rooms

Apps > Conference Center > Click Rooms at the top right. This will take you to the Conference Center Rooms. From here you can

  • Create a Room
  • Edit a Room
_images/fusionpbx_conference_center_rooms.jpg
Conference Center Rooms Settings
_images/fusionpbx_conference_center_rooms_settings.jpg

Conference Controls

Call controls enable ability to assign digits to actions. They can be used to mute, unmute, or other actions during the conference call.

_images/fusionpbx_conference_controls.jpg
  • Click the edit icon on the right to adjust the control
  • Click the plus to create a new control set

Default Conference Control

_images/fusionpbx_conference_controls1.jpg

Conference Profiles

A group of conference parameters saved together as a profile.

_images/fusionpbx_conference_profiles.jpg
  • Click the edit icon on the right to adjust the profile
  • Click the plus to create a new profile

Default Profile

_images/fusionpbx_conference_profiles1.jpg
  • cdr-log-dir: Set as auto. Could be set manually and is enabled.
  • domain: enabled.
  • rate: The rate in kHz. 8000kHz and is enabled.
  • interval: 20 is the default.
  • energy-level: 15 is the default.
  • auto-gain-level: 0 is the default.
  • caller-controls: default is the default.
  • moderator-controls: moderator is the default.
  • muted-sound: conference/conf-muted.wav is the default.
  • unmuted-sound: conference/conf-unmuted.wav is the default.
  • alone-sound: conference/conf-alone.wav is the default.
  • moh-sound: local_stream://default is the default.
  • enter-sound: tone_stream://%(200,0,500,600,700) is the default.
  • exit-sound: tone_stream://%(500,0,300,200,100,50,25) is the default.
  • kicked-sound: conference/conf-kicked.wav is the default.
  • locked-sound: conference/conf-locked.wav is the default.
  • is-locked-sound: conference/conf-is-locked.wav is the default.
  • is-unlocked-sound: conference/conf-is-unlocked.wav is the default.
  • pin-sound: conference/conf-pin.wav is the default.
  • bad-pin-sound: conference/conf-bad-pin.wav is the default.
  • caller-id-name:
  • caller-id-number:
  • comfort-noise: true is the default.

Contacts

Contacts is a list of individuals and organizations.

_images/fusionpbx_contacts.jpg
  • To create a contact click the plus and to edit a contact click the pencil icon on the right.
  • Fill out the fields with pertinent information and click save.
  • Users- Select the users that are allowed to view the contact
  • Groups- Select the group that are allowed access to the contact.
_images/fusionpbx_contacts1.jpg
  • Go back into the contact to fill out more information that wasn’t available when you first created the contact.
_images/fusionpbx_contacts2.jpg
  • To generate a QR code click the QR CODE button at the top right
_images/fusionpbx_qr_code.jpg

Fax Server

To receive a FAX setup a fax extension and then direct the incoming to it. Click here for the Youtube video

_images/fusionpbx_fax.jpg
  • New: Create a new fax to send.
  • Inbox: Faxes received.
  • Sent: Faxes sent.
  • Log: Sucessful and failed attempts for both incoming and outgoing.
  • Active: Shows the faxes in queue.

Fax Server Settings

There are more settings for fax under Advanced > Default Settings then fax category.

  • To create a fax server goto App > Fax Server. Click the + on the right.
    • Leave the Destination Number blank or faxing wont work.
  • Destination Number is used in the Fax Server Dial Plan and is set based on the fax server internal extension number.
  • Define the fields, the ones in bold are required. It is a good idea to organize so define the name thoughtfully.
  • The extension you must use one that is not allready created.
  • Account Code should autofill. Again, leave the Destination Number blank.
  • A prefix can be defined when sending a fax.
  • Email is for inbound faxes and will be on the server and sent to the defines email.
  • Define the Caller ID Name and Number.
  • Leave the Forward Number and Greeting blank for normal settings.
  • Number of channels define with a numerical value or keep blank for a default value.
  • Keep organized by adding a Description.
_images/fusionpbx_fax5.jpg

New

To send a fax, the items in bold are required. To send a proper fax it is best to fill out all fields and attach any documents. Keep in mind that the upload max MB is limited by Nginx and PHP config files.

_images/fusionpbx_fax1.jpg

Inbox

Click PDF to view the fax or right click on PDF and left click on Save Link As. If you defined and email address in the email field you will receive the fax also to that email address.

_images/fusionpbx_fax4.jpg

Sent

Click PDF to view the fax or right click on PDF and left click on Save Link As.

_images/fusionpbx_fax3.jpg

Fax ATA

To connect to a fax machine with an ATA you will most likely need to adjust settings in the ATA web interface and in FusionPBX.

Create an extension for the FAX machine. You can optionally set bypass media to true under advanced in the extension settings.

FAX Default Settings

Menu -> Advanced -> Default Settings then category Fax

  • Variables are used as defaults for the dialplan for sending and receiving faxes
_images/fax_variables.jpg
  • fax_enable_t38_request=false (Can be true or false)
  • ignore_early_media=true (Can be true or false)
  • Some carriers it’s better for fax_enable_t38_request=true and for some its better for it to be false.
  • It’s best not to make an assumption and to do testing with different settings to get the best results for your particular carrier.
  • The variable fax_enable_t38_request=false will send a T38 reinvite when a fax tone is detected. In some cases the re-invite always fails for some carriers which is why it is default to false.
Troubleshooting Tips

Faxing will fail at times. Fax Server should automatically try different methods for sending. There are different combinations like;

  • With T-38 on/off
  • ECC on/off
  • Sending a wav file
  • Send a fax to HP faxback. This will test sending and receiving 1-888-473-2963
  • Test sending with Faxtoy.net This will display what is faxed on their website. 1-855-330-1239 or 1-213-294-2943
  • Turn on verbose log in FreeSWITCH fax.conf.xml
    • From your FusionPBX installation go to ADVANCED > XML Editor and a new window will open.
    • Choose autoload_configs folder from the list, then choose fax.conf.xml.
    • In fax.conf.xml there is an option that by default sets a variable called verbose = false. If you change this to true you get more logging details as the fax is actually received, such as the quality of the connection etc.
    • You can see these details when you run the freeswitch command line ie. fs_cli
Command Line Fax Statistics

Grep from ssh or console access your freeswitch.log files for FAX_RETRY_STATS to start keeping track of success/failure. Examples

Here’s how you can get some totals.

Total:

cat freeswitch.log |grep FAX_RETRY_STATS |wc -l

Success:

cat freeswitch.log |grep FAX_RETRY_STATS |grep SUCCESS |wc -l

Failures:

cat freeswitch.log |grep FAX_RETRY_STATS |grep FAIL |wc -l

Follow Me

Define alternate inbound call handling for the following extensions.

_images/fusionpbx_follow_me.jpg
  • Call Forward- (Disabled or Enabled) Input the destination number
  • On Busy- (Disabled or Enabled) If enabled, it overrides the value of voicemail enabling in extension
  • No Answer- (Disabled or Enabled) If enabled, it overrides the value of voicemail enabling in extension
  • Not Registered- (Disabled or Enabled) If endpoint is not reachable, forward to this destination before going to voicemail
  • Follow Me- (Disabled or Enabled)
  • Destinations- Can set Delay, Timeout and Prompt to accept the call.
  • Ignore Busy- (Disabled or Enabled)
  • Do Not Disturbe- (Disabled or Enabled)

This example has both the extension 1301 itself and and external number to call. If you don’t put the extension itself the extension wont ring when in Follow Me. This is due to the flexible nature of FusionPBX where if you didn’t want that extension to ring like if you were out of the office on a business trip.

_images/fusionpbx_follow_me1.jpg

Follow Me Default Settings

Click the link above for Follow Me default settings.

GS Wave

Grandstream Wave is a soft phone for smart phones or tablets. It can be configured easily with a QR code provided in your FusionPBX installation.

  • To use it download and install Grandstream Wave for your mobile device.
  • Start the Grandstream Wave application on your mobile device.
  • Then go to the Grandstream Wave Account Settings and press the plus+ to add a new account.
  • Press on UCM Account (Scan QR Code) and then select the extension and scan the QR code.
_images/fusionpbx_applications_gs_wave.jpg

You can choose any extension to provision the Grandstream Wave. Even If the extension is assigned to a desk phone. Just be sure to enable multiple registrations.

_images/fusionpbx_applications_gs_wave1.jpg

Note

Be sure to assign a user to an extension for this application to be fully functional. This is a new app starting with master branch version 4.5

IVR Menu

Welcome to the adding IVR section. Here you will find how to add and edit IVR’s.

_images/fusionpbx_ivr1.jpg
  • Options in bold are mandatory.
  • Name: Enter a name for the IVR menu
  • Extension: Enter the extension number (This must a new extension that isn’t allready created)
  • Greet Long: The long greeting when entering the menu.
  • Greet Short: The short greeting is played when returning to the menu.
  • Options: Define caller options for the IVR menu.
  • Timeout: The number of milliseconds to wait after playing the greeting or the confirm macro.
  • Exit Action: Select the exit action to be performed if the ivr exists.
  • Direct Dial: Define whether the callers can dial directly to registered extensions.
  • Ring Back: Defines what the caller will hear while the destination is being called.
  • Caller ID Name Prefix: Set a prefix on the caller ID name.
  • Enabled: set the status of the IVR Menu.
_images/fusionpbx_ivr2.jpg

You can get very creative with IVR’s and are almost limitless in possibilities. In the basic example below we;

  • Name the IVR “IVR Main”
  • Extension “200”
  • Greet Long a phrase that was made from the phrase section under apps
  • Number entry in options, choose an extension for Destination and descriptions ie sales, billing, tech support, and after hours. timeout 3000 milliseconds
  • Exit Action to the extension 109 (after hours)
  • Direct Dial to False and Ring back to Default.
_images/fusionpbx_ivr3.jpg

You now have a list of IVR’s to go back to and edit or delete as needed.

_images/fusionpbx_ivr4.jpg

IVR Default Settings

Click the link above for IVR default settings.

Operator Panel

Operator Panel is a simple and easy way to use the FusionPBX web interface to:

  • Make calls from.
  • See who is on a call.
  • Eavesdrop on a call.
  • Hangup your own call.
  • Drag and drop blind transfer an active call.
  • Drag and drop calling to other users.
  • Login and out of queues and call center.

You can see the status of other users also depending on what permissions are set to the user.

_images/fusionpbx_operator_panel.jpg

Note

Make sure in Accounts > Extensions that the extension is assigned to the user. This will enable Operator Panel for that user.

Operator Panel Status

  • Available: The user will receive a call.
  • On Break: The user won’t receive a call but can still receive a call from other users that directly call.
  • Do Not Disturb: The user won’t receive any calls.
  • Logged Out: The user won’t receive any calls as they are logged out.

Phrases

Create phrases of audio files to be played in sequence.

_images/fusionpbx_phrases.jpg
  • Click the plus on the right to create a phrase and the pencil icon to edit a phrase
_images/fusionpbx_applications_phrase.jpg

Music on Hold

Music on hold can be in WAV or MP3 format. To play an MP3 file you must have mod_shout enabled on the ‘Modules’ tab. You can adjust the volume of the MP3 audio from the ‘Settings’ tab. For best performance upload 16 bit, 8/16/32/48 kHz mono WAV files.

_images/fusionpbx_moh.jpg
  • Click the edit pencil on the right to customize music on hold options. This can be done on each kHz group.
_images/fusionpbx_moh1.jpg
  • Name: Choose a name. (default is needed for the defauly Music on Hold.)
  • Path: Path to where the music is.
  • Shuffle: True or False (If true and multiple music files will shuffle the play order.)
  • Sampling: The rate the music is encoded in.
  • Channels: Mono or Stereo.
  • Interval: Silence between files playing in milliseconds.
  • Timer Name: Best to keep as soft.
  • Chime File: The file you want to “chime in” while Music on Hold is playing.
  • Chime Frequency: Seconds between each “chime in”.
  • Chime Maximum: Max number attempts to “chime in”.
  • Domain: Select Global for all domains or the specific domain for only that domain.

Music on Hold Tips

  • When a new music on hold category mod_local_stream will be restarted. If it is busy then it will not restart automatically. A manual restart of the module is required when it is not in use. The module can be restarted from the Menu -> Advanced -> Modules or from the console and fs_cli with following command.
reload mod_local_stream
  • Each music on hold category is given a name. If the domain is set to global the name will be the name in the example below the protocol that is used is local_stream and the music on hold category is default and domain is set to global.
local_stream://default
  • It is possible that a domain or tenant can have its own category of music. In this example the name is ‘custom’ and the domain was assigned automatically to the current domain.
local_stream://domain_name/custom

Queues

Queues are used to setup waiting lines for callers. Also known as FIFO Queues.

The Queues feature is rarely used for call center type work. When needed, Call Center is usually used instead.

_images/fusionpbx_queue.jpg _images/fusionpbx_queue1.jpg

Recordings

Dial *732 to create a recording, or (for best results) upload a 16bit 8khz/16khz mono WAV file. Click here for the youtube video.

To view and set the pin number goto Dialplan > Dialplan Manager > Click on Recordings > pin_number=8675309 at the bottom.

Note

Pin number is recomended but can be left empty if no pin number is desired then pin_number=

Create a Recording

  1. Dial *732 and wait for the voice prompt
  2. Enter the password (pin_number) followed by the pound sign# Enter at least a 3 digit number. This will label the recording file. (recording100.wav)
  3. start talking to make the recording after the voice prompt and press the pound key #
  4. Press 1 to accept the recording then hang up or press 2 to start over.
_images/fusionpbx_recordings1.jpg

Edit Recording

  1. Click the edit pencil icon.
  2. Rename as needed.
  3. Click save to save the changes.
_images/fusionpbx_applications_recording_edit.jpg

Applying Recordings

Once you have a recording made you can use the recordings in different area’s of FusionPBX. Custom IVR’s and phrases would be the typical uses.

Recordings Default Settings

Click the link above for Recordings default settings.

Ring Groups


A ring group is a set of destinations that can be called with a ring strategy.

To add a ring group click the plus. Click for the youtube video .

_images/fusionpbx_ring_group.jpg
  • Name A meaningful name for this ring group. This name is used in th Destination select list.

  • Extension The extension number for this ring group.

  • Greeting Play a sound file upon calling the Ring Group extension.

  • Strategy The selectable way in which the destinations are being used.

    • Simultaneous Rings all destinations. All destination share the same thread.
    • Sequence Calls destinations in sequence where order that is lower goes first.
    • Enterprise Ring all destinations. Each destination uses its own thread.
    • Rollover Calls destinations in sequence and skips busy destinations.
    • Random A random destination will ring.
  • Destinations The extensions that this ring group applies to.

  • Prompt Where you determine if the call must have a dial to confirm before a pickup event.

  • Caller ID Name Prefix The string that is added to the caller ID when it displays on the ringing extension.

  • Caller ID Number Prefix The Number that is added to the caller ID when it displays on the ringing extension.

  • Ring Back What the caller hears when they are waiting for the Destinations to answer. (ex. Music on Hold, us-ring)

  • Context The context defaults to the domain name.

_images/fusionpbx_applications_ring_group.jpg

Ring Group Example

In our example we will have 4 extensions all ring at the same time until one of them pick up first. Click the + to create a ring group. Fill in the fields that are in bold. In the Extension box type a number that is NOT already created. This new extention won’t be in the extension list. The strategy will be Simultaneous. Enter in the destination the 4 extensions 1001, 1002, 1003, 1004.

_images/fusionpbx_ring_group2.jpg

Streams

Define details for streaming audio.

_images/fusionpbx_streams.jpg
  • Make sure mod_shout is installed and is started.
  • Have a shoutcast url ready to use. (shout://domain.tld/path/to/)
  • To add a stream click the plus icon on the right
  • Edit the fields:
    • Name: Can be anything
    • Location: Must start with shout://
    • Enabled: If you want the stream enabled
    • Domain: Choose a domain that will only have the stream. Choose Global for all domains
    • Description: To help organize ;-)
_images/fusionpbx_streams1.jpg

Note

Editing a stream path will result in having to update anything that is using the stream. For example, if you have extension 500 using stream “Local Weather” and you edit the shout:// path then you will have to go back to extension 500 and reset the music on hold for extension 500. This is by design.

Warning

Please be aware of your countries copyright laws for streaming the content you are going to stream.

Time Conditions

Dynamically route calls to an IVR menu, external numbers, scripts, or other destinations based on time conditions. Fields in bold are mandatory.

  • Name Name of the Time Condition.
  • Extension Define an extension number that is NOT allready created.
  • Presets US Holiday presets.
  • Alternate Destination If the condition doesnt match the call will goto the defined alternate destination.
  • Order Changes the order of which condition is evaluated first.
  • Enabled If the ring group is enabled.
_images/fusionpbx_time_conditions.jpg

Time Conditions Example

In our example we have an employee that will receive calls during a set time range and set days. Below is what the settings look like for Monday through Friday at 5:00pm to 11:00pm. If the employee doesnt answer the call will be directed to the Timeout Destination. Label the Name as Oncall and invent the Extension as 10011. In the Settings choose from the dropdown lists for Day of Week for the condition, Monday for the Value and Friday for the Range. Next set of dropdown list choose Time of Day for the condition, 5:00 PM for the value and 11:00 PM for the Range. If other options are needed just click the + to the right of Range.

_images/fusionpbx_time_conditions1.jpg

The next dropdown choose the extension where the call is intended for. If the call is outside the date and time specified the call will goto the Alternate Destination dropdown. Be sure Enabled is set True and click save.

_images/fusionpbx_time_conditions2.jpg

Conditions

The most common conditions to use are Day of Week and Time of Day.

Time of Day

  • Is a select list of every minute for the full 24 hour period of time.

Hour of Day

  • Another alternative the Hour of Days. If you set a range of 9 - 4 it will include all of 4 until it changes to 5.

Day of Week

The day of week condition each day of the week is represented by a number. A valid range is from low to high. A valid range is like Monday to Friday (2-6).

  • 1 Sunday
  • 2 Monday
  • 3 Tuesday
  • 4 Wednesday
  • 5 Thursday
  • 6 Friday
  • 7 Saturday

An example of an invalid range would be Saturday to Sunday (7-1).

Time Conditions Default Settings

Click the link above for Time Conditions default settings.

Voicemail

To edit voicemail settings click the pencil edit icon on the right of the extension number.

_images/fusionpbx_voicemail.jpg

Here you can edit voicemail settings.

  • Play Tutorial- Play the voicemail tutorial after the next voicemail login
  • Greeting- When you dial *97, record a greeting and set a number you can choose which greeting to use
  • Alternate Greet ID- An alternative greet id used in the default greeting
  • Options- Define caller options for the voicemail greeting
  • Mail to- have voicemails emailed to this address
  • Voicemail File- Select a listening option to include with the email notification
  • Keep Local- Choose whether to keep the voicemail in the system after sending the email notification
  • Forward Destinations- Forward voicemail messages to additional destinations
  • Enabled- Enable or disable the voicemail box
_images/fusionpbx_voicemail2.jpg

Note

Starting version 4.2 remote access to voicemail by interrupting the greeting message by pressing “*” and entering the password is disabled by default.

To enable remote access to voicemail

  1. Go to your Fusionpbx installation menu.
  2. Advanced.
  3. Default Settings.
  4. Voicemail category.
  5. Enable and set true remote_access.

Voicemail Options

To access an extensions voicemail away from the extension.

  • Dial the extension and interupt the greeting with the *star key.
*97 To access that extensions voicemail from the extension or the voicemail button
*98 To access any extensions voicemail
*99[ext] To access a specific extension voicemail
  Main Menu
press 5 For advanced options
  Advanced Options
press 1 Record a greeting
press 2 Choose a greeting
press 3 Record name
press 6 Change password
press 0 For main menu
Email Setup/Default Settings

Click the link above for setting up email server settings. These are the settings needed to enable your FusionPBX installation to be able to send email notifications.

Voicemail Default Settings

Voicemail default settings gives the options to adjust voicemail settings on your FusionPBX installation globally.

Variables

These variables can be set in advanced -> variables or in the dialplan.

Name Value
vm_say_date_time true or false
skip_greeting true or false
skip_instructions true or false
voicemail_greeting_number 0-9
vm_disk_quota 0-3600 seconds
vm_message_ext wav or mp3
voicemail_authorized true or false
vm_say_caller_id_number true or false
vm_say_date_time true or false

Wav file is the default voicemail message file type. MP3 requires mod_shout to be installed and running.

Not Found Message

When an extension is unavailable and no voicemail is configured, there is an option to play a message to the caller alerting them to this.

To enable/disable this, change the option for the not_found_message setting in Advanced > Default Settings > Voicemail category to suit your preference.

Please note that enabling this option means that the call must be answered in order to play the message to the caller and so the call will complete with a 200 OK rather than a 480 Unavailable or 486 Busy. In some jurisdictions this could potentially be illegal as it turns an otherwise toll free call into a chargeable one.

Voicemail Transcription


FusionPBX supports Voicemail Transcription, where emails will include a transcribed version of the voicemail the email was sent in regards to. To configure this feature, see applications/voicemail_transcription.rst.

Status

Status

In the Status menu you have the options for Active Call Center, Active Calls, Active Conferences, Active Queues, Agent Status, CDR Statistics, Emails, Extension Summary, Log Viewer, Registrations, Services, SIP Status, System Status and Traffic Graph.

Active Call Center

Select a Call Center Queue from the list below to view its activity.

_images/fusionpbx_active_call_center.jpg

From here you can view status, evesdrop on the call, transfer the call or click to call an available agent.

_images/fusionpbx_active_call_center_status.jpg

Click to learn more about Call Center. Applications > Call Center

Active Calls

Use this to monitor and interact with the active calls.

_images/fusionpbx_active_calls.jpg

Here you can view the sip profile used, time the call was created, number, cid number, destination, application, Codecs used, and if the call is secure (encrypted)

  • Click the X to end the call
  • Click the Show All button to show calls in all domains.

Active Conferences

List all the conferences that are currently active with one or more members.

_images/fusionpbx_active_conferences.jpg
  • Click view to view the active conference.
_images/fusionpbx_status_interactive_conference.jpg
  • Red ball icon: If illuminated the conference is being recorded.
  • Lock: Can lock the conference from anyone else joining.
  • Unmute All: Unmute all the members.
  • End Conference: End the conference.
  • CID Name: Caller ID Name
  • CID Number: Caller ID Number
  • Capabilities: Icons show what capabilities each member have like hear/mute, talking, and video.
  • Joined: How long ago the member joined.
  • Quiet: How long since the member was talking last.
  • Has Floor: Who is currently talking.
  • Mute: Mute a member.
  • Dead: Make it so the member can’t hear what is being said in the conference.
  • Kick: Kick the member from the conference.

Active Queues

Queues feature generates a dialplan that uses mod_fifo. FIFO stands for ‘first in first out’ in other words a queue.

Agent Status

List all the call center agents with the option to change the status of one or more agents.

_images/fusionpbx_agent_status.jpg

CDR Statistics

Call Detail Records Statics summarize the call information.

_images/fusionpbx_call_detail_record_statistics.jpg _images/fusionpbx_call_detail_record_statistics1.jpg

Definitions

  • Hours: Specific hour in that day.
  • Date: Specific date in that month.
  • Time: Specific time in that day.
  • Volume: Number of calls.
  • Minutes: Specific number of minutes.
  • Calls Per Minute: Specific number of calls per minute.
  • Missed: Specific number of missed calls.
  • ASR: The answer to seizure ratio. Which is how many calls where answered versus not answered.
  • Aloc: ALOC is the average length of call.
  • Days: Specific day in that month.

Emails

Manage failed email messages. If for some reason the message doesn’t get sent they will sit in a queue. You can view, download or resend each message.

_images/fusionpbx_status_email.jpg
  • Sent- Date and time last attempt to email was made
  • Type- If the email was a missed call or voicemail
  • Status- Status of the email
  • Message- View, Download or Resend the email
  • Reference- CDR information
  • Eye icon- More details about the email
  • X icon- Deletes the email

Extension Summary

Summary of extension activity per domain such as misssed calls, answered calls, no answer, inbound duration, outbound duration, number of outboud calls, number of inbound calls and Average length of Call (ALOC). The summarized information can be downloaded as a CSV file.

_images/fusionpbx_extension_summary.jpg

Definitions

  • Extension: The extension number.
  • Number Alias: Alias name for the extension number.
  • Missed: Number of missed calls.
  • No Answer: Number of calls not answered.
  • Busy: Number of calss not answered wile busy.
  • ALOC: The average length of call.
  • Inbound Calls: Number of calls in.
  • Inbound Duriation: Number of call minutes in.
  • Outbound Calls: Number of calls out.
  • Outbound Duriation: Number of call minutes out.

Log Viewer

View recent PBX activity and option to download the logs.

_images/fusionpbx_status_log_viewer.jpg
  • Filter- Filter by specfic input
  • Show Line Numbers- Shows the line numbers on the left side if checked
  • Sort Decending- Sorts by decending
  • Display- The ammount of log to display
  • Reload Button- Reloads the log with filter, show line numbers, sort decending and display KB values
  • Download- Downloads the log

Registrations

View the devices that are registered. This will show User, Agent, IP, Port Number, Hostname and Status. You can also UNREGISTER, PROVISION and REBOOT supported devices from here.

_images/fusionpbx_status_registrations.jpg

Services

Shows a list of processes, the status of the process and provides control to start and stop the process.

_images/fusionpbx_services.jpg

Click the plus on the right to add a service.

_images/fusionpbx_services_add.jpg

SIP Status

This will show sofia status of internal, internal-ipv6, external, and external-ipv6 profiles.

With profiles you can see

  • REGISTRATIONS
  • START/RESTART/RESCAN/FLUSH REGISTRATIONS
  • You can also FLUSH CACHE
  • RELOAD ACL
  • RELOAD XML and REFRESH
  • View UP time, sessions since startup, max sessions, and current stack size/max.
_images/fusionpbx_status_sip_status.jpg

System Status

System Information, FusionPBX Version, Git Version, Switch Version, Memory Information, CPU Information, Hard Drive Information and Memcache Information.

_images/fusionpbx_system_status_information.jpg _images/fusionpbx_system_status_operating_system_information.jpg _images/fusionpbx_system_status_cpu_status.jpg _images/fusionpbx_system_status_drive_information.jpg _images/fusionpbx_system_status_memcache_information.jpg

Traffic Graph

Scalable Vector Graphics (SVG) support in your browser is required to view the traffic graph.

_images/fusionpbx_traffic_graph.jpg

Advanced

Advanced

In the Advanced menu you will find Adminer, Access Controls, App Manager, Backup, Command, Databases, Default Settings, Domains, Grammer Editor, Group Manager, Menu Manager, Modules, Number Translations, PHP Editor, Provision Editor, Sip Profiles, Script Editor, Settings, Transactions, Upgrade, Variables and XML Editor.

Adminer

Adminer provides a way to access FusionPBX database.

  • To enable auto login goto Advanced > Default Settings and change False to True.
_images/fusionpbx_adminer.jpg
  • To access Adminer goto advanced > adminer.

Note

After you enable the Adminer auto login click the ‘Reload’ button > edit autoload > click ‘Save’ for it to update the Adminer menu.

_images/fusionpbx_applications_adminer.jpg

Access Controls

Access control list can allow or deny ranges of IP addresses. There are several purposes for using the ACL.

  • The main purpose is for your carriers ip addresses.
  • Be careful with what and how you use ACL.
  • Most common mistakes result in calls not working between extensions and other undesirable results.
  • Be sure to keep Domains access control to default deny.
  • Do not put your public ip or phone IP addresses in the domains access control list.
  • Don’t supply both the domain and the cidr on the same node.
  • If adding a single IP address to the CIDR field make sure to add /32 on the end of the IP address.

Access Control Example

Goto Advanced > Access Controls. Click the edit icon for domains. At the bottom under nodes click the plus icon.

Type choose allow
CIDR enter the 12.34.56.0/32
Domain (Leave Blank, used for advanced scenarios)
Description (Carrier Name)

Click save

Goto > Status > Sip Status and click reloadacl.

Under Status > log viewer you should notice the ip added. This can be seen also from command line fs_cli by using reloadacl

[NOTICE] switch_utils.c:545 Adding 12.34.56.0/32 (allow) [] to list domains

App Manager

For furture use. Manage the applications that are installed.

_images/fusionpbx_advanced_app_manager.jpg

Command

Provides a conventient way to execute system, PHP, switch and SQL commands.

_images/fusionpbx_command.jpg
  • Click the drop down box on the right to choose from Switch, PHP, Shell and SQL to execute commands.

Databases

Database information. Most FusionPBX installs use Postgresql for FusionPBX and SQLite for the switch. This section is for edge case installs.

_images/fusionpbx_advanced_databases.jpg

Default Settings

Default Settings used for all domains. Branding can be done in this section, adjust or copy settings to specific domains can be done in this section also.

_images/fusionpbx_advanced_default_settings.jpg

Default Settings have several different categories. Click on the category to view more details.

Adminer

FusionPBX menu Advanced > Adminer

FusionPBX version 4.2+ has Adminer disabled by default. To use Adminer, you must enable this option with True.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
auto_login boolean TRUE FALSE This must be enabled in order to use Adminer.

Cache

Option to use file cache for xml and not memcache.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
method text memcache TRUE Cache methods file or memcache.
location text /tmp TRUE Location for the file cache.

Call Center

FusionPBX menu Apps > Call Center

Defaults for the amount of agent rows for Call Center.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
agent_add_rows numeric 5 TRUE Number of default “add” rows.
agent_edit_rows numeric 1 TRUE Number of default “edit” rows.

CDR

FusionPBX menu Apps > CDR

CDR Stat hour limit, call leg, format, limit, http_enabled, archive database, and storage type settings can be set here.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
stat_hours_limit numeric 24 FALSE  
b_leg array outbound FALSE  
b_leg array inbound FALSE  
b_leg array local FALSE  
format text json TRUE  
limit numeric 800 TRUE  
http_enabled boolean TRUE TRUE  
archive_database_driver text pgsql FALSE Archive Database Driver
archive_database_host text   FALSE IP/Hostname of Archive Database
archive_database_password text   FALSE Archive Database Password
archive_database_port text 5432 FALSE Archive Database Port
archive_database_username text   FALSE Archive Database Username
storage text db TRUE  
archive_database boolean FALSE FALSE Enable Dedicated CDR Database Access
archive_database_name text fusionpbx FALSE Archive Database Name

Dashboard

FusionPBX menu Home > Dashboard

Different user level settings that control what is seen and not seen on the dashboard for each user access level.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
admin array voicemail TRUE Enable Dashboard Voicemail block for users in the admin group.
admin array missed TRUE Enable Dashboard Missed Calls block for users in the admin group.
admin array recent TRUE Enable Dashboard Recent Calls block for users in the admin group.
admin array limits FALSE Enable Dashboard Domain Limits block for users in the admin group.
admin array counts TRUE Enable Dashboard Domain Counts block for users in the admin group.
admin array ring_groups TRUE Enable Dashboard Ring Group Forwarding controls for users in the admin group.
admin array caller_id FALSE Enable changing Caller ID name and number.
superadmin array voicemail TRUE Enable Dashboard Voicemail block for users in the superadmin group.
superadmin array missed TRUE Enable Dashboard Missed Calls block for users in the superadmin group.
superadmin array recent TRUE Enable Dashboard Recent Calls block for users in the superadmin group.
superadmin array limits FALSE Enable Dashboard Domain Limits block for users in the superadmin group.
superadmin array counts TRUE Enable Dashboard System Counts block for users in the superadmin group.
superadmin array call_routing TRUE Enable Dashboard Call Routing controls for users in the superadmin group.
superadmin array caller_id FALSE Enable changing Caller ID name and number.
superadmin array ring_groups TRUE Enable Dashboard Ring Group Forwarding controls for users in the superadmin group.
user array voicemail TRUE Enable Dashboard Voicemail block for users in the users group.
user array missed TRUE Enable Dashboard Missed Calls block for users in the users group.
user array recent TRUE Enable Dashboard Recent Calls block for users in the users group.
user array call_routing TRUE Enable Dashboard Call Routing controls for users in the users group.
user array ring_groups TRUE Enable Dashboard Ring Group Forwarding controls for users in the users group.
user array caller_id FALSE Enable changing Caller ID name and number.
admin array call_routing TRUE Enable Dashboard Call Routing controls for users in the admin group.
superadmin array system TRUE Enable Dashboard System Status block for users in the superadmin group.
agent array call_center_agents TRUE Enable Dashboard Call Center Agent Status block for users in the agent group.

Destinations

FusionPBX menu Dialplan > Destinations

Destinations specific defaults.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
dialplan_details boolean TRUE TRUE  

Domains

FusionPBX menu Advanced > Domains

Domain specific defaults.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
dial_string text {sip_invite_domain=${domain_name},leg_timeout=${call_timeout},presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(*/${dialed_user}@${dialed_domain})} TRUE The dial string used
template name default TRUE The template used
menu uuid b4750c3f-2a86-b00d-b7d0-345c14eca286 TRUE The menu uuid
language code en-us TRUE Choose the language
cidr array   FALSE Allow only specific ip addresses access
country code us TRUE The country code
bridge text outbound TRUE outbound,loopback,lcr
paging numeric 100 TRUE Set the maximum number of records displayed per page. (Default: 50)
time_zone name America/Los_Angeles TRUE Time zone used. Follows UNIX format

Editor

FusionPBX menu Advanced > php editor, grammar editor, provision editor, and xml editor.

Editor specific defaults.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
indent_guides boolean FALSE FALSE Set the default visibility of indent guides for Editor.
invisibles boolean FALSE FALSE Set the default state of invisible characters for Editor.
line_numbers boolean FALSE FALSE Set the default visibility of line numbers for Editor.
theme text Cobalt FALSE Set the default theme.
font_size text 14px FALSE Set the default text size for Editor.
live_previews boolean FALSE FALSE Enable or disable live previewing of syntax, text size and theme changes.

Email

This is where you configure email settings to receive email notifications of voicemail, missed calls and fax.

Here are some example settings for some of the most common email providers.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
smtp_host text mail.server.provider.com TRUE email providers server address
smtp_from text emailexample@emailprovider.com TRUE smtp from emaill address
smtp_port numeric 587 TRUE port number of the mail server provider
smtp_from_name text Voicemail TRUE smtp from name
smtp_auth text TRUE TRUE If smtp auth is required
smtp_username text user name TRUE typically the email user name
smtp_password text supersecurepassword! TRUE typically the email password
smtp_secure text tls TRUE tls or ssl depending on the provider.
smtp_validate_certificate boolean TRUE TRUE set to false to ignore SSL certificate warnings e.g. for self-signed certificates
method text smtp TRUE smtp|sendmail|mail|qmail

Error log for failed or sucessfully sent messages.

Fax

Apps > Fax Server

Specific default settings for fax server.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
cover_logo text   TRUE Path to image/logo file displayed in the header of the cover sheet.
allowed_extension array .pdf TRUE Allowed extension to send .pdf
allowed_extension array .tif TRUE Allowed extension to send .tif
allowed_extension array .tiff TRUE Allowed extension to send .tiff
cover_header text   FALSE Default information displayed beneath the logo in the header of the cover sheet.
page_size text letter TRUE Set the default page size of new faxes.
resolution text fine TRUE Set the default transmission quality of new faxes.
variable array fax_enable_t38=true TRUE Enable T.38.
variable array fax_enable_t38_request=false TRUE Send a T38 reinvite when a fax tone is detected.
variable array ignore_early_media=true TRUE Ignore ringing to improve fax success rate.
keep_local boolean TRUE TRUE Keep the file after sending or receiving the fax.
send_mode text queue FALSE Send mode. queue is default.
send_retry_limit numeric 5 TRUE Number of attempts to send fax (count only calls with answer).
send_retry_interval numeric 15 TRUE Delay before we make next call after answered call.
send_no_answer_retry_limit numeric 3 TRUE Number of unanswered attempts in sequence.
send_no_answer_retry_interval numeric 30 TRUE Delay before we make next call after no answered call.
send_no_answer_limit numeric 3 TRUE Giveup reach the destination after this number of sequences.
send_no_answer_interval numeric 300 TRUE Delay before next call sequence.
storage_type text base64 FALSE Store FAX in base64.
smtp_from text   TRUE SMTP from address.
smtp_from_name text   TRUE SMTP from name. Depends on the server, can be full email or everything before the @ sign.
cover_font text times FALSE Font used to generate cover page. Can be full path to .ttf file or font name alredy installed.
cover_footer text   TRUE Notice displayed in the footer of the cover sheet.

Follow Me

FusionPBX menu Apps > Follow Me

Specific defaults for Follow Me.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
max_destinations numeric 5 FALSE Set the maximum number of Follow Me Destinations.
timeout numeric 30 FALSE Set the default Follow Me Timeout value.

Ivr Menu

FusionPBX menu Apps > IVR Menus

Specific default for IVR Menu.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
option_add_rows numeric 5 TRUE Number of default “add” rows.
option_edit_rows numeric 1 TRUE Number of default “edit” rows.

Limit

Limit specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
call_center_queues numeric 3 FALSE Limit used in Call Center Queues.
destinations numeric 3 FALSE Limit used in Destinations.
devices numeric 3 FALSE Limit used in Devices.
extensions numeric 3 FALSE Limit used in Extensions.
gateways numeric 3 FALSE Limit used in Gateways.
ivr_menus numeric 3 FALSE Limit used in IVR Menus.
ring_groups numeric 3 FALSE Limit used in Ring Groups.
users numeric 3 FALSE Limit used in Users.

Login

Login specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
password_reset_key text 9pG6sgerhuh5hetjnsrtjrjrdW FALSE Display a Reset Password link on the login box (requires smtp_host be defined).
domain_name_visible boolean TRUE FALSE Displays a domain input or select box (if domain_name array defined) on the login box.
domain_name array pbx1.yourdomain.com FALSE Domain select option displayed on the login box.
message text Welcome to FusionPBX! TRUE Display a message at login.

Provision

In the Provisioning section, there are a few key options that have to be set in order to turn auto provisioning on.

  • enabled: Must be enabled and set to value true and enabled True. It is disabled by default.
  • http_auth_username: Must be enabled and set to value true and enabled True. It is disabled by default. Be sure to use a strong username.
  • http_auth_password: Must be enabled and set to value true and enabled True. It is disabled by default. Be sure to use a strong password.
Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
fanvil_time_zone text -20 TRUE Time zone ranges
fanvil_time_zone_name text UTC-5 TRUE Time zone name example United States-Eastern Time
fanvil_location numeric 4 TRUE Used with time zone and time zone name
fanvil_realm text enter a value FALSE enter a value
fanvil_greeting text FusionPBX TRUE Name at top left of screen 0~12 characters
fanvil_date_display numeric 3 TRUE value 0-13 Date Format
fanvil_time_display numeric 1 TRUE 1=12hr 0=24hr
fanvil_wifi_enable numeric 0 TRUE 1=on 0=off
fanvil_stun_port numeric 3478 TRUE enter a stun port number
grandstream_call_waiting text 0 TRUE Call Waiting 0=enabled 1=disable
contact_grandstream boolean TRUE FALSE Enable Address Book for Grandstream based on users and groups assigned to contact.
grandstream_gxp_time_zone text auto TRUE See provision profile for codes.
grandstream_check_sip_user_id text 1 TRUE GXV Android phones - fix auto-ring bug.
grandstream_config_server_path text none FALSE mydomain.com/app/provision to Fusionpbx provisioning. Phones will use firmware url if this is set to: none
grandstream_firmware_path text mydomain.com/app/provision TRUE Grandstream firmware and provision.
grandstream_lan_port_vlan text 1 FALSE Default VLAN for phone LAN port.
grandstream_pc_port_vlan text 1 FALSE Default VLAN for phone PC port.
grandstream_ldap_base_dn text dc=mydomain,dc=com FALSE Base DN
grandstream_ldap_display_name text givenName sn title FALSE Which named attributes to display on device. Must be pulled in through grandstream_ldap_name_attr.
grandstream_ldap_mail_attr text mail FALSE Mail attribute returned to phone
grandstream_ldap_mail_filter text (mail=%) FALSE Search filter for mail lookups
grandstream_ldap_name_attr text givenName sn title mail FALSE The NAME attributes returned in the LDAP search result available to device
grandstream_ldap_name_filter text (cn=%) FALSE Search filter for name lookups
grandstream_ldap_number_attr text telephoneNumber mobile homePhone FALSE Number attributes returned to the phone.
grandstream_ldap_number_filter text (|(telephoneNumber=%)(homePhone=%)(moblie=%)) FALSE Search filter for number lookups.
grandstream_ldap_password text super-secret FALSE Ldap bind user password.
grandstream_ldap_server text mydomain.com FALSE Ldap server host name
grandstream_ldap_user_base text ou=users,dc=mydomain,dc=com FALSE Ldap base for users.
grandstream_ldap_username text cn=pbxadmin,dc=mydomain,dc=com FALSE Ldap server bind username
grandstream_phonebook_download_interval text 720 TRUE 0=disabled, 5-720 minutes
grandstream_qos_rtp text 5 FALSE Layer 2 QoS 802.1p Priority Value for RTP media
grandstream_qos_sip text 3 FALSE Layer 2 QoS 802.1p Priority Value for SIP signaling
grandstream_sip_only_known_servers text 1 TRUE GXV Android phones - fix auto-ring bug.
grandstream_stun_server text mydomain.com TRUE Bug in Grandstream where null stun_server defaults to sip server/port
grandstream_validate_incoming_sip text 1 TRUE GXV Android phones - fix auto-ring bug.
grandstream_wallpaper_url text https://mydomain.com/files/wallpaper.jpg FALSE Wallpaper Image JPEG 480x272 16-bit depth dithered
grandstream_bluetooth_power text 1 FALSE Bluetooth Power - 0 - Off, 1 - On, 2 - Off & Hide Menu From LCD
grandstream_bluetooth_handsfree text 1 FALSE Bluetooth Handsfree - 0 - Off, 1 - On
grandstream_auto_attended_transfer text 1 TRUE Attended Transfer Mode. 0 - Static, 1 - Dynamic. Default is 0
grandstream_syslog_server text   FALSE Syslog Server (name of the server, max length is 64 characters)
grandstream_syslog_level text 0 FALSE Syslog Level. 0 - NONE, 1 - DEBUG, 2 - INFO, 3 - WARNING, 4 - ERROR. Default is 0
grandstream_send_sip_log text 0 FALSE Send SIP Log. 0 - Do not send SIP log in Syslog, 1 - Send SIP log in Syslog if configured and set to DEBUG level. Default is 0
grandstream_screensaver text 1 TRUE Screensaver. 0 - No, 1 - Yes, 2 - On if no VPK is active. Default is 1
grandstream_screensaver_source text 0 TRUE Screensaver Source. 0 - Default, 1 - USB, 2 - Download. Default is 0. –for GXP2140/2160/2170 only
grandstream_screensaver_show_date_time text 1 TRUE Show Date and Time. 0 - No, 1 - Yes. Default is 1
grandstream_screensaver_timeout text 5 TRUE Screensaver Timeout. Minutes 3-60
grandstream_screensaver_server_path text   FALSE Screensaver Server Path
grandstream_screensaver_xml_download_interval text 0 FALSE Screensaver XML Download Interval Number: 5 - 720. Default is 0 (disable auto downloading)
grandstream_srtp text 0 TRUE SRTP Mode. 0 - Disabled, 1 - Enabled but not forced, 2 - Enabled and forced, 3 - Optional. Default is 0
htek_time_zone text 18 TRUE Time zone 18=EST 14=CST 6=PST 9,10=MST
htek_dst numeric 1 TRUE DST off=0 on=1 auto=2
htek_date_display_format numeric 1 TRUE Year-Month-Day=0 Month-Day-Year=1 Day-Month-Year=2
htek_time_format numeric 1 TRUE 1=12hr 0=24hr
polycom_digitmap text [*]xxxx|[2-9]11|0T|011xxx.T|[0-1][2-9]xxxxxxxxx|[2-9]xxxxxxxxx|[1-9]xxT|**x.T FALSE  
polycom_call_waiting text 1 TRUE Call Waiting 1=enabled 0=disable
cidr array 209.210.17.193/32 FALSE  
http_auth_username text admin TRUE  
http_auth_type text digest TRUE  
enabled text TRUE TRUE  
cidr array 209.210.16.196/32 FALSE  
auto_insert_enabled boolean TRUE FALSE  
http_auth_disable boolean FALSE FALSE  
admin_name text   FALSE  
admin_password text   FALSE  
path text   FALSE  
outbound_proxy_primary text   FALSE  
outbound_proxy_secondary text   FALSE  
line_sip_port numeric 5060 TRUE  
line_sip_transport text tcp TRUE  
daylight_savings_enabled boolean TRUE TRUE  
daylight_savings_start_month text 3 TRUE  
daylight_savings_start_weekday text 7 TRUE  
daylight_savings_start_time text 2 TRUE  
daylight_savings_stop_weekday text 7 TRUE  
daylight_savings_stop_time text 2 TRUE  
http_domain_filter boolean TRUE TRUE  
contact_users boolean TRUE FALSE  
contact_groups boolean TRUE FALSE  
number_as_presence_id text TRUE TRUE  
ntp_server_primary text pool.ntp.org TRUE  
ntp_server_secondary text 2.us.pool.ntp.org TRUE  
spa_time_zone text GMT-07:00 TRUE  
spa_time_format text 12hr TRUE 12hr,24hr
spa_date_format text day/month TRUE  
spa_back_light_timer text 30 s TRUE  
spa_handle_via_rport text Yes TRUE  
spa_insert_via_rport text Yes TRUE  
spa_call_waiting text Yes TRUE Call Waiting Yes=enabled No=disable
spa_feature_key_sync text No TRUE Feature Key Sync Yes=enabled No=disable
spa_dual_registration text No TRUE Dual Registration Yes=enabled No=disable
spa_register_when_failover text No TRUE Auto register when failover Yes=enabled No=disable
snom_call_waiting text on TRUE Call Waiting on=enabled off=disable visual only and ringer
nway_conference text TRUE FALSE N-Way conferencing for devices supporting network conference uri
vtech_vlan_wan_enable text 0 FALSE Enable vlan=1
vtech_vlan_wan_id text 1 FALSE VLAN ID
vtech_vlan_wan_priority text 0 FALSE VLAN Priority
stun_server text   FALSE STUN server address
stun_port numeric 3478 FALSE STUN server port
aastra_gmt_offset numeric 0 TRUE Aastra timezone offset in minutes (e.g. 300 = GMT-5 = Eastern Standard Time)
aastra_time_format numeric 0 TRUE Aastra clock format
aastra_date_format numeric 0 TRUE Aastra date format
yealink_time_zone text -5 FALSE Time zone ranges from -11 to +12
yealink_time_zone_name text United States-Eastern Time FALSE Time zone name example United States-Mountain Time
yealink_time_format text 1 FALSE 0-12 Hour, 1-24 Hour
yealink_rport boolean 1 TRUE Send the response back to the source it came from.
yealink_session_timer boolean 0 TRUE SIP Session Timers
yealink_retransmission boolean 0 TRUE Retransmission
yealink_subscribe_mwi_to_vm boolean 1 TRUE subscribe to the voicemail MWI 0-Disabled (default), 1-Enabled
yealink_srtp_encryption text 0 TRUE  
yealink_rfc2543_hold numeric 0 FALSE Default 0
yealink_blf_led_mode numeric 0 FALSE The value is 0(default) or 1.
yealink_trust_ctrl numeric 1 TRUE (0-Disabled;1-Enabled)
yealink_direct_ip_call_enable numeric 0 FALSE (0-Disabled;1-Enabled)
yealink_hide_feature_access_codes_enable numeric 0 FALSE (0-Disabled;1-Enabled)
yealink_voice_mail_popup_enable numeric 0 FALSE Display Voice Mail Popup
yealink_missed_call_popup_enable numeric 0 FALSE Display Missed Call Popup
yealink_cid_source numeric 0 TRUE The type of SIP header(s) to carry the caller ID; 0-FROM (default), 1-PAI 2-PAI-FROM, 3-PRID-PAI-FROM, 4-PAI-RPID-FROM, 5-RPID-FROM
yealink_dtmf_hide numeric 1 TRUE 0-Disabled 1-Enabled
yealink_sip_listen_port numeric 5060 FALSE 5060 default
yealink_firmware_url text https://server.yourdomain.com/app/yealink/resources/firmware TRUE Base URL for Yealink Firmware. Download from http://support.yealink.com
yealink_firmware_cp860 text cp860-37.81.0.10.rom TRUE Filename of the CP860 firmware ROM
yealink_firmware_cp960 text cp960-73.80.0.25.rom TRUE Filename of the CP960 firmware ROM
yealink_firmware_t29g text t29g-46.81.0.110.rom TRUE Filename of the T29G firmware ROM
yealink_firmware_t38g text t38g-38.70.0.185.rom TRUE Filename of the T38G firmware ROM
yealink_firmware_t40g text t40g-76.81.0.110.rom TRUE Filename of the T40G firmware ROM
yealink_firmware_t40p text t40p-54.81.0.110.rom TRUE Filename of the T40P firmware ROM
yealink_firmware_t41s text t41s-66.81.0.110.rom TRUE Filename of the T41S firmware ROM
yealink_firmware_t42g text t42g-29.81.0.110.rom TRUE Filename of the T42G firmware ROM
yealink_firmware_t42s text t42s-66.81.0.110.rom TRUE Filename of the T42S firmware ROM
yealink_firmware_t46g text t46g-28.81.0.110.rom TRUE Filename of the T46G firmware ROM
yealink_firmware_t46s text t46s-66.81.0.110.rom TRUE Filename of the T46S firmware ROM
yealink_firmware_t48g text t48g-35.81.0.110.rom TRUE Filename of the T48G firmware ROM
yealink_firmware_t48s text t48s-66.81.0.110.rom TRUE Filename of the T48S firmware ROM
yealink_firmware_t49g text t49g-51.80.0.100.rom TRUE Filename of the T49Gfirmware ROM
yealink_firmware_t54s text T54S(T52S)-70.82.0.20.rom TRUE Firmware tested 2017-11-26
yealink_firmware_t56a text t56a-58.80.0.25.rom TRUE Filename of the T56A firmware ROM
yealink_firmware_t58a text t58a-58.80.0.25.rom TRUE Filename of the T58A firmware ROM
yealink_firmware_t58v text t58v-58.80.0.25.rom TRUE Filename of the T58V firmware ROM
yealink_firmware_vp530 text vp530-23.70.0.40.rom TRUE Filename of the VP530 firmware ROM
yealink_network_vpn_enable boolean 1 FALSE (0-Disabled;1-Enabled)
yealink_ip_address_mode numeric 0 FALSE IP Address mode 0-ipv4, 1-ipv6, 2-ipv4&ipv6
yealink_lldp_enable boolean 0 FALSE LLDP 0-Disabled, 1-Enabled
yealink_cdp_enable boolean 0 FALSE CDP 0-Disabled, 1-Enabled
yealink_overwrite_mode boolean 0 TRUE Overwrite Mode 0-Disabled, 1-Enabled
yealink_dsskey_length numeric 0 TRUE DSS Key Label Length Default-0 Extended-1 Mid Range-2
yealink_feature_key_sync numeric 0 TRUE Enable or disable the feature key synchronization; 0-Disabled (default) 1-Enabled
yealink_predial_autodial boolean 0 TRUE Auto dial after digit timeout 0-Disabled (default), 1-Enabled;
yealink_ring_type text custom.wav FALSE custom ring tone (Busy.wav);
yealink_ringtone_delete text http://localhost/all,delete FALSE http://localhost/all,delete all the customized ring tones
daylight_savings_start_day text 11 TRUE  
daylight_savings_stop_month text 11 TRUE  
daylight_savings_stop_day text 4 TRUE  
http_auth_password array 555 TRUE  
fanvil_stun_server text example.domain.tld FALSE enter a server name or ip
grandstream_dns_mode text 1 FALSE DNS Mode 0=A; 1=SRV; 2=NAPTR/SRV;
grandstream_global_contact_groups text contacts_elementary,contacts_facilities,contacts_other,contacts_secondary FALSE List of contact groups that every phone will have access to. Namely building sites.
grandstream_nat_traversal text 0 TRUE NAT Traversal. 0 - No, 1 - STUN, 2 - keep alive, 3 - UPnP, 4 - Auto, 5 - VPN
grandstream_phonebook_xml_server_path text mydomain.com/app/provision/pb/ TRUE Grandstream Phonebook Server Path - NOTE template adds MAC on the end of this if contact_grandstream is enabled. This also requires nginx rewrite rules for phonebook.xml
polycom_gmt_offset text   FALSE 3600 * GMT offset
polycom_feature_key_sync numeric 0 TRUE Feature Key Sync 1=enabled 0=disable
voicemail_number text *97 TRUE  
line_register_expires numeric 120 TRUE  
contact_extensions boolean TRUE FALSE allow extensions to be provisioned as contacts as in provision templates
spa_dial_plan text (*xxxxxxx|*xxxxxx|*xxxxx|*xxxx|*xxx|*xx*|*x|**xxxxx|**xxxx|**xxx|**xx|[3469]11|0|00|[2-9]xxxxxx|1xxx[2-9]xxxxxxS0|xxxxxxxxxxxx.) TRUE  
spa_secure_call_setting text No TRUE spa secure call No or Yes
snom_time_zone text USA-7 FALSE http://wiki.snom.com/Settings/timezone
yealink_date_format text 3 FALSE 0-WWW MMM DD (default), 1-DD-MMM-YY, 2-YYYY-MM-DD, 3-DD/MM/YYYY, 4-MM/DD/YY, 5-DD MMM YYYY, 6-WWW DD MMM
yealink_outbound_proxy_fallback_interval numeric 3600 FALSE Integer from 0 to 65535
yealink_missed_call_power_led_flash_enable numeric 0 FALSE (0-Disabled:power indicator LED is off;1-Enabled:power indicator LED is solid red)
yealink_firmware_t41p text t41p-36.81.0.110.rom TRUE Filename of the T41P firmware ROM
yealink_firmware_t52s text t52s-70.81.0.10.rom TRUE Filename of the T52Sfirmware ROM
yealink_openvpn_url text hxxps://replace-this.url/openvpn.tar FALSE (URL within 511 characters)
yealink_ringtone_url text custom.wav FALSE Before using this parameter, you should store the desired ring tone (custom.wav) to the provisioning server
yealink_call_waiting text 0 TRUE Call Waiting 1=enabled 0=disable
grandstream_dial_plan text {x+|*x+|*++|park+*x+|flow+*x+} TRUE Define the digits that are allowed to be called.

Recordings

FusionPBX menu Apps > Recordings

Recordings specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
storage_type text base64 FALSE Save recordings in the database in base64 format.

Ring Group

FusionPBX menu Apps > Ring Group

Ring Groups specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
destination_add_rows numeric 5 TRUE Ring Group “add” rows default.
destination_edit_rows numeric 1 TRUE Ring Group “edit” rows default.

Security

Security specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
password_length numeric 15 TRUE Set the required length for the generated passwords.
password_number boolean TRUE FALSE Set whether to require at least one number in passwords.
password_uppercase boolean TRUE FALSE Set whether to require at least one uppercase letter in passwords.
password_special boolean TRUE FALSE Set whether to require at least one special character in passwords.
session_rotate boolean TRUE TRUE Whether to regenerate the session ID.
password_lowercase boolean TRUE TRUE Set whether to require at least one lowecase letter in passwords.
password_strength numeric 4 TRUE Set the default strength for generated passwords. Valid Options: 1 - Numeric Only, 2 - Include Lower Apha, 3 - Include Upper Alpha, 4 - Include Special Characters.

Server

Server specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
temp text /tmp TRUE Set the temp directory.

Switch

Switch specific default settings. These defaults will change depending if you compiled the SWITCH source or used the newest default of packages.

default_setting_subcategory default_setting_name default_setting_value default_setting_enabled default_setting_description
bin dir   TRUE Server path for bin.
base dir /usr TRUE Server path for base.
call_center dir /etc/freeswitch/autoload_configs FALSE Server path for Call Center.
conf dir /etc/freeswitch TRUE Server path for Conf files.
db dir /var/lib/freeswitch/db TRUE Server path for sqlite db files.
dialplan dir /etc/freeswitch/dialplan FALSE Server path for xml dialplan
extensions dir /etc/freeswitch/directory FALSE Server path for extension directory.
grammar dir /usr/share/freeswitch/grammar TRUE Server path for grammar xml.
log dir /var/log/freeswitch TRUE Server path for SWITCH logs.
mod dir /usr/lib/freeswitch/mod TRUE Server path for SWITCH mod’s.
phrases dir /etc/freeswitch/lang TRUE Server path for SWITCH xml phrases.
recordings dir /var/lib/freeswitch/recordings TRUE Server path for SWITCH recordings.
scripts dir /usr/share/freeswitch/scripts TRUE Server path for SWITCH scripts.
sip_profiles dir /etc/freeswitch/sip_profiles FALSE Server path for SWITCH xml sip profiles.
sounds dir /usr/share/freeswitch/sounds TRUE Server path for SWITCH sounds.
storage dir /var/lib/freeswitch/storage TRUE Server path for SWITCH storage.
voicemail dir /var/lib/freeswitch/storage/voicemail TRUE Server path for SWITCH voicemails.

Theme

Theme specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
background_image array /themes/default/images/backgrounds/blue_blur.jpg TRUE  
background_color array #6c89b5 TRUE Set a background color.
background_image_enabled boolean TRUE TRUE Enable use of background images.
logout_icon_visible text FALSE TRUE Set the visibility of the logout icon.
domain_color text #ffffff FALSE Set the text color (and opacity) for domain name.
domain_color_hover text #69e5ff FALSE Set the text hover color (and opacity) for domain name.
logout_icon_color text #ffffff FALSE Set the color (and opacity) for the logout icon (if visible).
logout_icon_color_hover text #69e5ff FALSE Set the hover color (and opacity) for the logout icon (if visible).
menu_main_toggle_color text #ffffff FALSE Set the color (and opacity) for the menu toggle icon (in mobile view).
footer_background_color text rgba(0,0,0,0.1) TRUE Set the background color (and opacity) for the footer bar.
footer_color text rgba(255,255,255,0.1) FALSE Set the text color (and opacity) for the footer bar.
footer_border_radius text 0 0 4px 4px FALSE Set the border radius of the footer bar.
message_default_background_color text #fafafa TRUE Set the background color for the positive (default) message bar.
message_default_color text #666 TRUE Set the text color for the positive (default) message bar text.
message_positive_background_color text #ccffcc TRUE Set the background color for the positive (positive) message bar.
message_positive_color text #004200 TRUE Set the text color for the positive (positive) message bar text.
message_negative_background_color text #ffcdcd TRUE Set the background color for the negative message bar.
message_negative_color text #670000 TRUE Set the text color for the negative message bar text.
message_alert_background_color text #ffe585 TRUE Set the background color for the alert message bar.
message_alert_color text #d66721 TRUE Set the text color for the alert message bar text.
message_opacity text 0.9 TRUE Set the opacity of the message bar (decimal).
body_shadow_color text #000000 TRUE Set the color (and opacity) of the body.
body_border_radius text 4px FALSE Set the border radius of the body.
cache boolean FALSE FALSE Set whether to cache the theme in the session.
logo_align text center FALSE Set the alignment of the header logo (Inline menu only)
menu_main_background_color text #ff0000 FALSE Set a background color (and opacity) of the main menu bar.
menu_main_background_color_hover text #ff0000 FALSE Set a background hover color (and opacity) of the main menu items.
menu_main_icons boolean FALSE FALSE Show icons next to main menu items.
menu_main_background_image text /themes/default/images/background_black.png FALSE Set a background image for the main menu bar.
menu_main_shadow_color text #000000 TRUE Set the shadow color (and opacity) of the main menu bar.
menu_main_text_color text #ffffff FALSE Set the text color of the main menu items.
menu_main_text_color_hover text #69e5ff FALSE Set the text hover color of the main menu items.
menu_main_text_font text Arial FALSE Set the font of the main menu items.
menu_main_text_size text 10.25pt FALSE Set the text size of the main menu items.
menu_main_border_size text 1px FALSE Set the border size of the main menu.
menu_main_border_color text #ffffff FALSE Set the border color (and opacity) of the main menu.
menu_position text top TRUE Set the position of the main menu (Fixed menu only).
menu_style text fixed TRUE Set the style of the main menu.
menu_sub_background_color text #000000 FALSE Set the background color (and opacity) of the sub menus.
menu_sub_icons boolean FALSE TRUE Show indicator icons next to selected sub menu items.
menu_sub_shadow_color text #000000 TRUE Set the shadow color (and opacity) of sub menus.
menu_sub_text_color text #ffffff FALSE Set the text color (and opacity) of sub menu items.
menu_sub_text_color_hover text #69e5ff FALSE Set the hover text color (and opacity) of sub menu items.
menu_sub_text_font text Arial FALSE Set the font of the sub menu items.
menu_sub_text_size text 10pt FALSE Set the text size of the sub menu items.
menu_sub_border_radius text 0 0 4px 4px FALSE Set the border radius of the sub menu.
menu_sub_border_size text 1px FALSE Set the border size of the sub menu.
heading_text_font text arial FALSE Set the font of the page heading text.
heading_text_size text 15px FALSE Set the size of the page heading text.
heading_text_color text #952424 FALSE Set the color (and opacity) of the page heading text.
body_text_font text arial FALSE Set the font of body text.
body_text_color text #5f5f5f FALSE Set the color (and opacity) of the body text.
text_link_color text #004083 FALSE Set the link color (and opacity) of text links outside tables.
text_link_color_hover text #5082ca FALSE Set the hover color (and opacity) of text links outside tables.
table_heading_text_font text arial FALSE Set the text font of table header rows.
table_heading_text_size text 12px FALSE Set the text size of table header rows.
table_heading_background_color text #ffffff FALSE Set the background color (and opacity) of table header rows.
table_heading_border_color text #a4aebf FALSE Set the bottom border color (and opacity) of table header rows.
table_row_text_font text arial FALSE Set the text font of table data rows.
table_row_text_size text 12px FALSE Set the text size of table data rows.
table_row_text_color text #000 FALSE Set the text color (and opacity) of table data rows.
table_row_background_color_dark text #e5e9f0 FALSE Set the darker background color (and opacity) of table data rows.
table_row_background_color_medium text #f0f2f6 FALSE Set the medium background color (and opacity) of table data rows.
table_row_border_color text #c5d1e5 FALSE Set the bottom border (dividing line) color (and opacity) of table data rows.
dashboard_border_color text #dbe0ea FALSE Set the border color (and opacity) of the Dashboard blocks.
dashboard_border_color_hover text #cbd3e1 FALSE Set the border hover color (and opacity) of the Dashboard block.
dashboard_border_radius text 5px FALSE Set the border radius of the Dashboard block.
dashboard_heading_background_color text #8e96a5 FALSE Set the background color (and opacity) of the Dashboard block heading.
dashboard_heading_background_color_hover text #969dab FALSE Set the background hover color (and opacity) of the Dashboard block heading.
dashboard_heading_text_color text #ffffff FALSE Set the color (and opacity) of the Dashboard block heading text.
dashboard_heading_text_color_hover text #ffffff FALSE Set the hover color (and opacity) of the Dashboard block heading text.
dashboard_heading_text_size text 10.5pt FALSE Set the size of the Dashboard block heading text.
dashboard_heading_text_shadow_color text #000000 FALSE Set the shadow color (and opacity) of the Dashboard block heading text.
dashboard_heading_text_shadow_color_hover text #000000 FALSE Set the shadow hover color (and opacity) of the Dashboard block heading text.
dashboard_number_background_color text #a4aebf FALSE Set the background color (and opacity) of the Dashboard block number.
dashboard_number_background_color_hover text #aeb7c5 FALSE Set the background hover color (and opacity) of the Dashboard block number.
dashboard_number_text_color text #ffffff FALSE Set the color (and opacity) of the Dashboard block number.
dashboard_number_text_color_hover text #ffffff FALSE Set the hover color (and opacity) of the Dashboard block number.
dashboard_number_text_font text Calibri, Candara, Segoe, Segoe UI, Optima, Arial, sans-serif FALSE Set the font of the Dashboard block number.
dashboard_number_text_size text 60pt FALSE Set the size of the Dashboard block number.
dashboard_number_text_shadow_color text #737983 FALSE Set the shadow color (and opacity) of the Dashboard block number.
dashboard_number_title_text_color text #ffffff FALSE Set the color (and opacity) of the Dashboard block number title.
dashboard_number_title_text_font text Calibri, Candara, Segoe, Segoe UI, Optima, Arial, sans-serif FALSE Set the font of the Dashboard block number title.
dashboard_number_title_text_size text 14px FALSE Set the size of the Dashboard block number title.
dashboard_number_title_text_shadow_color text #737983 FALSE Set the shadow color (and opacity) of the Dashboard block number title.
dashboard_detail_heading_text_size text 11px FALSE Set the size of the Dashboard block detail header text.
dashboard_detail_row_text_size text 11px FALSE Set the size of the Dashboard block detail row text.
dashboard_detail_shadow_color text #737983 FALSE Set the shadow color of the Dashboard block detail box.
dashboard_detail_background_color_center text #f9fbfe FALSE Set the center gradient color of the Dashboard block detail area.
dashboard_footer_background_color_hover text #ebeef3 FALSE Set the background hover color (and opacity) of the Dashboard block footer bar.
dashboard_footer_dots_color text #a4aebf FALSE Set the color (and opacity) of the Dashboard block footer bar dots.
dashboard_footer_dots_color_hover text #a4aebf FALSE Set the hover color (and opacity) of the Dashboard block footer bar dots.
form_table_label_padding text 7px 8px FALSE Set the padding of the form label cell.
form_table_label_background_color text #e5e9f0 FALSE Set the background color (and opacity) of the form label cell.
form_table_label_border_color text #ffffff FALSE Set the bottom-border color (and opacity) of the form label cell.
form_table_label_border_radius text 4px FALSE Set the border radius of the form label cell.
form_table_label_text_size text 9pt FALSE Set the text size of the form label.
form_table_label_text_font text Arial FALSE Set the text font of the form label.
form_table_label_text_color text #000000 FALSE Set the text color (and opacity) of the form label.
form_table_label_required_border_color text #cbcfd5 FALSE Set the right-border color (and opacity) of the required form label cell.
form_table_label_required_text_color text #000000 FALSE Set the text color (and opacity) of the required form label.
form_table_label_required_text_weight text bold FALSE Set the text weight of the required form label.
form_table_field_padding text 6px FALSE Set the padding of the form field cell.
form_table_field_background_color text #ffffff FALSE Set the background color (and opacity) of the form field cell.
form_table_field_border_color text #e5e9f0 FALSE Set the bottom-border color (and opacity) of the form field cell.
form_table_field_border_radius text 0 FALSE Set the border radius of the form label cell.
form_table_field_text_size text 8pt FALSE Set the size of text in the form field cell.
form_table_field_text_font text Arial FALSE Set the font of text in the form field cell.
form_table_heading_padding text 8px 8px 4px 8px FALSE Set the padding of form column headings.
form_table_row_padding text 3px 0 FALSE Set the padding of form row cells.
form_table_row_text_size text 9pt FALSE Set the size of text in the form rows.
login_background_color array #6c89b5 FALSE Set the background color of the login page.
login_background_color array #144794 FALSE Set a secondary background color of the login page, for a gradient effect.
login_background_image_enabled boolean TRUE FALSE Enable use of background images on the login page.
login_body_background_color text rgba(255,255,255,0.3) TRUE Set the background color for the login box.
login_body_shadow_color text rgba(140,140,140,0.3) TRUE Set the shadow color of the login box.
login_body_padding text 30px FALSE Set the padding of the login box.
login_body_width text 100% FALSE Set the width of the login box.
login_body_border_size text 1px FALSE Set the border size of the login box.
login_body_border_color text #ffffff FALSE Set the border color (and opacity) of the login box.
login_link_text_color text #004083 FALSE Set the color (and opacity) of text links on the login box.
login_link_text_color_hover text #5082ca FALSE Set the hover color (and opacity) of text links on the login box.
login_link_text_size text 11px FALSE Set the size of text links on the login box.
login_link_text_font text Arial FALSE Set the font of text links on the login box.
button_background_color_bottom text #000000 FALSE Set the background bottom color (and opacity) of buttons.
button_background_color_hover text #000000 FALSE Set the background main/top hover color (and opacity) of buttons.
button_background_color_bottom_hover text #000000 FALSE Set the background bottom hover color (and opacity) of buttons.
button_border_size text 1px FALSE Set the border size of buttons.
button_border_color text #242424 FALSE Set the border color (and opacity) of buttons.
button_border_color_hover text #000000 FALSE Set the border hover color (and opacity) of buttons.
button_border_radius text 3px FALSE Set the border radius of buttons.
button_text_size text 11px FALSE Set the size of button text.
button_text_color text #ffffff FALSE Set the color (and opacity) of button text.
button_text_weight text bold FALSE Set the weight of button text.
button_padding text 5px 8px FALSE Set the padding of buttons.
button_height text 28px FALSE Set the height of buttons.
input_border_color text #c0c0c0 FALSE Set the border color (and opacity) of text inputs.
input_border_color_hover text #c0c0c0 FALSE Set the border hover color (and opacity) of text inputs.
input_border_color_focus text #c0c0c0 FALSE Set the border focus color (and opacity) of text inputs.
input_border_size text 1px FALSE Set the border size of text inputs.
input_border_radius text 3px FALSE Set the border radius of text inputs.
input_shadow_inner_color text #cddaf0 TRUE Set the inner shadow color (and opacity) of text inputs.
input_shadow_outer_color text #ffffff FALSE Set the outer shadow color (and opacity) of text inputs.
input_shadow_outer_color_focus text #cddaf0 TRUE Set the outer focus shadow color (and opacity) of text inputs.
input_text_size text 12px FALSE Set the size of text input content.
input_text_font text Arial FALSE Set the font of text input content.
input_text_color text #000000 FALSE Set the color (and opacity) of text input content.
input_text_placeholder_color text #999999 FALSE Set the color (and opacity) of input placeholder text.
login_input_background_color text #ffffff FALSE Set the background color (and opacity) of text inputs on the login box.
login_input_border_color text #c0c0c0 FALSE Set the border color (and opacity) of text inputs on the login box.
login_input_border_color_focus text #c0c0c0 FALSE Set the border focus color (and opacity) of text inputs on the login box.
login_input_border_size text 1px FALSE Set the border size of text inputs on the login box.
login_input_border_radius text 3px FALSE Set the border radius of text inputs on the login box.
login_input_shadow_inner_color text #cddaf0 FALSE Set the inner shadow color (and opacity) of text inputs on the login box.
login_input_shadow_inner_color_focus text #ffffff FALSE Set the inner focus shadow color (and opacity) of text inputs on the login box.
login_input_shadow_outer_color text #ffffff FALSE Set the outer shadow color (and opacity) of text inputs on the login box.
login_input_shadow_outer_color_focus text #cddaf0 FALSE Set the outer focus shadow color (and opacity) of text inputs on the login box.
login_input_text_size text 12px FALSE Set the size of text input content on the login box.
login_input_text_font text Arial FALSE Set the font of text input content on the login box.
login_input_text_placeholder_color text #999999 FALSE Set the color (and opacity) of input placeholder text on the login box.
font_loader text TRUE FALSE Enables the dynamic loading of web fonts (requires an Internet connection).
font_loader_version text 1.6.16 FALSE Set the web font loader version to use - specific (e.g. 1.6.16) or latest in branch (e.g. 1).
font_retrieval text asynchronous FALSE Set the retrieval method for the web font loader (default: synchronous).
font_source_key text   FALSE API key that allows access to the available fonts list.
body_icon_color text rgba(255,255,255,0.25) FALSE Set the color (and opacity) for the icons in the body.
body_icon_color_hover text rgba(255,255,255,0.50) FALSE Set the hover color (and opacity) for the icons in the body.
menu_brand_type text image FALSE  
background_color array #144794 TRUE Set a secondary background color, for a gradient effect.
domain_visible text TRUE TRUE Set the visibility of the name of the domain currently being managed.
menu_main_toggle_color_hover text #69e5ff FALSE Set the hover color (and opacity) for the menu toggle icon (in mobile view).
message_delay text 1.75 TRUE Set the hide delay of the message bar (seconds).
domain_selector_shadow_color text #888888 TRUE Set the shadow color (and opacity) of the domain selector pane.
menu_main_border_radius text 0 0 4px 4px FALSE Set the border radius of the main menu.
menu_sub_background_color_hover text   FALSE Set the hover background color (and opacity) of the sub menu items.
menu_sub_border_color text #ffffff FALSE Set the border color (and opacity) of the sub menu.
body_text_size text 12px FALSE Set the size of the body text.
table_heading_text_color text #3164ad FALSE Set the text color (and opacity) of table header rows.
table_row_background_color_light text #fff FALSE Set the lighter background color (and opacity) of table data rows.
dashboard_heading_text_font text Calibri, Candara, Segoe, Segoe UI, Optima, Arial, sans-serif FALSE Set the font of the Dashboard block heading text.
dashboard_number_text_shadow_color_hover text #737983 FALSE Set the shadow hover color (and opacity) of the Dashboard block number.
dashboard_detail_background_color_edge text #edf1f7 FALSE Set the edge gradient color of the Dashboard block detail area.
dashboard_footer_background_color text #e5e9f0 FALSE Set the background color (and opacity) of the Dashboard block footer bar.
form_table_label_required_background_color text #e5e9f0 FALSE Set the background color of the required form label cell.
form_table_field_text_color text #666666 FALSE Set the color (and opacity) of text in the form field cell.
login_body_border_radius text 4px FALSE Set the border radius of the login box.
button_background_color text #4f4f4f FALSE Set the background main/top color (and opacity) of buttons.
button_text_font text Candara, Calibri, Segoe, Segoe UI, Optima, Arial, sans-serif FALSE Set the font of button text.
button_text_color_hover text #ffffff FALSE Set the hover color (and opacity) of button text.
input_background_color text #ffffff FALSE Set the background color (and opacity) of text inputs.
input_shadow_inner_color_focus text #ffffff FALSE Set the inner focus shadow color (and opacity) of text inputs.
login_input_border_color_hover text #c0c0c0 FALSE Set the border hover color (and opacity) of text inputs on the login box.
login_input_text_color text #000000 FALSE Set the color (and opacity) of text input content on the login box.
body_color text rgba(255,255,255,0.77) TRUE Set then body background color (and opacity) of the content.
background_image array /themes/default/images/backgrounds/yellowstone_3.jpg FALSE  

Time Conditions

FusionPBX menu Apps > Time Conditions

Time Conditions specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
region text usa TRUE What region to use by default when choosing Time Conditions
preset_england array {“new_years_day”:{“mday”:”1”,”mon”:”1”}} TRUE England Holiday
preset_england array {“may_day”:{“mon”:”5”,”mday”:”1-7”,”wday”:”2”}} TRUE England Holiday
preset_england array {“august_bank_holiday”:{“mon”:”8”,”mday”:”25-31”,”wday”:”2”}} TRUE England Holiday
preset_england array {“christmas_day”:{“mday”:”25”,”mon”:”12”}} TRUE England Holiday
preset_england array {“boxing_day”:{“mday”:”26”,”mon”:”12”}} TRUE England Holiday
preset_usa array {“new_years_day”:{“mday”:”1”,”mon”:”1”}} TRUE USA Holiday
preset_usa array {“presidents_day”:{“wday”:”2”,”mon”:”2”,”mday”:”15-21”}} TRUE USA Holiday
preset_usa array {“memorial_day”:{“mday”:”25-31”,”wday”:”2”,”mon”:”5”}} TRUE USA Holiday
preset_usa array {“independence_day”:{“mday”:”4”,”mon”:”7”}} TRUE USA Holiday
preset_usa array {“labor_day”:{“wday”:”2”,”mon”:”9”,”mday”:”1-7”}} TRUE USA Holiday
preset_usa array {“columbus_day”:{“wday”:”2”,”mon”:”10”,”mday”:”8-14”}} TRUE USA Holiday
preset_usa array {“veterans_day”:{“mday”:”11”,”mon”:”11”}} TRUE USA Holiday
preset_usa array {“black_friday”:{“wday”:”6”,”mon”:”11”,”mday”:”23-29”}} TRUE USA Holiday
preset_usa array {“christmas_day”:{“mday”:”25”,”mon”:”12”}} TRUE USA Holiday
preset_canada array {“new_years_day”:{“mday”:”1”,”mon”:”1”}} TRUE Canada Holiday
preset_canada array {“family_day”:{“wday”:”2”,”mon”:”2”,”mday”:”8-14”}} TRUE Canada Holiday
preset_canada array {“victoria_day”:{“wday”:”2”,”mon”:”5”,”mday”:”18-24”}} TRUE Canada Holiday
preset_canada array {“canada_day”:{“mday”:”1”,”mon”:”7”}} TRUE Canada Holiday
preset_canada array {“bc_day”:{“wday”:”2”,”mon”:”8”,”mday”:”1-7”}} TRUE Canada Holiday
preset_canada array {“remembrance_day”:{“mday”:”11”,”mon”:”11”}} TRUE Canada Holiday
preset_canada array {“christmas_day”:{“mday”:”25”,”mon”:”12”}} TRUE Canada Holiday
preset_canada array {“boxing_day”:{“mday”:”26”,”mon”:”12”}} TRUE Canada Holiday
preset_canada array {“labour_day”:{“wday”:”2”,”mon”:”9”,”mday”:”1-7”}} TRUE Canada Holiday
preset_england array {“spring_bank_holiday”:{“mon”:”5”,”mday”:”25-31”,”wday”:”2”}} TRUE England Holiday
preset_usa array {“martin_luther_king_jr_day”:{“wday”:”2”,”mon”:”1”,”mday”:”15-21”}} TRUE USA Holiday
preset_usa array {“thanksgiving_day”:{“wday”:”5”,”mon”:”11”,”mday”:”22-28”}} TRUE USA Holiday
preset_canada array {“thanksgiving_day”:{“wday”:”2”,”mon”:”10”,”mday”:”8-14”}} TRUE Canada Holiday

User

FusionPBX menu Accounts > Users

User specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
password_special boolean FALSE TRUE Set whether to require at least one special character in user passwords.
unique text global FALSE Make all user names unique on all domains.
password_length numeric 10 TRUE The default length of characters in a user password.
password_number boolean TRUE TRUE Set whether to require at least one number in user passwords.
password_lowercase boolean TRUE TRUE Set whether to require at least one lowecase letter in user passwords.
password_uppercase boolean TRUE TRUE Set whether to require at least one uppercase letter in user passwords.

Voicemail

FusionPBX menu Apps > Voicemail

Voicemail specific default settings.

Default Setting Subcategory Default Setting Name Default Setting Value Default Setting Enabled Default Setting Description
voicemail_file text attach TRUE Define whether to attach voicemail files to email notifications, or only include a link.
keep_local boolean TRUE TRUE Define whether to keep voicemail files on the local system after sending attached via email.
storage_type text base64 FALSE Define which storage type (base_64 stores in the database).
message_max_length numeric 300 TRUE Maximum length of a voicemail (in seconds).
password_length numeric 8 TRUE The default length of characters in a voicemail password.
display_domain_name boolean TRUE FALSE Enable display of @domain_name after voicemail_id when rendering emails.
remote_access boolean FALSE TRUE Allow access to the voicemail menu with the correct voicemail password.
message_order text asc TRUE Set the message order to asc or desc.
password_complexity boolean TRUE FALSE Enforce voicemail password complexity.
password_min_length numeric 4 FALSE Minimum voicemail password length.
smtp_from text   TRUE SMTP From: specific to Voicemail.
smtp_from_name text   TRUE SMTP From: Name specific to Voicemail.
not_found_message boolean FALSE TRUE Default for not found message.
greeting_max_length numeric 90 TRUE Maximum length of a voicemail greeting (in seconds).

Domains

Welcome to the adding a domain section. Here you will find how to add a domain so that you can reach the specific tenant from the multi-tenant domain side menu to configure and allow secure administration from the world wide web. Click here for the youtube video

Adding a domain

Control the list of domains to manage.

There are several reasons to create a domain (tenant). One reason would be to organize customers and so customers have a unique login ie superadmin@domain.tld or superadmin@subdomain.domain.tld as the username.

In this example we will create a domain.

Goto advanced then click Domains.

_images/fusionpbx_domain.jpg

Then click the

_images/plus1.png

on the right.

_images/fusionpbx_domain1.jpg

This will bring you to enter domain info. (Be sure to create an “A record” from your domain hosting account)

_images/fusionpbx_domain2.jpg

Click save once entry is complete.

_images/fusionpbx_domain1.jpg

Domain Selection

Changing to a different domain click the stack of three dashes on the top right

_images/fusionpbx_domain5.jpg

A menu will pop open on the right of the screen. Click on the domain that you want to manage. You will always see the domain you are in by looking at the top right beside the three stacked dashes.

_images/fusionpbx_domain6.jpg

Grammar Editor

Web browser based editor.

_images/fusionpbx_grammar_editor.jpg

Group Manager

Permit access levels to different group of users. The group permissions allow customizing permissions for existing groups or custom groups.

_images/fusionpbx_group_manager.jpg
  • superadmin- the global administrator
  • admin- the domain administrator
  • users- the group for regular users

User Manager

Create, edit, remove users.

  • Goto Advanced > Group Manager and click USERS at the top right to create, edit or remove a user.
_images/fusionpbx_click_users.jpg
  • Click the plus at the right to add a user or pencil to edit an existing user.
_images/fusionpbx_users.jpg
  • Fill in the boxes with pertinent information.
  • Group- assign the user to a group. Be wise as to who has access to what.
_images/fusionpbx_add_user.jpg

Modules

Modules extend the features of the system. Use this page to enable or disable modules.

_images/fusionpbx_advanced_modules.jpg

Modules have several different categories.

Applications

Auto

Dialplan Interfaces

Endpoints

Event Handlers

File Format Interfaces

Languages

Loggers

Say

Speech Recognition/Text to Speech

Streams/Files

XML Interfaces

Number Translations

Use this to translate numbers from the original number to a new number using regular expressions.

_images/fusionpbx_advanced_number_translations.jpg
Activating mod-translate:
  • Install the package “freeswitch-mod-translate”. If using Debian Package then use the following command “apt install freeswitch-mod-translate”
  • Configure the module to your likes via the GUI: Advanced -> Number Translations.
  • Activate the module in FusionPBX Advanced -> Modules in the Applications section

The documentation for mod-translate can be found under https://freeswitch.org/confluence/display/FREESWITCH/mod_translate

To use mod-translate to modify inbound calls before they hit the dialplan the following setting for the SIP-profile must be modified:

dialplan “XML” -> dialplan “Translate,XML”

With FreeSwitch 1.8.x it is now possible to specify the translation profile to be used: dialplan “XML” -> dialplan “Translate:my_profile1,XML”

To activate this setting, the SIP-profile needs to be restarted and the cache flushed.

PHP Editor

An online editor for php specific files for FusionPBX.

_images/fusionpbx_advanced_php_editor.jpg

Provision Editor

An online editor for phone provisioning templates specific to different vendors for FusionPBX.

_images/fusionpbx_advanced_provision_editor.jpg

Sip Profiles

  • Advanced -> SIP Profiles
_images/fusionpbx_sip_profiles.jpg

Internal

Internal sip profiles (port 5060/5061) require registration or access controls cidr range to allow the IP address in without SIP authentication. Once the access controls are setup correctly, the carrier will be allowed to send calls to the internal profile.

External

External sip profiles (port 5080-5081) allow anonymous connection to FusionPBX and is optional. External profile is optional when freewitch has a public ip address. Can be useful when setting behind nat. Being anonymous doesn’t mean totally open due to the inbound routes call conditions.(call filtering)

Internal ipv6

Internal ipv6 sip profiles (port 5060/5061) require registration or access controls cidr range to allow the IP address in without SIP authentication. Once the access controls are setup correctly, the carrier will be allowed to send calls to the internal ipv6 profile.

  • If you don’t have ipv6 then the ipv6 profiles should be disabled.
  • Be sure to stop the profile before disabling it. To disable goto Advanced > SIP Profiles and click the pencil edit icon to the right of the profile you want to disable. From the dropdown box select enabled to false.

External ipv6

External ipv6 sip profiles (port 5080-5081) allow anonymous connection to FusionPBX and is optional.

  • If you don’t have ipv6 then the ipv6 profiles should be disabled.
  • Be sure to stop the profile before disabling it. To disable goto Advanced > SIP Profiles and click the pencil edit icon to the right of the profile you want to disable. From the dropdown box select enabled to false.

Scripts Editor

An online editor for script specific files for FusionPBX.

_images/fusionpbx_advanced_script_editor.jpg

Settings

Switch settings for event socket ip address, event socket port, event socket password, xml rpc http port, xml rpc auth realm, xml rpc auth user, xml rpc auth password, mod shout decoder, and mod shout volume.

_images/fusionpbx_advanced_settings.jpg

Transactions

A list of databse changes (transactions) made by all users while logged into FusionPBX. Changes include

_images/fusionpbx_advanced_database_transactions.jpg
  • Domain: The domain the changes occured on.
  • User: The user that was logged in at the time the change was made.
  • Application: The application that was changed.
  • Code: The web server response code.
  • IP Address: the ip the user was logged into at the time the change was made.
  • Change: The type of change that was made.
  • Date: Date the change was made.

Click the edit pencil icon to view more details.

Upgrade

If you are looking to upgrade your current version of FusionPBX to the next release version click here.

The FusionPBX code is constantly evolving.

  • Bug fixes being submitted
  • Additions to improve security
  • Making FusionPBX look nicer
  • More flexible
  • More scalable
  • New features

A complete summary of the changes can be found on the github code page https://github.com/fusionpbx/fusionpbx/commits/master.

Go to the menu then click on Advanced and then Upgrade. This tool allows you to update the source code, update the database structure, restore the default menu and permissions. Click here for the Youtube video.

_images/fusionpbx_upgrade.jpg

Update the source from command line
* cd /var/www/fusionpbx
git pull
chown -R www-data:www-data *
Back to the GUI
*Upgrade Database with advanced -> upgrade schema
*Update permissions
*Update the menu
*Logout and back in

How to Upgrade

_images/fusionpbx_upgrade_green.jpg

To upgrade you will need to get the latest source code. Depending on how extreme the changes have been or the version you currently are on since your last update, you may need to follow version specific upgrade instructions to bring your install up to date.
Step 1: Update FusionPBX Source
1. GUI -> Advanced -> Upgrade (doesn’t update all files)

Used to update FusionPBX to the latest release.

Upgrade the code via Github/GIT

Login into the web interface with a user account assigned to the superadmin group.
Login to the console with either the ssh, the locally.
Backup It’s a good idea to make a backup. If using sqlite, your backup will easily include the SQL database.
mkdir /etc/fusionpbx
mv /var/www/fusionpbx/resources/config.php /etc/fusionpbx
mv /usr/local/freeswitch/scripts/resources/config.lua /etc/fusionpbx
cd /var/www
cp -R fusionpbx fusionpbx_backup
Change the directory''' to the FusionPBX directory
cd /var/www/fusionpbx

Update the source code (example assumes fusionpbx is in /var/www/fusionpbx)

cd /var/www/fusionpbx
git pull
Permissions
Reset the permissions on the fusionpbx directory tree. When you do git pull it sets the permissions on any updated files to match the account that you are running git pull with. If that account is different to the web server account it will result in some files no longer being accessible and a red bar error at the top of the upgrade screen on the GUI. To fix this you should reapply the permissions in fusionpbx and recursively in all directories inside it.

The example assumes the web server runs as user ‘www-data’ and fusionpbx is installed to /var/www/fusionpbx. (chown -Rv Ownername:GroupName /var/www/fusionpbx)
cd /var/www/fusionpbx
chown -R www-data:www-data *
Step 2: Update Freeswitch Scripts
NOTE: As of FusionPBX 3.8.3 (Stable Branch), the scripts should be automatically updated when updating the Source Code, using the Advanced > Upgrade page. Any customized scripts, having the same name as the default scripts, will be overwritten. (An option to disable this default behavior is available using Default Setting: switch > scripts_update > false) Missing scripts will be restored, and any additional files within the scripts folder will remain untouched.
FusionPBX is a fast moving project where features are constantly being added and bugs are being fixed on a daily basis so I would also suggest upgrading the Freeswitch scripts directory as part of any normal upgrade process.

Update Freeswitch

Use github to get the updated files. You have to do this from an empty directory.
cp -R /usr/local/freeswitch/scripts /usr/local/freeswitch/scripts-bak
rm -Rf /usr/local/freeswitch/scripts/
cd /usr/src
git clone https://github.com/fusionpbx/fusionpbx.git
cp -R /var/www/fusionpbx/resources/install/scripts /usr/local/freeswitch
chown -R www-data:www-data /usr/local/freeswitch/scripts
cp -R /usr/local/freeswitch/scripts-bak/resources/config.lua /usr/local/freeswitch/scripts/resources/config.lua

(The last step above is not required if your config.lua file is being stored in a different location, such as the /etc/fusionpbx folder.)

Clean out this scripts directory
An alternative is to remove the Lua scripts. Only do this if you haven’t customized any LUA scripts
cp -R /usr/local/freeswitch/scripts /usr/local/freeswitch/scripts-bak
rm -rf /usr/local/freeswitch/scripts/*
Pull the most recent scripts down
Here you need to go directly to step 3 and make sure you run upgrade schema from the GUI immediately otherwise your calls will not complete.
Restore the config.lua file (IMPORTANT!!)
If your config.lua file was located in scripts/resources/, then you’ll need to restore it (from the backup previously performed) to scripts/resources/config.lua.
Step 3: Upgrade Schema
Many updates have changes to the database and to the Freeswitch scripts. The upgrade_schema script
Upgrade from the GUI
From the GUI, run Advanced -> Upgrade Schema which will add any needed newer tables or columns.
Then run App Defaults. If you removed the scripts on Step 2 then run this twice.
_images/fusionpbx_upgrade_schema_data_types.jpg

Upgrade from the Command Line
An alternative to running upgrade_schema.php from the GUI is to run the upgrade.php from the command line. It was designed to make the upgrade easier. If you did not login when updating the FusionPBX source code then you will need to run the upgrade.php file from the command line. Make sure to use the full path to the PHP file.
As root run the following
cd /var/www/fusionpbx
/usr/bin/php /var/www/fusionpbx/core/upgrade/upgrade.php
If your screen was nicely formatted with a fusionpbx theme, and suddenly now goes to a black and white screen with familiar text but no theme, it is because you were using a theme which no longer exists in the latest version of the code. If this happens to you navigate to:
http://domain_or_ip/mod/users/usersupdate.php
Then scroll down to where it says “Template” and select one of the valid templates from the drop down list. Then press Save. It will be fixed now and you can continue with the remaining steps below.
(Note that any users who have invalid templates selected will also have the same problem you did. You can fix them from the user manager option in the accounts menu)
Step 4: Apply permissions and Restart Freeswitch
Make sure that the freeswitch directory has the correct permissions
chown -Rv www-data:www-data /usr/local/freeswitch/
Restart Freeswitch
systemctl restart freeswitch
Step 5: Menu
Needed if your menu disappeared.
v1 and v2
Now update the menu to the latest version.
http://domain_or_ip/core/menu/menu_restore_default.php
Press ‘Restore Default’ on the top right.
v3
click ‘e’ next to the default menu
click the restore default button.
Step 6: Re-generate Settings
Sometimes variable names changes. In rev 1877 v_config_cli.php variable names changed which caused no fax to email emails or voicemail emails to be sent. Problem was the SMTP details did not exist.
Go to Advanced -> Settings and then click save. This will re-generate v_config_cli.php and any other needs config files.

Move to a different Branch

FusionPBX has a stable and a master(development) branch. You can switch from stable to master but not recomended to downgrade.

Move to the Stable Branch
mv /var/www/fusionpbx /var/www/fusionpbx-old
cd /var/www && git clone -b 4.4 https://github.com/fusionpbx/fusionpbx.git
chown -R www-data:www-data /var/www/fusionpbx

Make sure config.php exists in /etc/fusionpbx If missing then move it into this directory.

cp /var/www/fusionpbx-master/resources/config.php /etc/fusionpbx
Move to the Master Branch
mv /var/www/fusionpbx /var/www/fusionpbx-old
cd /var/www && git clone https://github.com/fusionpbx/fusionpbx.git
chown -R www-data:www-data /var/www/fusionpbx
  • Complete the normal upgrade process at Advanced -> Upgrade
  • If the menu disappears you have to upgrade schema then restore the default menu to get it back.

Variables

Define preprocessor switch variables here.

_images/fusionpbx_advanced_variables.jpg

Variables have several different categories.

Codecs

Defaults

IP Address

Music on Hold

Ringtones

Sip

Sip Profile:External

Sip Profile:Internal

Sound

Tones

Xmpp

XML Editor

An online editor for xml specific files for FusionPBX.

_images/fusionpbx_advanced_xml_editor.jpg

Hardware

Hardware

Auto Provision Phones

Auto provisioning is disabled by default. This is to give a chance to secure provisioning server with HTTP Authentication or CIDR. HTTP Authentication requires the phone to send hash of the combined username and password in order to get configuration. CIDR is an IP address restriction that can be used to restrict which IP addresses are allowed to get the device configuration. An example of CIDR is xxx.xxx.xxx.xxx/32 the /32 represents a single IP address. To set one of these values go to Advanced > Default Settings and find the Provision category from there used the edit button to set a value. After this is done it is safe to set enabled equal to true.

Polycom

To auto provision Polycom

  • Login to the phone. (Default user is admin and default password is 456)
  • Go to the top menu an choose Utilities > Phone backup & restore. (Always good to start with factory defaults)
_images/fusionpbx_provision_auto_polycom_factory_default.jpg
  • Click The plus to the left of Global Settings then click Restore.
_images/fusionpbx_provision_auto_polycom_factory_default1.jpg
  • Login to the phone again.
  • Click Settings > Provisioning Server.
_images/fusionpbx_provision_auto_polycom_provision.jpg
  • Choose the Server Type as http. (If you have ssl certificate that polycom approves then choose https instead.)
  • Fill in the Server Address field. This will be domain.tld/app/provision Replace domain.tld with your actual domain name
  • Fill in Server User and Password fields.
  • Choose Enable on **Tag SN to UA
  • Click Save to Provision the Polycom. You should hear a tone meaning the phone reached out to the server and provisioned.
_images/fusionpbx_provision_auto_polycom_provision1.jpg

Cisco SPA

The following information can be used to provisioning Cisco SPA phones.

Basic URL

An example URL for provisioning URL for a Cisco SPA.

http://mydomain.com/app/provision/?mac=$MA

HTTP Authentication

Phone web interface -> Provision - > Profile Rule

[--uid myUser --pwd myPass]http://mydomain.com/app/provision/?mac=$MA
HTTPS

Requires a Cisco Certificate that you will likely need to obtain from a Cisco distributor.

Browser Command

Use your web browser to send the following command to pass the provision the phone now and this will pass URL to the phone so it has the location neeeded for provisioning the device. In this example 192.168.1.5 is the IP address of the phone and domain.com needs updated to use the correct tenant domain name.

No HTTP Authentication

http://192.168.1.5/admin/resync?http://domain.com/app/provision/?mac=$MA

With HTTP Authentication

http://192.168.1.4/admin/resync?%5B–uid+admin+–pwd+555%5Dhttp://domain.com/app/provision/?mac=$MA

DHCP Option

Use the DHCP Option 66 to deliver the provisioning URL to the phones without using the web interface.

Fanvil

Setting up a Fanvil SIP phone through the phone’s local http management portal.

  • Factory reset the phone (physically on the phone) by pressing menu button > Settings > Advanced Settings (default password is 123) > Reset to Default > Press yes to continue.
  • Press Menu > Status to get the phones ip address
  • Open a web browser and enter the phones ip address
  • Default login name and password is admin
  • Top menu click Auto Provision
Common Settings
  • Fill out the fields:
    • Authentication Name: http user name that was set in FusionPBX default settings
    • Authentication Password: http password that was set in FusionPBX default settings
    • Save Auto Provision Information: Check the box
    • Download CommonConfig enabled: Check the box
    • Download DeviceConfig enabled: Check the box
Static Provisioning Server
  • Fill out the fields:
    • Authentication Name: http user name that was set in FusionPBX default settings
    • Server Address: https://domain.tld/app/provision
    • Protocol Type: HTTPS
    • Update Mode: Update after Reboot
  • Click Apply
_images/fusionpbx_provision_auto_fanvil.jpg
  • Left side menu click System
  • Top menu click Tools
  • Scroll to the bottom and click Reboot
_images/fusionpbx_provision_auto_fanvil1.jpg
Self Signed Certificates

If you are going to use a self signed certificate you will need to adjust additional settings.

  • Left side menu click Phone settings
  • Top menu click Trusted Certificates
  • CA Certificates: Disabled
  • Click Apply
_images/fusionpbx_provision_auto_fanvil2.jpg

Grandstream

Auto provisioning with FusionPBX and Grandstream.

  • Top Menu > Maintenance > Upgrade and Provisioning.
_images/fusionpbx_provision_auto_grandstream.jpg

Fill in the following fields:

  • HTTP/HTTPS User Name: Set in Advanced > Default Settings > Provisioning section in your FusionPBX installation.
  • HTTP/HTTPS Password: Set in Advanced > Default Settings > Provisioning section in your FusionPBX installation.
  • Config Server Path: This is typically your FusionPBX installation url/app/provision. (sub.domain.tld/app/provision)
  • Firmware Server Path: Set in Advanced > Default Settings > Provisioning section in your FusionPBX installation.
  • Click Save and Apply at the bottom.

Note

Generally with provisioning, if there is an option like Grandstream has for a box or radio button to choose https or http then it is not needed to type http:// or https:// in the config url.

_images/fusionpbx_provision_auto_grandstream2.jpg
  • Once you have the proper information filled in, click the Reboot option at the top right.
  • Click OK
_images/fusionpbx_provision_auto_grandstream1.jpg
Troubleshooting
  • Make sure provisioning is enabled in Advanced > Default Settings
  • Check, double check that the correct extension number and password is being used.
  • Factory default the phone and try again.
  • Reboot the device.
  • Check Fail2ban and see if the ip got blocked.
  • Make sure you have created an DNS A record for the domain being used and there are no typos
  • Nat, firewalls and router settings. Some brands of routers can cause issues. Google the make and model of router or firewall appliance for common settings or remedies.
  • Visit Grandstream Supoprt http://www.grandstream.com/support

Htek

Setting up a Htek SIP phone through the phone’s local http management portal.

  • Factory reset the phone (physically on the phone) by pressing menu button > Settings > Advanced Settings (default password is admin) > Phone Settings > Factory Reset > Press yes to continue.
  • Press Menu > Status > Information to get the phones ip address
  • Open a web browser and enter the phones ip address
  • Default login name and password is admin
  • Top menu click Management
  • Left menu click Auto Provision
  • Fill out the following fields:
    • Firmware Server Path:
    • Config Server Path:
    • HTTP/FTP/HTTPS UserName:
    • HTTP/FTP/HTTPS Password:
  • Click SaveSet
  • Click Autoprovision Now
_images/fusionpbx_provision_auto_htek.jpg
Self Signed Certificates

Some additional settings need adjusted to provision with a self signed certificate.

  • Top menu click Management
  • Left menu click Trusted CA
  • Choose the following
    • Only Accept Trusted Certificates: OFF
    • Common Name Validation: OFF
    • Trusted Certificates: All Certificates
_images/fusionpbx_provision_auto_htek1.jpg

Zoiper

QR and app provisioning with Zoiper
This menu add-on will enable the abliity to do QR provisioning from IOS or android Zoiper app. Zoiper has designed the process in a way that is cross platform. Fusionpbx has the ability to click the extension you want to provision and a link wil open to either download the app on multiple platforms or if you have the app installed on a mobile device you can use the QR code scanner to scan a QR image and the mobile is ready to use.
We will walk through the process
Zoiper.com account setup
There are two parts to make this function. http://oem.zoiper.com and Fusionpbx menu add-on.
This all adds a one-click install for both the Desktop and Mobile Zoiper APPs in the User Portal. The page is accessible by end users.
This can be done with the FREE Zoiper OEM account or can use the paid versions for more customization like branding.
2. Sign up for Login
3. Configure your Desktop and Mobile Apps with the information you want.
4. Then click “CONFIGURE” Under Desktop.
5. This will give you a LINK with a PAGE ID:(32 character)
7. Copy the page ID

Zoiper menu add-on for Fusionpbx
On your server
git clone https://github.com/fusionpbx/fusionpbx-apps
cp -R fusionpbx-apps/zoiper /var/www/fusionpbx/app
chown -R www-data:www-data /var/www/fusionpbx/app/zoiper
1. Log into the FusionPBX webpage
2. Advanced -> Upgrade
3. Menu Defaults and Permission Defaults.
4. Log out and back in
Advanced -> Default Settings
Note MYPAGEID and provider_id are two different sets of characters. You can also find these by going into the oem.zoiper.com login and click “view” on the moblie section.
_images/fusionpbx_zoiper9.jpg
provider_id
provider_id
The Do It Yourself way: make your own page with instructions

If you want to customize this page, you can do so, just make sure to embed this html code on your website:
<img src="https://oem.zoiper.com/qr.php?provider_id=>>>>>>>09876543210987654321098765432199<<<<<<<&u=&h=&p=&o=&t=&x=&a=&tr=" alt="QR image"  />
MYPAGEID
MYPAGEID
The easy way: send your customers to our landing page
Add a link on your website to this step by step tutorial on our website : (**click here** to see it in action).
<a href="https://www.zoiper.com/en/page/>>>>>>>>c1234567890123456789012345678901<<<<<<<?u=&h=&p=&o=&t=&x=&a=&tr=">Configuration instructions for Android and iOS</a>
 Goto Advanced -> Default Settings
 Add a Default Setting

 Category: zoiper
 Subcategory: page_id
 Type: text
 Value: (32 character MYPAGEID)
 Enabled: True
 Save


Category: zoiper
Subcategory: provider_id
Type: text
Value: (32 character provider_id)
Enabled: True
Save
Goto Apps -> Zoiper
Superadmin will see a list of ALL USER EXTENSIONS
Users will only see the extensions assigned to them.
Click on a link and it will take you to the Zoiper Site. Follow instructions there to download and install.

Manually Provision Phones

How to setup the device using the phone’s web interface.

Polycom

Soundpoint IP 320P

Identification

Display Name: FusionPBX
Address: ExtensionNumber
Authentication User ID: ExtensionNumber
Authentication Password: PASSWORD
Label: ExtensionNumber or Whatever
Type: Private
Third Party Name: BLANK
Number Of Line Keys: BLANK
Calls Per Line: BLANK

Server 1

Address: FusionBPX IP ADDRESS or DOMAIN NAME if doing multi-tenant
Port: 5060
Transport: DNSnaptr works or UDP or whatever
Expires: default (30 works ok NATTED)
Register: BLANK
Retry Timeout: BLANK
Retry Maximum Count: BLANK
Line Seize Timeout: BLANK

Server 2

leave alone

Call Diversion

leave alone

Message Center

Subscriber: BLANK
Callback Mode: Contact
Callback Contact: \*98

Cisco

To manually provision Cisco

  • Login to the phone
  • Goto the Ext1 top left tab
  • Proxy and Registration section put your servers domain.tld in the proxy field
  • Subscriber Information section put the extension number for Display Name and User ID
  • Password put the extensions password
  • Click Submit All Changes at the bottom
_images/fusionpbx_provision_manual_cisco.jpg

Once you have that done, make sure the p-time is set to 0.020

  • Click the advanced option at the top right
  • Goto the SIP tab at the top
  • Scroll down to the RTP Parameters section and make sure the RTP Packet Size field has 0.020
  • Click Submit All Changes at the bottom
_images/fusionpbx_provision_manual_cisco1.jpg

HTTP Authentication

Phone web interface -> Provision - > Profile Rule

[–uid myUser –pwd myPass]http://mydomain.com/app/provision/?mac=$MA

Fanvil

Setting up a Fanvil SIP phone through the phone’s local http management portal.

  • Factory reset the phone (physically on the phone) by pressing menu button > Settings > Advanced Settings (default password is 123) > Reset to Default > Press yes to continue.
  • Press Menu > Status to get the phones ip address
  • Open a web browser and enter the phones ip address
  • Default login name and password is admin
  • Left side menu click Line
  • Fill out the fields:
    • Username:
    • Display Name:
    • Authentication Name:
    • Authentication Password:
    • SIP Proxy Server Address:
  • Click Apply
_images/fusionpbx_provision_manual_fanvil.jpg
  • Left side menu click System
  • Top menu click Tools
  • Scroll to the bottom and click Reboot
_images/fusionpbx_provision_manual_fanvil1.jpg

GrandStream

_images/fusionpbx_grandstream4.jpg

Registering an Extension using a hardware phone or adapter (ata) using Grandstream.


Granstream is one of the common brand of phone and adapters for voip. From call centers to offices and home offices Grandstream products can be found. Grandstream has a large selection of hardware from phones, video phones to analog telephone adapters.


In our example we will register an analog telephone adapter (ata) model HT701.


  1. Goto the device ip address. The default password should be admin. Enter admin and click login
_images/fusionpbx_grandstream.jpg

  1. Click on the FXS PORT tab on the top right.
Primary Sip Server: subdomain.domain.com
Failover SIP Server: subdomain1.domain.com (this can be left blank or can use Primary if only 1 sip server)
SIP User ID: 1000
Authenticated Password: thepassword

Click Update then click Apply at the bottom


_images/fusionpbx_grandstream2.jpg

  1. Click the Status tab on the top left. You should see the Registration as Registered and the User ID 1000
_images/fusionpbx_grandstream1.jpg

  • Troubleshooting tips

  • Check, double check that the correct extension number and password is being used.
  • Reboot the device.
  • Check Fail2ban and see if the ip got blocked.
  • Make sure you have created an DNS A record for the domain being used and there are no typos
  • Nat, firewalls and router settings. Some brands of routers can cause issues. Google the make and model of router or firewall appliance for common settings or remedies.
  • Visit Grandstream Supoprt http://www.grandstream.com/support

Htek

Setting up a Htek SIP phone through the phone’s local http management portal.

  • Factory reset the phone (physically on the phone) by pressing menu button > Settings > Advanced Settings (default password is admin) > Phone Settings > Factory Reset > Press yes to continue.
  • Press Menu > Status > Information to get the phones ip address
  • Open a web browser and enter the phones ip address
  • Default login name and password is admin
  • Top menu click Account
  • Fill out the fields with red* :
    • Account Active:
    • Primary SIP Server:
    • SIP Transport:
    • SIP User ID:
    • Authenticate ID:
    • Authenticate Password:
  • Click SaveSet
  • Click Restart
_images/fusionpbx_provision_manual_htek.jpg

Zoiper

Registering an Extension using the softphone Zoiper.


In the ever changing world of voip businesses are moving away from hardware phones. From call centers to home offices Zoiper and many other softphones make use of software for communication needs for not only voice but video and faxing. This example will show how to register an extension using Zoiper for Windows. Note Zoiper can be used on several operating systems and mobile devices.


  1. Download the software. .. Zoiper: http://www.zoiper.com/
  2. Install the software.
  3. If the software isn’t open click the Zoiper icon to open from the desktop or start menu.
_images/fusionpbx_zoiper.jpg

  1. Click on Settings
_images/fusionpbx_zoiper1.jpg

  1. Click on Preferences
_images/fusionpbx_zoiper2.jpg

  1. Click on Create account
_images/fusionpbx_zoiper3.jpg

  1. Enter the user, password and domain name.
user: 1000
password: thepassword
domain: sub.domain.com

_images/fusionpbx_zoiper4.jpg

  1. Click ok. You should have Registered at the top right
_images/fusionpbx_zoiper5.jpg

  • Troubleshooting tips

  • Check, double check that the correct extension number and password is being used.
  • Check Fail2ban and see if the ip got blocked.
  • Make sure you have created an DNS A record for the domain being used and there are no typos
  • Nat, firewalls and router settings. Some brands of routers can cause issues. Google the make and model of router or firewall appliance for common settings or remedies.
  • Visit Zoiper Community Supoprt http://community.zoiper.com/

SNOM

From your FusionPBX Install
  1. From the Accounts menu, select extensions and select an extension to be provisioned. If no extension exists, create one.
  2. Click the triangle beside Device Provisioning field then enter the mac address of the phone device into MAC Address field.
  3. A barcode scanner can be used or type in the mac address 00041326B92B manually.
  4. From the template dropdown list, select the proper make and model of the phone.
  5. Click the Save button.
  6. The mac address should be a clickable link now. Click that then continue to set up line keys or adjust any other phone settings.

Note

The provisioning template can be tested by opening up a web browser and entering the provisioning url. The provisioning url is:

hxxp://voice.example.com/fusionpbx/app/provision/index.php?mac=00041326B92B

Replace the mac address and domain with your own.

From your SNOM phone

Snom like most IP phone has a web admin interface to configure and monitor the phone. Usually, it’s best to be up-to-date with firmware. If you have issues with provisioning check that the device is up-to-date. Sometimes 1 or 2 versions back are needed also depending on firmware bugs.

  1. To find the IP address of the phone, press the menu button on the phone (on the 7XX or 8XX series, or the settings button on the 3xx series) and press “4” for network then “1” for IP Settings and at the DHCP screen, press “X” for no. The IP address will appear on the screen.
  2. Type the IP address into your web browser and select “Setup > Advanced” from the left menu and select the “Update” tab from the top.
  3. Under “Update Policy”, select “Update Automatically”
  4. Under “Setting URL” add in the setting URL as:

hxxp://www.example.com/app/provision/index.php?mac={mac} (Be sure to replace hxxp:// with http://)

The hostname should be replaced with your FusionPBX domain name. Note that we have replaced the domain name with {mac}. This is a special Snom variable to put the phones Mac address in without having to specify it.

  1. Select the “Apply” button and then the “Reboot” button and confirm to reboot the phone.

When the phone reboots, it will be provisioned with your appropriate settings

Using DHCP Option 66 to Deploy the Phone

DHCP is an excellent option for phones deployed in a local office. Your Snom phone can be removed from its box and simply plugged into the network. All the setting will be retrieved from the server. Be careful to not open up your FusionPBX to the internet though. Someone who knows your url and a MAC address of a phone can easily retrieve your phone settings including its password.

Each DHCP Server is different. At Helia we use Cradlepoint MBR 1400 and Cradlepoint MBR 95. Each of these allow you to setup DHCP option 66. Setting up DHCP directly on the voice server is also an option.

  1. On the Cradlepoint MBR 1400 router, select “Network Settings” and ” WiFi / Local Networks”.
  2. Select the appropriate “Local IP Networks”, and select the “Edit” button.
  3. On the “Local Network Editor” window, select the “DHCP Server” tab
  4. Ensure the “DHCP Enable” checkbox is checked and click the “Add” button to add an option.
  5. For “option” select “66 Server Name” and for the value, add the provisioning URL:

hxxp://www.example.com/app/provision/index.php?mac={mac} (Be sure to replace hxxp:// with http://)

The hostname should be replaced with your FusionPBX domain name. Note that we have replaced the domain name with {mac}. This is a special Snom variable to put the phones Mac address in without having to specify it.

With the DHCP information added, the provisioning template will be applied to the phone next time it fetches a new IP address - usually on its next reboot.

Phone Screen Capture

Snom

In order to show the content of the phone display on a computer you need to enter the following URL in a browser:

http://[phoneIP]/screen.bmp

This feature is working on all snom desktop phones. For snom 300 this feature is available in version 8.7.3.7 and later.

Cisco/Linksys SPA 50x and SPA 30x
  1. Direct your browser to: http://IP_address_of_phone/admin/screendump.bmp
  2. Use the browser to save the file as: anyname.bmp
You now have a 128x64 pixel screen shot in BMP format of you phone's display.
Polycom

Since SIP 3.2.0 you can capture the current screen on a SoundPoint IP, SoundStation IP orVVX phone through the web interface to the phone.

In order to utilize this facility the Parameter

<up up.screenCapture.enabled="1" />
above needs to be added to the Configuration via the Provisioning Server.

Username: Polycom

Password: 456

This does not automatically allow a User to capture the Screen, the functionality needs to be activated by the Phone User.

Note: You need to re-enable the Screen Capture feature after every phone restart or reboot (repeat below).

Press the Menu Key

Select Settings

Select Basic

Select Preferences

Scroll down and select Screen Capture

Enable or disable the Functionality.

As the browser address, enter http://<phone’s IP address>/captureScreen .

The current screen that is shown on the phone is shown in the browser window. The image can be saved as a file.

Please consult your Admin Guide matching your SIP / UC Software Version.

Product Models

SIP-T48G , SIP-T46G , SIP-T42G , SIP-T41P , SIP-T29G , SIP-T28P , SIP-T27P , SIP-T26P , SIP-T23G , SIP-T23P , SIP-T22P , SIP-T21P E2

Firewall Devices

Firewall device settings that help with SIP connections.

ASUS RT-AC66U

This guide was created for the ASUS RT-AC66U router with Firmware Version 3.0.0.4.380_8120. FusionPBX is in the cloud with a public IP, and the ASUS RT-AC66U router is at the customer’s location with the extensions behind it. The RT-AC66U is a “prosumer” grade router. It has good performance for the dollar and is a good choice for home offices.

How to setup QoS

First, enable the QoS feature:

  • Log into the router
  • Click “Traffic Manager” on the left menu
  • Click the “Enable QoS” button to turn it on. Once you do this, the Upload and Download Bandwidth boxes will appear.
  • Enter in your Up/Down speeds. You can use http://beta.speedtest.net/ as noted.
  • Click the Apply button and wait for the router to reboot.
_images/fusionpbx_asus_traffic_manager_qos1.png

Next, assign the QoS rules.

  • Log back into the router after rebooting, and go to Traffic Manager.
  • On the top-right selection box, select “user-defined QoS rules” if it is not already selected
  • Your settings may vary based on your environment, but you can use the image below as a good starting point.
  • It is important to note that the default rules set “Web Surf” and “HTTPS” to highest priority. We don’t want that to compete with VOIP traffic, so reduce those to “High.”
  • Click Apply.
_images/fusionpbx_asus_traffic_manager_qos_rules1.png

Note

An important note regarding Priorities

Another important area is the “user-defined priorities” section of Traffic Manager – QoS. As you can see, the default rules give a very large amount of the bandwidth share to the highest priority. This is very likely excessive for VOIP traffic. We don’t need much bandwidth, we just need to make sure we get prioritized traffic. You should adjust these to suit your environment.

_images/fusionpbx_asus_traffic_manager_qos_note1.png
ASUS RT-AC66U SIP ALG

This guide was created for the ASUS RT-AC66U router with Firmware Version 3.0.0.4.380_8120. FusionPBX is in the cloud with a public IP, and the ZyXEL USG60 router is at the customer’s location with the extensions behind it. The RT-AC66U is a “prosumer” grade router. It has good performance for the dollar and is a good choice for home offices.

How to Disable SIP ALG

  • Log into the router
  • On the left nav menu, click “WAN”
  • Click the “NAT Passthrough” tab at the top-right
  • Set “SIP Passthrough” to Disable
  • Click Apply
  • Reboot the router.

This part is a little confusing. It seems that ASUS has either reversed the meaning of SIP Passthrough or changed how it works over a few firmware releases. At any rate, if you have difficulties with Audio or Registrations, you can try toggling this setting. With these home-grade routers you should perform a full reboot in order to clear the tables before testing the phones.

_images/fusionpbx_asus_sip_alg1.png

Ubiquiti Edgerouter

Ubiquiti Edgerouter Advanced Gigabit Ethernet Router.

_images/fusionpbx_ubnt_edgerouterx.jpg
Port Forwarding

Go to top first menu item Firewall/NAT then second top menu item Port Forwarding.

_images/fusionpbx_ubnt_port_forward.jpg
  • Optional: SSH port 22 is optional.
  • Required: Sip port range 5060-5090 is recomended.
  • Required: HTTPS port 443 is required in order to access your FusionPBX installation and phone provisioning.
  • Optional: HTTP port 80 is used by some phone manufactures for provisioning.
  • Required: RTP port range 16384-32768.

Note

In order to Port Forward and still have access to the Edgerouter GUI you must change the port number for the Edgerouter GUI.

Access from another LAN Subnet

If you are behind NAT and are going to use the Edgerouter subnet in addition to an existing subnet (behind another router) also some setting changes are required. These settings are only recommended in this scenerio.

  • Go to First top menu Firewall/NAT tab.
  • Go to Second top menu Firewall Policies.
  • Edit WAN_LOCAL at the right menu item Actions > Edit RuleSet
_images/fusionpbx_ubnt_firewall_policies_enable_outside_lan_gui_access.jpg
  • From the Configuration tab, Change the radio button to “Accept” and click “Save Ruleset”.
_images/fusionpbx_ubnt_firewall_policies_enable_outside_lan_gui_access1.jpg

Warning

Be sure you want to do this and that you are behind either a firewall appliance or another router.

Add Static Route (Double NAT)

This will look different depending on the other router that you might have and what IP range you use.

  • A static route is needed on the other router in order for traffic to reach your FusionPBX installation and is only needed if the Edgerouter is the double NAT.

Scenerio: Router A is the primary router that has a public IP address and a LAN subnet of 10.10.2.1. From this pool of IP addresses, the Edgerouter gets IP 10.10.2.209. Be sure that router A has DHCP reservation or the ability to make 10.10.2.209 a static IP.

  • Router A Router name: This is a label for organizing.
  • Router A Destination IP address: 192.168.1.38 This is the IP that the Edgerouter gave to your FusionPBX install.
  • Router A Subnet mask: 255.255.255.0 is the subnet mask used in this example.
  • Gateway: 10.10.2.209 is the IP Router A gave to the Edgerouter WAN eth0.
  • Interface: LAN is a label on Router A to show it’s a local area network address.
_images/fusionpbx_ubnt_static_route_other_router.jpg
Ubiquiti Edgerouter SIP ALG

In some scenerios you may have to turn off SIP ALG.

Check if SIP ALG is running
  • Command: lsmod | grep sip
shwim@ubnt:~$ lsmod | grep sip
nf_nat_sip              8853  0
nf_conntrack_sip       21773  1 nf_nat_sip
nf_nat                 13284  10 nf_nat_ftp,nf_nat_sip,ipt_MASQUERADE,nf_nat_proto_gre,nf_nat_h323,nf_nat_ipv4,nf_nat_pptp,nf_nat_tftp,xt_nat,iptable_nat
nf_conntrack           62604  18 nf_nat_ftp,nf_nat_sip,xt_CT,nf_conntrack_proto_gre,ipt_MASQUERADE,nf_nat,nf_nat_h323,nf_nat_ipv4,nf_nat_pptp,nf_nat_tftp,xt_conntrack,nf_conntrack_ftp,nf_conntrack_sip,iptable_nat,nf_conntrack_h323,nf_conntrack_ipv4,nf_conntrack_pptp,nf_conntrack_tftp
shwim@ubnt:~$

This shows that SIP ALG is running in the example above.

Disable SIP ALG

To disable SIP ALG:

  • Either click on the CLI button from the Ubiquiti Edgerouter GUI or via you favorite SSH client to the Edgerouter.
  • Then type: configure
  • Then type: set system conntrack modules sip disable
  • Then type: commit
  • Then type: save
  • Then type: exit
root@ubnt:/home/shwim# configure
[edit]
root@ubnt# set system conntrack modules sip disable
[edit]
root@ubnt# commit
[edit]
root@ubnt# save
Saving configuration to '/config/config.boot'...
Done
[edit]
root@ubnt# exit
Enable SIP ALG

To enable SIP ALG:

  • Either click on the CLI button from the Ubiquiti Edgerouter GUI or via you favorite SSH client to the Edgerouter.
  • Then type: configure
  • Then type: set system conntrack modules sip enable-indirect-media
  • Then type: set system conntrack modules sip enable-indirect-signalling
  • Then type: commit
  • Then type: save
  • Then type: exit
root@ubnt:/home/shwim# configure
[edit]
root@ubnt# set system conntrack modules sip enable-indirect-media
[edit]
root@ubnt# set system conntrack modules sip enable-indirect-signalling
[edit]
root@ubnt# commit
[edit]
root@ubnt# save
Saving configuration to '/config/config.boot'...
Done
[edit]
root@ubnt# exit

Note

set system conntrack modules sip port <1-65535> will change the sip port number

pfSense

Static Port

Menu -> NAT -> Advanced Outbound NAT (enabled)

set static port to yes

_images/fusionpbx_pfsense_firewall_outbound.jpg
Firewall Optimization - Conservative

System -> Advanced -> Firewall NAT -> Firewall Optimization

select Conservative

_images/fusionpbx_pfsense_firewall_and_nat.jpg
Create Alias Ports in pfSense
_images/fusionpbx_pfsense.png
  • Configure pfSense to open the necessary ports for FusionPBX and Freeswitch.
  • In pfSense navigate to Firewall >> Aliases and click on the Ports TAB.
Name:          PBX
Description:   FusionPBX
Type:          Ports
  • Then proceed to add the ports as follows.
Port          Description
80            HTTP
443           HTTPS
5060:5061     SIP Internal
5080:5081     SIP External
16384:32768   RTP
  • After you are finished Click SAVE.
Configure pfSense Port Forwarding
_images/fusionpbx_pfsense2.png
  • Click on the ‘+’ to ADD a new Entry.
  • Firewall >> NAT >> Port Forward: Add
Interface: WAN
Protocol: TCP/UDP
Destination: <<Select a Public IP from the List>>
Destination Port Range:
                     from: (Other) PBX
                     to:   (Other) PBX
Redirect target IP:    10.10.0.10
Redirect target port:  (Other) PBX
Description: FusionPBX
NAT reflection: Use system default
  • Click SAVE when done.
Configure FusionPBX
  • In FusionPBX
  • System >> Variables > IP Address Section

If you have a static public IP you can replace XX.XX.XX.XX with that IP.

external_rtp_ip   XX.XX.XX.XX
external_sip_ip   XX.XX.XX.XX

If you have a dynamic IP address you can get a Dynamic DNS from a company such as dyndns.org.

external_rtp_ip   myname.dyndns.org
external_sip_ip   myname.dyndns.org

Advanced >> SIP Profiles

Edit the Internal Profile and add

Name:    aggressive-nat-detection
Value:   true
Enabled: True

Status >> SIP Status Stop and Start the internal profile for the changes to take effect.

SonicWall TZ-SOHO

This guide was created using 6.5.0.1-14n firmware on a SonicWall TZ-SOHO series UTM router. FusionPBX is in the cloud with a public IP, and the SonicWall router is at the customer’s location with the extensions behind it.

How to setup Bandwidth Management

First, enable Global Bandwidth Management:

  • Log into the SonicWall and go to Security Configuration -> Firewall Settings -> Bandwidth Management
  • For Bandwidth Management Type, click the Global radio button.
  • This will enable BWM for all traffic.

Enable your required Priority levels. For voice traffic, we’ll enable the “0 Realtime” priority level.

_images/fusionpbx_sonicwall_bwm1.png

The SonicWALL needs to be programmed with your available WAN interface bandwidth. You can go to beta.speedtest.net or similar to find your speed.

  • Log into the SonicWall and go to Network -> Interfaces. Edit your WAN Interface.
  • Click the Advanced tab, check both the Egress and Ingress boxes under Bandwidth Management.
  • Enter in your speed test values, and click OK
_images/fusionpbx_sonicwall_bwm6.png

Now create your VOIP services. In this example we’ll use 5060TCP, 5060UDP, and 16384-32768UDP for voice traffic.

  • Go to Policies -> Objects -> Service Objects, and click Add.
  • Add objects for your VOIP services. On typical installs this would be 5060TCP/UPD and 16384-32768UDP.
  • Click on the Service Groups tab and add all of the services you’ve created to a group.
_images/fusionpbx_sonicwall_bwm2.png

Next, set up an Object for your Cloud PBX:

  • Go to Policies -> Objects -> Address Objects, and click Add
  • Add your PBX to the WAN Zone assignment with your IP as the Host, or use FQDN if you prefer. If using multiple servers, add each one and create a group.
_images/fusionpbx_sonicwall_bwm3.png

Now that we have our Service and Object, we can create a firewall rule and apply prioritization.

  • Go to Policies -> Rules -> Access Rules, and click Add.
  • Create a rule from the WAN to the LAN, using the VOIP services that you created, and your PBX as the source. Make sure the Enable SIP Transformation box is unchecked.
  • Click the BWM tab and check the Egress and Ingress boxes, with the desired priority level.
_images/fusionpbx_sonicwall_bwm4.png _images/fusionpbx_sonicwall_bwm5.png

Save your settings and give it a try!

SonicWall TZ-SOHO SIP ALG

This guide was created for the SonicWall TZ-SOHO router with Firmware Version 6.5.0.1-14n. This has the newer GUI version and looks quite a bit different than the GUI that had been used in previous years. FusionPBX is in the cloud with a public IP, and the TZ-SOHO router is at the customer’s location with the extensions behind it.

How to Disable SIP ALG

  • Log into the router
  • Click the MANAGE tab at the top
  • On the left menu, go to System Setup-> VOIP
  • Check the “Enable consistent NAT” box
  • Uncheck the “Enable SIP Transformations” box
  • Click ACCEPT
_images/fusionpbx_sonicwall.png

ZyXel

This guide was created using V4.2/4.25 firmware on a ZyXEL USG60 series UTM router. FusionPBX is in the cloud with a public IP, and the ZyXEL USG60 router is at the customer’s location with the extensions behind it.

How to setup Bandwidth Management “BWM” aka QoS

There are more than one ways to apply the BWM rules. They can be applied on a service level, or on an object level, or both. In this example we will provide traffic priority to traffic between the LAN and the cloud PBX.

First, set up an Object for your Cloud PBX.

  • Log into the USG and go to Configuration-> Object-> Address/GeoIP
  • Click the Add button

Create a name, and enter the static public IP of your FusionPBX. If you have more than one, such as a failover, add that as well and create a group.

_images/fusionpbx_zyxel_usg60_object_address.png

Next, set up a Service Object for the VOIP traffic.

  • Go to Configuration-> Object-> Service
  • Click the Add button.

Create a name, and set the ports for your traffic. In this example we will add a Service rule for 5060TCP, 5060UDP, and 16384-32768 UDP.

Note

If you’ve created more than one service object, click the Service Group tab and create a group. Add the service objects that you’ve created to the group.

_images/fusionpbx_zyxel_usg60_object_service.png

Now setup your BWM rules.

  • Go to Configuration-> BWM
  • Check the Enable BWM box and hit apply.

I’m not sure what affect the “Enable Highest Bandwidth Priority for SIP Traffic” box does, but I leave it unchecked and it works for me!

  • Click the Add button and create a Policy for incoming traffic.

Your settings will vary based on your environment. Priority 1 is the highest priority (what we want) and priority 7 is the lowest priority.

  • Click the Add button and create a Policy for outgoing traffic.

Basically will just switch the Source and Destination.

  • Click the Apply button.
_images/fusionpbx_zyxel_usg60_bwm_.png
Zyxel Sip ALG

This guide was created using V4.2/4.25 firmware on a ZyXEL USG60 series UTM router.

How to Disable SIP ALG

Log into the router and navigate to Configuration -> Network -> ALG

Uncheck the following to disable SIP ALG:

  • Enable SIP ALG
  • Enable SIP Transformations
  • Enable Configure SIP Inactivity Timeout
  • Restrict Peer to Peer Signaling Connection
  • Restrict Peer to Peer Media Connection

Click the Apply button at the bottom of the page. A reboot should not be necessary, but if you’re still experiencing issues then it is a good idea to try rebooting the router and testing again.

_images/fusionpbx_zyxel_usg60.png

Cisco EA6500

This guide was created using a Cisco EA6500 (Linksys AC1750) series router.

How to Disable SIP ALG

Log into the router and navigate to Connectivity -> Administration -> Application Layer Gateway

Uncheck the following to disable SIP ALG:

  • Enable SIP ALG

Click the Apply button at the bottom of the page. A reboot should not be necessary, but if you’re still experiencing issues then it is a good idea to try rebooting the router and testing again.

_images/fusionpbx_cisco_linksys.jpg

Software

Software


Software Utilities

There are several software utilities one can use to troubleshoot voip issues and guage quality. Below are a list of some of the common ones.

Packet Capture

tcpdump
Install
apt-get install tcpdump

Command

tcpdump -nq -s 0 -A -vvv -i eth0 port 5060

Tip

you can change the command to suite the proper ethernet device eth0 with what is on your system. Port 5060 can be changed also if you are using a different port.

sngrep

Since March 2017 Sngrep is installed on all systems by default. This is a very useful tool to help troubleshoot all types of sip related issues.

If you installed FusionPBX prior to March 2017 you can still manually install sngrep.

Manual Install

From your FusionPBX install SSH window or console window

cd /usr/src
git clone https://github.com/fusionpbx/fusionpbx-install.sh.git
cd /usr/src/fusionpbx-install.sh/debian/resources/
./sngrep.sh

Command

sngrep

sngrep: https://github.com/irontec/sngrep

Call Quality and Monitoring

Call quality can be a nucense in the voip world. Having a way to track and make reports are a very needed tool.

Homer

Homer is well known to help track and graph quality issues with SIP like utilizing QoS Reports.

Quote:

HOMER is a robust, carrier-grade, scalable SIP Capture system and VoiP Monitoring Application offering HEP/EEP, IP Proto4 (IPIP) encapsulation & port mirroring/monitoring support right out of the box, ready to process & store insane amounts of signaling, logs and statistics with instant search, end-to-end analysis and drill-down capabilities for ITSPs, VoIP Providers and Trunk Suppliers using SIP signaling protocol.

To install and configure Homer visit https://github.com/sipcapture/homer

Using SNGREP

Main Screen

  • Idx: Line number column.
  • Method: Type of SIP message column.
  • SIP From: SIP message From column.
  • SIP To: SIP message To column.
  • Msgs: Numerical amount of messages column.
  • Source: Source IP and port number column.
  • Destination: Destination IP and port number column.
  • Call State: Call identifier column.
_images/fusionpbx_sngrep_main.jpg
  • ESC Quit: escape and quit sngrep.
  • Enter: Show more information about the highlighted line item.
  • Space: After pressing the spacebar, the line is selected. With this you can select multiple lines and can be used with the F2 save option.
  • F1 Help: Gives a help menu.
  • F2 Save: Option to save the current capture session dialogs to a .pcap or .txt to a specific path and file name.
  • F3 Search: Gives the option to search in a more specific and granular way.
  • F4 Extended: Gives an extended view.
  • F5 Clear: Clear the screen.
  • F7 Filter: Like search but with more options to filter the end result.
  • F8 Settings: Adjust SNGREP settings interface, capture options, call flow options, and EEP/HEP Homer options.
  • F10: Adjust what columns are displayed on the open sngrep window.

SPAM

_images/fusionpbx_sngrep_spam.jpg
  • User-Agent: Most spam attempts will show an unwanted User-Agent like what is shown in this example.

Registration

_images/fusionpbx_sngrep1.jpg _images/fusionpbx_sngrep_register.jpg

Registration Expanded

_images/fusionpbx_sngrep_register_flow.jpg _images/fusionpbx_sngrep_register_flow1.jpg

Call Setup

_images/fusionpbx_sngrep1.jpg _images/fusionpbx_sngrep_call_setup.jpg

Invite

_images/fusionpbx_sngrep_call_setup1.jpg

200 OK

_images/fusionpbx_sngrep_call_setup2.jpg

Call Completed

_images/fusionpbx_sngrep1.jpg _images/fusionpbx_sngrep_call_setup3.jpg

F7 Filter

_images/fusionpbx_sngrep_f7_filter.jpg

F8 Settings

Interface

_images/fusionpbx_sngrep_f8_settings.jpg

EEP/HEP HOMER

_images/fusionpbx_sngrep_f8_settings1.jpg

Call Flow

_images/fusionpbx_sngrep_f8_settings2.jpg

Capture

_images/fusionpbx_sngrep_f8_settings3.jpg

TFTP

Several models of phone out there that still only use TFTP for provisioning. Even though they have reached end of life, some of the popular ones are the Cisco 7960 and 7940. Also would need to add the TFTP port to the server firewall but this should be allowed only to specific IP addresses as TFTP has no security. Recommend to use TFTP only as a last resort for phones that don’t support HTTPS.

Install TFTPD

apt-get install tftpd
service xinetd

Change the configuration

edit the /etc/xinetd.d/tftp

Enable TFTP in FusionPBX Gui

Goto Advanced > Default Settings > Provision

Set Enabled to True and define the path to where the TFTP files will be.

_images/fusionpbx_tftp.jpg

Test TFTP

tftp x.x.x.x
get 000000000000.cnf

See the file getting requested for tftp

tail -f /var/log/syslog | grep tftp

Additional Information

Additional Information

In the Additional Information section you will find topics related to FusionPBX.

Voip Quality

Several factors can attribute to the quality of a Voip call. Most problems with Voip quality can be narrowed down to packet loss, jitter, wrong configurations, high latency and network attacks.

Packet Loss

Packet loss happens when a defined number of packets don’t all reach their destination. Most commonly, this can happen from faulty network hardware and wiring. Network saturation can be a culprit also on the WAN and LAN of a network.

0% packet loss is recommended.

Jitter

Packets that don’t arrive in the intended order or proper time will result in jitter. This will sound like robotic voice or missing audio that sounds choppy. Much like a cell phone conversation with poor reception.

3 ms in jitter or less is recommended.

Latency

Too high of latency will result in conversational timing issues. This sounds like two people talking at the same time.

150 ms or less is recommended.

Wrong Configurations

  • Quality Of Service QOS when implimented correctly on a network device can help a network provide great Voip quality.
  • ISP provisions your cable modem the wrong speed profile.

Network Attacks

We are in the age of the internet wild wild west. Network attacks depending on size can bring a voip call quality sounding like packet loss, jitter and latency kind of calls.

Freeswitch install


Upgrade Move Source
mv /usr/src/freeswitch freeswitch-version
Git Release
cd /usr/src
git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git
cd freeswitch
./bootstrap.sh
or
Git Head
cd /usr/src
git clone https://freeswitch.org/stash/scm/fs/freeswitch.git
cd freeswitch
./bootstrap.sh
or
files.freeswitch.org
cd /usr/src
wget http://files.freeswitch.org/freeswitch-1.4.26.zip
unzip freeswitch-1.4.26.zip
cd freeswitch-1.4.26

1.4.x is considered EOL use the steps below for 1.6.x

cd /usr/src
wget http://files.freeswitch.org/freeswitch-1.6.20.zip
unzip freeswitch-1.6.20.zip
cd freeswitch-1.6.20
Ubuntu Dependencies
apt-get install autoconf automake devscripts gawk g++ git-core libjpeg-dev libncurses5-dev libtool make python-dev gawk pkg-config libtiff-dev libperl-dev libgdbm-dev libdb-dev gettext libssl-dev libcurl4-openssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libedit-dev libldns-dev libpq-dev memcached libmemcached-dev
Debian Dependencies
apt-get install autoconf automake devscripts gawk g++ git-core libjpeg-dev libncurses5-dev libtool libtool-bin make python-dev gawk pkg-config libtiff5-dev libperl-dev libgdbm-dev libdb-dev gettext libssl-dev libcurl4-openssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev libsqlite3-dev libedit-dev libldns-dev libpq-dev memcached libmemcached-dev
CentOS
yum install git gcc-c++ autoconf automake libtool wget python ncurses-devel zlib-devel libjpeg-devel openssl-devel e2fsprogs-devel sqlite-devel libcurl-devel pcre-devel speex-devel ldns-devel libedit-devel libmemcached-devel
Configure services to auto start
chkconfig --add memcached && chkconfig --levels 33 memcached on
chkconfig --add freeswitch && chkconfig --levels 35 freeswitch on
modules.conf
uncomment the FreeSWITCH modules that are needed.
mod_avmd
mod_callcenter
mod_memcache
mod_cidlookup
mod_curl
mod_translate
Used for MP3 support
mod_shout
Postgres driver
./configure --enable-core-pgsql-support
Run Make
make
Remove FreeSWITCH files
This step is only needed for a FreeSWITCH upgrade.
Once it has been confirmed that the compile was successful then remove files from previous version of FreeSWITCH
rm -rf /usr/local/freeswitch/{lib,mod,bin}/*
Install
make install
File Permissions
Set the file permissions instructions may vary based on the OS and install directory.
Debian and Ubuntu
chown -R www-data:www-data /usr/local/freeswitch
CentOS or Other Unix operating systems
(need make sure that the web server has access to IVR recordings, Fax, and Voicemail)
adduser --disabled-password  --quiet --system --home /usr/local/freeswitch --gecos "FreeSWITCH Voice Platform" --ingroup daemon freeswitch
chown -R freeswitch:daemon /usr/local/freeswitch/
chmod -R o-rwx /usr/local/freeswitch/
Install Sound Files
Run this on new installs.
cd /usr/src/freeswitch
make sounds-install moh-install
make hd-sounds-install hd-moh-install
make cd-sounds-install cd-moh-install

Startup Script

Run on new install only. Create the file ‘/etc/init.d/freeswitch’ with the following code:
#!/bin/bash
### BEGIN INIT INFO
# Provides:          freeswitch
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       Freeswitch debian init script.
# Author:            Matthew Williams
#
### END INIT INFO
# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="Freeswitch"
NAME=freeswitch
DAEMON=/usr/local/freeswitch/bin/$NAME
DAEMON_ARGS="-nc -nonat -reincarnate"
PIDFILE=/usr/local/freeswitch/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

FS_USER=www-data #freeswitch
FS_GROUP=www-data #daemon

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that sets ulimit values for the daemon
#
do_setlimits() {
       ulimit -c unlimited
       ulimit -d unlimited
       ulimit -f unlimited
       ulimit -i unlimited
       ulimit -n 999999
       ulimit -q unlimited
       ulimit -u unlimited
       ulimit -v unlimited
       ulimit -x unlimited
       ulimit -s 240
       ulimit -l unlimited
       return 0
}

#
# Function that starts the daemon/service
#
do_start()
{
   # Set user to run as
       if [ $FS_USER ] ; then
     DAEMON_ARGS="`echo $DAEMON_ARGS` -u $FS_USER"
       fi
   # Set group to run as
       if [ $FS_GROUP ] ; then
         DAEMON_ARGS="`echo $DAEMON_ARGS` -g $FS_GROUP"
       fi

       # Return
       #   0 if daemon has been started
       #   1 if daemon was already running
       #   2 if daemon could not be started
       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null -- \
               || return 1
       do_setlimits
       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background -- \
               $DAEMON_ARGS \
               || return 2
       # Add code here, if necessary, that waits for the process to be ready
       # to handle requests from services started subsequently which depend
       # on this one.  As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#
do_stop()
{
       # Return
       #   0 if daemon has been stopped
       #   1 if daemon was already stopped
       #   2 if daemon could not be stopped
       #   other if a failure occurred
       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
       RETVAL="$?"
       [ "$RETVAL" = 2 ] && return 2
       # Wait for children to finish too if this is a daemon that forks
       # and if the daemon is only ever run from this initscript.
       # If the above conditions are not satisfied then add some other code
       # that waits for the process to drop all resources that could be
       # needed by services started subsequently.  A last resort is to
       # sleep for some time.
       start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
       [ "$?" = 2 ] && return 2
       # Many daemons don't delete their pidfiles when they exit.
       rm -f $PIDFILE
       return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
       #
       # If the daemon can reload its configuration without
       # restarting (for example, when it is sent a SIGHUP),
       # then implement that here.
       #
       start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
       return 0
}

case "$1" in
 start)
       [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
       do_start
       case "$?" in
               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
       esac
       ;;
 stop)
       [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
       do_stop
       case "$?" in
               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
       esac
       ;;
 status)
      status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
      ;;
 #reload|force-reload)
       #
       # If do_reload() is not implemented then leave this commented out
       # and leave 'force-reload' as an alias for 'restart'.
       #
       #log_daemon_msg "Reloading $DESC" "$NAME"
       #do_reload
       #log_end_msg $?
       #;;
 restart|force-reload)
       #
       # If the "reload" option is implemented then remove the
       # 'force-reload' alias
       #
       log_daemon_msg "Restarting $DESC" "$NAME"
       do_stop
       case "$?" in
         0|1)
               do_start
               case "$?" in
                       0) log_end_msg 0 ;;
                       1) log_end_msg 1 ;; # Old process is still running
                       *) log_end_msg 1 ;; # Failed to start
               esac
               ;;
         *)
               # Failed to stop
               log_end_msg 1
               ;;
       esac
       ;;
 *)
       #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
       echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
       exit 3
       ;;
esac

exit 0

Make the script executable and make it auto start on system boot:

chmod +x /etc/init.d/freeswitch
update-rc.d freeswitch defaults

Monit

Used to monitor processes on UNIX systems.

http://mmonit.com/monit/

Install
apt-get install monit

Edit Monit /etc/default/monit and set the “startup” variable to 1 in order to allow monit to start.

Configure
Fail2Ban
cd /etc/monit.d
touch fail2ban
nano fail2ban

Add the following to the file and save it.

check process fail2ban with pidfile /var/run/fail2ban/fail2ban.pid
 group services
 start program = "/etc/init.d/fail2ban start"
 stop  program = "/etc/init.d/fail2ban stop"
 if 5 restarts within 5 cycles then timeout
FreeSWITCH
cd /etc/monit/conf.d

or

cd /etc/monit.d

touch freeswitch
nano freeswitch

Add the following

check process freeswitch with pidfile /usr/local/freeswitch/run/freeswitch.pid
start program = "/usr/bin/service freeswitch start"
stop program  = "/usr/bin/service freeswitch stop"

or

check process freeswitch with pidfile /usr/local/freeswitch/run/freeswitch.pid
start program = "/usr/local/freeswitch/bin/./freeswitch -nc -u www-data"
stop program  = "/usr/local/freeswitch/bin/./freeswitch -stop"
Additional Options
if 5 restarts within 5 cycles then timeout
if cpu > 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then alert
if totalmem > 2000.0 MB for 5 cycles then restart
if children > 2500 then restart

Monit Daemon Add to the main monit config file.

#monit daemon
set httpd port 2812 and
use address localhost
allow localhost
Monit Commands
monit -h
monit status

SSL/TLS Setup

On a new installation of FusionPBX, TLS for SIP is available to use once you run letsencrypt.sh and make a few setting changes in FusionPBX.

Configure TLS

Configuration for SIP to use TLS can be achieved with the following steps.

  • First open an ssh terminal or console window.
  • cd /usr/src/fusionpbx-install.sh/debian/resources/
  • Execute letsencrypt.sh
  • Login to your FusionPBX installation.
  • Go to Advanced > Variables.
  • Scroll down to SIP Profile: Internal (This can be done on any SIP Profile)
_images/fusionpbx_switch_tls.jpg
  • Set internal_ssl_enable value to true in lowercase.
  • Go to Status > SIP Status.
  • Click FLUSH CACHE at the top right.
_images/fusionpbx_tls_sofia_status2.jpg
  • Click Rescan on the profile.
_images/fusionpbx_tls_sofia_status1.jpg
  • You should now see at the right under State (RUNNING)(0)(TLS)
_images/fusionpbx_tls_sofia_status.jpg

Testimonials

_images/logo.png

Businesses of all sizes use FusionPBX daily. We love to see folks happy saving money using FusionPBX. Here are some of the testimonials we received.


I’ve been a longtime VoIP enthusiast for years, since 2005, and I have tried several different hosted/self-hosted PBX systems. Honestly, FusionPBX wins hands down. What makes it even more amazing is the passion that the FusionPBX developers and contributors have in their software. I honestly couldn’t be happier with a turn-key PBX system.

-Digital Crisis


Just want to give a thankful shout out to everyone at FusionPBX that have helped in education, contribution and support. The FusionPBX team have developed a leading product. Its been a joy from day one joining this community and I look forward to the road ahead.

-Kissvoice


We have been using FusionPBX for many of our clients and just want to express our gratitude to Mark and the team for not only providing a great product, but being extremely helpful in bringing out new features and helping us maintain the service. Every new release amazes us with the work and development put into it.

-Kloudphone


SureVoIP

Have been using FusionPBX since 2010. SureVoIP sponsored the first versions of multi-tenant domains and hot desking. SureVoIP sponsors and contributes fixes and features when possible.

Because of FusionPBX’s highly configurable nature, responsive support team and sane design, SureVoIP have been able to win many large customers because proprietry systems are so rigid and slow to innovate. We have been proud to support and deploy FusionPBX for 7 years.

-SureVoIP

Winner of the Best Business ITSP (Medium Enterprise) 2016! http://www.surevoip.co.uk/2016-best-provider


I would like to tell everyone there that I have been trying to get an open source PBX to work for me for over three months now and since I am not a linux guy, I haven’t been able to get any of them working the way I wanted. FusionPBX installation script installed ALL required packages and libraries in one go and it was up and running in 10 mins. Once I followed the youtube videos it took me no time to setup and migrate my clients to FusionPBX. One of the best features I love in FusionPBX is the automatic dialplan expression as I have always struggled with remembering the expression syntax. The user interface and the way all the features are grouped is awesome.

Again, Thanks for the effort

-BareVOIP Limited


FusionPBX Will Be My Default Choice From Now On.

I just did my first install of FusionPBX a few days ago. All my prior background has been in the Asterisk/FreePBX community. But my introduction to the freeSWITCH/FusionPBX community has been a very pleasant one. The change does include a small learning curve, but the advantages far out way the effort required to learn the new platform. Suddenly a lot of prior headaches and work arounds are gone. The install is painless and simple compared to FreePBX. And after it is installed it works! This is especially note worthy if you are used to trying to get everything working with FreePBX on a VPS. This worked perfect on a VPS.

Now for the more practical end of things. I found the features and functionality of FusionPBX to be very comprehensive. The monitoring and control you have over active calls is second to none. And unlike most GUI’s you do not need to sacrifice functionality for the use of a GUI. With the dial plan manager you can easily add almost any custom dial plan that you could by editing the xml directly. And as if that is not enough, there is a built in editor for all the xml and config files.

The support for this project is also noteworthy and it is quite easy to get direct access to the lead developer himself.

Hope that helps. And I highly encourage you to give FusionPBX a try.

Regards,

-ThinkerIV


Amazingly fast to get up and running, but equipped with very powerful functionality as well.

I came from a Trixbox background. I had experienced limitations with the Trixbox solution and was looking for an alternative when I found FusionPBX. The first thing that amazed me was how simple and speedy it was to get a working phone system up and running with FusionPBX - far simpler than Trixbox. But then I started to discover how much advanced functionality was also available, and how extensible the design is - in my opinion it is far easier to script for FusionPBX than to script for Trixbox if you want to add additional functionality of your own. FusionPBX is clearly a well thought through design, built on a very solid underlying soft switch (FreeSWITCH) - for me that makes it the system of choice.

-Stephen


We would love to hear from you! Please reach out to us at http://fusionpbx.com/support.php if you would like to be featured on this page.

Password Reset

Click here for the new youtube video on password recovery.

The current method to changing the superadmin password is actually to make a new superadmin user name and password.

Note

In older installations of FusionPBX config.php is located in /var/www/fusionpbx/resources/

  1. Move the config.php file temporarily.
cd /etc/fusionpbx
mv config.php config1.php
cat config1.php | grep password

  1. Go to the FusionPBX install login page in the web browser. This will put FusionPBX into a recovery mode. Choose the language for your region and click next.

Note

You will type in your web browser either the ip hxxps://xxx.xxx.xxx.xxx or the domain name hxxps://sub.domain.tld .

_images/install_lang_new.jpg

  1. Make sure FreeSWITCH is running. If it is, the fields will be populated like they are in the image below. The paths will vary depending on operating system and method of FreeSWITCH installation. Click next
_images/fusionpbx_detect_freeswitch.jpg
  1. In this step, you create what you want for the new superadmin user and password. It has to be a user and password that does not already exist.
_images/fusionpbx_password_recovery.jpg
  1. Database Host, Database Port, Database name should be pre filled. To provide the Database Username and Database Password you will have to locate those in the config.php file that we moved eariler. The code block below shows an easy way to retrieve the database password. Once those are filled in click next.
cd /etc/fusionpbx
cat config1.php | grep password
       $db_password = 'databasepasswordfromconfig.php';
_images/fusionpbx_database_configuration.jpg
  1. You should have a new config.php file in the /etc/fusionpbx/ directory. Proceed to login to with the new superadmin user name and password.






Old Password Reset

The steps below are outdated but useful for older installations up to version 4.0. Here are some rough steps to change the password of the database. The password can only be changed and not recovered.

The database contains a table called v_users which contains the username, password and salt. The password is the md5 hash of the password and the salt.

Password Hash

Use the following commands to generate the password hash. Don’t forget to provide your own salt and password.
echo '<?php $salt = "random-salt-goes-here";$password = "put your password here"; echo md5($salt.$password)."\n"; ?>' > /tmp   /test.php
Run the php file from command line.
php /tmp/test.php

SQLite

Install sqlite3 which can be be used to modify the database fusionpbx.db. Then open the database with the following:
sqlite3 fusionpbx.db

PostgreSQL

Connect to the PostgreSQL database. Once you are running psql you can use:
  • \l to list the databases.
  • \c to connect to one of them.
  • After running the SQL Query then use q to quit.
su postgres
psql
\c fusionpbx

Change the Password

The hashed password and the salt can be updated using the command:

update v_users set password = 'replace-with-password-hash-from-php-script', salt = 'replace-with-your-random-salt' where       username = 'superadmin';

Feature Codes

Below are the “*” codes used with FusionPBX. You can also create more as needed. If you do be sure to pick ones that are not currently in use.

Basic

Feature Code Name Detail
*1 Call Transfer Transfer a call to another extension
*2 Record Active Call  
*4 Attended Call Transfer Attended call transfer to another extension. After extension number press #
*411 Directory *DIR to dial by name.
*3472 DISA *DISA followed by Administrative PIN to receive a dialtone and call out
*67<phone number> Call Privacy Activate call privacy
*69 Call Return Call back the last incoming number
*732 Record *REC followed by Administrative PIN to record a message
*8[ext] Extension Intercom Page a specific extension.
*870 Redial Redial a number
*9171 Talking Date Current server date
*9170 Talking Time Current server time
*9172 Talking Date & Time Current server data & time
*925 Wakeup Call Schedule a wakeup call
*78 Enable DND Enable Do Not Disturb
*79 Disable DND Disable Do Not Disturb
*9888 FreeSWITCH Conference Connects to Cluecon Weekly
*0[ext] Speed Dial Speed dial an extension
*21 Follow Me Set the Follow Me number
*72 Enable Call Forward Enables Call Forward
*73 Disable Call Forward Disables Call Forward
*74 Call Forward Toggle Call Forward enable/disable
Administrative PIN (Recordings pin) can be found here Administrative PIN page

Call Parking

Feature Code Name Detail
*5900 Valet Park Attended Transfer (park). The park extension will be played back to you
*5901-5999 Valet Un-Park Retrieve a Valet Parked call

Advanced

Feature Code Name Detail
*8[ext] Extension Intercom Page a specific extension
*33 <ext> Eavesdrop Listen to the call. Press 1 remote, 2 local, 3 full conversation, 0 mute
** <ext> Intercept an extension Intercept a specific extension

Voicemail

Feature Code Name Detail
*97 Voicemail The system detects the extension, and will prompt for your password
*98 Check any Voicemail box The system will prompt for both your id (extension number) and password
*4000 Check any Voicemail box The system will prompt for both your id (extension number) and password
*99<extension> Send to Voicemail Send a call directly to voicemail

Miscellaneous

Feature Code Name Detail
*9192 Info Sends information to the console
*9193 Video Record Record Video
*9194 Video Playback Playback Video
*9195 Delay Echo Audio is played back after a slight delay
*9196 Echo Test Echo Test
*9197 Milliwatt Tone Tone Playback
*9664 Test MoH Test Music on Hold

*You can also add extra feature codes

Features

Adminer

Integrated for an administrator in the superadmin group to enable easy database access.

Announcements

Setup a recording for the auto attendant that provides announcement to callers. (See IVR Menus )

Authentication

Extendable with plugin support. Web interface authentication by default authenticates against the FusionPBX Database. LDAP is one and has also been tested with Microsoft Active Directory an OpenLDAP.

Call Barge / Eavesdrop / Intercept

Listen into an active call from another extension.

Call Block

Block inbound calls by the caller id.

Call Broadcast

Create a recording and select one or more groups to have the system call and play the recording.

Call Center

Creates a robust call center environment with agent tiers.

Call Detail Records

Various reporting capabilities to see who called, when, call length, export to a csv file, and call detail statistics.

Call Flows (Day Night Mode)

Typically used with day night mode. To direct calls between two destinations. Can work with BLF on phone to show which direction call will be directed to.

Call Forward

Forward to another extension or to any phone number.

Call Monitoring

View which extensions are currently in a call. (see Active Extensions)

Call Pickup

For a particular extension or any extension that is currently ringing.

Queues

Load calls into queues so they can be answered in the order they came into the queue.

Call Recordings

Record all or some calls or parts of the call.

Call Routing

Send the call different directions or perform actions based on reading the caller id info or other call information. (see Dialplan Manager)

Call Announced Transfer

Transfer the active call to another internal or external call. Also known as a warm transfer.

Call Blind Transfer

Transfer a call like the call was going into a call queue or from an ivr.

Call Transfer

Transfer a call.

Call Waiting

A beep while on a call and to toggle between two different calls.

Caller ID

Support for customization and supporting providers.

Conference

Set up voice and video conference calls, is optionally secure with a PIN number, and can transfer current calls to a conference. Interactive conference control provides ability to see the list of callers in the conference and manage the volume, see who is talking, kick, mute, unmute, deaf, undeaf, profiles and controls. (See Conference)

Conference Center

Unlimited conference rooms with moderator and paticipants, pin numbers, call recording, mute all, caller announce and more…

Configuration

While the admin configures the system in the web interface. The data is saved to the database and can optionally be deliverd to FreeSWITCH via XML files, or on demand from the database.

Contacts

Manage your contacts. Import contacts from Outlook CSV files. Export contacts to your cell phone with QR Codes. It is also possible to add additional features like time cards and invoices that can be related to the contacts.

Command

Area to execute commands from the gui. Merged with SQL Query tool with a clip library.

Dialplan Manager

The dialplan is used to setup call destinations based on conditions and context. You can use the dialplan to send calls to gateways, auto attendants, external numbers, to scripts, or any destination.

Dial by Name (*411)

Search by first name or last name to find extension numbers on the system.

Direct Inward System Access (DISA)

Gives ability to call into the system, put in a pin code, and then call back outbound.

Device Provisioning

From Advanced > Default Settings you can enable provisioning for devices. Contacts used as Directory for the phones, vendor list and functions can be enabled or disabled. Support for memory, expansion (side cars), and programmable keys. Configure SIP endpoints for Yealink, Polycom, Cisco, Aastra and several other brands.

Do Not Disturb (DND)

Direct calls to voicemail by default however there is an option when using do not disturb to send the call to an alternative destination.

Extensions

Create extensions for phones to register to and an option to receive emails on missed calls.

Extension Summary

Summary of extension activity per domain such as misssed calls, answered calls, no answer, inbound duration, outbound duration, number of outboud calls, number of inbound calls and Average length of Conversation (ALOC). The summarized information can be downloaded as a CSV file.

Editor

File editor for PHP, XML, and Provisioning files.

Fax Server

A virtual fax machine that can send and receive faxes with advanced features.

Follow Me

Allows calling multiple extensions or external numbers.

Gateways

Gateways provide access into other voice networks. These can be voice providers or other systems that require SIP registration. Check out the Youtube video.

Hot Desking

A way to login to another phone device and temporarily or permanently become another extension. This is sometimes known as ‘hoteling’ and ‘extension mobility’

Inbound and Outbound Call Routing

Routes used to receive or send calls in or out of FusionPBX.

IVR Menus (Auto Attendant)

Create a structured interactive voice prompt for callers to use. Uses FreeSWITCH IVR and delivered from Database on Demand. Cached to memcache with IVR Menu Options all editable at once. Also works with Text to Speech.

Music on Hold

Allows multiple categories of music on hold that can be set globally or per domain. Can inject additional audio on intervals such as ‘Your call is very important to us please stand by’.

Multi-Tenant

Domain based multi-tenant using subdomains such as red.pbxhosting.tld green.pbxhosting.tld blue.pbxhosting.tld

Operator Panel

A virtual panel that agents can drag and drop transfer calls. Adjust call state from available, on break, do not disturb and logged out.

Paging

Page another extension with or without password

Parking

Send a call to an unused “park” extension. The caller listens to music on hold until another extension connects to the call.

Phrases

Using xml handler and xml from file system you can string together multiple voice files.

Re-branding and Customize

FusionPBX has unprecedented customizability which can be used to meet your needs or the needs of your customers. Customizable themes, menu, dialplan, and Hundreds of Default Settings to control the theme.

Recordings

Create and manage personalized recordings.

Ring Groups

Make one extension ring several extensions and an option to receive emails on missed calls.

Scalable and Redundant

Can be configured for multi-master database replication, file replication. FusionPBX, Database, and FreeSWITCH can be distributed across multiple servers for large enterprise scale systems.

Time Conditions

A extension that can be timed to route calls based on domain select, global option, move to other domains, and holiday presets.

User and Group Management

Edit, change or add users of all permission levels.

Voicemail

Has ability to copy voicemails for other voicemail boxes when receiving a voicemail. Additional features include voicemail to email and voicemail IVR. Forward add intro, check box for multi-delete.

Voicemail to Email

Have voicemails sent to email.

Voicemail Transcription

Converts voicemails to text.

WebRTC

Make and receive video calls with a web browser.

Additional Features

This is not a comprehensive set of features. A complete list would be many times larger. More will be added as time permits.

Toll Allow

Toll Allow is a variable that can be set per extension. It allows you to limit who can make what type of calls. Note that although the variable is provided in the extension configuration, the default dialplan DOES NOT make use of it. Therefore if you want to use it you need to add statements to the dialplan to enable it.

An example for the contents of the toll_allow variable would be:

You can then add information to your dialplan to process this variable. In the example XML below, if the valid allow value isn’t present then an extension shouldn’t be able to dial out. However extension -> extension should still work.

The following code are example XML for standard outbound routes (Dialplan->OutboundRoutes). Effectively you are applying an additional condition to EACH outbound route that you want to limit. So in the FusionPBX GUI select an outbound route and add

condition, type "${toll_allow}", data "local".
Order is important, this should be the FIRST condition of your outbound route.

You’ll need to do that for all of your outbound routes, tag them local, domestic, or international depending on what they are. On some installations this example file will be present in /usr/local/freeswitch/conf/dialplan/default/01_example.com.xml:

PERMIT TOLL CALLS

This example assumes all calls are bad (except internal) unless they are flagged as good by the value of the toll_allow variable.

<include>
<extension name="local.example.com">
<condition field="${toll_allow}" expression="local"/>
<condition field="destination_number" expression="^(\d{7})$">
  <action application="set" data="effective_caller_id_number=${outbound_caller_id_number}"/>
  <action application="set" data="effective_caller_id_name=${outbound_caller_id_name}"/>
  <action application="bridge" data="sofia/gateway/${default_gateway}/1${default_areacode}$1"/>
</condition>
</extension>

<extension name="domestic.example.com">
<condition field="${toll_allow}" expression="domestic"/>
<condition field="destination_number" expression="^(\d{11})$">
  <action application="set" data="effective_caller_id_number=${outbound_caller_id_number}"/>
  <action application="set" data="effective_caller_id_name=${outbound_caller_id_name}"/>
  <action application="bridge" data="sofia/gateway/${default_gateway}/$1"/>
</condition>
</extension>

<extension name="international.example.com">
<condition field="${toll_allow}" expression="international"/>
<condition field="destination_number" expression="^(011\d+)$">
  <action application="set" data="effective_caller_id_number=${outbound_caller_id_number}"/>
  <action application="set" data="effective_caller_id_name=${outbound_caller_id_name}"/>
  <action application="bridge" data="sofia/gateway/${default_gateway}/$1"/>
</condition>
</extension>
</include>

PREVENT TOLL CALLS

This example takes the opposite approach and is how to PREVENT toll calls. The below example takes the opposite approach. It assumes that all calls are good unless they are flagged as bad.

Put this in your advanced dialplan. In the toll allow of whatever extension you wanted to restrict put the value ‘local’. This example restricts from calling 10 or 11 digit numbers.

<extension name="localcalls" >
<condition field="${toll_allow}" expression="local"/>
<condition field="destination_number" expression="(^\d{10}$|^\d{11}$)">
<action application="hangup"/>
</condition>
</extension>

Network Address Translation

NAT is Network Address Translation. When your FusionPBX and/or FreeSWITCH are inside NAT then then you may experience one way audio or no audio in either direction the following information can help you get audio working in both directions.

Default config

The external_rtp_ip and external_sip_ip are set to $${local_ip_v4} in Advanced -> Variables by default or Advanced > Sip Profile settings. The local_ip_v4 variable is auto detected by FreeSWITCH. The variable can be also be overidden as a preset variable before it is used if you want to control the IP address that it represents.

  • This works good when the server has a public IP address.
  • It also works well when all phones are inside the same network and nothing needs to traverse the NAT. For example if you are using a SIP to TDM gateway and all your phones are in the same network.

SIP ALG

A SIP Application Layer Gateway (ALG) is a tool designed to help SIP traverse NAT. While the SIP ALG is good in theory it often causes more problems than it solves. Because of this it’s usually best to disable the SIP ALG on your firewall. An alternative way to disable it is to move SIP to a non standard port.

Static IP

FusionPBX is behind NAT and you have a static public IP address and you have phones on the same network and/or outside the network.

  • Set external_rtp_ip to autonat:xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx can be used also in some instances)
  • Set external_sip_ip to autonat:xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx can be used also in some instances)
  • If you don’t register a gateway to the carrier you may need to port forward SIP and RTP.

UPnP or PMP

FusionPBX is behind NAT and you don’t have a static ip address. You do have a firewall that is capable of UPnP or PMP.

  • Enable UPnP or PMP in your firewall
  • In Debian OS /etc/default/freeswitch remove -nonat
  • Make systemd aware of the changes. systemctl daemon-reload
  • Set external_rtp_ip to auto-nat
  • Set external_sip_ip to auto-nat
  • Restart FreeSWITCH. service freeswitch restart

Symptoms of misconfigured NAT

  • Call drops after 32 seconds.
  • One way audio
  • No audio

Version Upgrade

Version Upgrade can take several steps to perform. Below will show how to upgrade from specific versions.

Version 4.2 to 4.4

  1. Switch branches
mv /var/www/fusionpbx /var/www/fusionpbx-4.2
cd /var/www && git clone -b 4.4 https://github.com/fusionpbx/fusionpbx.git
chown -R www-data:www-data /var/www/fusionpbx

Note

Depending on when you installed the path /etc/fusionpbx might need created. A good way to tell is once you move the fusionpbx folder in step one and the FusionPBX is on a page with flags.

**Only** do this step if the folder **doesn't** already exist.

mkdir -p /etc/fusionpbx

mv /var/www/fusionpbx-4.2/resources/config.php /etc/fusionpbx
chown -R www-data:www-data /etc/fusionpbx/
  • Then go to Advanced -> Upgrade and update the Source Code, Schema, Menu Defaults and Permission Defaults.

Note

config.lua needs to be read and write by the webserver in order for advanced > default settings to update config.lua with new path information. Make sure config.lua and config.php are in /etc/fuionpbx/ . Don’t miss this step chown -R www-data:www-data /etc/fusionpbx/

  1. Update the following Dialplans.
user_exists
user_record
call_forward_all
local_extension
  • Update these Dialplans by first selecting and deleting their entries from within the Dialplan Manager for all domains. Then, run Advanced -> Upgrade -> App Defaults to retrieve the new versions of the diaplans.
  1. In the menu go to Status then SIP Status and press ‘Flush Cache’.
  2. Update old recordings set the record_name and record_path.
cd /usr/src
wget https://raw.githubusercontent.com/fusionpbx/fusionpbx-scripts/master/upgrade/record_path.php
php record_path.php
  1. Resave all Call Center Queues to update each call center queue dialplan. Then restart mod call center or FreeSWITCH.
  2. Advanced > Default Settings

The email section in Advanced > Default settings, changes have been made.

  • You will find duplicates with a blank value. The duplicates must be updated with the existing info from the originals. These duplicates are the new and correct settings. You’ll have to update these blank ones with the existing values (like smtp server info) to the new default ones. Then delete the original ones.
  • Don’t delete the blank entries. The code behind them are for version 4.4+ and the original ones are not.

Note

If you already deleted the blank ones, you’ll have to delete the email section then run Advanced > Upgrade > App Defaults check box. Then go back to Advanced > Default settings and set the email section back up.

Version 4.0 to 4.2

1. Update the source code. From the web interface go to the Menu -> Advanced > Upgrade page. Check the source box and the press execute. If you see a red bar it indicates there was a git conflict and you will need to update from console instead. If you don’t see the source box then you will need to update from the console.

cd /var/www/fusionpbx
git stash
git pull
chown -R www-data:www-data /var/www/fusionpbx
  1. If the page goes blank type in the url http://domain.com/logout.php This should bring you back to the login screen.

3. Udate the Schema. Advanced -> Upgrade Check the Schema box and then then press execute. https://domain.com/core/upgrade/index.php

  1. Check the box for App Defaults and run execute.
  2. Check the box for Menu Defaults and run execute. This will update the menu to the default menu. The menu should now look like this.
_images/fusionpbx_new_menu.jpg
  1. Check the box for Permission Defaults and run execute. Permissions are store in a session to get new permissions logout and back in.
  2. Goto Dialplan > Dialplan Manager and delete “local_extension”. Then goto Advanced > Upgrade and only check box App Defaults and click execute. This will regenerate the new local_extension version.
  3. Go to Applications > Conference profiles. Edit each profile and replace $${hold_music} with local_stream://default
  4. Goto Advanced > Variables hold_music. Make sure it’s value is set as local_stream://default
Check Applications > Music On Hold to see if music is listed properly.
You should see in red default for the category and the kHz sub categories should be in blue.
If not, do the following

* Edit (Pencil icon on the right) the Category names to reflect default for 8, 16, 32, and 48kHz.
* After you click the pencil icon choose at the bottom the domain for the rates and click save.
* If the category is blank, you may have missed running Advanced > check box app defaults > execute or you may not have renamed autoload_configs/local_stream.conf.xml file to local_stream.conf.
* For custom music on hold check the path for the domain name and set select for the domain name to match the domain used in the path.
  1. Remove .xml from the end of the following file names
**Before**
autoload_configs/callcenter.conf.xml
autoload_configs/conference.conf.xml
autoload_configs/local_stream.conf.xml
**After**
autoload_configs/callcenter.conf
autoload_configs/conference.conf
autoload_configs/local_stream.conf
  1. Edit autoload_configs/lua.conf.xml adding “languages”. Restart of FreeSWITCH is required.
<param name="xml-handler-bindings" value="configuration,dialplan,directory,languages"/>
  1. Update Time Conditions (Bug Fix)
Goto Advanced > Upgrades page.  Check box Update Source, execute.
Goto Advanced > Default settings > Category > delete the category: time condition presets.
Goto Advanced > Upgrade >  check box App Defaults, execute.
Goto Advanced > Default settings. Click "Reload" at the top right. (This will get the new presets)

Next steps are for existing Time Conditions

Goto Apps > Time Conditions and edit the time conditions remove all holidays and hit save.
Select the holidays over again.

Note

Many of the provisioning templates were updated. If you use custom provisioning templates you should consider updating them with the new versions.

Version 3.8 to 4.0

Remove the comments from the script-directory in /usr/local/freeswitch/conf/autoload_configs/lua.conf.xml

If using the FreesWITCH package then remove $${base_dir} and set the full path to the scripts directory.

before:  <!--<param name="script-directory" value="$${base_dir}/scripts/?.lua"/>-->

after:   <param name="script-directory" value="/usr/local/freeswitch/scripts/?.lua"/>

Rebooting FreeSWITCH is required for this to take effect.

Version 3.6 to 3.8

Note: Upgrading can get very complex. If the production system is critical or you are intimidated from these upgrade instructions you may want FusionPBX paid support at http://www.fusionpbx.com/support.php
A standard ‘upgrade’ procedure should always be followed:
(1. Make a Backup!, 2. Advanced > Upgrade steps, 3. Update switch scripts, 4. Restart FreeSWITCH).

Beyond the standard upgrade procedure just described, the following will also need to be performed:

uncomment: <param name="script-directory" value="$${base_dir}/scripts/?.lua"/>
in: /usr/local/freeswitch/conf/autoload_configs/lua.conf.xml
* Rebuild all time conditions.
* After you edit a particular time condition, click the Dialplan button on the top right to see what was there originally.
* Delete the following dialplans from each domain then run Advanced -> Upgrade -> App Defaults. If using XML handler for the dialplan flush memcache. If using dialplans XML on the file system resave one of the dialplans to have FusionPBX rewrite the XML files.
* user_exists - call_timeout variable was added
* extension-intercom - It has been renamed to ‘page-extension’
* eavesdrop - Change ‘*‘88[ext] to ‘*‘33[ext] so that it doesn’t conflict with page-extension at ‘*‘8[ext]
* user_status - Has been renamed to ‘agent_status’
* page - Dialplan has been simplified.
* valet_park_out - Changed regex variable from $1 to $2
* local_extension - failure handler was added to support call forward on busy and no answer
* If using call center feature code ‘*‘22 edit each agent and add an agent id and password (pin number)
* Delete any dialplan with the ‘features’ context. These have been moved into the dialplan domain contexts.
* If using App -> XMPP, Content Manager, or Schema they have been moved dev -> branches -> apps directory need to pull files from there if you want to use any of them.
* For single tenant systems ‘default’ context is no longer used by default.
* Easiest way to update your system is go to Advanced -> Domains and edit your domain.
* Copy your current domain name then change the name to default then save the change.
* Now edit the domain name again and paste your original domain name or IP address whatever the domain originally was and save the changes
* Go to accounts extensions and save one extension. (not needed if using the XML handler)
* Go to Dialplan Manager and save one of the dialplans. (not needed if using the XML handler)
* FAX ( may require adjusting the paths and web server user account to match your server ‘www-data’ is used in this example)
* Delete all previous FAX dialplans
* Resave each fax server in the GUI.
* cd /var/www/fusionpbx/app/fax
* chown -R www-data:www-data fax_import.php
* Login into the GUI and use this path in your browser http://<domain-or-ip>/app/fax/fax_import.php
* rm /var/www/fusionpbx/app/fax/fax_import.php
* Groups and Permissions
If you go to Advanced Group Manager -> And you see what looks like duplicates of user, admin and superadmin groups then you need do the following instructions.

Remove permissions associated with all domain groups with names that match default global groups…
Use the Advanced -> SQL Query tool to do the following.
delete from v_group_permissions where domain_uuid is not null
   and (
       group_name = 'user'
       or group_name = 'admin'
       or group_name = 'superadmin'
       or group_name = 'agent'
       or group_name = 'public'
   )

Remove all domain groups having the same names as the default global groups
(retains any custom domain groups)...

   delete from v_groups where
   domain_uuid is not null
   and (
       group_name = 'user'
       or group_name = 'admin'
       or group_name = 'superadmin'
       or group_name = 'agent'
       or group_name = 'public'
   )

Empty the group_uuid field for any group user with a group_name value having
the same name as the default global groups (retains user assignments to custom domain groups)...

   update v_group_users set group_uuid = null where
   group_name = 'user'
   or group_name = 'admin'
   or group_name = 'superadmin'
   or group_name = 'agent'
   or group_name = 'public'

For group users with a null group_uuid, insert the group_uuid of the global group that matches the group_name value…
Run this code from Advanced -> Command -> PHP Command.
$sql = "select group_user_uuid, group_name ";
   $sql .= "from v_group_users where group_uuid is null";
   $prep_statement = $db->prepare(check_sql($sql));
   $prep_statement->execute();
   $result = $prep_statement->fetchAll(PDO::FETCH_NAMED);
   $result_count = count($result);
   unset($prep_statement);
   if ($result_count > 0) {
       foreach($result as $field) {
           //note group user uuid
               $group_user_uuid = $field['group_user_uuid'];
               $group_name = $field['group_name'];
           //get global group uuid
               $sql = "select group_uuid from v_groups ";
               $sql .= "where domain_uuid is null ";
               $sql .= "and group_name = '".$group_name."' ";
               $prep_statement = $db->prepare($sql);
               $prep_statement->execute();
               $sub_result = $prep_statement->fetch(PDO::FETCH_ASSOC);
               $sub_result_count = count($sub_result);
               unset ($prep_statement);
           //set group uuid
               if ($sub_result_count > 0) {
                   $sql = "update v_group_users ";
                   $sql .= "set group_uuid = '".$sub_result['group_uuid']."' ";
                   $sql .= "where group_user_uuid = '".$group_user_uuid."' ";
                   $count = $db->exec(check_sql($sql));
                   unset($sql);
               }
       }
   }

Apps menu disappeared
If your apps menu disappeared check that it wasn’t set to protected in the menu manager.
(advanced -> menu manager). If protected is true, it won’t show up.

Version 3.5 to 3.6


When running Upgrade -> Schema
If you see ALTER TABLE v_xml_cdr ADD json json; every time you run the upgrade schema then you likely have an old version of Postgres. To fix this either upgrade to the latest Postgres server or run the following SQL statement from advanced -> sql query.
ALTER TABLE v_xml_cdr ADD json text;
Potential issue with call recording after upgrading/switch to latest 3.6 stable.
After upgrading to 3.6 stable from 3.5 dev I noticed that calls were no longer being recorded. This was due to the file extension being missing from the recording path. If this is happening to you it is an easy fix.
Go to Advanced -> variables -> category default and add the variable record_ext and set it to either wav or mp3. Choosing mp3 depends upon whether or not you have mod_shout installed and enabled.

Version 3.4 to 3.5


Gateways now use the gateway_uuid as the name that is used when interacting with FreeSWITCH. This script is needed to help change the gateway names used in the outbound routes. You may need to remove the old gateway file names from the conf/sip_profiles/external directory.
cd /var/www/fusionpbx
wget http://fusionpbx.googlecode.com/svn/branches/dev/scripts/upgrade/gateway_uuid.php
http://x.x.x.x/gateway_uuid.php
rm gateway_uuid.php
* Go To Advanced -> Default Settings -> Switch Category -> Sub category gateways change to sip_profiles
Permissions Issues - (access denied errors)
Due to changes which improve consistency throughout the product, some Users have had problem with superadmin receiving “access denied” errors after the upgrade.

* Go To Advanced -> Group Manager
* On superadmin click Permissions and then Restore Default

You may need to execute this operation for each group.
Default Settings
In the switch category change gateways to sip_profiles

Version 3.3 to 3.4


Update the source as described on this page, menu manager restore default, group manager edit a group restore default, advanced -> upgrade schema.

FusionPBX 3.4 hunt groups have been deprecated. Use the following script run it only one time to move existing hunt groups to ring groups.
cd /var/www/fusionpbx
wget https://github.com/fusionpbx/fusionpbx-scripts/tree/master/upgrade/hunt_group_export.php
http://x.x.x.x/hunt_group_export.php
rm -r hunt_group_export.php

Ring groups were expanded to add ability to call external numbers and match other missing hunt group features. A new table was created to accomodate this.
cd /var/www/fusionpbx
wget https://github.com/fusionpbx/fusionpbx-scripts/tree/master/upgrade/ring_group_extensions.php
http://x.x.x.x/ring_group_extensions.php
rm ring_group_extensions.php

Version 3.2 to 3.3


FreeSWITCH changed the syntax to connect to the database so numerous LUA scripts had to be updated. If you customized any of the lua scripts make a backup of the FreeSWITCH scripts directory. Then remove the contents of the freeswitch/scripts directory and then run advanced -> upgrade schema (which will detect the missing scripts and replace them).

Version 3.1.4 to 3.2


Ubuntu/Debian
cd /var/www/fusionpbx
git pull
Advanced -> Upgrade Schema
Menu
If you cant see the menu after upgrading try the following in your browser replace x.x.x.x with your ip or domain name.
x.x.x.x/core/menu/menu.php
Edit the menu make sure the language is set to en-us.
Press **Restore Default**
Default settings
x.x.x.x/core/default_settings/default_settings.php
category: language
type: code
value: en-us
Email

Migrating email to the new FusionPBX native voicemail.

wget https://github.com/fusionpbx/fusionpbx-scripts/tree/master/upgrade/voicemail_export.php
Run from the browser it will take the voicemail data from the FreeSWITCH database and copy the information into the FusionPBX database.
http://x.x.x.x/voicemail_export.php

Remove the export file

rm voicemail_export.php
Call Forward / Follow Me
No longer using hunt groups. So the backend has changed so keep in mind that you need to reset call forward and follow me settings. They are still listed in app -> hunt groups. After updating the info in call forward, follow me you should delete the hunt group.

Version 2 to 3.0


LESS than or EQUAL to revision 1877, use the migration tool. https://github.com/fusionpbx/fusionpbx-scripts/tree/master/upgrade
If greater than revision 1877, use latest.
| When upgrading from previous versions, you may encounter the following issues:
Changes to your dial plan or extensions don’t take effect
* Go to the Advanced -> Default Settings page
* Remove “/default” from the end of your dialplan and extensions directories

Missing menus
* Go to hxxps://yourdomain.com/core/menu/menu.php
* Click the edit (e) button beside default
* Click the Restore Default button
* Check that all the entries in the list are accessible by the appropriate groups
Emails not being sent for voicemail or fax
* Double check the SMTP settings on the System -> Settings page
* Save it, even if you haven’t changed anything

Release Revisions

  • r0001 is 1.0 release - 6 Nov 2009
  • r2523 is 3.0 release - 3 May 2012
  • r2585 is 3.0.4 release - 24 May 2012
  • r2757 is 3.1 release - 18 Aug 2012
  • r2777 is 3.1.1 release - 26 Aug 2012
  • r2827 is 3.1.2 release - 12 Sep 2012
  • r2897 is 3.1.3 release - 26 Sep 2012
  • r2907 is 3.1.4 release - 27 Sep 2012
  • r3694 is 3.2 release - 19 Jan 2013
  • r3978 is 3.3 release - 1 May 2013
  • r4605 is 3.4 release - 28 Sep 2013
  • r6747 is 3.6.1 release - 22 Aug 2014
  • r8481 is 3.8.3 release - 11 May 2014
  • r793d386 is 4.0 release - Aug 2015
  • r4fdb6e9 is 4.1 release - Dec 2015
  • rxxxxxxx is 4.2 release - xxx 2016

SQLite

SQLite is the FreeSWITCH default. Databases are located in the freeswitch/db directory.

Postgres

Postgres native support will be in FreeSWITCH 1.2.4 but has been available in the Main GIT branch.

Dependencies

libpq and the associated dev packages are required

Configure

To enable PostgresSQL as a native client in FreeSWITCH you must enable it during the build when running configure. ** ./configure –enable-core-pgsql-support **

switch.conf.xml

Under the Settings area insert the following line

<param name=”core-db-dsn” value=”pgsql;hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password=’’ options=’-c client_min_messages=NOTICE’ application_name=’freeswitch’” />

Releases

GIT Version Date
  4.4.1 28 May 2018
  4.4.0 5 April 2018
  4.2.2 30 January 2017
  4.2.1 14 December 2016
  4.2.0 11 September 2016
  4.0.0 16 August 2015
SVN Version Date
r6404 3.6 Aug 17, 2014
r6846 3.6.2 Sept 11, 2014
r7280 3.6.3 Nov 24, 2014
r8427 3.8 May 5, 2015

Regular Expressions

  • ^ Start of the string
  • $ End of the string
  • ? optional example 1? makes the 1 optional
  • \d{10} 10 digits
  • ( and ) gets matching digits inside brackets sets a $1 and second set of brackets creates $2
  • ^\+?1?(\d{10})$ 10 to 11 digits and e164 format sets $1 to 10 digits
  • [0-9] Any number between 0 to 9
  • [2-9] Any number between 2 to 9
  • | The pipe works like an OR. Example ^101$|^102$ matches 101 or 102
  • ^9(\d{10})$ This strips off the 9 and the $1 value is the remaining 10 digits

Dialplan Expression

  • Two digits: ^(\d{2})$
  • Three digits: ^(\d{3})$
  • Four digits: ^(\d{4})$
  • FIve digits: ^(\d{5})$
  • Six digits: ^(\d{6})$
  • Seven digits(Local Calling): ^(\d{7})$
  • Eight digits: ^(\d{8})$
  • Nine digits: ^(\d{9})$
  • Ten digits(Long Distance): ^(\d{10})$
  • Eleven digits(Long Distance with a 1): ^\+?(\d{11})$
  • North America: ^\+?1?(\d{10})$
  • North America International: ^(011\d{9,17})$
  • Caribbean: ^(?:+1|1)((?:684|264|268|242|246|441|284|345|767|809|829|849|473|876|664|670|787|939|869|758|784|721|868|649)d{7})$
  • Europe International: ^(00\d{9,17})$
  • International: ^(\d{12,20})$
  • 311 Information: ^(311)$
  • 711 TTY: ^(711)$
  • 911 Emergency: ^(911)$
  • Toll Free: ^1?(8(00|55|66|77|88)[2-9]\d{6})$
  • INUM: ^0118835100\d{8}$
  • Dial 9 then Two digits: ^9(\d{2})$
  • Dial 9 then Three digits: ^9(\d{3})$
  • Dial 9 then Four digits: ^9(\d{4})$
  • Dial 9 then Five digits: ^9(\d{5})$
  • Dial 9 then Six digits: ^9(\d{6})$
  • Dial 9 then Seven digits: ^9(\d{7})$
  • Dial 9 then Eight digits: ^9(\d{8})$
  • Dial 9 then Nine digits: ^9(\d{9})$
  • Dial 9 then Ten digits: ^9(\d{10})$
  • Dial 9 then Eleven digits: ^9(\d{11})$
  • Dial 9 then International: ^9(\d{12,20})$

Links

PostgreSQL

PostgreSQL is a enterprise grade open source database. http://www.postgresql.org/

Backup

The following assumes the database username is fusionpbx and the database to backup is fusionpbx. Make sure you have the database password ready.

su postgres
pg_dump -U fusionpbx fusionpbx -b -v -f /tmp/fusionpbx.sql

Restore

Assuming username fusionpbx and database fusionpbx

psql -U fusionpbx -d fusionpbx -f fusionpbx.sql

Console

su postgres
psql

list the databases

\l

connect to the database

\connect fusionpbx

or

\c fusionpbx

list tables

\d

drop the database

DROP DATABASE fusionpbx;

create the database

CREATE DATABASE fusionpbx;

Shared Line Appearance

Shared Line Apprearance(SLA) also known in older phone systems as a “Key System”.

FusionPBX Settings

FusionPBX Menu Advanced > SIP Profiles > edit a profile to enable SLA.

_images/fusionpbx_multiple_reg_true.jpg
  • name: multiple-registrations
  • value: contact
  • enabled: true

Polycom SLA

FusionPBX Menu Accounts > Device > Edit a specific device.

_images/fusionpbx_polycom_shared_line.jpg
  • Line > Shared Line
  • Options: shared, private

CDR Archive Server

  • Note: This feature is on version 4.5+
Fusionpbx has the ability to access CDR records on a seperate archive database. This is helpful for longterm CDR storage while keeping your active database small. When the feature is enabled you will see an “ARCHIVE” button in CDR page that accesses records on your archive database.
The first step is to install an archive database. This can be done by standing up another fusionpbx server or by setting up a postgres server. If postgres is installed by itself you will need to manage the indexes, tables names and column names manually on the archive server. They need to match the values on the live database.
Once you get your archive database setup and can access both databases in both directions (live <-> archive), you will need a mechanism to move the CDR Records from the live database to the archive database. In this example I have a complete fusionpbx install on the archive server. That way I can use the fusionpbx web gui to explore the records and use the Upgrade feature to keep the table & column names in sync.

Move the Records

Create a shell script to copy the records.
touch /etc/cron.daily/db_copy.sh
chmod +x /etc/cron.daily/db_copy.sh
nano /etc/cron.daily/db_copy.sh
#!/bin/sh

#copy the data from the fusion db to a local csv file
psql --host=x.x.x --username=fusionpbx -c "\copy (SELECT * FROM v_domains) TO '/tmp/domains.csv' WITH CSV"
psql --host=x.x.x --username=fusionpbx -c "\copy (SELECT * FROM v_fax_logs) TO '/tmp/fax_logs.csv' WITH CSV"
psql --host=x.x.x --username=fusionpbx -c "\copy (SELECT * FROM v_xml_cdr) TO '/tmp/xml_cdr.csv' WITH CSV"
psql --host=x.x.x --username=fusionpbx -c "\copy (SELECT * FROM v_conference_sessions) TO '/tmp/conference_sessions.csv' WITH CSV"
psql --host=x.x.x --username=fusionpbx -c "\copy (SELECT * FROM v_conference_session_details) TO '/tmp/conference_session_details.csv' WITH CSV"

#Insert the data into the cdr server
# - create a temp tables
# - copy the csv data to the temp tables
# - insert data from the temp table to the real tables
# - delete the temp tables
# - remove the json data from the cdrs. too much space
psql --host=x.x.x.x --username=fusionpbx << EOF

CREATE TEMP TABLE tmp_domains AS SELECT * FROM v_domains WITH NO DATA;
CREATE TEMP TABLE tmp_fax_logs AS SELECT * FROM v_fax_logs WITH NO DATA;
CREATE TEMP TABLE tmp_xml_cdr AS SELECT * FROM v_xml_cdr WITH NO DATA;
CREATE TEMP TABLE tmp_conference_sessions AS SELECT * FROM v_conference_sessions WITH NO DATA;
CREATE TEMP TABLE tmp_conference_session_details AS SELECT * FROM v_conference_session_details WITH NO DATA;

COPY tmp_domains FROM '/tmp/domains.csv' DELIMITER ',' CSV HEADER;
COPY tmp_fax_logs FROM '/tmp/fax_logs.csv' DELIMITER ',' CSV HEADER;
COPY tmp_xml_cdr FROM '/tmp/xml_cdr.csv' DELIMITER ',' CSV HEADER;
COPY tmp_conference_sessions FROM '/tmp/conference_sessions.csv' DELIMITER ',' CSV HEADER;
COPY tmp_conference_session_details FROM '/tmp/conference_session_details.csv' DELIMITER ',' CSV HEADER;

INSERT INTO v_domains SELECT DISTINCT ON (domain_uuid) * FROM tmp_domains ON CONFLICT DO NOTHING;
INSERT INTO v_fax_logs SELECT DISTINCT ON (fax_log_uuid) * FROM tmp_fax_logs ON CONFLICT DO NOTHING;
INSERT INTO v_xml_cdr SELECT DISTINCT ON (xml_cdr_uuid) * FROM tmp_xml_cdr ON CONFLICT DO NOTHING;
INSERT INTO v_conference_sessions SELECT DISTINCT ON (conference_session_uuid) * FROM tmp_conference_sessions ON CONFLICT DO NOTHING;
INSERT INTO v_conference_session_details SELECT DISTINCT ON (conference_session_detail_uuid) * FROM tmp_conference_session_details ON CONFLICT DO NOTHING;

DROP TABLE tmp_domains;
DROP TABLE tmp_fax_logs;
DROP TABLE tmp_xml_cdr;
DROP TABLE tmp_conference_sessions;
DROP TABLE tmp_conference_session_details;

UPDATE v_xml_cdr SET json = NULL;

EOF

#remove the csv files
rm /tmp/domains.csv
rm /tmp/fax_logs.csv
rm /tmp/xml_cdr.csv
rm /tmp/conference_sessions.csv
rm /tmp/conference_session_details.csv
Add to cron
crontab -e
15 0 * * * bash /etc/cron.daily/db_copy.sh
  • Note: In this example I remove the json data from the records. You will need to comment out the “SET json = NULL” line if you want to keep the call variables.
CDR

FusionPBX menu Apps > CDR

Setup your live server to connect to the archive database.

Default Setting Subcategory Default Setting Name Default Setting Value Setting Enabled Default Setting Description
archive_database_driver text pgsql TRUE Archive Database Driver
archive_database_host text x.x.x.x TRUE IP/Hostname of Archive Database
archive_database_password text somethingSecret TRUE Archive Database Password
archive_database_port text 5432 TRUE Archive Database Port
archive_database_username text fusionpbx TRUE Archive Database Username
archive_database boolean TRUE FALSE Enable Dedicated CDR Database Access
archive_database_name text fusionpbx FALSE Archive Database Name

Contributing

Contributing

There are many ways to help the FusionPBX project.

What We Need:

  1. Developers
  2. Technical Writers
  3. Translators
  4. Quality Assurance Testers
  5. Documentors

Note

If you are planning to contribute to any of our github repos we require that you sign the FusionPBX Contributor License Agreement. This mainly protects FusionPBX and our users read: you from code that could be inserted that might pose a legal problem. It does this by verifying that the code you are contributing is yours to give and the you give it freely and irrevocably to the project.

How to Get Started:

  1. Watch the “FusionPBX Pull Requests with Github” Youtube Video https://youtu.be/SPUe7S4Z6ms
  1. If you have a good handle on PHP, Lua or SQL Development Might be the thing for you head over to the Development Manual
  2. Are you a FusionPBX power user and do you possible love to write? Check out the Documentation Guide or the Testing Guide
  3. Would you like to see FusionPBX in your native language and have the time to commit to staying on top of translations for releases? Check out the translation section to learn how to use our translation server.

Note

Contributing Code or Documentation requires knowledge of Git, Github and how to create pull requests on Github. This is not as bad as it sounds and if you are willing to learn we will help you through it.


Documentation Guide

Documentation Guide

This page shows an nice overview of the reStructuredText syntax. This is not a comprehensive list of everything you can do, but should be enough to get you up and running to contribute some really nice documentation. It is based on resources found at Sphinx .

To get your own local documentation repository running, simply

Getting Started

Getting Git Right

Learn Git in 15 Minutes Git Tutorial that will help you get started if you prefer. There is also awesome Git Tutorials on the Atlassian Git site. Here is the link on installing Git if you don’t have it yet Git Install

Setting up the Docs Locally

One of the great things about Git and documentation is that all people who contribute are encouraged to setup their own local copy of the docs for off-line editing. This by default will ensure that many backups of the documents exist and there is never any concern about losing them.

Assuming you have Python already, install Sphinx locally:

$ pip install sphinx sphinx-autobuild

Clone the FusionPBX Github documentation repository:

$ cd /path/to/where_you_want_the_docs
$ git clone https://github.com/fusionpbx/fusionpbx-docs.git
$ cd fusionpbx-docs

Edit files or add new ones then build your changes:

$ make html

Open index.html with your web browser and check your changes:

fusionpbx-docs/build/html/index.html

Edit your files and rebuild until you like what you see, then commit your changes and push to the public repository. Assuming the file you changed is called myfile.rst:

$ git add myfile.rst
$ git commit -m 'your commit message'
$ git push -u origin master

Text Formatting

Inline markup and special characters (e.g., bold, italic, verbatim)

There are a few special characters used to format text. The special character * is used to defined bold and italic text as shown in the table below. The backquote character ` is another special character used to create links to internal or external web pages as you will see in section Internal and External Links.

usage syntax HTML rendering
italic *italic* italic
bold **bold** bold
link `python <www.python.org>`__ python
verbatim ``*`` *

The double backquote is used to enter in verbatim mode, which can be used as the escaping character. There are some restrictions about the * and `` syntax. They

  • cannot not be nested,
  • content may not start or end with whitespace: * text* is wrong,
  • it must be separated from surrounding text by non-word characters like a space.

The use of backslash is a work around to second previous restrictions about whitespaces in the following case:

  • this is a *longish* paragraph is correct and gives longish.
  • this is a long*ish* paragraph is not interpreted as expected. You should use this is a long\ *ish* paragraph to obtain longish paragraph

In Python docstrings it will be necessary to escape any backslash characters so that they actually reach reStructuredText. The simplest way to do this is to use raw strings by adding the letter r in front of the docstring.

Python string Typical result
r"""\*escape* \`with` "\\"""" *escape* `with` "\"
"""\\*escape* \\`with` "\\\\"""" *escape* `with` "\"
"""\*escape* \`with` "\\"""" escape with ""

Headings

In order to write a title, you can either underline it or under and overline it. The following examples are correct titles.

*****
Title
*****

subtitle
########

subsubtitle
**********************
and so on

Two rules:

  • If under and overline are used, their length must be identical
  • The length of the underline must be at least as long as the title itself

Normally, there are no heading levels assigned to certain characters as the structure is determined from the succession of headings. However, it is better to stick to the same convention throughout a project. For instance:

  • # with overline, for parts
  • * with overline, for chapters
  • =, for sections
  • -, for subsections
  • ^, for subsubsections
  • , for paragraphs

List and bullets

The following code:

* This is a bulleted list.
* It has two items, the second
  item uses two lines. (note the indentation)

1. This is a numbered list.
2. It has two items too.

#. This is a numbered list.
#. It has two items too.

gives:

  • This is a bulleted list.
  • It has two items, the second item uses two lines. (note the indentation)
  1. This is a numbered list.
  2. It has two items too.
  3. This is a numbered list.
  4. It has two items too.

Note

if two lists are separated by a blanck line only, then the two lists are not differentiated as you can see above.

What are directives

Sphinx and the RST syntax provides directives to include formatted text. As an example, let us consider the code-block syntax. It allows to insert code (here HTML) within your document:

.. code-block:: html
    :linenos:

    <h1>code block example</h1>

Its rendering is:

1
 <h1>code block example</h1>

Here, code-block is the name of the directive. html is an argument telling that the code is in HTML format, lineos is an option telling to insert line number and finally after a blank line is the text to include.

Note that options are tabulated.

Code and Literal blocks

How to include simple code

This easiest way to insert literal code blocks is to end a paragraph with the special marker made of a double coulumn ::. Then, the literal block must be indented:

This is a simple example::

    import math
    print 'import done'

or:

This is a simple example:
::

    import math
    print 'import done'

gives:

This is a simple example:

import math
print 'import done'

code-block directive

By default the syntax of the language is Python, but you can specify the language using the code-block directive as follows:

.. code-block:: html
   :linenos:

   <h1>code block example</h1>

produces

1
<h1>code block example</h1>

Include code with the literalinclude directive

Then, it is also possible to include the contents of a file as follows:

.. literalinclude:: filename
    :linenos:
    :language: python
    :lines: 1, 3-5
    :start-after: 3
    :end-before: 5

Tables

There are several ways to write tables. Use standard reStructuredText tables as explained here. They work fine in HTML output, however, there are some gotchas when using tables for LaTeX output.

The rendering of the table depends on the CSS/HTML style, not on sphinx itself.

Simple tables

Simple tables can be written as follows:

+---------+---------+-----------+
| 1       |  2      |  3        |
+---------+---------+-----------+

which gives:

1 2 3

Size of the cells can be adjusted as follows:

+---------------------+---------+---+
|1                    |        2| 3 |
+---------------------+---------+---+

renders as follows:

1 2 3

This syntax is quite limited, especially for multi cells/columns.

Multicells tables, first method

A first method is the following syntax:

+------------+------------+-----------+
| Header 1   | Header 2   | Header 3  |
+============+============+===========+
| body row 1 | column 2   | column 3  |
+------------+------------+-----------+
| body row 2 | Cells may span columns.|
+------------+------------+-----------+
| body row 3 | Cells may  | - Cells   |
+------------+ span rows. | - contain |
| body row 4 |            | - blocks. |
+------------+------------+-----------+

gives:

Header 1 Header 2 Header 3
body row 1 column 2 column 3
body row 2 Cells may span columns.
body row 3 Cells may span rows.
  • Cells
  • contain
  • blocks.
body row 4

Multicells table, second method

The previous syntax can be simplified:

=====  =====  ======
   Inputs     Output
------------  ------
  A      B    A or B
=====  =====  ======
False  False  False
True   False  True
=====  =====  ======

gives:

Inputs Output
A B A or B
False False False
True False True

Note

table and latex documents are not yet compatible in sphinx, and you should therefore precede them with the a special directive (.. htmlonly::)

The tabularcolumns directive

The previous examples work fine in HTML output, however there are some gotchas when using tables in LaTeX: the column width is hard to determine correctly automatically. For this reason, the following directive exists:

.. tabularcolumns:: column spec

This directive gives a “column spec” for the next table occurring in the source file. It can have values like:

|l|l|l|

which means three left-adjusted (LaTeX syntax). By default, Sphinx uses a table layout with L for every column. This code:

.. tabularcolumns:: |l|c|p{5cm}|

+--------------+---+-----------+
|  simple text | 2 | 3         |
+--------------+---+-----------+

gives

title    
simple text 2 3

The csv-table directive

Finally, a convenient way to create table is the usage of CSV-like syntax:

.. csv-table:: a title
   :header: "name", "firstname", "age"
   :widths: 20, 20, 10

   "Smith", "John", 40
   "Smith", "John, Junior", 20

that is rendered as follows:

a title
name firstname age
Smith John 40
Smith John, Junior 20

The toctree directive

Sooner or later you will want to structure your project documentation by having several RST files. The toctree directive allows you to insert other files within a RST file. The reason to use this directive is that RST does not have facilities to interconnect several documents, or split documents into multiple output files. The toctree directive looks like

.. toctree::
    :maxdepth: 2
    :numbered:
    :titlesonly:
    :glob:
    :hidden:

    intro.rst
    chapter1.rst
    chapter2.rst

It includes 3 RST files and shows a TOC that includes the title found in the RST documents.

Here are a few notes about the different options

  • maxdepth is used to indicates the depth of the tree.
  • numbered adds relevant section numbers.
  • titlesonly adds only the main title of each document
  • glob can be used to indicate that * and ? characters are used to indicate patterns.
  • hidden hides the toctree. It can be used to include files that do not need to be shown (e.g. a bibliography).

The glob option works as follows:

.. toctree::
    :glob:

    intro*
    recipe/*
    *

Note also that the title that appear in the toctree are the file’s title. You may want to change this behaviour by changing the toctree as follows:

.. toctree::
    :glob:

    Chapter1 description <chapter1>

So that the title of this section is more meaningful.

Images and figures

Include Images

Use:

.. image:: _static/images/logo.png
    :width: 200px
    :align: center
    :height: 100px
    :alt: alternate text

to put an image

alternate text

Include a Figure

.. figure:: _static/images/logo.png
    :width: 200px
    :align: center
    :height: 100px
    :alt: alternate text
    :figclass: align-center

    figure are like images but with a caption

    and whatever else youwish to add

    .. code-block:: python

        import image

gives

alternate text

figure are like images but with a caption

and whatever else youwish to add

import image

The option figclass is a CSS class that can be tuned for the final HTML rendering.

Boxes

Colored boxes: note, seealso, todo and warnings

There are simple directives like seealso that creates nice colored boxes:

See also

This is a simple seealso note.

created using:

.. seealso:: This is a simple **seealso** note.

You have also the note directive:

Note

This is a note box.

with

.. note::  This is a **note** box.

and the warning directive:

Warning

note the space between the directive and the text

generated with:

.. warning:: note the space between the directive and the text

There is another todo directive but requires an extension. See Useful extensions

Topic directive

A Topic directive allows to write a title and a text together within a box similarly to the note directive.

This code:

.. topic:: Your Topic Title

    Subsequent indented lines comprise
    the body of the topic, and are
    interpreted as body elements.

gives

Your Topic Title

Subsequent indented lines comprise the body of the topic, and are interpreted as body elements.

Others

Comments

Comments can be made by adding two dots at the beginning of a line as follows:

.. comments

Substitutions

Substitutions are defined as follows:

.. _Python: http://www.python.org/

and to refer to it, use the same syntax as for the internal links: just insert the alias in the text (e.g., Python_, which appears as Python ).

A second method is as follows:

.. |longtext| replace:: this is a very very long text to include

and then insert |longtext| wherever required.

glossary, centered, index, download and field list

Field list
Whatever:this is handy to create new field and the following text is indented
:Whatever: this is handy to create new field
glossary
.. glossary::
     apical
        at the top of the plant.

gives

apical
at the top of the plant.
index
.. index::
download
:download:`download samplet.py <_downloads/sample.py>`

gives download sample.py

hlist directive

hlist can be use to set a list on several columns.

.. hlist::
.. hlist::
    :columns: 3

    * first item
    * second item
    * 3d item
    * 4th item
    * 5th item
  • first item
  • second item
  • 3d item
  • 4th item
  • 5th item

Footnote

For footnotes, use [#name]_ to mark the footnote location, and add the footnote body at the bottom of the document after a “Footnotes” rubric heading, like so:

Some text that requires a footnote [#f1]_ .

.. rubric:: Footnotes

.. [#f1] Text of the first footnote.

You can also explicitly number the footnotes ([1]_) or use auto-numbered footnotes without names ([#]_). Here is an example [#footnote1]_.

Citations

Citation references, like [CIT2002] may be defined at the bottom of the page:

.. [CIT2002] A citation
          (as often used in journals).

and called as follows:

[CIT2002]_

More about aliases

Directives can be used within aliases:

.. |logo| image:: _static/images/logo.png
    :width: 20pt
    :height: 20pt

Using this image alias, you can insert it easily in the text |logo|, like this logo. This is especially useful when dealing with complicated code. For instance, in order to include 2 images within a table do as follows:

+---------+---------+-----------+
| |logo|  | |logo|  | |longtext||
+---------+---------+-----------+
logo logo this is a longish text to include within a table and which is longer than the width of the column.

Note

Not easy to get exactly what you want though.

Intersphinx

When you create a project, Sphinx generates a file containing an index to all the possible links (title, classes, functions, …).

You can refer to those index only if Sphinx knowns where to find this index. THis is possible thanks to the intersphinx option in your configuration file.

For instance, Python provides such a file, by default Sphinx knows about it. The following code can be found at the end of a typical Sphinx configuration file. Complete it to your needds:

# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {'http://docs.python.org/': None, }

file-wide metadata

when using the following syntax:

:fieldname: some contents

some special keywords are recognised. For instance, orphan, nocomments, tocdepth.

An example of rendering is the toctree of top of this page.

orphan

Sometimes, you have an rst file, that is not included in any rst files (when using include for instance). Yet, there are warnings. If you want to supprresse the warnings, include this code in the file:

:orphan:

There is also tocdepth and nocomments metadata. See Sphinx homepage.

metainformation

.. sectionauthor:: name <email>

Specifies the author of the current section.:

.. sectionauthor:: John Smith <js@python.org>

By default, this markup isn’t reflected in the output in any way, but you can set the configuration value show_authors to True to make them produce a paragraph in the output.

contents directives

.. contents::
.. contents:: a title for the contents
    :depth: 2
  • depth indicates the max section depth to be shown in the contents

Useful extensions

In the special file called conf.py, there is a variable called extensions. You can add extension in this variable. For instance:

extensions = [-
    'easydev.copybutton',
    'sphinx.ext.autodoc',
    'sphinx.ext.autosummary',
    'sphinx.ext.coverage',
    'sphinx.ext.graphviz',
    'sphinx.ext.doctest',
    'sphinx.ext.intersphinx',
    'sphinx.ext.todo',
    'sphinx.ext.coverage',
    'sphinx.ext.pngmath',
    'sphinx.ext.ifconfig',
    'matplotlib.sphinxext.only_directives',
    'matplotlib.sphinxext.plot_directive',
 ]

pngmath: Maths and Equations with LaTeX

The extension to be added is the pngmath from sphinx:

extensions.append('sphinx.ext.pngmath')

In order to include equations or simple Latex code in the text (e.g., \(\alpha \leq \beta\) ) use the following code:

:math:`\alpha > \beta`

Warning

The math markup can be used within RST files (to be parsed by Sphinx) but within your python’s docstring, the slashes need to be escaped ! :math:`\alpha` should therefore be written :math:`\\alpha` or put an “r” before the docstring

Note also, that you can easily include more complex mathematical expressions using the math directive:

.. math::

    n_{\mathrm{offset}} = \sum_{k=0}^{N-1} s_k n_k

Here is another:

\[n_{\mathrm{offset}} = \sum_{k=0}^{N-1} s_k n_k\]

It seems that there is no limitations to LaTeX usage:

\[s_k^{\mathrm{column}} = \prod_{j=0}^{k-1} d_j , \quad s_k^{\mathrm{row}} = \prod_{j=k+1}^{N-1} d_j .\]

TODO extension

Similarly to the note directive, one can include todo boxes but it requires the sphinx.ext.todo extension to be added in the conf.py file by adding two lines of code:

extensions.append('sphinx.ext.todo')
todo_include_todos=True
.. todo:: a todo box

.. rubric:: Footnotes

.. [#footnote1] this is a footnote aimed at illustrating the footnote capability.

.. rubric:: Bibliography

.. [CIT2002] A citation
     (as often used in journals).

Other

Other

Other section is bits of info that needs indexed for the PDF to populate all sections depending how sections are formatted.

XMPP Manager

XMPP Manager is an optional menu item. In order to have the option for XMPP Manager there are a few step to take to enble XMPP.

_images/fusionpbx_xmpp1.jpg

XMPP Profile

  • FusionPBX menu.
  • Accounts -> XMPP manager.
  • Click the plus on the right to create a profile.

Note

Google has since depricated xmpp service

In this example we will setup Google Talk and by creating a profile called gtalk.

Profile Name: gtalk
Username: your_user_account@gmail.com (use your account)
Password: use the correct password
Auto-Login: yes
XMPP Server: talk.google.com
_images/fusionpbx_xmpp2.jpg

Two approaches can be used for the next part.

Option 1.

Lets say my gmail number was 13051231234. This approach will send the inbound calls to the inbound routes with a destination number that is the default extension number that is set.

Default extension: 13051231234
Advanced -> Context: public

Option 2.

On a single tenant system. This will send the call to extension 1001 in the default context.

Default extension: 1001
Advanced -> Context: default

Option 3.

On a single tenant system. This will send the call to extension 1001 in the multi-tenant domain name.

Default extension: 1001
Advanced -> Context: your.domain.com

Save the settings and restart the module. Restart the ‘XMPP’ module from Advanced -> Modules page. Go back to Accounts -> XMPP if the status says ‘AUTHORIZED’ then you are ready to go.

Note If you are not getting AUTHORIZED you might need to goto the google account settings and choose “Allow less secure apps: ON” under the Sign-in & security section.

_images/fusionpbx_xmpp5.jpg

Outbound Routes

For this example we will use 11 digit dialing.

Gateway: XMPP
Dialplan Expression: 11 digits
Description: Google Talk
Press Save

If your XMPP profile is named something other than gtalk edit the outbound route you just created. Bridge statement should look like: dingaling/gtalk/+$1@voice.google.com replace gtalk with the profile name you chose and then save it.

Enable XMPP

XMPP manager is used to configure client side XMPP profiles. It can be used as a client to register to make and receive call with Google Talk or other XMPP servers.

GIT Manually add XMPP

After version 3.8 XMPP is optional. To add XMPP do the following

Goto command line

cd /tmp
git clone https://github.com/fusionpbx/fusionpbx-apps.git
cd fusionpbx-apps/
mv xmpp/ /var/www/fusionpbx/app/
cd /var/www/fusionpbx/app
chown www-data:www-data -R xmpp/

Goto Fusionpbx GUI

Goto the GUI and click advanced > menu manager > edit icon > click “Restore Defaults” at top right

Then goto Advanced > Upgrade click Schema, Data Types, and Permission Defaults then click execute

Click status > sip status > Flush Memcache

Log out then back in

You should now have XMPP Manager under Accounts.

WebRTC

WebRTC app for FusionPBX is made by editing an existing FusionPBX app code and adding the code from the “Master FreeSWITCH code example”. Also, keep in mind that you will need ssl certs working on the server.

_images/fusionpbx_webrtc.jpg

Note

There are two “sets” of code in this app. One being an existing app from FusionPBX and the code example from Master FreeSWITCH book in Chapter 8.

Prerequisites

  • Working install of FusionPBX
  • Working set of SSL certs (Not self signed) on said install of FusionPBX
  • Working mod_verto setup.
  • Patience

Install Steps

On your server

cd /usr/src
git clone https://github.com/fusionpbx/fusionpbx-apps
Move the directory 'webrtc' into your main FusionPBX directory
mv fusionpbx-apps/webrtc /var/www/fusionpbx/app
chown -R www-data:www-data /var/www/fusionpbx/app/webrtc
Log into the FusionPBX webpage
Advanced -> Upgrade
Menu Defaults and Permission Defaults.
Log out and back in.

Parking

Call “parking” transfers a current call to an available park extension, where the caller will listen to Music on Hold. The extension that originally received the call is now free to accept other calls or direct another extension to join the call that was parked.

For example:

The receptionist receives a call, and the caller would like to speak to the engineering department. The receptionist says “please hold while I transfer you,” and presses the PARK1 button. The call is sent to extension 5901 and the caller listens to music on hold. The receptionist is now free to make a call to her engineering staff, or pages the engineering page group and says “Engineering you have a call on PARK1.”

The Engineer can press the flashing park button on his phone, and he will be connected to the caller, and the park extension will be freed for another call.

Multiple park extensions can be created. Phones can be programmed with BLF functionality for parked extensions, so the users can see if there is a call in that extension.

Below is an example of how to provision a Yealink SIP-T32G, which has 3 Line buttons.

_images/call_park_yealink.jpg