From 2a45dac6936eb396129b57ca8322586f4a12d4b6 Mon Sep 17 00:00:00 2001 From: Myron Blair Date: Fri, 29 May 2026 04:57:48 +0000 Subject: [PATCH] FusionPBX Yealink T48S BLF: complete fix and final profile state MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: nginx rewrite stripped file= param from {mac}.boot requests, so FusionPBX served full device config as a .boot file. Yealink ignores DSS/linekey settings in .boot files — they only apply from .cfg files. Fixes applied on 134.209.72.226: - nginx: {mac}.boot rewrite now passes file={mac}.boot param - New {$mac}.boot template: proper boot file with includes to {mac}.cfg - y000000000065.cfg: features.auto_linekeys.enable = 0 - All y000000000000.boot: overwrite_mode = 1 - External sofia profile: manage-presence = passive (was true) - Park buttons: Speed Dial type=13 (*5901-*5903), not BLF (mod_presence missing) Co-Authored-By: Claude Sonnet 4.6 --- fusionpbx/README.md | 78 ++++++++++++++++---- fusionpbx/nginx_yealink_rewrite.txt | 9 +++ fusionpbx/provision/yealink/t48s/{$mac}.boot | 7 ++ 3 files changed, 81 insertions(+), 13 deletions(-) create mode 100644 fusionpbx/nginx_yealink_rewrite.txt create mode 100644 fusionpbx/provision/yealink/t48s/{$mac}.boot diff --git a/fusionpbx/README.md b/fusionpbx/README.md index 7bfce5d..6519e68 100644 --- a/fusionpbx/README.md +++ b/fusionpbx/README.md @@ -1,23 +1,75 @@ # FusionPBX Custom Configs (134.209.72.226) -## Yealink T48S Provisioning Templates -Applied to: /var/www/fusionpbx/resources/templates/provision/yealink/t48s/ +## Yealink T48S Provisioning — Critical Fixes -### y000000000000.boot -- `overwrite_mode = 1` — phones re-provision on every reboot (critical) +### Problem: BLF buttons never applied from provisioning +Root cause: nginx rewrite for `{mac}.boot` stripped the `file=` param, so FusionPBX +served the full 122KB config as a boot file. Yealink ignores DSS keys in .boot files — +they only apply from .cfg files. -### y000000000065.cfg key changes -- `features.auto_linekeys.enable = 0` — prevents phone firmware from auto-overriding BLF keys +### Fix 1: nginx rewrite (in /etc/nginx/sites-enabled/fusionpbx) +OLD: rewrite "^.*/provision/([A-Fa-f0-9]{12})(\.boot)$" /app/provision/index.php?mac=$1; +NEW: rewrite "^.*/provision/([A-Fa-f0-9]{12})(\.boot)$" /app/provision/index.php?mac=$1&file=%7b%24mac%7d.boot; -## BLF Configuration -- Yealink T48S BLF type = **16** (in FusionPBX device profile) -- pickup_value field required for type=16 BLF keys -- manage-presence = true already set in FreeSWITCH external sofia profile +### Fix 2: {$mac}.boot template +Created: /var/www/fusionpbx/resources/templates/provision/yealink/t48s/{$mac}.boot +Content: boot file with includes pointing to y000000000065.cfg and {$mac}.cfg +Phone flow: {mac}.boot (164 bytes) → y000000000065.cfg → {mac}.cfg (full config applied) + +### Fix 3: y000000000065.cfg template changes +- features.auto_linekeys.enable = 0 (prevents phone overriding BLF keys) + +### Fix 4: All y000000000000.boot templates +- overwrite_mode = 1 (forces re-provision on every reboot, default was 0) + +### Fix 5: External sofia profile +- manage-presence = passive (not true — BLF SUBSCRIBEs delegate to internal profile) +- Fix: UPDATE v_sip_profile_settings SET value='passive' WHERE profile=external AND name='manage-presence' +- Then delete /var/cache/fusionpbx/FusionPBX.configuration.sofia.conf and reload sofia + +## Device Profile "yealink" (UUID 2c68fe07-b29a-4429-a3c2-7ce9010c69ff) + +| Key | Type | Value | Label | Notes | +|-----|------|-------|-------|-------| +| 1 | 16 (BLF) | 1000 | Myron 1000 | | +| 2 | 16 (BLF) | 1001 | Tommy 1001 | | +| 3 | 16 (BLF) | 1002 | Myron Vanguard | | +| 4 | 12 | 1003 | PC Slingshot | | +| 5 | 12 | 1004 | Epic Travel | | +| 6 | 12 | 1005 | Toms Java | | +| 7 | 13 (Speed Dial) | *5901 | Park 5901 | Press during call=park, idle=retrieve | +| 8 | 13 (Speed Dial) | *5902 | Park 5902 | | +| 9 | 13 (Speed Dial) | *5903 | Park 5903 | | +| 11 | 16 (BLF) | *724 | Page All | | + +Park buttons use Speed Dial (type=13) not BLF — BLF for park requires mod_presence +which is not installed. Speed Dial works: press during call parks it, press idle retrieves. + +## BLF Type Reference (Yealink T48S firmware 66.86.x, FusionPBX) +- type=16 = BLF (requires pickup_value field in template) +- type=13 = Speed Dial +- type=12 = (user-defined) +- type=1 = Line ## Provisioning URL -https://fusion.orbishosting.com/app/provision/ -Auth: provision-master / Joker1974!!! +- Server: https://fusion.orbishosting.com/app/provision/ +- Auth: provision-master / Joker1974!!! (Digest) +- After factory reset: must re-enter manually via Menu > Settings > Advanced > Auto Provision +- Firmware 66.86.0.15: requires power cycle after "Update Now" to register -## fail2ban Whitelist +## fail2ban Whitelist (/etc/fail2ban/jail.local) - 107.178.2.130 (office) - 97.154.109.245 (home WAN) + +## Phones +- Ext 1000 (Myron): MAC 805ec0350477, firmware 66.86.0.15, IP 10.48.200.2 +- Ext 1001 (Tommy): MAC 805e0c150c4f, firmware 66.86.0.160, IP 10.48.200.43 + +## IVR Audio +- /var/lib/freeswitch/recordings/134.209.72.226/ivr_menu.wav +- American male voice (Festival TTS), 27s, 8kHz 16-bit mono PCM + +## mod_presence +- NOT installed — FreeSWITCH built from source at /usr/src/freeswitch-1.11/ +- Basic extension BLF works via manage-presence=true on internal sofia profile +- Park slot BLF would require mod_presence — workaround: Speed Dial buttons diff --git a/fusionpbx/nginx_yealink_rewrite.txt b/fusionpbx/nginx_yealink_rewrite.txt new file mode 100644 index 0000000..c734d58 --- /dev/null +++ b/fusionpbx/nginx_yealink_rewrite.txt @@ -0,0 +1,9 @@ +# In /etc/nginx/sites-enabled/fusionpbx +# Critical fix: pass file= param so FusionPBX returns a boot file (not full config) +# Phone ignores DSS/BLF keys when received in a .boot file — must come from .cfg + +# CORRECT: +rewrite "^.*/provision/([A-Fa-f0-9]{12})(\.boot)$" /app/provision/index.php?mac=$1&file=%7b%24mac%7d.boot; + +# WRONG (original — serves full 122KB config as .boot, phone ignores linekeys): +# rewrite "^.*/provision/([A-Fa-f0-9]{12})(\.boot)$" /app/provision/index.php?mac=$1; diff --git a/fusionpbx/provision/yealink/t48s/{$mac}.boot b/fusionpbx/provision/yealink/t48s/{$mac}.boot new file mode 100644 index 0000000..84c836f --- /dev/null +++ b/fusionpbx/provision/yealink/t48s/{$mac}.boot @@ -0,0 +1,7 @@ +#!version:1.0.0.1 +## The header above must appear as-is in the first line + +include:config "y000000000065.cfg" +include:config "{$mac}.cfg" + +overwrite_mode = 1