I too had an issue with this. The only way I could find to do this is to have a seperate sip account for each phone. Then I do a virtual extenshion number. For instance in our dial script I set variables like
exten = Set(extGrp4000=SIP/EXT4000&SIP/EXT-5000)
exten = Set(extGrp4010=SIP/EXT4000&SIP/EXT-5010)
Then in our internal dialing macro I check to see if the variable extGrp${EXTEN} has a value if it does I used that value to ring the phones otherwise I use SIP/EXT${EXTEN} to ring the phone. This is a very simplified explination of it but It works very well. The only thing I have not figured out yet is how to set the BLF for both extenshions to the primary. Below is a cut back example of our internal extenshion dialing script. I have removed a lot of other complex items and provided some of the basics.
[macro-Core_ExtFlow]
exten => s,1,Set(l_VMExt=${MACRO_EXTEN})
exten => s,n,Set(l_Ext=${MACRO_EXTEN})
;I passed in the default dialing string SIP/Ext${EXTEN} Store it so it can be check and over ridden
exten => s,n,Set(l_CallArgs=${ARG1})
exten => s,n,GosubIf($["${extVmap${l_VMExt}}" != “”]?setVMExt|1)
exten => s,n,GosubIf($["${extGrp${l_Ext}}" != “”]?setGrpExt|1)
exten => s,n,Dial(${l_CallArgs},20,tT)
exten => s,n,Goto(r-${DIALSTATUS},1)
exten => r-NOANSWER,1,Voicemail(${l_VMExt}@corpVM|u)
exten => r-NOANSWER,n,Hangup()
exten => r-BUSY,1,Voicemail(${l_VMExt}@corpVM|b)
exten => r-BUSY,n,Hangup()
exten => r-CHANUNAVAIL,1,Voicemail(${l_VMExt}@corpVM|u)
exten => r-CHANUNAVAIL,n,Goto(${l_pRetInvExt})
exten => _r-.,1,Goto(r-NOANSWER,1)
;;**Allows for virtually mapping multiple extenshions to a single voice mail box
exten => setVMExt,1,Set(l_VMExt=${extVmap${l_VMExt}})
exten => setVMExt,n,Return
;;**Allows for the definition of extenshion groups. These groups can ring more than one extenshion.
exten => setGrpExt,1,Set(l_CallArgs=${extGrp${l_Ext}}) ;Override the passed in value with the virtual mapped value
exten => setGrpExt,n,Return
I have over 30 customers using this method and they love it.
zktech