Categories
Knowledge Base

Setting up Postfix to use Office 365 mail

FreePBX uses centos 7 and postfix fom its mail delivery, normally this is fine unless the customer is using Office 365 mail then there can be delivery issues.

Firstly you will need to set up a user in Office 365 for the system.

Postfix’s main configuration file is main.cf and that is where we make the required change as follow:

[root@localhost ~]# vi /etc/postfix/main.cf

Append the following lines

masquerade_domains = domainname
myhostname = USERNAME.domainname
mydomain = USERNAME.domainname
myorigin = USERNAME@domainname
relayhost = [smtp.office365.com]:587

mynetworks = 127.0.0.0/8
inet_interfaces = loopback-only
smtp_use_tls = yes
smtp_always_send_ehlo = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_generic_maps = hash:/etc/postfix/generic 
# smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Save and exit from the file.
Next we need to edit the configuration for the postfix SASL credentials:

[root@localhost ~]# vi /etc/postfix/sasl_passwd

Add a line below

[smtp.office365.com]:587 user@domainname:password

Replacing user@domainname:password with your sender account details

Save and exit from file

A Postfix lookup table must now be generated from the sasl_passwd text file by running the following command.

[root@localhost ~]# postmap /etc/postfix/sasl_passwd

Now change permission for this file

[root@localhost ~]# chown root:postfix /etc/postfix/sasl_passwd

[root@localhost ~]# chmod 640 /etc/postfix/sasl_passwd

Next, we need to configure generic file in order to be able to send emails as a valid user (this is required for Office365).

[root@localhost ~]# vi /etc/postfix/generic

Go the end of file and append following lines.

root@localhost.localdomain UserName@Domain.com

Again replacing localhost.localdomain and UserName@Domain.com with your service hostname and the email user are using

Save and exit from file.

Next let’s correct the file permission.

[root@localhost ~]# chown root:root /etc/postfix/generic

[root@localhost ~]# chmod 0600 /etc/postfix/generic

[root@localhost ~]# postmap /etc/postfix/generic

Now restart Postfix service.

[root@localhost ~]# systemctl restart postfix

Now try to send a test email using the command below:
FOR Centos:

echo "This is the body of the email"| mail -r"Sender-Display-Name<sender@domain.com>" -s "This is the subject(E-Mail from SMTP Relay) line" recipeat@gmail.com

In FreePBX under Voicemail admin you must change the senders address to match your account as well as the sender for notifications such as backups etc. otherwise you can get errors and mail wont be delivered.

Categories
Knowledge Base Technical

Asternic Stats and recording outgoing calls.

Asternic stats has the ability to record your outgoing calls in the stats database so they can be accessed from stats package.

But a customer noted two problems with this, firstly they wanted to set a different Music on Hold for outgoing calls and secondly “no answer” calls where the agent hungup before the callee answered.

Firstly we will deal with the Music on hold, Changing the MoH class caused calls not to be recorded in the database correctly. Code below is the reason for this as it causes the dial string to have 2 macros called, This is not possible.

extension_additional.conf:-
exten => s,n,ExecIf($["${MOHCLASS}"!="default" & "${MOHCLASS}"!="" & "${FORCE_CONFIRM}"="" ]?Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS}))

extensions_custom_asternic_outbound_freepbx.conf:-
exten => _X.,n,Dial(${QDIALER_CHANNEL},300,gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST}^${AMPUSER})${DIAL_TRUNK_OPTIONS})

The fix is very simple for this one and required just 2 changes. one line added to set MoH in the dialplan and another to use Trunk_options and not the the one created in extensions_additional.conf

exten => _X.,n,Set(CHANNEL(musicclass)=${MOHCLASS}) ; Added to set the Music on hold class for the outgoing call Fixes bug in normal code
exten => _X.,n,Dial(${QDIALER_CHANNEL},300,gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST}^${AMPUSER})${TRUNK_OPTIONS}) ;Was ${DIAL_TRUNK_OPTIONS} changed to set the Music on hold class for the outgoing call Fixes bug in normal code

