Orbtalk has many users succesfully using 3CX. Orbtalk supports G711U, G711A, G729 (including annex B), GSM, iLBC and SPEEX. DTMF is also transmitted through our switch, test first with inband and DTMF via SIP INFO on the device.
The below article is from the 3CX forum regarding inbound issues to DIDs.
Historically we have always used the "source identification" in the VOIP Provider to trigger the DID's as I think when we first started using 3CX that this was the only way to do it or it is possible it's the only way I found to do it.
In the current v7 release I have also discovered that the minute you amend the "VOIP Provider > <your VOIP provider> > DID > SIP Field containing DID numbers" field from blank to something else then any inbound rules setup in "VOIP Provider > Inbound Parameters > Call Source Identification" seems to be completely ignored. there is also no way back as once this field is set you cannot blank it again.
Hence, the correct procedure for setting up DID's appears to be as follows.
1. Setup your VOIP Provider
2. Under the main number for that VOIP Provder scroll down to "VOIP Provider > <number> > Other Options > Source Identification by DID"
3. In this field define all the masks for all DID numbers that come in under this VOIP Provider. You do this using a comma separated list. I for example might have DID range allocated to me of 01695555100 to 01695555125 inclusive so this means I could define 0169555510*(this traps all 01695555100-109), 0169555511*(this traps all 01695555110-119), 01695555121, 01695555122, 01695555123, 01695555124, 01695555125(these I have to trap separately) 3CX then knows when it sees this number that it is related to this VOIP Provider. Just be a little careful as my assumption is that your VOIP provider sends the full DID in the SIP message, I have heard that some VOIP provider sometimes only send the last 6 digits etc. you will just need to check your SIP messages to be completely sure what is being sent to you.
4. Next you have to tell 3CX where in the incoming SIP message this incoming DID number is stored so 3CX knows where to pluck it out of and check it against the DID mask. You do this in "VOIP Provider > <your VOIP provider> > DID > SIP Field > SIP Field containing DID numbers". In order to find this information you will need to set the logging level of 3CX to "Verbose" (then restart 3CX) and then call one of the DID numbers from an external phone. You should get something in the log that looks something like this
14:13:59.136 [CM500002]: Unidentified incoming call. Review INVITE and adjust source identification:
INVITE sip:<"If your DID number is here set it to "Request Line USI:User Part"@18.104.22.168:45169;rinstance=d3e7c28b7f6b8eee SIP/2.0
Contact: <sip:"If your DID number is here set it to "Contact:User Part"@22.214.171.124:5060>
To: <sip:"If your DID number is here set it to "To:User Part"@126.96.36.199>
From: <sip:"If your DID number is here set it to "From:User Part"@188.8.131.52>;tag=3441625669-741784
5. You should then add your DID numbers to "VOIP Provider > <your voip provider> > DID > DID Numbers" and also define incoming routing rules for them.