twiliosiptwilio-apitwilio-twiml

Twilio <Client> and <SIP> with <Enqueue> and <Queue>: BLF Not Glowing on Yealink T31 When Call is Parked


I'm currently working on a project using Twilio and Yealink T31 hardphones. I'm leveraging Twilio's <Client> and <SIP> verbs for handling calls, and using <Enqueue> and <Queue> to park calls. In my Yealink Dashboard I have selected transfer mode for call parking, so it hits my referUrl that I specify while doing the sip call.

The issue I'm facing is that the BLF (Busy Lamp Field) on my Yealink T31 phones doesn't light up when a call is parked. Ideally, the phone that parks the call should show a red BLF indicator, and other phones on the network should show a blinking green BLF indicator.

And my Yealink DSS Key configuration is as follows:

Park Key: *10001 (Park Code) Retrieve Key: *20001 (Retrieve Code)

Despite this setup, the BLF indicators don't change when a call is parked. I know that there must be some more configuration required to make it work but I am not able to figure out what am I missing in the configuration?

I did some research on the internet and got to know about PBX systems. But all of them seem unfit for my usecase. The product I am building will have multiple companies onboarded and each of them will have their own set of SIP and Client's. Currently I have a Twilio SIP domain and I register accounts for company's number and use it directly in the Yealink devices.

Here's some reference code that I am using:

For Retreive Call Park -

const response = new twilio.twiml.VoiceResponse()
const dial = response.dial();
                    dial.queue(`${company.data.company_id}_${toFormatted?.toString()?.substring(4)}`); // basically companyid_lotNumber
return response.toString();

Similar as above for Call Park, but dial.enqueue instead of dial.queue.

For calling to SIP phones -

dial = voice_response.dial({
  callerId: from,
  action: `${process.env.ENV_URL}/voice/sip-url`,
  method: 'POST',
  referUrl: `${process.env.ENV_URL}/voice/transfer-sip`,
});

dial.sip({
  statusCallbackEvent: 'answered completed',
  statusCallback: `${process.env.ENV_URL}/voice/save-logs-callback`,
  statusCallbackMethod: 'POST',
}, sip);

Solution

  • Twilio Support Engineer here. With traditional PBX systems, BLF typically works using SIP SUBSCRIBE and NOTIFY. The phone will send a SUBSCRIBE message to the PBX and the PBX will respond with a 200OK message. It will also respond with a SIP NOTIFY that will include the status of the endpoint that you are trying to watch.

    Our Programmable Voice SIP Domain product does not support SIP SUBSCRIBE or NOTIFY at this time which is likely why this is not working.