The key to getting the system to work reliably without getting one way transmission problems is to allocate ports for each Sipgate trunk. On my PBX I have 4 standard Sipgate numbers, and I use one of them for outgoing calls while the others are purely for incoming.
To avoid NAT problems make sure that your /etc/asterisk/sip_nat.conf contains:
Lets start by seeing a working incoming and outgoing trunk Freepbx setup :
In Outgoing settings, make sure you have fromuser and username set to your Sipgate ID.
Enter context=from-trunk in Outgoing settings if you do not allow anonymous sip calls.