The second problem is also fairly straight forward but took a bit of creative thinking, The problem was when an agent hung up on an outbound call the dialstatus returned to the dialplan was “CANCEL” and this is not reported upon by the asternic stats package. SO as the call is for all intents abandoned we added a line that if the dialstatus was “CANCEL” we would change it to “ABANDON”.

exten => h,n,Set(DIALSTATUS=${IF($["${DIALSTATUS}"="CANCEL"]?ABANDON:${DIALSTATUS})}) ;Added By Ian Plain to fix cancelled calls not showing in Asternic stats

This is a simple fix and now means calls are recorded as ABANDONED and with the time the Agent waited before hanging up.

Below is our version of the file extensions_custom_asternic_outbound_freepbx.conf with all the changes.

[macro-dialout-trunk-predial-hook]
exten => s,1,Noop(Test Track Outbound)
exten => s,n,Noop(Trunk is ${OUT_${DIAL_TRUNK}})
exten => s,n,Noop(Dialout number is ${OUTNUM})
exten => s,n,Noop(Dial options are ${DIAL_TRUNK_OPTIONS})
exten => s,n,Set(QDIALER_TRUNK_OPTIONS=${DIAL_TRUNK_OPTIONS})
exten => s,n,Set(QDIALER_AGENT=${DB(AMPUSER/${AMPUSER}/cidname)})
exten => s,n,GotoIf($["${QDIALER_AGENT}" != ""]?nextcheck)
exten => s,n,Noop(NO AMPUSER, exit normally with no tracking outbound)
exten => s,n,MacroExit()
exten => s,n(nextcheck),GotoIf($["${CDR(accountcode)}" != ""]?bypass)
exten => s,n,Noop(NO ACCOUNTCODE, exit normally with no tracking outbound)
exten => s,n,MacroExit()
exten => s,n(bypass),Set(PREDIAL_HOOK_RET=BYPASS)
exten => s,n,Goto(queuedial,${OUTNUM},1)
exten => s,n,MacroExit()
;; Dialplan for storing OUTBOUND campaing in queue_log
;; Goto(queuedial,YYYXXXXXXXX,1) where YYY is the queue-campaign code
;; and XXXXXXXX is the number to dial.
;; The queuedial context has the outobound trunk hardcoded
[queuedial]
; this piece of dialplan is just a calling hook into the [qlog-queuedial] context that actually does the
; outbound dialing - replace as needed - just fill in the same variables.
exten => X.,1,Set(QDIALER_QUEUE=${CDR(accountcode)}) ;exten => _X.,n,Set(QDIALER_AGENT=Agent/${AMPUSER}) exten => _X.,n,Set(QDIALER_AGENT=${DB(AMPUSER/${AMPUSER}/cidname)}) ; custom trunk check exten => _X.,n,Set(custom=${CUT(OUT${DIAL_TRUNK},:,1)})
exten => X.,n,GotoIf($["${custom}" = "AMP"]?customtrunk) ; it is normal trunk, not custom exten => _X.,n,Set(QDIALER_CHANNEL=${OUT${DIAL_TRUNK}}/${EXTEN})
exten => X.,n,GotoIf($["${OUT${DIAL_TRUNK}SUFFIX}" == ""]?continuequeuedial) exten => _X.,n,Set(QDIALER_CHANNEL=${OUT${DIAL_TRUNK}}/${EXTEN}${OUT_${DIAL_TRUNK}SUFFIX}) exten => _X.,n,Goto(continuequeuedial) ; it is a custom trunk exten => _X.,n(customtrunk),Set(pre_num=${CUT(OUT${DIAL_TRUNK},$,1)})
exten => X.,n,Set(the_num=${CUT(OUT${DIAL_TRUNK},$,2)})
exten => X.,n,Set(post_num=${CUT(OUT${DIAL_TRUNK},$,3)})
exten => _X.,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum)
exten => _X.,n(outnum),Set(the_num=${OUTNUM})
exten => _X.,n(skipoutnum),Set(QDIALER_CHANNEL=${pre_num:4}${the_num}${post_num})
exten => _X.,n(continuequeuedial),Noop(Qdialer channel = ${QDIALER_CHANNEL})
exten => _X.,n,Set(QueueName=${QDIALER_QUEUE})
exten => _X.,n,Goto(qlog-queuedial,${EXTEN},1)
[qlog-queuedial]
; We use a global variable to pass values back from the answer-detect macro.
; STATUS = U unanswered
; = A answered (plus CAUSECOMPLETE=C when callee hung up)
; The 'g' dial parameter must be used in order to track callee disconnecting.
; Note that we'll be using the 'h' hook in any case to do the logging when channels go down.
;
exten => X.,1,NoOp(Outbound call -> A:${QDIALER_AGENT} N:${EXTEN} Q:${QDIALER_QUEUE} Ch:${QDIALER_CHANNEL} Dialoptions:${TRUNK_OPTIONS}) exten => _X.,n,Set(ST=${EPOCH}) ;exten => _X.,n,Set(GM=${QDIALER_AGENT}) exten => _X.,n,Set(GM=${REPLACE(QDIALER_AGENT, ,)})
exten => _X.,n,Set(GLOBAL(${GM})=U)
exten => _X.,n,Set(GLOBAL(${GM}ans)=0)
exten => _X.,n,Macro(queuelog,${ST},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},ENTERQUEUE,-,${EXTEN})
exten => _X.,n,Set(CHANNEL(musicclass)=${MOHCLASS}) ; Added to set the Music on hold class for the outgoing call Fixes bug in normal code
exten => _X.,n,Dial(${QDIALER_CHANNEL},300,gM(queuedial-answer^${UNIQUEID}^${GM}^${QDIALER_QUEUE}^${QDIALER_AGENT}^${ST}^${AMPUSER})${TRUNK_OPTIONS}) ;Was ${DIAL_TRUNK_OPTIONS} changed to set the Music on hold class for the outgoing call Fixes bug in normal code
exten => _X.,n,Set(CAUSECOMPLETE=${IF($["${DIALSTATUS}" = "ANSWER"]?C)})
; Trapping call termination here
exten => h,1,NoOp( "Call exiting: status ${GLOBAL(${GM})} answered at: ${GLOBAL(${GM}ans)} DS: ${DIALSTATUS}" )
exten => h,n,Set(DB(LASTDIAL/${QDIALER_AGENT})=${EPOCH})
exten => h,n,Goto(case-${GLOBAL(${GM})})
exten => h,n,Hangup()
; Call unanswered
exten => h,n(case-U),Set(WT=$[${EPOCH} - ${ST}])
exten => h,n,Noop(unanswered ${DIALSTATUS})) ;Added By Ian Plain to fix cancelled calls not showing in Asternic stats
exten => h,n,Set(DIALSTATUS=${IF($["${DIALSTATUS}"="CANCEL"]?ABANDON:${DIALSTATUS})}) ;Added By Ian Plain to fix cancelled calls not showing in Asternic stats
exten => h,n,Macro(queuelog,${EPOCH},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},${DIALSTATUS},1,1,${WT})
exten => h,n,UserEvent(AgentComplete,Queue: ${QDIALER_QUEUE},TalkTime: 0,Channel: ${CHANNEL})
exten => h,n,Hangup()
; call answered: agent/callee hung
exten => h,n(case-A),Set(COMPLETE=${IF($["${CAUSECOMPLETE}" = "C"]?COMPLETECALLER:COMPLETEAGENT)})
exten => h,n,Noop(answered ${DIALSTATUS})) ;Added By Ian Plain to fix cancelled calls not showing in Asternic stats
exten => h,n,Set(WT=$[${GLOBAL(${GM}ans)} - ${ST}])
exten => h,n,Set(CT=$[${EPOCH} - ${GLOBAL(${GM}ans)}])
exten => h,n,Macro(queuelog,${EPOCH},${UNIQUEID},${QDIALER_QUEUE},${QDIALER_AGENT},${COMPLETE},${WT},${CT})
exten => h,n,UserEvent(AgentComplete,Queue: ${QDIALER_QUEUE},TalkTime: ${CT},Channel: ${CHANNEL})
exten => h,n,Hangup()
[macro-queuedial-answer]
; Expecting $ARG1: uniqueid of the caller channel
; $ARG2: global variable to store the answer results
; $ARG3: queue name
; $ARG4: agent name
; $ARG5: enterqueue
;
exten => s,1,NoOp("Macro: queuedial-answer UID:${ARG1} GR:${ARG2} Q:${ARG3} A:${ARG4} E:${ARG5}")
exten => s,n,Set(QDIALER_QUEUE=${ARG3})
exten => s,n,Set(QDIALER_QUEUE=${REPLACE(QDIALER_QUEUE, ,_)})
exten => s,n,GotoIf($["${CUT(DB(AMPUSER/${ARG6}/recording),=,3)}" = "Always"]?mixmonitor)
exten => s,n,GotoIf($["${DB(AMPUSER/${ARG6}/recording/out/external)}" = "always"]?mixmonitor)
exten => s,n,Goto(continue)
exten => s,n(mixmonitor),MixMonitor(${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/out-${QDIALER_QUEUE}-${ARG1}.wav,b,/usr/local/parselog/update_mix_mixmonitor.pl ${ARG1} ${MIXMON_DIR}${YEAR}/${MONTH}/${DAY}/out-${QDIALER_QUEUE}-${ARG1}.wav)
exten => s,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes)
exten => s,n(continue),Set(NOW=${EPOCH})
exten => s,n,Set(WD=$[${NOW} - ${ARG5}])
exten => s,n,Macro(queuelog,${NOW},${ARG1},${ARG3},${ARG4},CONNECT,${WD})
exten => s,n,Set(GLOBAL(${ARG2})=A)
exten => s,n,Set(GLOBAL(${ARG2}ans)=${NOW})
exten => s,n,NoOp("Macro queuedial-answer terminating" )
[macro-queuelog]
; The advantage of using this macro is that you can choose whether to use the Shell version
; (where you have complete control of what gets written) or the Application version (where you
; do not need a shellout, so it's way faster).
;
; Expecting $ARG1: Timestamp
; $ARG2: Call-id
; $ARG3: Queue
; $ARG4: Agent
; $ARG5: Verb
; $ARG6: Param1
; $ARG7: Param2
; $ARG8: Param3
;
;exten => s,1,System( echo "${ARG1},${ARG2},${ARG3,${ARG4},${ARG5},${ARG6},${ARG7},${ARG8}" >> /var/log/asterisk/queue_log )
exten => s,1,QueueLog(${ARG3},${ARG2},${ARG4},${ARG5},${ARG6}|${ARG7}|${ARG8})

Categories
Applications Remote Working Services Special Offers

Sangoma Meet, Free multi-party, video conferencing and desktop sharing

Sangoma Technologies announced the general availability of its new video conferencing and collaboration service Sangoma Meet. Sangoma Meet is a multi-party, video conferencing and desktop sharing, cloud-based service, specially designed to enable a great work from home or collaboration experience. HD video support is standard with Sangoma Meet, ensuring the highest quality video calls possible. 

Sangoma Meet is also highly secure, fully encrypting password-protected video conferences to avoid problems with unauthorised users hacking into a video meeting, and Sangoma will not rent or sell Sangoma Meet user information to any third parties, including any social networks. It can also be used as a stand-alone service or in conjunction with its Unified Communication Business Phone Systems. 

Connect

Its simple to use with all the features you need

Moderator Privileges: If you are holding a team call, you have full moderator privileges. You can mute/unmute attendees, send them private messages, or kick anyone off the call. You also have the option to invite audio-only participants to limit video sharing.

Chat: If you prefer not to talk on your video call, use the chat feature in Sangoma Meet to share your thoughts with the group. A full suite of emojis will keep the conversation engaging and light!
Screen Sharing: Give your coworkers real-time examples and streamline meetings with screen sharing in Sangoma Meet. Instantly share your screen and choose what you want to show to others.
Inviting users: Its as simple as, copy your meeting link and send it to the desired parties. As soon as  users click on the link, they immediately join the conference.

Sangoma Meet is available for use today in the company’s General Availability release. It has already been in beta usage, both internally and with partners, with excellent reviews to date.

The Sangoma Meet cloud service has been updated to include additional functionality such as mobile apps (for iOS and Android), calendar integration (for Google G-suite and Microsoft Outlook), desktops apps (for both Windows and Mac) to further enhance user experience, and dial-in functionality to the video conference using a phone (with enhanced security via a PIN).

To help its end-users communicate more effectively during this global pandemic, Sangoma decided to launch this new service completely free of charge to everyone, during these troubled times. 

The full datasheet explaining all the features can be viewed here and the help site is located here

Categories
Blog Knowledge Base

Presenting Local or national CLI from outside a country

Over the last six months an increasing number of countries will not allow internationally originated calls that are presenting a local or national CLI for the country called. 

It is believed that the reason behind this is part of a global wide crack down on fraud and nuisance calls, as some of the regulations and requirements introduced may have a more widespread impact on the CLI passed on calls.

Currently, the countries we are aware that are implementing these controls are:-

Australia – ACMA  ( Australian Communications & Media Authority ) are actively cracking down on common phone fraud, including malicious “spoofing”.

Australian networks are also trying to stamp out  “Wangiri” fraud,  where victims are called once from an international number with high premium charges for those who call back.

https://www.acma.gov.au/articles/2019-11/acma-recommends-immediate-action-combat-scams

Canada – CRTC (Canadian Radio-television & Telecommunications Commission ) have issued a requirement for telecoms providers to implement a system to block calls within their network or offer call-filtering service.

https://crtc.gc.ca/eng/phone/telemarketing/identit.htm

China – China have always been very strict on caller ID, as well as not permitting internationally originated calls with a local or national CLI, they do not allow calls presented with a withheld flag. 

These calls will either present the withheld CLI or the call will fail. 

France – ARCEP ( France’s regulatory body for electronic communications, portal and print media distribution ) have issued a statement to carriers that due to in country regulations, calls sent internationally with a French CLI are not permitted.

Malaysia – we are seeing that calls may fail if a local or national CLI is presented.

Turkey – ICTA ( Information & Communication Technologies Authority ) have introduced CLI regulations which require operators to block some voice calls with CLIs that may be confused with local numbers due to the format of the number presented.

United Arab Emirates – in our experience calls may fail if a local or national CLI is presented.  In addition, the UAE are blocking calls with a Tunisian or Algerian CLI.

Categories
Knowledge Base

Disabling SIP ALG on a Thomson Router

Introduction

SIP ALG is used to try and avoid configuring Static NAT on a router. Its implementation, however, varies from one router to another, often making it difficult to inter-operate a router with SIP ALG enabled with a PBX. In general, you would want to disable SIP ALG and configure one to one port mapping on the router.

In this article, we will show you how to disable SIP ALG on a Thomson router. SIP ALG on this router is known to cause problems with VoIP calls. Proceed as follows:

  1. Open Command Prompt – “Start” → “Run” → type “cmd” and press “Enter”.
  2. In Command Prompt, type “telnet 192.168.1.254” and press enter. 192.168.1.254 is the default IP address of the router. If you are running on Windows 7/8/8.1/10, you might need to install the telnet client from “Control Panel” → “Programs and Features” → “Turn Windows features on and off”.
  3. The default username is “Administrator”, and there is no default password, leave blank.
  4. Type “connection unbind application=SIP port=5060” and press “Enter”.
  5. Type “saveall” and press “Enter”.
  6. Type “exit” and press “Enter” to exit the telnet session.

SIP ALG in now disabled on your Thomson router.

Notes

  • The SIP phones behind this router should be configured not to use STUN
  • The SIP phones must NOT be configured with a local port of 5060 or 5061. The local port of the phone must be changed to something else.
  • Configuring a SIP Phone behind a Thomson router might require port forwarding to be implemented on the router. So you will need to port forward the SIP and AUDIO (RTP) ports on the thomson router and point them to the SIP Phone’s IP Address.
Categories
Asterisk Support Covid-19 FreePBX Knowledge Base Remote Working

Disabling Router SIP ALG

With many companies asking their employees to work from home, a common problem when trying to use a sip phone on a home network is the SIP ‘helper’ or ALG, Here is some advice on how to disable it on the more common routers that you may encounter.

SIP ALG (Application Layer Gateway) modifies VoIP traffic with the aim of solving NAT and firewall related problems. SIP ALG does this by inspecting SIP packets and modifying SIP Header and SDP data.

Unfortunately, SIP ALG was poorly implemented in a lot of cases, which has lead to it causing more issues than it corrects and due to this, we believe that, in general, it is best disabled.

Note – Many routers will re-enable SIP ALG after being powered off and on, or sometimes after a firmware update, therefore if it has been disabled in the past, and you know that the router was recently updated and powered off and on again, then it is always a good idea to log in to the router and double check the setting.

Virgin SuperHub: SIP ALG cannot be disabled in the settings of SuperHubs. Please click here for advice troubleshooting issues with SuperHubs. 

BT: SIP ALG cannot be disabled in the settings of BT HomeHubs, but can be disable with BT Business Hub versions 3 and higher:

Disabling a BT Business Hub 5’s SIP ALG

Fritz!Box: SIP ALG can’t be disabled.

DrayTek routers: Log in to your DrayTek via Telnet using an SSH client such as Putty: http://www.putty.org/

Check if SIP ALG is Enabled or Disabled:

To check if SIP ALG is Enabled or Disabled enter this command: sys sip_alg ?

If SIP ALG is disabled a ” 0 ” result will be returned.  If SIP ALG is enabled the result will be ” 1 “.

Disabling SIP ALG:

To Disable SIP ALG enter the following:

sys sip_alg 0
sys commit
sys reboot

The router will restart and save your changes.

Click here for additional general information about DrayTek Firewall setup. 

TP-Link routers: How to Disable SIP ALG on TP-Link ADSL modem router

Linksys: Check for a ‘SIP ALG’ option, in the ‘Administration’ tab under ‘Advanced’. 

May also need to disable SPI Firewall. 

Microtik: Disable ‘SIP Helper‘. 

Netgear: Look for a ‘SIP ALG’ checkbox in the ‘WAN’ settings.

Port Scan and DoS Protection should also be disabled.

Disable STUN in VoIP phone’s settings. 

D-Link: In your router’s ‘Advanced’ settings –> ‘Application Level Gateway (ALG) Configuration’ uncheck the ‘SIP’ option. 

Huawei: Many routers support SIP ALG (usually found in the ‘Security’ menu). 

SonicWALL Firewall: Under the VoIP tab, the option ‘Enable Consistent NAT’ should be enabled and ‘Enable SIP Transformations’ unchecked.  

Thomson: How to Disable SIP ALG on a Thomson Router HERE

Test with STUN disabled in your VoIP phone’s settings.

Adtran Netvanta: Disable SIP ALG under ‘Firewall/ACLs’ –> ‘ALG Settings’.

For Technicolor TG588V routers see this document for step by step details

Even if there isn’t a SIP ALG option in your router’s settings, it may still be implemented. TelNet commands must be used to disable SIP ALG with TechnicolorThomsonSpeedTouch, some Draytek and some ZyXEL routers. 

Categories
Knowledge Base

Using FreePBX FollowMe

Follow Me allows you to redirect a call that is placed to one of your extension to another extension or external number.

You can program the system to ring your extension alone for a certain period of time, then ring some other destination(s), such as a mobile phone or another extension, then go to the original extension’s voicemail if the call is not answered.  

It can also be used to divert calls to another extension without ringing the ‘original’ extension, or ring both together in a ‘twinned’ manner. This is useful if you are regularly away from your desk

Your can modify certain Follow Me settings using the User Control Panel as well as disable and enable Follow Me using a feature code that is normally *21,

To use the UCP to change settings if you have had permissions enabled is done by clicking the COG icon on teh Follow me Widget and below is a short Video on the key settings

Categories
Knowledge Base

Setting Up your UCP

The UCP or user control panel is an integral part of freePBX, It lets users have control over their telephone experience.

Below is a short video for setting up the key components of the UCP including voicemail and the WebRTC softphone.

The UCP Phone or WebRTC Phone is an in-browser phone. The Administrator can enable the “WebRTC phone” and that is “attached” to a user’s extension, this phone will then receive phone calls at the same time as the users extension .

The UCP allows users to add multiple dashboards and resizable widgets, This functionality allows users to completely customize the look and feel of their User Control Panel.

The Voicemail widget allows you to view, listen and manage your voicemail settings. The voicemail widget also allows you to monitor and listen to other peoples mailboxes, This feature is invaluable for receptionists and PA’s as it allows them to monitor their Managers or teh main company mailbox. To monitor additional mailboxes contact your system administrator.

 The FreePBX User Management Module controls which mailboxes a user will be able to add as a widget in UCP as it is not just limited to the extensions own mailbox, This is useful for department managers or Receptionists.

The UCP also has a chat function built-in that allows remote users to chat between each other similar to any other webchat but with the added security of it being ‘siloed’ in your company.

For full details and instructions of all options please see the WIKI at Sangoma.com

Categories
Asterisk Support FreePBX Knowledge Base Support Technical

Backing up files in FreePBX 15

The first time you come to restore your FREEpbx 15 system you may find that not everything that you expected is there !

The new backup module backs up on a module by module base and not like before where is was DBs and Files.

Linked here is a repository that has the files to create a module that can be edited to backup directories.

https://bitbucket.org/cybercottage/filebackup

The file you need to edit is Backup.php

<?php

namespace FreePBX\modules\Filebackup;
use FreePBX\modules\Backup as Base;

class Backup extends Base\BackupBase
{
    public function runBackup($id, $transaction)
    {
        $this->addDirectories([
            '/etc/asterisk','/tftpboot',
        ]);
        $files = glob("/etc/asterisk/*conf");
        foreach ($files as $file) {
            $path = pathinfo($file, PATHINFO_DIRNAME);
            $this->addFile(basename($file), $path, '', "conf");
    }
    $files = glob("/tftpboot/*xml");
        foreach ($files as $file) {
            $path = pathinfo($file, PATHINFO_DIRNAME);
            $this->addFile(basename($file), $path, '', "conf");
        }
        return $this;
    }
}

As you see we are backing up /etc/asterisk and /tftpboot , But only *.conf files in /etc/asterisk and only *.xml files in /tftpboot

Details on the new backup system are here https://wiki.freepbx.org/display/FOP/Implementing+Backup

Thanks to James Finstrom for the original version of this, This version is not to replace his work but only to give an example of working with Multiple directories

The downloaded zip file needs to be added as a Local module via Module Admin and enabled, It will obviously give a signing error but this can be disabled in Advanced settings or ignored ;-)

Enjoy but don’t blame me if it doesn’t work. Ive tested it on my systems and all seems good by your experience may be different

Categories
Blog Knowledge Base

SSL, FOP2 and All that..

There are a few common questions and gotchas when using fop2 on a FreePBX server using ssl.

The symptom is simple you cant connect and at the bottom left if tels you that it cant connect over websockets to port 4445 and will finally time out saying Flash is required.. None of this is awfully helpful to be honest.

But the fix is simple and its a shame by default its not this .

In your fop2.cfg file local the lines below and edit them so they match .

It maybe that your certificate names aren’t as below, In that case substitute webserver.XXX with the correct file names.

; If you access fop2 via https, browsers will try to use wss (Secure 
; web sockets) and for that it requires a certificate file and key file,
; the same ones you have in your web server configuration. Be sure to
; specify the correct certificates, the defaults are the ones for a 
; regular Centos installation:
;

ssl_certificate_file=/etc/httpd/pki/webserver.crt
ssl_certificate_key_file=/etc/httpd/pki/webserver.key
;ssl_certificate_file=/etc/pki/tls/certs/localhost.crt
;ssl_certificate_key_file=/etc/pki/tls/private/localhost.key

Thats its. Fop2 will now work over HTTPS