Yealink Dect W7X, W8X and W9X Pin Set dialing problems

Hello all, I just thought that I would share incase anyone out there has this issue. On FreePBX 16 and Asterisk 18 (I have also seen the problem on FreePBX 16 and Asterisk 16) some of the new model Yealink Dect phones have a problem to send DTMF when dialing a pin code, it only happens to specific models and only when prompted for a PIN, the DTMF is ignored. So far, I have toggled every DTMF setting on both ends with no success. I have tried every available firmware of the phone with no success.

I figured out that the offending phones would work to a pinset with a 1 second answer delay before sending out the call. So to fix the problem I copied the macro-pinset section out of extensions_additional.conf, added in a wait and placed it into extensions_override_freepbx.conf, then reloaded. This has resolved the issue.

I believe that this is a bug on Yealinks Firmware somewhere but to explain this to them and to get all of the tests that they require on a live system would not be easy so I opted to find a fix on the system.

This is a copy of my extensions_override_freepbx.conf file with the working fix (note your macro may be different so copy it out of the extensions_additional.conf file and edit) Changes are in bold.

include => macro-pinsets-custom
exten => s,1,Set(try=1)
exten => s,n,Answer
exten => s,n,Wait(1)
exten => s,n,GotoIf($[${ARG2} = 1]?cdr,1)
exten => s,n,GotoIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != “NOPASSWD”]?auth:return)
exten => s,n(auth),Progress
exten => s,n,Read(dtmf,agent-pass,0,n,1,10)
exten => s,n,GotoIf($["${DB(PINSETS/${ARG1}/${dtmf})}" = “${ARG1}”]?return:askpin)
exten => s,n(askpin),Set(try=$[${try}+1])
exten => s,n,GotoIf($[${try} > 4]?hangup)
exten => s,n,Read(dtmf,auth-incorrect,0,n,1,10)
exten => s,n(validate),GotoIf($["${DB(PINSETS/${ARG1}/${dtmf})}" = “${ARG1}”]?return:askpin)
exten => s,n(hangup),Hangup
exten => s,n(return),Noop(returning back)

exten => cdr,1,GotoIf($["${DB(AMPUSER/${AMPUSER}/pinless)}" != “NOPASSWD”]?auth:return)
exten => cdr,n,Set(try=1)
exten => cdr,n(auth),Progress
exten => cdr,n,Read(dtmf,agent-pass,0,n,1,10)
exten => cdr,n,GotoIf($["${DB(PINSETS/${ARG1}/${dtmf})}" = “${ARG1}”]?setaccountcode:askpin)
exten => cdr,n(askpin),Set(try=$[${try}+1])
exten => cdr,n,GotoIf($[${try} > 4]?hangup)
exten => cdr,n,Read(dtmf,auth-incorrect,0,n,1,10)
exten => cdr,n(validate),GotoIf($["${DB(PINSETS/${ARG1}/${dtmf})}" = “${ARG1}”]?setaccountcode:askpin)
exten => cdr,n(hangup),Hangup
exten => cdr,n(setaccountcode),Set(CHANNEL(accountcode)=${dtmf})
exten => cdr,n(return),Noop(returning back)

;–== end of [macro-pinsets] ==–;

Thank you


This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.