Audible Echo. Reflections occur at any point the telephone line is converted from two wire to four or back. And also in the hand set. A little reflection is designed into the handset itself because otherwise the phone sounds dead. If the reflections are delayed too long then annoying audible echo is possible. This can be mitigated by appropriate echo suppression (turning off incoming sound when you are speaking, older technology that sounds pretty bad) or echo cancellation (detecting the actual echo and removing it from the received sound, typically needs a digital signal processor (DSP) and only became cheap enough for consumer grade equipment in the last 10 years or so). However echo cancellation can only do so much. If there is too much delay between the sound and its reflection or if the reflection is too high the adaptive logic will not be able to handle the situation. You can reduce level reflections on your side by making sure the line impedance in your two wire phone and that in your Analog Terminal Adaptor (ATA) are properly matched. Some ATAs have controls for this others seem to do an automatic impedance match. You have no control on the reflections generated on the far end of the call. You can reduce the time delay for the reflections by using a VoIP provider that is close to you on the Internet. And a high speed link is needed, just the delay in getting a packet to your ISP via a dial up can be a deal killer.
Drop outs. Voice, or other streaming real-time packet flows, need a smooth stream of received data all with the same time delay between sending and receiving. The Internet does not provide that. So your ATA or IP phone or maybe your VoIP BPX will have a jitter buffer. The more variation in packet delivery you have the bigger the jitter buffer you need. It seems that the VoIP providers I have dealt with have a maximum jitter buffer size of 10ms. This puts an upper limit on how much jitter there can be before the person you are talking to hears funny things. For your listening there may be a control on your ATA or VoIP PBX that allows you to adjust this to something larger so you may still hear things okay with more jitter. The better the ISP (fewer drop outs, less jitter) the better your call quality.
Routing. Most VoIP nowadays uses SIP for setup and control and RTP for the actual voice. The IP addresses and ports used for RTP are negotiated in the SIP dialog between your ATA/VoIP PBX and your provider. The RTP need not follow the same path as the SIP. If you have a NAT or PAT router that does not understand SIP then it will not know how to look inside the SIP packets and detect the assignments it has to setup for the RTP to work. The result is no voice or one way voice. There are some work arounds where your ATA/VoIP Router can attempt to discover what your NAP/PAT router is doing (STUN is one) and try to compensate. However it is best to have a router that is SIP aware.
Those are the first things that come to mind for me…
And to get ZeroShell to be SIP aware, you should add the following to your Pre-Boot script:
Apparently an older version of Zeroshell had that but it was removed for some reason. I found that I needed it to make my VoIP setup work properly.