Fusionpbx Docs
Fusionpbx Docs
Fusionpbx Docs
Mark J Crane
Len Graham
1 FusionPBX 3
1.1 Benefits of FusionPBX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 FusionPBX Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Our Ecosystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Getting Started 5
2.1 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Training . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1.1 Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1.2 Paid Training and technical support . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.2 Quick Install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.3 Let’s Encrypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.3.1 Dehydrated (Recommended) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.4 Provision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.4.1 Automatic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.4.2 Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.4.3 Advanced > Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.1.4.4 Phone Screen Capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.4.5 Phone Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.5 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.5.1 FusionPBX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.5.2 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.5.3 SSL / TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.5.4 Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.5.5 XML RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.5.6 Fail2ban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.5.7 SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.6 Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.6.1 Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.6.2 Crontab (optional) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.7 Restore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.8 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1.8.1 Iptables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1.8.2 Fail2ban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.8.3 PF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.1.9 Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
i
2.1.9.1 Fusionpbx Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.1.9.2 FreeSWITCH Sound Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1.9.3 app_languages.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3 Home 31
3.1 Home . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.1.1 Account Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.1.2 Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.1.2.1 Dashboard Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.3 Logout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4 Accounts 35
4.1 Accounts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.1 Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.1.1.1 Device Vendors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.1.1.2 Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.2 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1.2.1 Basic Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.1.2.2 Advanced Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.3 Gateways . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1.3.1 Basic Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.3.2 Advanced Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.1.4 Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.1.4.1 Users Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5 Dialplans 45
5.1 Dialplans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.1.1 Destinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.1.1.1 Destinations Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.1.2 Dialplan Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.1.3 Dialplan Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.1.3.1 Global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.1.3.2 Domain Specific . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.1.4 Dialplan Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.1.5 Inbound Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.1.5.1 Edit/Add Inbound Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.1.5.2 XML example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.1.6 Outbound Routes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.1.6.1 Pin Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.1.7 Advanced Dialplans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.1.7.1 Adding a Dialplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.1.7.2 Edit a Dialplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.1.7.3 Enable a Dialplan Destination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.1.7.4 Dialplan example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6 Applications 83
6.1 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.1.1 Bridges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.1.1.1 Bridge Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.1.2 Call block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6.1.3 Call Broadcast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.1.4 Call Center . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.1.4.1 Call Center Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.1.4.2 Call Center Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.1.4.3 Call Center Strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
ii
6.1.4.4 Agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1.4.5 Music On Hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1.4.6 Record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1.4.7 Time base score . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1.4.8 Max Wait Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1.4.9 Max Wait Time with No Agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1.4.10 Max Wait Time with No Agent Time Reached . . . . . . . . . . . . . . . . . . . . 89
6.1.4.11 Timeout Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1.4.12 Tier Rules Apply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.13 Tier Rule Wait Second . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.14 Tier Rule Wait Multiply Level . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.15 Tier Rule No Agent No Wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.16 Discard Abandoned After . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.17 Abandoned Resume Allowed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.18 Caller ID Name Prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.19 Announce Sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.20 Announce Frequency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.21 Exit Key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
6.1.4.22 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.1.4.23 Agent Call Center Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.1.5 Call Detail Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.1.5.1 Post Dial Delay (PDD) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.1.5.2 Recordings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.1.5.3 Possible issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.1.5.4 XML CDR configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.1.5.5 Harddrive space usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.1.5.6 CDR Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.1.6 Call Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.1.6.1 Call Flow Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.1.7 Call Recordings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.1.8 Call Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.1.8.1 Call Forward and Do No Disturb . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.1.9 Conference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.1.9.1 Conference Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.1.9.2 Enable Conferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.1.10 Conference Center . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.1.10.1 Conference Center Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.1.10.2 Conference Center Rooms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
6.1.11 Conference Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.1.11.1 Default Conference Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.1.12 Conference Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.1.12.1 Default Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.1.13 Contacts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.1.14 Fax Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.1.14.1 Fax Server Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.1.14.2 New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.1.14.3 Inbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.1.14.4 Sent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.1.14.5 Fax ATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.1.14.6 FAX Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.1.15 Follow Me . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.1.15.1 Follow Me Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.1.16 GS Wave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
6.1.17 IVR Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
iii
6.1.17.1 IVR Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.1.18 Operator Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.1.18.1 Operator Panel Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
6.1.19 Phrases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.1.20 Music on Hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.1.20.1 Music on Hold Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.1.21 Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.1.22 Recordings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
6.1.22.1 Create a Recording . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
6.1.22.2 Edit Recording . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.1.22.3 Applying Recordings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.1.22.4 Recordings Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.1.23 Ring Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.1.23.1 Ring Group Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
6.1.24 Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
6.1.25 Time Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
6.1.25.1 Time Conditions Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.1.25.2 Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
6.1.26 Voicemail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
6.1.26.1 Voicemail Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
6.1.26.2 Voicemail Transcription . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
7 Status 137
7.1 Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.1.1 Active Call Center . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.1.2 Active Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
7.1.3 Active Conferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
7.1.4 Active Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.1.5 Agent Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.1.6 CDR Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
7.1.6.1 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
7.1.7 Emails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
7.1.8 Extension Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
7.1.8.1 Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
7.1.9 Log Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
7.1.10 Registrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
7.1.11 Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
7.1.12 SIP Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.1.13 System Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
7.1.14 Traffic Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
8 Advanced 149
8.1 Advanced . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.1.1 Access Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.1.1.1 Access Control Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.1.2 App Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
8.1.3 Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
8.1.4 Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
8.1.5 Default Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
8.1.5.1 Adminer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.1.5.2 Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.1.5.3 Call Center . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.1.5.4 CDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
8.1.5.5 Dashboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
iv
8.1.5.6 Destinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
8.1.5.7 Domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
8.1.5.8 Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
8.1.5.9 Email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
8.1.5.10 Fax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
8.1.5.11 Follow Me . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
8.1.5.12 Ivr Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
8.1.5.13 Limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
8.1.5.14 Login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
8.1.5.15 Provision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
8.1.5.16 Recordings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
8.1.5.17 Ring Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
8.1.5.18 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
8.1.5.19 Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
8.1.5.20 Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
8.1.5.21 Theme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
8.1.5.22 Time Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
8.1.5.23 User . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.1.5.24 Voicemail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
8.1.6 Domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.1.6.1 Adding a domain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
8.1.6.2 Domain Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
8.1.7 Grammar Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
8.1.8 Group Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
8.1.8.1 User Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
8.1.9 Menu Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
8.1.10 Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
8.1.10.1 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.2 Auto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.3 Dialplan Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.4 Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.5 Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.6 File Format Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.7 Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.8 Loggers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.9 Say . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.10 Speech Recognition/Text to Speech . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.11 Streams/Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.10.12 XML Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.11 Number Translations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.1.12 PHP Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
8.1.13 Provision Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
8.1.14 Sip Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
8.1.14.1 Internal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8.1.14.2 External . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8.1.14.3 Internal ipv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8.1.14.4 External ipv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8.1.15 Scripts Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8.1.16 Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
8.1.17 Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
8.1.18 Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
8.1.18.1 How to Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
8.1.18.2 Move to a different Branch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
8.1.19 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
v
8.1.19.1 Codecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.2 Defaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.3 IP Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.4 Music on Hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.5 Ringtones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.6 Sip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.7 Sip Profile:External . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.8 Sip Profile:Internal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.9 Sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.10 Tones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.19.11 Xmpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
8.1.20 XML Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
9 Hardware 193
9.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
9.1.1 Auto Provision Phones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
9.1.1.1 Yealink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
9.1.1.2 Polycom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
9.1.1.3 Cisco SPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
9.1.1.4 Fanvil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
9.1.1.5 Grandstream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
9.1.1.6 Htek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
9.1.1.7 Zoiper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
9.1.2 Manually Provision Phones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
9.1.2.1 Yealink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
9.1.2.2 Polycom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
9.1.2.3 Cisco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
9.1.2.4 Fanvil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
9.1.2.5 GrandStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
9.1.2.6 Htek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
9.1.2.7 Zoiper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
9.1.2.8 SNOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
9.1.2.9 Phone Screen Capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
9.1.2.10 Product Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
9.1.3 Firewall Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
9.1.3.1 ASUS RT-AC66U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
9.1.3.2 Ubiquiti Edgerouter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
9.1.3.3 pfSense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
9.1.3.4 SonicWall TZ-SOHO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
9.1.3.5 ZyXel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
9.1.3.6 Cisco EA6500 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
10 Software 253
10.1 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
10.1.1 Software Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
10.1.1.1 Packet Capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
10.1.1.2 Call Quality and Monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
10.1.2 Using SNGREP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
10.1.2.1 Main Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
10.1.2.2 SPAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
10.1.2.3 Registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
10.1.2.4 Registration Expanded . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
10.1.2.5 Call Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
10.1.2.6 F3 Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
vi
10.1.2.7 F7 Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
10.1.2.8 F8 Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
10.1.3 TFTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
vii
11.1.7.24 Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
11.1.7.25 Dialplan Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.26 Dial by Name (*411) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.27 Direct Inward System Access (DISA) . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.28 Device Provisioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.29 Do Not Disturb (DND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.30 Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.31 Extension Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.32 Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.33 Fax Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.34 Follow Me . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
11.1.7.35 Gateways . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.36 Hot Desking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.37 Inbound and Outbound Call Routing . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.38 IVR Menus (Auto Attendant) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.39 Music on Hold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.40 Multi-Tenant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.41 Operator Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.42 Paging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.43 Parking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.44 Phrases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11.1.7.45 Provider Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.46 Re-branding and Customize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.47 Recordings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.48 Ring Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.49 Scalable and Redundant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.50 Time Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.51 User and Group Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.52 Voicemail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.53 Voicemail to Email . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.54 Voicemail Transcription . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.55 WebRTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
11.1.7.56 Additional Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
11.1.8 Toll Allow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
11.1.8.1 PERMIT TOLL CALLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
11.1.8.2 PREVENT TOLL CALLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
11.1.9 Network Address Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
11.1.9.1 Default config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
11.1.9.2 SIP ALG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
11.1.9.3 Static IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
11.1.9.4 UPnP or PMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
11.1.9.5 Symptoms of misconfigured NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
11.1.10 Version Upgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
11.1.10.1 4.4 to Master (what will become 4.6) . . . . . . . . . . . . . . . . . . . . . . . . . 291
11.1.10.2 Version 4.2 to 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
11.1.10.3 Version 4.0 to 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
11.1.10.4 Version 3.8 to 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
11.1.10.5 Version 3.6 to 3.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
11.1.10.6 Version 3.5 to 3.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
11.1.10.7 Version 3.4 to 3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
11.1.10.8 Version 3.3 to 3.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
11.1.10.9 Version 3.2 to 3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
11.1.10.10Version 3.1.4 to 3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
11.1.10.11Version 2 to 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
viii
11.1.10.12SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
11.1.10.13ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
11.1.10.14Postgres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
11.1.10.15Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
11.1.10.16Configure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
11.1.10.17switch.conf.xml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
11.1.11 Releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
11.1.12 Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
11.1.13 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
11.1.13.1 Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
11.1.13.2 Restore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
11.1.13.3 Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
11.1.13.4 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
11.1.14 Shared Line Appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
11.1.14.1 FusionPBX Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
11.1.14.2 Yealink SLA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
11.1.14.3 Polycom SLA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
11.1.15 CDR Archive Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
11.1.15.1 Move the Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
12 Contributing 311
12.1 Contributing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
ix
13.1.10.1 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
13.1.10.2 Substitutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
13.1.10.3 glossary, centered, index, download and field list . . . . . . . . . . . . . . . . . . . 326
13.1.10.4 Footnote . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
13.1.10.5 Citations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
13.1.10.6 More about aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
13.1.10.7 Intersphinx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
13.1.10.8 file-wide metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
13.1.10.9 metainformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
13.1.10.10contents directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
13.1.11 Useful extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
13.1.11.1 pngmath: Maths and Equations with LaTeX . . . . . . . . . . . . . . . . . . . . . 329
13.1.11.2 TODO extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
14 Other 331
14.1 Other . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
14.1.1 XMPP Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
14.1.1.1 Enable XMPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
14.1.2 WebRTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
14.1.2.1 Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
14.1.2.2 Install Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
14.1.3 Parking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Index 337
x
FusionPBX Documentation
Contents 1
FusionPBX Documentation
2 Contents
CHAPTER 1
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 .
3
FusionPBX Documentation
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.
4 Chapter 1. FusionPBX
CHAPTER 2
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!
2.1.1 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.
2.1.1.1 Free
FusionPBX has content available in this document and videos on YouTube to help get you started.
• Free Self help is available for you right here at docs.fusionpbx.com
• Videos at https://youtube.com/fusionpbx
5
FusionPBX Documentation
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. . .
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 depen-
dencies, 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;
If using Debian on Proxmox LXC containers please run the following BEFORE starting the FusionPBX install.
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 .
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
(continues on next page)
Additional information.
https://fusionpbx.com/support.php
https://www.fusionpbx.com
http://docs.fusionpbx.com
https://www.fusionpbx.com/training.php
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 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.
FusionPBX has an option to easliy and quickly install SSL with Let’s Encrypt using letsencrypt.sh With this script
you can choose either to request an SSL certificate with wildcard (*.domain.tld) or hostnames (domain.tld).
The letsencrypt.sh will do the following:
• Download dehydrated.
• Request an SSL certificate from Let’s Encrypt.
• Configure NGINX to use the SSL certificate.
• Combine and place SSL certificate in the proper FreeSWITCH directory for using TLS.
• Test and make sure the SSL cert works and outputs if sucessful.
Using letsencrypt.sh
With letsencrypt.sh you have the choice of creating an SSL certificate for a single domain (domain.tld), multiple sub
domains(sub.domain.tld, sub1.domain.tld, etc.domain.tld) or wildcard (*.domain.tld). The easy way however is using
the hostname method.
Hostname
cd /usr/src/fusionpbx-install.sh/debian/resources/
./letsencrypt.sh
Wildcard
cd /usr/src/fusionpbx-install.sh/debian/resources/
./letsencrypt.sh
+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting new certificate order from CA...
+ Received 1 authorizations URLs from the CA
+ Handling authorization for domain.tld
+ 1 pending challenge(s)
+ Deploying challenge tokens...
Note: When you define the txt record with your domain registrar be sure to use the output of the script you are
running and not what is in this example.
Now you can remove the following from the zone definition of domain.tld:
_acme-challenge.domain.tld. IN TXT "PY7ttk6no_5eG7WtAbO6qs5-NzA-Kigko375omKc0nw"
+ Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
deploy_cert()
Done!
**done**
Tip: Use the dig command to check that the txt record is correct. dig -t txt _acme-challenge.domain.tld
Output should show:
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
#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;
#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;
(continues on next page)
#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;
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;
}
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)
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
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;
}
2.1.4 Provision
2.1.4.1 Automatic
Auto provisioning is disabled by default. This is to give a chance to secure provisioning server with HTTP Authen-
tication 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.
• Yealink
• Polycom
• Cisco
• Fanvil
• Grandstream
• Htek
• Zoiper
2.1.4.2 Manual
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.
• Screen Capture
Remote phone book (Address Book) are based on the FusionPBX Contacts App.
• Set Enabled True for contact_extensions, contact_users and contact_groups in Default Settings.
• From the phone, go into the menu to update the phone book.
2.1.5 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.
2.1.5.1 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.
2.1.5.2 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
• Firewall page
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 manufacturer’s documentation to find one that is compatible
with HTTPS provisioning.
Let’s Encrypt provides free certificates for a single domain and they also now support wildcard certificates.
• Setup Let’s Encrypt with FusionPBX
2.1.5.4 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.
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
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. Advanced -> Settings page in the interface allows you
to change the password or the port. At the very least do not allow public access to the XML RPC port.
The 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 uninformed
co-worker could expose the server to the public internet at some point in the future. Multiple layers of security are
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 such as OpenVPN to access XML RPC over
port 8787 instead of opening port 8787 on the firewall.
2.1.5.6 Fail2ban
Fail2ban is also used to protect SSH, FreeSWITCH, the web server as well as other services. You can view any IP
addresses that have been blocked by Fail2ban with the following command.
iptables -L
2.1.5.7 SSH
Use strong passwords with SSH or even better use SSH keys for better protection of your servers.
2.1.6 Backup
It’s always good to have a backup method in place. Here are the steps to a basic backup method with FusionPBX. The
install script on Debian will automatically copy this backup script to /etc/cron.daily/fusionpbx-backup. Backups get
stored in /var/backups/fusionpbx/postgresql by default.
Be sure to change the password by replacing the zzzzzzzz in PGPASSWORD=”zzzzzzzz” with your database pass-
word. You can get the password from /etc/fusionpbx/config.php.
cd /etc/cron.daily
nano fusionpbx-backup
#!/bin/sh
export PGPASSWORD="zzz"
db_host=127.0.0.1
db_port=5432
(continues on next page)
now=$(date +%Y-%m-%d)
mkdir -p /var/backups/fusionpbx/postgresql
#package
#tar --exclude='/var/lib/freeswitch/recordings/*/archive' -zvcf /var/backups/
˓→fusionpbx/backup_$now.tgz /var/backups/fusionpbx/postgresql/fusionpbx_pgsql_$now.
˓→sounds/music/
#source
#tar -zvcf /var/backups/fusionpbx/backup_$now.tgz /var/backups/fusionpbx/postgresql/
˓→fusionpbx_pgsql_$now.sql /var/www/fusionpbx /usr/local/freeswitch/scripts /usr/
˓→freeswitch/conf /usr/local/freeswitch/sounds/music/
Files in /etc/cron.daily will execute automatically if they don’t have an extension like .sh for this reason the backup
script was renamed from fusionpbx-backup.sh to fusionpbx-backup and then it runs nightly without needing to use
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 or from the daily cron job.
2.1.7 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.
#!/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"
#restart freeswitch
service freeswitch restart
echo "Restore Complete";
2.1.8 Firewall
2.1.8.1 Iptables
Basic Rules
Optional Rules
Friendly Scanner
Optional
sudo iptables -L -v
iptables -L -v --line-numbers
Delete a line
Delete line 2
iptables -D INPUT 2
Block IP address
Flush iptables
Save Changes
Debian / Ubuntu
2.1.8.2 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
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.
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.
/etc/fail2ban/filter.d
Inside jail.local points to filters and defines maxretry, bantime, logpath, ports to block and more.
/etc/fail2ban/jail.local
Fail2ban logs the addresses that it blocks with the filter that triggered it.
/var/log/fail2ban.log
Note: You can use a dynamic ip address service like dyndns to whitelist a dynamic ip address.
2.1.8.3 PF
Basic Rules
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
2.1.9 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.
Global
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.
User
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/
• Free: https://freeswitch.org/stash/projects/FS/repos/freeswitch-sounds/browse
2.1.9.3 app_languages.php
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['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['button-add']['en-us'] = 'Add';
$text['button-add']['pt-pt'] = '';
?>
To use inside the code on each page that displays text. Place the following code at the top just after the permision_exists
To place a word, phrase or sentence it would be used in the code like the following example.
An additional example.
Home
3.1 Home
The Home menu gives access to Account Settings, Dashboard and the option to Logout.
31
FusionPBX Documentation
3.1.2 Dashboard
Quickly access information and tools related to your account. Depending on the user permissions, the user may see
less options on this screen.
32 Chapter 3. Home
FusionPBX Documentation
• 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 for-
warded to.
• System Counts: Number of Domains, Devices, Extensions, Gateways, Users, Destinations, CC Queues, IVR
Menus, Ring Groups, Voicemail and if they are disabled.
3.1.3 Logout
Logout when you are done, after an upgrade or specific setting change that requires a new session.
3.1. Home 33
FusionPBX Documentation
34 Chapter 3. Home
CHAPTER 4
Accounts
4.1 Accounts
In the Accounts menu you have access to devices, extensions, gateways, providers and users.
4.1.1 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.
35
FusionPBX Documentation
• (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
• To view steps on how to configure other devices to provision click here for the provisioning section.
Vendors can be added or removed to help fine tune the devices page when configuring specific vendor phones.
36 Chapter 4. Accounts
FusionPBX Documentation
4.1.1.2 Profiles
Define a set of keys as a profile. Any changes to the profile effect all devices assigned to the profile.
4.1.2 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.
4.1. Accounts 37
FusionPBX Documentation
• 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.
38 Chapter 4. Accounts
FusionPBX Documentation
• 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 in extensions. Be sure to know what and why you are changing these settings or you will risk
causing issues for the extention.
4.1.3 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.
4.1. Accounts 39
FusionPBX Documentation
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.
Click to visit
Select Accounts from the drop-down list and click on Gateways.
Click the
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
40 Chapter 4. Accounts
FusionPBX Documentation
• 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
4.1. Accounts 41
FusionPBX Documentation
• 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.
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.
42 Chapter 4. Accounts
FusionPBX Documentation
4.1.4 Users
4.1. Accounts 43
FusionPBX Documentation
44 Chapter 4. Accounts
CHAPTER 5
Dialplans
5.1 Dialplans
In the Dialplan menu you have access to Destinations, Dialplan Manager, Inbound Routes and Outbound Routes.
5.1.1 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)
Select Dialplan from the drop-down list and then click Destinations.
To add a destination click on the plus button on the right.
Enter the route information below and Click Save once complete.
45
FusionPBX Documentation
46 Chapter 5. Dialplans
FusionPBX Documentation
– Once a Destination is created an inbound route is also created. Click here to view more about Inbound
routes.
Note: Optional: Replace ^(?:+?1)?(d{10})$ in Inbound Routes with either 0123456789 or a DID Number depending
on the Route Destination setting.
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.
5.1. Dialplans 47
FusionPBX Documentation
48 Chapter 5. Dialplans
FusionPBX Documentation
5.1. Dialplans 49
FusionPBX Documentation
5.1.3.1 Global
Global specific dialplans are global to all tennants(domains). These can be changed, however the changes apply to all
tennants.
Not Found
Dialplan Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type Detail Data tail Break tail Inline tail Group tail Order
condition destina- ^*97(d+)$ 0 5
tion_number
action answer 0 10
action lua intercept.lua 0 15
$1
50 Chapter 5. Dialplans
FusionPBX Documentation
5.1. Dialplans 51
FusionPBX Documentation
52 Chapter 5. Dialplans
FusionPBX Documentation
Domain specific dialplans are all the same initially but can be changed. Those changes are per domain, thus helps
FusionPBX acheive multitennancy.
Hold Music
Agent Status
Dialplan Dialplan Dialplan Detail Dialplan De- Dialplan Dialplan De- Dialplan
Detail Tag Detail Type Data tail Break Detail Inline tail Group Detail Order
condition destina- ^*22$ 0 5
tion_number
action set agent_id=${sip_from_user} 0 10
action lua app.lua 0 15
agent_status
5.1. Dialplans 53
FusionPBX Documentation
Agent Status ID
Dialplan Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type Detail Data tail Break tail Inline tail Group tail Order
condition destina- ^*23$ 0 5
tion_number
action set agent_id= 0 10
action lua app.lua 0 15
agent_status
DISA
Provision
Dialplan Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type Detail Data tail Break tail Inline tail Group tail Order
condition destina- ^*11$ on-true 0 5
tion_number
action set reboot=true 0 10
action set action=login 0 15
action lua app.lua pro- 0 20
vision
condition destina- ^*12$ 1 30
tion_number
action set reboot=true 1 35
action set ac- 1 40
tion=logout
action lua app.lua pro- 1 45
vision
54 Chapter 5. Dialplans
FusionPBX Documentation
Call Forward
Call Block
Dialplan Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type Detail Data tail Break tail Inline tail Group tail Order
condition ${call_direction}^inbound$ 0 5
action lua app.lua 0 10
call_block
5.1. Dialplans 55
FusionPBX Documentation
Do Not Disturb
Voicemail(Vmain User)
56 Chapter 5. Dialplans
FusionPBX Documentation
Vmain
Directory
Dialplan Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type Detail Data tail Break tail Inline tail Group tail Order
condition destina- ^*411$ 0 5
tion_number
action lua directory.lua 0 10
Follow Me
Dialplan Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type Detail Data tail Break tail Inline tail Group tail Order
condition destina- ^*21$ 0 5
tion_number
action answer 0 10
action lua fol- 0 15
low_me.lua
5.1. Dialplans 57
FusionPBX Documentation
Recordings
Dialplan Dialplan Dialplan Detail Dialplan De- Dialplan Dialplan De- Dialplan
Detail Tag Detail Type Data tail Break Detail Inline tail Group Detail Order
condition destina- ^*(732)$ 0 5
tion_number
action answer 0 10
action set pin_number=37775310 0 15
action set record- 0 20
ing_slots=true
action set record- 0 25
ing_prefix=recording
action lua recordings.lua 0 30
Call Privacy
Dialplan Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type Detail Data tail Break tail Inline tail Group tail Order
condition destina- ^*67(d+)$ 0 5
tion_number
action privacy full 0 10
action set sip_h_Privacy=id 0 15
action set privacy=yes 0 20
action transfer $1 XML 0 25
${context}
Page
58 Chapter 5. Dialplans
FusionPBX Documentation
Valet Park In
Dialplan Dialplan Dialplan Detail Dialplan De- Dialplan Dialplan De- Dialplan
Detail Tag Detail Type Data tail Break Detail Inline tail Group Detail Order
condition destina- ^(park+)?*(59[0- 0 5
tion_number 9][0-9])$
action answer 0 10
action valet_park park@${domain_name} 0 15
$2
5.1. Dialplans 59
FusionPBX Documentation
Valet Parking
Di- Dialplan Detail Dialplan Detail Data Dialplan Dialplan Dialplan Dialplan
alplan Type Detail Detail Detail Detail
Detail Break Inline Group Order
Tag
condi- destination_number ^(park+)?(*59[0-9][0-9])$ never 0 5
tion
condi- ${sip_h_Referred- sip:(.*)@.* never 0 10
tion By}
action set referred_by_user=$1 0 15
condi- destination_number ^(park+)?(*59[0-9][0-9])$ never 1 25
tion
action set park_in_use=false TRUE 1 30
action set park_lot=$2 TRUE 1 35
condi- destination_number ^(park+)?(*59[0-9][0-9])$ 2 45
tion
condi- ${cond TRUE never 2 50
tion ${sip_h_Referred-
By} == ‘’ ? false :
true}
action set park_in_use=${regex TRUE 2 55
${valet_info
park@${domain_name}}|${park_lot}}
condi- ${park_in_use} TRUE never 3 65
tion
action transfer ${referred_by_user} XML 3 70
${context}
anti- set valet_parking_timeout=180 3 75
action
anti- set valet_hold_music=${hold_music} 3 80
action
anti- set valet_parking_orbit_exten=${referred_by_user} 3 85
action
anti- valet_park park@${domain_name} 3 90
action ${park_lot}
60 Chapter 5. Dialplans
FusionPBX Documentation
User Exists
Caller Details
Call Direction
Dialplan Dialplan Dialplan Detail Dialplan De- Dialplan Dialplan De- Dialplan
Detail Tag Detail Type Data tail Break Detail Inline tail Group Detail Order
condition ${call_direction}
^(in- never 0 5
bound|outbound|local)$
anti-action export call_direction=local 0 10
Variables
Call Limit
62 Chapter 5. Dialplans
FusionPBX Documentation
Is Local
Dialplan Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type Detail Data tail Break tail Inline tail Group tail Order
condition ${user_exists} FALSE 0 5
action lua app.lua 0 10
is_local
User Record
5.1. Dialplans 63
FusionPBX Documentation
Table 2 – continued fr
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data
action set record_name=${uuid}.${record_ext}
action set recording_follow_transfer=true
action set record_append=true
action set record_in_progress=true
action record_session ${record_path}/${record_name}
Redial
Speed Dial
Dialplan Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type Detail Data tail Break tail Inline tail Group tail Order
condition destina- ^*0(.*)$ 0 5
tion_number
action lua app.lua 0 10
speed_dial
$1
64 Chapter 5. Dialplans
FusionPBX Documentation
Default Caller ID
Dialplan Dialplan De- Dialplan Detail Data Dialplan Dialplan Dialplan Dialplan
Detail tail Type Detail Detail Detail Detail
Tag Break Inline Group Order
condi- ${emer- ^$ never 0 5
tion gency_caller_id_number}
action set emer- TRUE 0 10
gency_caller_id_name=${default_emergency_caller_id_name}
action set emer- TRUE 0 15
gency_caller_id_number=${default_emergency_caller_id_number}
condi- ${out- ^$ never 1 25
tion bound_caller_id_number}
action set out- TRUE 1 30
bound_caller_id_name=${default_outbound_caller_id_name}
action set out- TRUE 1 35
bound_caller_id_number=${default_outbound_caller_id_number}
Group Intercept
Dialplan Dialplan Detail Dialplan Dialplan De- Dialplan Dialplan De- Dialplan
Detail Tag Type Detail Data tail Break Detail Inline tail Group Detail Order
condition destina- ^*8$ 0 5
tion_number
condition ${sip_h_X- ^(.+)$ on-true 0 10
intercept_uuid}
action intercept $1 0 15
condition 1 25
action answer 1 30
action lua inter- 1 35
cept_group.lua
Conf Xfer
5.1. Dialplans 65
FusionPBX Documentation
Ta
Dialplan Detail Tag Dialplan Detail Type Dialplan Detail Data
action conference ${conf_xfer_number}@page
condition destination_number ^conf_enter_number$
action digit_action_set_realm none
action read 2 11 ‘tone_stream://%(10000,0,350,440)’ target_num 30000 #
action execute_extension conf_bridge_${target_num} XML conf-xfer@${domain_name}
condition destination_number ^conf_bridge_$
action execute_extension conf_add_end XML conf-xfer@${domain_name}
condition destination_number ^conf_bridge_*$
action execute_extension conf_add_end XML conf-xfer@${domain_name}
condition destination_number ^conf_bridge_(d{2,7})$
action digit_action_set_realm conf-xfer
action bridge {conf_xfer_number=${conf_xfer_number},transfer_after_bridge=conf_enter_to:XM
action execute_extension conf_enter_number XML conf-xfer@${domain_name}
condition destination_number ^conf_bridge_
action playback voicemail/vm-that_was_an_invalid_ext.wav
action execute_extension conf_enter_number XML conf-xfer@${domain_name}
condition destination_number ^conf_enter_to$
action unbind_meta_app
action bind_digit_action conf,*#,exec:execute_extension,conf_add_begin XML conf-xfer@${domain_name}
action digit_action_set_realm conf
action answer
action playback tone_stream://L=1;%(500, 0, 640)
action conference ${conf_xfer_number}@page
condition destination_number ^conf_xfer_from_dialplan$
action lua transfer2.lua ${uuid} conf_add_begin::XML::conf-xfer@${domain_name} conf_en
Page Extension
Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type tail Data tail Break tail Inline tail Group tail Order
condition destina- ^*8(d{2,7})$ 0 5
tion_number
action set destina- 0 10
tions=$1
action set pin_number=87462988 0 15
action set mute=true 0 20
action set modera- 0 25
tor=false
action lua page.lua 0 30
66 Chapter 5. Dialplans
FusionPBX Documentation
Eavesdrop
Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type tail Data tail Break tail Inline tail Group tail Order
condition destina- ^*33(d{2,7})$ 0 5
tion_number
action answer 0 10
action set pin_number=03667751 0 15
action lua eavesdrop.lua 0 20
$1
Call Return
Extension Queue
5.1. Dialplans 67
FusionPBX Documentation
Wake Up
Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type tail Data tail Break tail Inline tail Group tail Order
condition destina- ^*(925)$ 0 5
tion_number
action answer 0 10
action set pin_number=14509639 0 15
action set time_zone_offset=- 0 20
7
action lua wakeup.lua 0 25
dx
ATT Xfer
68 Chapter 5. Dialplans
FusionPBX Documentation
Evesdrop
Dialplan Dialplan Dialplan De- Dialplan De- Dialplan De- Dialplan De- Dialplan De-
Detail Tag Detail Type tail Data tail Break tail Inline tail Group tail Order
condition destina- ^*33(d{2,7})$ 0 5
tion_number
action answer 0 10
action set pin_number=03667751 0 15
action lua eavesdrop.lua 0 20
$1
Please Hold
Cluecon Weekly
5.1. Dialplans 69
FusionPBX Documentation
cf
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.
70 Chapter 5. Dialplans
FusionPBX Documentation
5.1. Dialplans 71
FusionPBX Documentation
72 Chapter 5. Dialplans
FusionPBX Documentation
5.1. Dialplans 73
FusionPBX Documentation
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.
74 Chapter 5. Dialplans
FusionPBX Documentation
5.1. Dialplans 75
FusionPBX Documentation
</condition>
</extension>
<action application="answer"/>
<action application="bridge" data="sofia/${use_profile}/lenny@sip.itslenny.
˓→com:5060"/>
</condition>
</extension>
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.
76 Chapter 5. Dialplans
FusionPBX Documentation
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
(continues on next page)
5.1. Dialplans 77
FusionPBX Documentation
By using VoiceTel you help support FusionPBX. Thank you for your support!
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”.
Before the bridge action on the outbound route add the following actions
• 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
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
• In the output that is returned, look for the string sofia/gateway/ and the gateway name. This is the gateway
your call is using.
78 Chapter 5. Dialplans
FusionPBX Documentation
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.
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.
Find the dialplan you want to edit and click the edit icon.
Once you enter data into the empty fields at the bottom and click save, more blank fileds will populate if needed.
5.1. Dialplans 79
FusionPBX Documentation
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.
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.
80 Chapter 5. Dialplans
FusionPBX Documentation
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.
5.1. Dialplans 81
FusionPBX Documentation
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.
82 Chapter 5. Dialplans
CHAPTER 6
Applications
6.1 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.
6.1.1 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.
83
FusionPBX Documentation
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 :_:
loopback/12085551234
loopback/12085551234,loopback/12085552222,loopback/12085553333
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
{abc=123}sofia/internal/$1@xxx.xxx.xxx.xxx:5060|sofia/internal/$1@xxx.xxx.xxx.xxx:5060
[server=d1]sofia/internal/$1@xxx.xxx.xxx.xxx:5060|[server=d2]sofia/internal/$1@xxx.
˓→xxx.xxx.xxx:5060
84 Chapter 6. Applications
FusionPBX Documentation
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
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:
6.1. Applications 85
FusionPBX Documentation
• 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
86 Chapter 6. Applications
FusionPBX Documentation
• 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.
• To add a Call Center Queue click the plus edit icon on the right
6.1. Applications 87
FusionPBX Documentation
• 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
• 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 (make sure to set Agent ID!)
• Set the Agent Password, or add agent_authorized=true to the dialplan for *22 if you do not want to require a
PIN to log in
• If you want to enable Follow Me or Call Forwarding for an Agent, set the contact string to loopback/<extension>
• Agent With Least Talk Time: Rings the Agent will ring that has the least time talking.
88 Chapter 6. Applications
FusionPBX Documentation
• 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.
6.1.4.4 Agents
Select agents from the drop down list and specify tier level and tier position.
Select the desired hold music. Music on hold, streams and ringtones can be used.
6.1.4.6 Record
• 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.
A value of 0 is the default and equals an infinate amount of time. Any other numeric value is calculated in seconds.
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.
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.
Set the action to perform when the max wait time is reached.
6.1. Applications 89
FusionPBX Documentation
• 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.
• 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.
• 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.
A sound to play to a caller every announce sound seconds. Needs the full path to the .wav file.
90 Chapter 6. Applications
FusionPBX Documentation
6.1.4.22 Description
Enter a description to help organize and define what the queue is for.
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.
• Login then go to Status > Agent Status
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.
6.1. Applications 91
FusionPBX Documentation
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.
6.1.5.2 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 causes:
1. The module is disabled
• Make sure the XML CDR module is enabled and running in the Menu -> Advanced -> Modules.
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.
• Compare your version (advanced-script editor-files-autoload_configs-xml_cdr.conf.xml) with the current de-
fault 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.
92 Chapter 6. Applications
FusionPBX Documentation
For more detailed configuration go to the XML editor (Menu -> Advanced -> XML Editor) 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.
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 (pack-
age 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.
6.1. Applications 93
FusionPBX Documentation
In the Call Flow example below we have the name as Call Flow. Make the Extension number 30 that didn’t exist until
now. Create the feature code as a *code with *30. Keep the context as-is with training.fusionpbx.com . Select a Status
to show which mode. Make a PIN to help secure the call flow. Make the detination label as Day Mode. Select a sound
to auditorially indicate which mode is activated. Choose a destination for the alternative mode. Make the alternative
detination label as Night Mode. Select an alternative sound to auditorially indicate which mode is activated. Choose a
destination for the alternative mode. Finally, enter a description to describe what this call flow does.
94 Chapter 6. Applications
FusionPBX Documentation
Shows the call recordings with name, length, date and time, and call direction.
6.1. Applications 95
FusionPBX Documentation
• To access call routing goto Accounts > click the edit pencil icon on the right of the extension
96 Chapter 6. Applications
FusionPBX Documentation
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.
Category = device
Subcategory = feature_sync
Type = boolean
Value = true
• 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
– <Feature_Key_Sync_1_ group=”Ext_1/Call_Feature_Settings”>Yes</Feature_Key_Sync_1_>
6.1.9 Conference
Conferences is used to setup conference rooms with a name, description, and optional pin number.
6.1. Applications 97
FusionPBX Documentation
98 Chapter 6. Applications
FusionPBX Documentation
• Select from the Groups dropdown list superadmin and click add then save
Conference Centers are a group of conference rooms. They can be organized by cost center, geographically, or other
criteria.
6.1. Applications 99
FusionPBX Documentation
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
Call controls enable ability to assign digits to actions. They can be used to mute, unmute, or other actions during the
conference call.
6.1.13 Contacts
• 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.
• Go back into the contact to fill out more information that wasn’t available when you first created the contact.
To receive a FAX setup a fax extension and then direct the incoming to it. Click here for the Youtube video
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.
6.1.14.2 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.
6.1.14.3 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.
6.1.14.4 Sent
Click PDF to view the fax or right click on PDF and left click on Save Link As.
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.
• 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
Grep from ssh or console access your freeswitch.log files for FAX_RETRY_STATS to start keeping track of suc-
cess/failure. Examples
Here’s how you can get some totals.
Total:
Success:
Failures:
6.1.15 Follow Me
6.1.16 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.
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.
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
Welcome to the adding IVR section. Here you will find how to add and edit IVR’s.
• Click here for the youtube video
• Click on Apps then IVR Menu
• Click the Plus icon on the right
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.
You now have a list of IVR’s to go back to and edit or delete as needed.
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.
Note: Make sure in Accounts > Extensions that the extension is assigned to the user. This will enable Operator Panel
for that user.
6.1.19 Phrases
• Click the plus on the right to create a phrase and the pencil icon to edit a phrase
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.
• Click the edit pencil on the right to customize music on hold options. This can be done on each kHz group.
• 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”.
• 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
6.1.21 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.
6.1.22 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=
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.
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 .
• 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 destination numbers are the numbers for the ring group to call. Destinations can only be local
registered endpoints or external numbers.
– Extensions Local registered extensions.
– External numbers Destinations out to an external number.
• 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.
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.
6.1.24 Streams
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.
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.
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.
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.
6.1.25.2 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).
6.1.26 Voicemail
To edit voicemail settings click the pencil edit icon on the right of the extension number.
Note: Starting version 4.2 remote access to voicemail by interrupting the greeting message by pressing “*” and
entering the password is disabled by default.
*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
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 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
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.
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
7.1 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.
Select a Call Center Queue from the list below to view its activity.
From here you can view status, evesdrop on the call, transfer the call or click to call an available agent.
137
FusionPBX Documentation
Click to learn more about Call Center. Applications > Call Center
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.
List all the conferences that are currently active with one or more members.
Queues feature generates a dialplan that uses mod_fifo. FIFO stands for ‘first in first out’ in other words a queue.
List all the call center agents with the option to change the status of one or more agents.
7.1.6.1 Definitions
7.1.7 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.
Summary of extension activity per domain such as misssed calls, answered calls, no answer, inbound duration, out-
bound duration, number of outboud calls, number of inbound calls and Average length of Call (ALOC). The summa-
rized information can be downloaded as a CSV file.
7.1.8.1 Definitions
7.1.10 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.
7.1.11 Services
Shows a list of processes, the status of the process and provides control to start and stop the process.
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.
System Information, FusionPBX Version, Git Version, Switch Version, Memory Information, CPU Information, Hard
Drive Information and Memcache Information.
Scalable Vector Graphics (SVG) support in your browser is required to view the traffic graph.
Advanced
8.1 Advanced
In the Advanced menu you will find 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.
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. Add the carrier IP addresses to the CIDR.
• 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.
Goto Advanced > Access Controls. Click the edit icon for domains. At the bottom under nodes click the plus icon.
149
FusionPBX Documentation
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
8.1.3 Command
Provides a conventient way to execute system, PHP, switch and SQL commands.
• Click the drop down box on the right to choose from Switch, PHP, Shell and SQL to execute commands.
8.1.4 Databases
Database information. Most FusionPBX installs use Postgresql for FusionPBX and SQLite for the switch. This section
is for edge case installs.
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.
Default Settings have several different categories. Click on the category to view more details.
8.1.5.1 Adminer
Default Setting Default Set- Default Set- Default Setting Default Setting Description
Subcategory ting Name ting Value Enabled
auto_login boolean TRUE FALSE This must be enabled in order
to use Adminer.
8.1.5.2 Cache
Default Setting Sub- Default Setting Default Setting Default Setting Default Setting De-
category Name Value Enabled scription
method text memcache TRUE Cache methods file or
memcache.
location text /tmp TRUE Location for the file
cache.
Default Setting Sub- Default Setting Default Setting Default Setting Default Setting De-
category Name Value Enabled scription
agent_add_rows numeric 5 TRUE Number of default
“add” rows.
agent_edit_rows numeric 1 TRUE Number of default
“edit” rows.
8.1.5.4 CDR
Default Setting Default Setting Default Setting Default Setting Default Setting Descrip-
Subcategory Name Value Enabled tion
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
8.1.5.5 Dashboard
8.1.5.6 Destinations
Default Setting Sub- Default Setting Default Setting Default Setting Default Setting De-
category Name Value Enabled scription
dialplan_details boolean TRUE TRUE
8.1.5.7 Domains
8.1.5.8 Editor
FusionPBX menu Advanced > php editor, grammar editor, provision editor, and xml editor.
Editor specific defaults.
Default Setting Default Set- Default Set- Default Set- Default Setting Description
Subcategory ting Name ting Value ting Enabled
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 syn-
tax, text size and theme changes.
8.1.5.9 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.
• SMTP2GO
• GMAIL
Default Setting Default Default Setting Default Set- Default Setting Description
Subcategory Setting Value ting Enabled
Name
smtp_host text mail.server.provider.com
TRUE email providers server address
smtp_from text emailexam- TRUE smtp from emaill address
ple@emailprovider.com
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 supersecurepass- TRUE typically the email password
word!
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
8.1.5.10 Fax
8.1.5.11 Follow Me
Default Setting Default Set- Default Set- Default Setting Default Setting Description
Subcategory ting Name ting Value Enabled
max_destinations numeric 5 FALSE Set the maximum number of Fol-
low Me Destinations.
timeout numeric 30 FALSE Set the default Follow Me Timeout
value.
Default Setting Sub- Default Setting Default Setting Default Setting Default Setting De-
category Name Value Enabled scription
option_add_rows numeric 5 TRUE Number of default
“add” rows.
option_edit_rows numeric 1 TRUE Number of default
“edit” rows.
8.1.5.13 Limit
Default Setting Sub- Default Setting Default Setting Default Setting Default Setting De-
category Name Value Enabled scription
call_center_queues numeric 3 FALSE Limit used in Call Center
Queues.
destinations numeric 3 FALSE Limit used in Destina-
tions.
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.
8.1.5.14 Login
8.1.5.15 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.
8.1.5.16 Recordings
Default Setting Default Set- Default Set- Default Setting Default Setting Description
Subcategory ting Name ting Value Enabled
storage_type text base64 FALSE Save recordings in the database
in base64 format.
Default Setting Sub- Default Setting Default Setting Default Setting Default Setting De-
category Name Value Enabled scription
destination_add_rows numeric 5 TRUE Ring Group “add” rows
default.
destination_edit_rows numeric 1 TRUE Ring Group “edit” rows
default.
8.1.5.18 Security
8.1.5.19 Server
Default Setting Sub- Default Setting Default Setting Default Setting Default Setting De-
category Name Value Enabled scription
temp text /tmp TRUE Set the temp directory.
8.1.5.20 Switch
Switch specific default settings. These defaults will change depending if you compiled the SWITCH source or used
the newest default of packages.
8.1.5.21 Theme
Default Set- Default Default Setting Value Default Default Setting Descrip-
ting Subcat- Setting Setting tion
egory Name Enabled
region text usa TRUE What region to use by default
when choosing Time Condi-
tions
pre- array {“new_years_day”:{“mday”:”1”,”mon”:”1”}}
TRUE England Holiday
set_england
pre- array {“may_day”:{“mon”:”5”,”mday”:”1- TRUE England Holiday
set_england 7”,”wday”:”2”}}
pre- array {“august_bank_holiday”:{“mon”:”8”,”mday”:”25-
TRUE England Holiday
set_england 31”,”wday”:”2”}}
pre- array {“christ- TRUE England Holiday
set_england mas_day”:{“mday”:”25”,”mon”:”12”}}
pre- array {“box- TRUE England Holiday
set_england ing_day”:{“mday”:”26”,”mon”:”12”}}
preset_usa array {“new_years_day”:{“mday”:”1”,”mon”:”1”}}
TRUE USA Holiday
preset_usa array {“presidents_day”:{“wday”:”2”,”mon”:”2”,”mday”:”15-
TRUE USA Holiday
21”}}
preset_usa array {“memorial_day”:{“mday”:”25- TRUE USA Holiday
31”,”wday”:”2”,”mon”:”5”}}
preset_usa array {“indepen- TRUE USA Holiday
dence_day”:{“mday”:”4”,”mon”:”7”}}
preset_usa array {“labor_day”:{“wday”:”2”,”mon”:”9”,”mday”:”1-
TRUE USA Holiday
7”}}
preset_usa array {“columbus_day”:{“wday”:”2”,”mon”:”10”,”mday”:”8-
TRUE USA Holiday
14”}}
preset_usa array {“veter- TRUE USA Holiday
ans_day”:{“mday”:”11”,”mon”:”11”}}
preset_usa array {“black_friday”:{“wday”:”6”,”mon”:”11”,”mday”:”23-
TRUE USA Holiday
29”}}
preset_usa array {“christ- TRUE USA Holiday
mas_day”:{“mday”:”25”,”mon”:”12”}}
preset_canada array {“new_years_day”:{“mday”:”1”,”mon”:”1”}}
TRUE Canada Holiday
preset_canada array {“family_day”:{“wday”:”2”,”mon”:”2”,”mday”:”8-
TRUE Canada Holiday
14”}}
preset_canada array {“victoria_day”:{“wday”:”2”,”mon”:”5”,”mday”:”18-
TRUE Canada Holiday
24”}}
preset_canada array {“canada_day”:{“mday”:”1”,”mon”:”7”}}
TRUE Canada Holiday
preset_canada array {“bc_day”:{“wday”:”2”,”mon”:”8”,”mday”:”1-
TRUE Canada Holiday
7”}}
preset_canada array {“remem- TRUE Canada Holiday
brance_day”:{“mday”:”11”,”mon”:”11”}}
preset_canada array {“christ- TRUE Canada Holiday
mas_day”:{“mday”:”25”,”mon”:”12”}}
preset_canada array {“box- TRUE Canada Holiday
ing_day”:{“mday”:”26”,”mon”:”12”}}
preset_canada array {“labour_day”:{“wday”:”2”,”mon”:”9”,”mday”:”1-
TRUE Canada Holiday
7”}}
pre- array {“spring_bank_holiday”:{“mon”:”5”,”mday”:”25-
TRUE England Holiday
set_england 31”,”wday”:”2”}}
preset_usa array {“martin_luther_king_jr_day”:{“wday”:”2”,”mon”:”1”,”mday”:”15-
TRUE USA Holiday
21”}}
preset_usa array {“thanksgiving_day”:{“wday”:”5”,”mon”:”11”,”mday”:”22-
TRUE USA Holiday
170 28”}} Chapter 8. Advanced
preset_canada array {“thanksgiving_day”:{“wday”:”2”,”mon”:”10”,”mday”:”8-
TRUE Canada Holiday
14”}}
FusionPBX Documentation
8.1.5.23 User
Default Setting Default Set- Default Set- Default Set- Default Setting Description
Subcategory ting Name ting Value ting Enabled
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 do-
mains.
password_length numeric 10 TRUE The default length of characters in a user
password.
pass- boolean TRUE TRUE Set whether to require at least one num-
word_number ber in user passwords.
pass- boolean TRUE TRUE Set whether to require at least one lowe-
word_lowercase case letter in user passwords.
pass- boolean TRUE TRUE Set whether to require at least one upper-
word_uppercase case letter in user passwords.
8.1.5.24 Voicemail
8.1.6 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
on the right.
This will bring you to enter domain info. (Be sure to create an “A record” from your domain hosting account)
Changing to a different domain click the stack of three dashes on the top right
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.
Permit access levels to different group of users. The group permissions allow customizing permissions for existing
groups or custom groups.
• Click the plus at the right to add a user or pencil to edit an existing user.
8.1.10 Modules
Modules extend the features of the system. Use this page to enable or disable modules.
8.1.10.1 Applications
8.1.10.2 Auto
8.1.10.4 Endpoints
8.1.10.7 Languages
8.1.10.8 Loggers
8.1.10.9 Say
8.1.10.11 Streams/Files
Use this to translate numbers from the original number to a new number using regular expressions.
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 modifi
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.
An online editor for phone provisioning templates specific to different vendors for FusionPBX.
8.1.14.1 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.
8.1.14.2 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 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 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.
8.1.16 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.
8.1.17 Transactions
A list of databse changes (transactions) made by all users while logged into FusionPBX. Changes include
8.1.18 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.
* cd /var/www/fusionpbx
git pull
chown -R www-data:www-data *
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.
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
(continues on next page)
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 *
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.)
cp -R /usr/local/freeswitch/scripts /usr/local/freeswitch/scripts-bak
rm -rf /usr/local/freeswitch/scripts/*
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.
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.
Many updates have changes to the database and to the Freeswitch scripts. The upgrade_schema script
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.
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)
Make sure that the freeswitch directory has the correct permissions
Restart Freeswitch
Step 5: Menu
http://domain_or_ip/core/menu/menu_restore_default.php
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.
FusionPBX has a stable and a master(development) branch. You can switch from stable to master but not recomended
to downgrade.
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
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
8.1.19 Variables
8.1.19.1 Codecs
8.1.19.2 Defaults
8.1.19.3 IP Address
8.1.19.5 Ringtones
8.1.19.6 Sip
8.1.19.9 Sound
8.1.19.10 Tones
8.1.19.11 Xmpp
Hardware
9.1 Hardware
Auto provisioning is disabled by default. This is to give a chance to secure provisioning server with HTTP Authen-
tication 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.
9.1.1.1 Yealink
193
FusionPBX Documentation
9.1.1.2 Polycom
• Click The plus to the left of Global Settings then click Restore.
• 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.
Basic URL
HTTP Authentication
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.
Additional Information
9.1.1.4 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
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
9.1.1.5 Grandstream
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.
• Once you have the proper information filled in, click the Reboot option at the top right.
• Click OK
Troubleshooting
9.1.1.6 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
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
9.1.1.7 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.
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.
1. Go to: https://oem.zoiper.com/
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)
6. https://www.zoiper.com/en/page/MYPAGEID?u=&h=&p=&o=&t=&x=&a=&tr=”
7. Copy the page ID
On your server
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.
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>
(continues on next page)
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
Click on a link and it will take you to the Zoiper Site. Follow instructions there to download and install.
9.1.2.1 Yealink
Setting up a Yealink SIP phone through the phone’s local http management portal.
• Factory reset the phone by holding down the “OK” button, found in the center of the up/down left/right buttons,
until the phone prompts to Factory reset. Press the softkey for “OK” to continue. The phone will factory reset
and reboot.
• Once the phone powers up, press the OK button once and the phone will display its IP address on the screen.
Navigate to that IP on another device in a web browser, and use admin for the username and admin for the
password.
9.1.2.2 Polycom
Soundpoint IP 320P
Identification
Server 1
Server 2
leave alone
Call Diversion
leave alone
Message Center
Subscriber: BLANK
Callback Mode: Contact
Callback Contact: \*98
9.1.2.3 Cisco
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
HTTP Authentication
Phone web interface -> Provision - > Profile Rule
[–uid myUser –pwd myPass]http://mydomain.com/app/provision/?mac=$MA
9.1.2.4 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.
9.1.2.5 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
3. Click the Status tab on the top left. You should see the Registration as Registered and the User ID 1000
• 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
9.1.2.6 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
9.1.2.7 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.
4. Click on Settings
5. Click on Preferences
user: 1000
password: thepassword
domain: sub.domain.com
• 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/
9.1.2.8 SNOM
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.
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.
5. 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
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.
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.
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
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.
Yealink
4. In the first time, for security consideration, the phone will display a message Allow remote control. Please press
OK. Then repeat step 3.
5. You will get the screen capture of the phone as below:
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
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.
• Click the Apply button and wait for the router to reboot.
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.
Port Forwarding
Go to top first menu item Firewall/NAT then second top menu item Port Forwarding.
Note: In order to Port Forward and still have access to the Edgerouter GUI you must change the port number for the
Edgerouter GUI.
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.
• From the Configuration tab, Change the radio button to “Accept” and click “Save Ruleset”.
Warning: Be sure you want to do this and that you are behind either a firewall appliance or another router.
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.
˓→nf_conntrack_ftp,nf_conntrack_sip,iptable_nat,nf_conntrack_h323,nf_conntrack_ipv4,
˓→nf_conntrack_pptp,nf_conntrack_tftp
shwim@ubnt:~$
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
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
9.1.3.3 pfSense
Static Port
• 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
Port Description
80 HTTP
443 HTTPS
5060:5061 SIP Internal
5080:5081 SIP External
16384:32768 RTP
Interface: WAN
Protocol: TCP/UDP
Destination: <<Select a Public IP from the List>>
Destination Port Range:
from: (Other) PBX
to: (Other) PBX
Description: FusionPBX
NAT reflection: Use system default
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
Name: aggressive-nat-detection
Value: true
Enabled: True
Status >> SIP Status Stop and Start the internal profile for the changes to take effect.
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.
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
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.
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.
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
9.1.3.5 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.
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.
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.
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.
This guide was created using a Cisco EA6500 (Linksys AC1750) series router.
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.
Software
10.1 Software
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.
tcpdump
Install
Command
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.
253
FusionPBX Documentation
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
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 can be a nuisance in the voip world. Having a way to track and make reports is 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 offer-
ing 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
10.1.2.2 SPAM
• User-Agent: Most spam attempts will show an unwanted User-Agent like what is shown in this example.
10.1.2.3 Registration
Invite
200 OK
Call Completed
10.1.2.6 F3 Search
10.1.2.7 F7 Filter
10.1.2.8 F8 Settings
Interface
EEP/HEP HOMER
Call Flow
Capture
10.1.3 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
Test TFTP
tftp x.x.x.x
get 000000000000.cnf
Additional Information
In the Additional Information section you will find topics related to FusionPBX.
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.
• https://beta.speedtest.net
• https://www.voipreview.org/speedtest
• https://speedof.me
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.
11.1.1.3 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.
265
FusionPBX Documentation
11.1.1.4 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.
• 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.
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.
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
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
˓→libmemcached-dev
Debian Dependencies
˓→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-
modules.conf
mod_avmd
mod_callcenter
mod_memcache
mod_cidlookup
mod_curl
mod_translate
mod_shout
Postgres driver
./configure --enable-core-pgsql-support
Run Make
make
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.
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
(continues on next page)
FS_USER=www-data #freeswitch
FS_GROUP=www-data #daemon
#
# 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
(continues on next page)
|| 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
(continues on next page)
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
11.1.2.1 Monit
Install
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
SIP
cd /etc/monit.d
touch sip
nano sip
FreeSWITCH
cd /etc/monit/conf.d
or
cd /etc/monit.d
touch freeswitch
nano freeswitch
Additional Options
#monit daemon
set httpd port 2812 and
use address localhost
allow localhost
Monit Commands
monit -h
monit status
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.
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)
11.1.4 Testimonials
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
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.
cd /etc/fusionpbx
mv config.php config1.php
cat config1.php | grep password
2. 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 .
3. 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.
4. 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';
5. You should have a new config.php file in the /etc/fusionpbx/ directory. Proceed to login to with the new super-
admin user name and password.
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.
Use the following commands to generate the password hash. Don’t forget to provide your own salt and password.
php /tmp/test.php
11.1.5.3 SQLite
Install sqlite3 which can be be used to modify the database fusionpbx.db. Then open the database with the following:
sqlite3 fusionpbx.db
11.1.5.4 PostgreSQL
Connect to the PostgreSQL database. Once you are running psql you can use:
su postgres
psql
\c fusionpbx
The hashed password and the salt can be updated using the command:
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.
11.1.6.1 Basic
Administrative PIN (Recordings pin) can be found here Administrative PIN page
11.1.6.3 Advanced
11.1.6.4 Voicemail
11.1.6.5 Miscellaneous
11.1.7 Features
11.1.7.1 Announcements
Setup a recording for the auto attendant that provides announcement to callers. (See IVR Menus )
11.1.7.2 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.
Create a recording and select one or more groups to have the system call and play the recording.
Various reporting capabilities to see who called, when, call length, export to a csv file, and call detail statistics.
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.
11.1.7.12 Queues
Load calls into queues so they can be answered in the order they came into the queue.
Send the call different directions or perform actions based on reading the caller id info or other call information. (see
Dialplan Manager)
Transfer the active call to another internal or external call. Also known as a warm transfer.
Transfer a call like the call was going into a call queue or from an ivr.
Transfer a call.
11.1.7.19 Caller ID
11.1.7.20 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)
Unlimited conference rooms with moderator and paticipants, pin numbers, call recording, mute all, caller announce
and more. . .
11.1.7.22 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.
11.1.7.23 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.
11.1.7.24 Command
Area to execute commands from the gui. Merged with SQL Query tool with a clip library.
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.
Search by first name or last name to find extension numbers on the system.
Gives ability to call into the system, put in a pin code, and then call back outbound.
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.
Direct calls to voicemail by default however there is an option when using do not disturb to send the call to an
alternative destination.
11.1.7.30 Extensions
Create extensions for phones to register to and an option to receive emails on missed calls.
Summary of extension activity per domain such as misssed calls, answered calls, no answer, inbound duration, out-
bound 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.
11.1.7.32 Editor
A virtual fax machine that can send and receive faxes with advanced features.
11.1.7.34 Follow Me
11.1.7.35 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.
A way to login to another phone device and temporarily or permanently become another extension. This is sometimes
known as ‘hoteling’ and ‘extension mobility’
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.
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’.
11.1.7.40 Multi-Tenant
A virtual panel that agents can drag and drop transfer calls. Adjust call state from available, on break, do not disturb
and logged out.
11.1.7.42 Paging
11.1.7.43 Parking
Send a call to an unused “park” extension. The caller listens to music on hold until another extension connects to the
call.
11.1.7.44 Phrases
Using xml handler and xml from file system you can string together multiple voice files.
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.
11.1.7.47 Recordings
Make one extension ring several extensions and an option to receive emails on missed calls.
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.
A extension that can be timed to route calls based on domain select, global option, move to other domains, and holiday
presets.
11.1.7.52 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.
11.1.7.55 WebRTC
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 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 interna-
tional 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:
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}"/>
</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}"/>
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>
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.
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.
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.
11.1.9.3 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.
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
Version Upgrade can take several steps to perform. Below will show how to upgrade from specific versions.
1. Switch branches
mv /var/www/fusionpbx /var/www/fusionpbx-4.4
cd /var/www && git clone https://github.com/fusionpbx/fusionpbx.git
chown -R www-data:www-data /var/www/fusionpbx
2. Try Advanced -> Upgrade Schema if that fails use the the command line.
cd /var/www/fusionpbx
php /var/www/fusionpbx/core/upgrade/upgrade.php
3. Refresh the browser if there are issues then logout and then back in.
4. Update the following Dialplans.
If you have made any changes to these make notes on the changes before you delete them. So that the changes could
be added back. For example valet park could have custom music on hold or a custom timeout for the valet park.
user_exists
is_loopback
is_local
user_record
agent_status
group_intercept
extension-to-voicemail
vmain
vmain_user
tone_stream
recordings
valet_park
call_screen
call_forward_not_registered
local_extension
voicemail
• 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.
5. If you have customized any provisioning templates makes sure to copy them from
/var/www/fusionpbx-4.4/resources/templates/provision and copy them into the right vendor directory in
/var/www/fusionpbx/resources/templates/provision. I you haven’t customized the provisioning templates you
can skip this step.
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.
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/
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.
3. In the menu go to Status then SIP Status and press ‘Flush Cache’.
4. 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
5. Resave all Call Center Queues to update each call center queue dialplan. Then restart mod call center or
FreeSWITCH.
6. 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.
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
2. 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
4. Check the box for App Defaults and run execute.
5. 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.
6. Check the box for Permission Defaults and run execute. Permissions are store in a session to get new permissions
logout and back in.
7. 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.
8. Go to Applications > Conference profiles. Edit each profile and replace $${hold_music} with lo-
cal_stream://default
9. Goto Advanced > Variables hold_music. Make sure it’s value is set as local_stream://default
* 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.
* 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.
10. 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
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)
Goto Apps > Time Conditions and edit the time conditions remove all holidays and hit
˓→save.
Note: Many of the provisioning templates were updated. If you use custom provisioning templates you should
consider updating them with the new versions.
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
Beyond the standard upgrade procedure just described, the following will also need to be performed:
* 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
* wget https://github.com/fusionpbx/fusionpbx-scripts/tree/master/upgrade/fax_import.php
* 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. . .
Remove all domain groups having the same names as the default global groups
(retains any custom domain groups)...
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)...
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.
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.
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.
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
Default Settings’
In the switch category change gateways to sip_profiles
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
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).
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
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
rm voicemail_export.php
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.
| When upgrading from previous versions, you may encounter the following issues:
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
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
11.1.10.12 SQLite
SQLite is the FreeSWITCH default. Databases are located in the freeswitch/db directory.
11.1.10.13 ODBC
http://wiki.freeswitch.org/wiki/ODBC
11.1.10.14 Postgres
Postgres native support will be in FreeSWITCH 1.2.4 but has been available in the Main GIT branch.
11.1.10.15 Dependencies
11.1.10.16 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 **
11.1.10.17 switch.conf.xml
11.1.11 Releases
11.1.13 PostgreSQL
11.1.13.1 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
11.1.13.2 Restore
11.1.13.3 Console
su postgres
psql
11.1.13.4 Links
http://www.mkyong.com/database/backup-restore-database-in-postgresql-pg_dumppg_restore/
http://www.postgresql.org/docs/9.1/static/backup.html
Shared Line Apprearance(SLA) also known in older phone systems as a “Key System”.
FusionPBX Menu Advanced > SIP Profiles > edit a profile to enable SLA.
• name: multiple-registrations
• value: contact
• enabled: true
• Note: This feature is on version 4.5+ and requires PostgreSQL ver 9.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.
touch /etc/cron.daily/db_copy.sh
chmod +x /etc/cron.daily/db_copy.sh
nano /etc/cron.daily/db_copy.sh
#!/bin/sh
EOF
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
Default Setting Sub- Default Setting Default Setting Setting En- Default Setting Description
category Name Value abled
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
12.1 Contributing
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.
311
FusionPBX Documentation
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
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
13.1.1 Introduction
The reStructuredText (RST) syntax provides an easy-to-read, what-you-see-is-what-you-get plaintext markup syntax
and parser system. However, you need to be very precise and stick to some strict rules:
• like Python, RST syntax is sensitive to indentation !
• RST requires blank lines between paragraphs
This entire document is written with the RST syntax. In the right sidebar, you should find a link “Edit on Github”,
which will show each page in reStructuredText raw text format.
Contents
• Documentation Guide
– Introduction
– Getting Started
313
FusionPBX Documentation
* Simple tables
* Multicells tables, first method
* Multicells table, second method
* The tabularcolumns directive
* The csv-table directive
– The toctree directive
– Images and figures
* Include Images
* Include a Figure
– Boxes
* Comments
* Substitutions
* glossary, centered, index, download and field list
* Footnote
* Citations
* More about aliases
* Intersphinx
* file-wide metadata
* metainformation
* contents directives
– Useful extensions
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
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:
$ cd /path/to/where_you_want_the_docs
$ git clone https://github.com/fusionpbx/fusionpbx-docs.git
$ cd fusionpbx-docs
$ 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:
13.1.3.1 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.
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 reStructured-
Text. The simplest way to do this is to use raw strings by adding the letter r in front of the docstring.
13.1.3.2 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
External links
`<http://www.python.org/>`_
which appear as http://www.python.org/ . Note the underscore after the final single quote. Since the full name of the
link is not always simple or meaningful, you can specify a label (note the space between the label and link name):
`Python <http://www.python.org/>`_
Note: If you have an underscore within the label/name, you got to escape it with a ‘’ character.
All titles are considered as hyperlinks. A link to a title is just its name within quotes and a final underscore:
This syntax works only if the title and link are within the same RST file. If this is not the case, then you need to create
a label before the title and refer to this new link explicitly, as explained in Explicit Links section.
Explicit Links
You can create explicit links within your RST files. For instance, this document has a label at the top called
rst_tutorial, which is specified by typing:
.. _rst_tutorial:
You can refer to this label using two different methods. The first one is:
rst_tutorial_
:ref:`rst_tutorial`
With the first method, the link appears as rst_tutorial, whereas the second method use the first title’s name found after
the link. Here, the second method would appear as Documentation Guide.
Note: Note that if you use the ref role, the final underscore is not required anymore.
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.
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:
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.
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:
import math
print 'import done'
or:
import math
print 'import done'
gives:
This is a simple example:
import math
print 'import done'
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:
produces
.. literalinclude:: filename
:linenos:
:language: python
:lines: 1, 3-5
:start-after: 3
:end-before: 5
13.1.6 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.
+---------+---------+-----------+
| 1 | 2 | 3 |
+---------+---------+-----------+
which gives:
1 2 3
+---------------------+---------+---+
|1 | 2| 3 |
+---------------------+---------+---+
renders as follows:
1 2 3
+------------+------------+-----------+
| 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:
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 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:
This directive gives a âCœcolumn specâC 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
.. csv-table:: a title
:header: "name", "firstname", "age"
:widths: 20, 20, 10
"Smith", "John", 40
"Smith", "John, Junior", 20
Table 1: a title
name firstname age
Smith John 40
Smith John, Junior 20
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:
Use:
.. image:: _static/images/logo.png
:width: 200px
:align: center
:height: 100px
:alt: alternate text
to put an image
.. figure:: _static/images/logo.png
:width: 200px
:align: center
:height: 100px
:alt: alternate text
:figclass: align-center
.. code-block:: python
import image
gives
import image
The option figclass is a CSS class that can be tuned for the final HTML rendering.
13.1.9 Boxes
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.
with
.. note:: This is a **note** box.
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
A Topic directive allows to write a title and a text together within a box similarly to the note directive.
This code:
gives
Subsequent indented lines comprise the body of the topic, and are interpreted as body elements.
Sidebar Title
Subsequent indented lines comprise the body of the sidebar, and are interpreted as body elements.
13.1.10 Others
13.1.10.1 Comments
Comments can be made by adding two dots at the beginning of a line as follows:
.. comments
13.1.10.2 Substitutions
.. _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:
Field list
Whatever this is handy to create new field and the following text is indented
glossary
.. glossary::
apical
at the top of the plant.
gives
apical at the top of the plant.
index
.. index::
download
hlist directive
.. hlist::
:columns: 3
* first item
* second item
* 3d item
* 4th item
* 5th item
• first item
• second item
• 3d item
• 4th item
• 5th item
13.1.10.4 Footnote
For footnotes, use [#name]_ to mark the footnote location, and add the footnote body at the bottom of the document
after a â CœFootnotesâC rubric heading, like so:
.. rubric:: Footnotes
You can also explicitly number the footnotes ([1]_) or use auto-numbered footnotes without names ([#]_). Here is
an example [#footnote1]_.
13.1.10.5 Citations
Citation references, like [CIT2002] may be defined at the bottom of the page:
.. [CIT2002] A citation
(as often used in journals).
[CIT2002]_
Using this image alias, you can insert it easily in the text |logo|, like this . 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||
+---------+---------+-----------+
this is a longish text to include within a table and which is longer than the width of the column.
13.1.10.7 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:
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:
13.1.10.9 metainformation
By default, this markup isnâ C™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::
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',
]
extensions.append('sphinx.ext.pngmath')
In order to include equations or simple Latex code in the text (e.g., 𝛼 ≤ 𝛽 ) use the following code:
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::
Here is another:
𝑁
∑︁−1
𝑛offset = 𝑠𝑘 𝑛𝑘
𝑘=0
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
.. rubric:: Footnotes
.. rubric:: Bibliography
.. [CIT2002] A citation
(as often used in journals).
Other
14.1 Other
Other section is bits of info that needs indexed for the PDF to populate all sections depending how sections are
formatted.
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.
XMPP Profile
• FusionPBX menu.
• Accounts -> XMPP manager.
• Click the plus on the right to create a profile.
In this example we will setup Google Talk and by creating a profile called gtalk.
331
FusionPBX Documentation
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.
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.
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/
(continues on next page)
14.1.2 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.
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.
14.1.2.1 Prerequisites
• Patience
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
14.1.3 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 exten-
sions, 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.
A
apical, 326
C
contents (directive), 328
H
hlist (directive), 326
S
sectionauthor (directive), 328
337