From VoIP.ms Wiki
This guide will cover the basics of getting your ShoreTel phone system working with a VoIP.ms SIP trunk. The ShoreTel documentation is not quite complete, although overbearing, so the purpose of this guide is a quick and dirty to get a trunk up and running and provide you with the couple of little config bits that the ShoreTel documentation lacks.
For this guide, I am using a fresh install of Server2008 with ShoreTel Server 14.2. Server 2008 will need SP1 applied, .NET Framework 4.5 installed, UAC disabled, and all other documented prerequisites fulfilled (SMTP, QWAVE, FTP, IIS, etc) for the installation of ShoreTel Server.
Once ShoreTel Server is installed, navigate to the Director homepage and log in with the default user/pass of admin/changeme
At this point, you should configure your voice switch (Platform Hardware -> Voice Switches -> Primary). I do not cover this here, as it may be different for each piece of hardware (or virtual switch, if you so choose).
Once your switch is configured, there are 3 main steps to get a trunk connected to VoIP.ms:
- Configure the SIP profile
- Configure the trunk group
- Configure a trunk
Configuring the SIP profile
Under Trunks -> SIP Profiles configure the SIP trunk options as shown in the screenshot. Give your profile a name (VoIP.ms in this example), and enter anything in the User Agent field; the field must be populated to continue, but its not actually used. Don't forget to tick the Enable box.
The Custom Parameters section is the key information which ShoreTel does not include in the built in documentation. RegisterUser defaults to BTN (Billing Telephone Number), however this field ONLY accepts 10 digits which will not work with our VoIP.ms account information. We need to change this to RegisterUser=UserID, and we will fill in the UserID field in the next section. The rest here is pretty basic, Register=1 causes the trunk to register with VoIP.ms, RegisterExpiration I have set to 60 seconds for NAT keepalive, otherwise inbound calls will fail once the firewall closes the ports.
Configuring the Trunk Group
Under Trunks -> Trunk Groups add a new SIP trunk group from the drop down list. A screen similar to below will appear. Before continuing, check to see that you have the ability to save the page; if the New, Copy, Save etc buttons are missing, and you have a message something to the effect of "Unable to modify the database, some ShoreTel services may not be running", you have likely forgot to install QWAVE. Unlike all the other pre-install requirements, the ShoreTel server install won't complain if QWAVE is not installed - rather it allows you to bang your head against the desk for a while at this stage trying to determine what service isn't running.
Give it a name (I simply used VoIP.ms again). Fill in the required username & password (your VoIP.ms account/subaccount information); this Username field corresponds to the UserID option in the SIP profile, above. Select the SIP Profile that you previously created from the dropbox, and set Digest-Auth to Outbound-Only. There are a few other required fields to be filled in on this page to continue such as local area code, etc. Complete and save.
Configuring the trunk
At this point, you should have already configured your hardware under Platform Hardware -> Voice Switches -> Primary. I am using a ShoreGear 220T1A hardware appliance. Configure your hardware as required, or you can use a virtual switch. I have never tried the virtual switch as there is additional licensing fees and I already had the 220T1A hardware on hand from a previous T1 installation.
Under Trunks -> Individual Trunks, create a new trunk in the trunk group you created above by selecting it in the dropdown box. Give your trunk a name, I used toronto3.voip.ms to signify which server this trunk is landing on. In the IP Address field, fill in the resolved address of the voip.ms server your DID is terminating on.... this is where I cringe. You CANNOT enter a friendly name here, which means no failover if this IP goes down hard (I don't know if this is a VIP for multiple servers on the VoIP.ms side?). In my small branch office, this is not an issue and I can quickly remap my trunk to a new IP, but if this is a critical phone system for you, you should investigate other ways to provide some redundancy here. At the time of this writing, toronto3.voip.ms resolves to 188.8.131.52, however it was only a couple of months ago or so (October 2015?) that we had an outage due to VoIP.ms changing IP's on us.
At this point you should have a working trunk to VoIP.ms, which you can confirm by opening the trunk test tool, which is in the ShoreTel folder in your Start Menu -> Programs. You can now go on to configure the rest of the system, which is all thoroughly documented by clicking the help button within the GUI interface.
SIP Profile Custom Parameters
Below is a copy of what we managed to obtain from a ShoreTel integration partner.
SIP Trunk Profile Parameters:
DontFwdRefer Usage: DontFwdRefer=[0|1]
When this parameter is set to 1, it inhibits the use of REFER for transfer on the trunk. It also inhibits sending INVITE with Replaces header. Peer must support INVITE without SDP for certain transfer call- flows
SendMacIn911CallSetup Usage: SendMacIn911CallSetup=[0|1]
This parameter is used in conjunction with SIP based emergency gateways, such as those provided by 911 Enable. It appends the MAC address of the IP phone in the From tag of an outgoing emergency call. From: "Dizzy Gillespie" <sip:+firstname.lastname@example.org:5060;user=phone>;tag=shorUA_1077733456- 103455277-EPID-001049042E4A
This only applies to ShoreTel IP Phones, excluding the IP-8000 conference room phone
StripVideoCodec Usage: StripVideoCodec=[0|1]
This parameter should be set to 1 if the trunk does not support video properly. When set to 1, it strips video codecs from SDP in INVITEís being sent to the trunk and properly restores and rejects the video media lines in the 200 response from the trunk. It also strips video codecs from INVITEís coming from the trunk and properly restores and rejects the video media lines in the 200 response to the trunk
AddG729AnnexB_NO Usage: AddG729AnnexB_NO=[0|1]
This parameter should be set to 1 if the trunk does not support G729 Annex B properly. When this is set, any outgoing INVITE with G729 in the SDP will have the attribute "a=fmtp:18 annexb=no" added to the SDP.
HistoryInfo Usage: HistoryInfo=[none|diversion|history]
This parameter controls how information is presented when an external incoming call is forwarded out this trunk. In this case, the "From" header will indicate the actual caller, which may not be a valid number to present to the trunk. The Diversion or History-Info header will be used to indicate the DID number of the user on whoís behalf the call was forwarded.
If set to 'none' or omitted, then no indication of the forwarding number is presented. If set to 'diversion', the SIP Diversion header is supplied, as dictated by RFC 5806. If set to 'history', the SIP History-Info header is supplied, as dictated by RFC 4244.
EnableP-AssertedIdentity Usage: EnableP-AssertedIdentity=[0|1]
This profile parameter controls how Caller-ID is presented on outbound calls. If it is set to 0 or not pre- sent, then the old style or presenting caller-ID in From header is used when sending outgoing calls. Note that the style of presenting blocked caller-ID has changed in ShoreTel 12.
When set to 1, the Caller-ID is placed in the P-Asserted-Identity header. If privacy is indicated for the call (User dials *67, or trunk group is configured to not send Caller-ID), then a Privacy header is inserted with value ìidî, and the From header is anonymous
Port Usage: Port=[5060|1-65535]
This profile parameter changes the remote port used for the SIP trunk. Currently, there is no way to con- figure the port number for SIP trunks in ShoreWare Director. Only port 5060 is supported. This profile parameter allows the port number for a trunk group to be configured
HairPin Usage: HairPin=[0|1]
This profile parameter controls if hairpin is allowed on SIP trunk calls, when enabled and available, features like Barge-in, silent monitoring, whisper-page, whisper-coach, call-record will be supported on the SIP trunks.
OptionsPing Usage: OptionsPing=[0|1]
This profile parameter controls if OPTIONS message should be sent to remote party for detecting connectivity
OptionsPeriod Usage: OptionsPeriod=[180|60-3600]
This profile parameter is used to control the time interval between SIP OPTIONS messages
OverWriteFromUser Usage: OverWriteFromUser=[none|UserID|BTN]
This profile parameter is used to choose either userís id or billing phone number in the FROM header when making calls
DontAdvertiseUpdate Usage: DontAdvertiseUpdate=[0|1]
This profile parameter is used to decide if UPDATE should be sent in the SUPPORTED header
RFC2543Hold Usage: RFC2543Hold=[0|1]
This profile parameter is used to decide if connection field should be set to 0.0.0.0 in case of sending out- going INVITE for hold
AlwaysSend180 Usage: alwaysSend180=[0|1]
This profile parameter is used to decide if a 180 will be sent out right away after receiving an incoming INVITE
IgnoreEarlyMedia Usage: IgnoreEarlyMedia=[0|1]
This profile parameter is used to decide if early media should be forwarded to the caller, when a SIP de- vice doesnít wish to accept early media, this parameter should be set to be 1
Register Usage: Register=[0|1]
This profile parameter is used to decide if outgoing REGISTER messages should be sent
RegisterUser Usage: RegisterUser=[BTN|UserID|DID]
This profile parameter is used to decide in what to use in FROM header in the outgoing REGISTER messages
RegisterExpiration Usage: RegisterExpiration=[3600|60-86400]
This profile parameter is used to decide the time interval between outgoing REGISTER messages
1CodecAnswer Usage: 1CodecAnswer=[0|1]
This profile parameter is used to decide if the SDP should contain only 1 codec for an outgoing answer.
SIP Extension Profile Parameters:
1CodecAnswer Usage: 1CodecAnswer=[0|1]
Some devices do not honor the codec order specified in a 200 OK response to an INVITE. This causes several problems. First, some endpoints in the system do not support asymmetric codecs during a session. Second, any bandwidth calculations based on observing the offer/answer exchange will likely be wrong. When set to 1, only 1 audio codec is sent in a 200 OK response.
AddGracePeriod Usage: AddGracePeriod=[0-1800]
Some SIP devices re-register too close to the expiration time, introducing a race condition where the sys- tem is in the process of deleting the record from the system when the re-register is received. This parameter adds a grace period to the expiration received in the REGISTER request.
AllowedCodecs Usage: AllowedCodecs=[any|[codec[,codec]*]
Valid values are ëanyí (default) or a comma separated list of codec names. The codec name must be for- matted as shown on the Supported Codecs page (Administration, Call Control, Supported Codecs). For example: 'PCMU/8000'. This should be used if the SIP device cannot follow the normal rules of codec negotiation for all codecs supported in the installation. For example, one particular implementation would rejected requests containing some codecs it didnít understand. This only applies to audio codecs. Video codecs and RFC 2833 'telephony-event' is not affected by this parameter.
DelayUnregister Usage: DelayUnregister=[0-20]
Some devices, under certain circumstances, un-register, then immediately register again. This introduces a race condition similar to the one discussed in section 0. Usage of this parameter mitigates this problem.
FakeDeclineAsRedirect Usage: FakeDeclineAsRedirect=[0|1|400-606]
Some SIP devices present an option to decline a call. When invoked, various different response codes have been used by various implementations. If set to 0, only a 3xx class response will cause the call to be diverted to the busy destination. If set to 1, 603 will be sent to busy destination as well. If set to a value from 400 to 606, the selected response code will be used to send the call to the busy destination.
MWI Usage: MWI=[none|subscribe|notify]
This parameter defines how RFC 3842 Message Waiting Indication is handled. When set to "subscribe", an explicit subscription is required. If set to "notify", the NOTIFY messages are sent without requiring a SUBSCRIBE. If set to "none", then MWI is not supported.
OptionsPing Usage: OptionsPing=[0|1]
ShoreGear switches can send a periodic OPTIONS message to SIP devices, and mark them Out-Of- Service if they donít respond. There are 2 benefits to this: Calls are diverted immediately to the busy destination, and there is logging of the event on the server. The OPTIONS ping occurs periodically between 3 and 4.5 minutes.
OptionsResponse Usage: OptionsResponse=[200-699]
Some devices reject OPTIONS requests, such as with a 405 "Not Supported" response. This can still be used to determine if the device is alive and on the network by using this parameter. Otherwise, a 405 response would put the device Out-Of-Service.
SendEarlyMedia Usage: SendEarlyMedia=[0|1]
When set to 1, the device will be sent 183 response with SDP for certain call-flows. Currently, this is only used in error conditions when an announcement is played.
StripVideoCodec Usage: StripVideoCodec=[0|1]
This parameter should be set to 1 if the device does not support video properly. When set to 1, it strips video codecs from SDP in INVITEís being sent to the device and properly restores and rejects the video media lines in the 200 response from the device. It also strips video codecs from INVITEís coming from the device and properly restores and rejects the video media lines in the 200 response to the device.
XferFailureNotSupported Usage: XferFailureNotSupported=[0|1]
For scalability reasons, there are a few call-flows that use REFER as a means for the caller to hear ringback tone. These call-flows rely on the deviceís capability to recover from a transfer failure and keep the original call alive. If the device cannot do this, then this parameter should be set to 1, and an alternative means of providing ringback is used.