FreePBX 17 contract header user=phone

In a brief look at the chan_sip code, I see nothing that would add anything other than transport to the basic URI, in a contact header.

Basically your provider is trying to read meaning into something that is intended to be opaque data, returned unchanged, to its creator. There are options to include account names, because several providers were found to be broken in terms of trying to interpret the user part as an account name, but this is the first time I recall a provider that also insists on user=phone.

I don’t think falling back to Asterisk 20, or adding the third party forked chan_sip for later versions, is going to help you.