Got the exact same problem with CSCO a while back.
Call reqContractDetails() first. Don't need to call that for all symbols, just when you get the "ambiguous" error. Then, from the contractDetails() callback, you request market data again, with the complete contract.