Thanks, Robert. I was actually considering using some prefix that could be stripped at some point in the Dial Plans and used for getting around the OBi codes accessing the underlying Asterisk ones. I never seriously considered using "#" because it seemed problematic in that it supports other important functionality (including denoting the end of a dialed number to short-circuit the timers -- something I tend employ a lot) and I didn't want to cause problems elsewhere that might potentially go unnoticed for a while. But, you persuaded me to try it, and it works like a champ.
If you have a second, I'd like to make sure I understand correctly what is happening in the DigitMaps here. What I did was add the string "*xx.S3|<#:*>xx.S3|" to my ITSP Profile B DigitMap. This Profile is associated with SP2, which is also the Primary Line. So...
1. When parsing the Ph1 DigitMap, "(Mpli)" pulls in the above, and I presume the conversion of '#' to '*' takes place at this point.
2. Following this, the original string (as opposed to the converted string) is checked against the Star Codes. Since there are not Star Codes which begin with a '#', there is no match.
3. Following this, the Speed Dials are checked, using the converted string. Again, there is no match.
4. Following this, the Ph1 OutboundCallRoute is parsed. The first (and only) item in this list that matches is the last item: "{(Mpli):pli}", and here it matches against the "*xx.S3" component, since the dialstring has already been converted. Because of this, the dialed digits get sent to "pli" or SP2.
5. SP2's ITSP Profile B's DigitMap is parsed next, and of course it again matches on "*xx.S3", so the converted string get sent to the Asterisk server.
Is this analysis essentially correct?
(Thanks again!)