This problem is most likely to happen if the phone is behind a NAT, thus loosing its connectivity to the server. While default phone settings work correctly in environments without a NAT, for phones behind a NAT you must change the phone time-out period - this is the amount of time after which the phone tries to register again to the server. Most phones have a Registration expires/Re-register timeout/Registration timeout setting. The name varies a little but the function is always the same. Default values are 1h or 3600 seconds. While this is alright for typical connections which are normally closed after 7200 seconds, for connections behind NAT the value must be set to 60 seconds or 1 minute, or, in any case, lower then 120 seconds. This is mandatory because most routers close the connection after 120 seconds and when a call comes from a public IP after this period of time, the router just drops it since it does not know what to do with the packets.
This may also be caused by router settings. So, it's probably best to try different settings. If nothing else works, consider using a stun server (there are public stun servers available on the net).