Possible Method 1
Have you considered the boring old conventional way of doing this? In this example I'm using vg3 as the numbers are easier to work with. Also, I'm assuming that your PrimaryLine = PSTN.
Physical Interfaces - Phone
([1-9]x?*(Mpli)|[1-9]S9|[1-9][0-9]S9|999|112|**0|***|#|**1(Msp1)|**2(Msp2)|**3(Mvg3)|**8(Mli)|**9(Mpp)|(Mpli)
OutboundCallRoute
{([1-9]x?*(Mpli)):pp},{(<#:>|999|112):li},{**0:aa},{***:aa2},{(<**1:>(Msp1)):sp1},{(<**2:>(Msp2)):sp2},{(<**3:>(Mvg3)):vg3},{(<**8:>(Mli)):li},{(<**9:>(Mpp)):pp},{(Mpli):pli}
DigitMap(Mvg3)
(0033xx.)
Now by dialling **3 followed by any number starting 0033 (code for France), that number will be sent out unchanged to vg3. Change Mli:
Line DigitMap
(0[1-9]xxxxxxxxx<#>S0)|<**3>(Mvg3))
Now any call starting 0033 will go to vg3 with no need for the **3.
If you would like the numbers to go out in French national format, but still dial in international format, then this should work:
DigitMap(Mvg3)
(<0033:0>xx.)
Possible Method 2
OK, enough of the boring normal ways of doing things
If you wish to be unconventional (as many are on this forum!):
Physical Interfaces - Phone
([1-9]x?*(Mpli)|[1-9]S9|[1-9][0-9]S9|999|112|**0|***|#{t=di2}(Mvg1)|**1(Msp1)|**2(Msp2)|**8(Mli)|**9(Mpp)|(Mpli)
This rule "#{t=di2}(Mvg1)" means when you press # you will hear a second dial tone and allows numbers that match Mvg1. This is your "pretend" French dial tone.
OutboundCallRoute
{([1-9]x?*(Mpli)):pp},{(999|112):li},{**0:aa},{***:aa2},{(<**1:>(Msp1)):sp1},{(<**2:>(Msp2)):sp2},{(<#:>(Mvg1)):vg1},{(<**8:>(Mli)):li},{(<**9:>(Mpp)):pp},{(Mpli):pli}
This rule {(<#:>(Mvg1)):vg1} is needed to remove the # and then send out numbers that match Mvg1 to vg1.
Leave Line DigitMap as you had originally.
Using this method I guess that after pressing # and getting second dial tone, then you will be dialling numbers in French national format and sending them via vg1 to the French Obi.
Mvg1 has to be quite specific to prevent conflicts with Mli. Luckily, I believe all French national numbers are ten digits starting with 0 So:
DigitMap(Mvg3)
(0xxxxxxxxx)
The only downside to the unconventional method is that you will lose the function of pressing # to bridge the phone port to the line port in each Obi. You could invent another way of doing this, but that's a step too far for me today
The above still leaves quite a lot to sort out, but hopefully will give you ideas of how you want to progress. Let us know how you get on!