Cisco CallManager 3.3 does not support T38 Fax Relay. A normal IP phone call connects just fine, but T38 negotiation fails. Since the Cisco CallManager does the switching, and it does not support T38, the call fails.
Traces show H225 call setup going through fine but when it tries the H245 capabilities exchange, it fails before the open logical channel message is sent.
There are two routes you can take in order to fix this issue:
Upgrade the Cisco CallManager to 4.1, change your IP to IP GW to a regular H323 GW with the use of slow-start, then change all of your remote GWs from MGCP to H323. This supports T38, and you are still able to use Cisco CallManager to do all the routing resolution for least cost routing.
Add a dial-plan on the IP to IP GW with individual voip dial-peers pointing at all the remote sites, each with their own specific digit patterns. Point these voip dial-peers directly to the remote GWs, not to Cisco CallManager, so that the negotiation is between the two GWs and not Cisco CallManager and the IP to IP GW.
The only problem here is, you either have to change all the far end remote GWs to H323, or designate a few FXO ports on each router as normal POTS peers that aren't MGCP controlled. So this way you can still use MGCP, but route incoming H323 fax calls from the server out the POTS legs over FXO.
But, there is a workaround to make this work with Cisco CallManager 3.3.3. Make sure your gateway has this configuration:
voice call send-alert voice rtp send-recv ! voice service voip allow-connections h323 to h323 h323 emptycapability no telephony-service ccm-compatible ip circuit max-calls 100 ip circuit default only no ras brq h225 timeout tcp call-idle value 0 h225 h245-address on-connect h225 connect-passthru call start slow session transport tcp calls-per-connection 1 h245 tunnel disable h245 caps mode restricted modem passthrough nse codec g711ulaw
After this, you need to delete your H.323 gateway configuration from Cisco CallManager and configure this as a Non-Gatekeeper controlled InterCluster Trunk.
When this is done, the Cisco CallManager seems to respond with the H.245 TCS right away and the call is established.
Note: In 4.1.3, you have the option to configure Cisco CallManager to send the TCS right away and not wait to receive it but there is no check box for this in Cisco CallManager 3.3.3. This is why it works with the Trunk, whose default behavior is to send the TCS right away.