--- name: feedback-yealink-provisioning description: Yealink T48S + FusionPBX provisioning — complete root causes and fixes for BLF buttons not showing metadata: node_type: memory type: feedback originSessionId: f0b18417-cc26-4fdf-87ec-7b2d69b02c44 --- **THE ROOT CAUSE OF BLF BUTTONS NOT SHOWING (confirmed fix 2026-05-29):** Yealink phones ignore DSS key settings in `.boot` files — they only apply them from `.cfg` files. FusionPBX's nginx rewrite for `{mac}.boot` stripped the `file=` param, so the phone received the full 122KB config as a `.boot` file and silently ignored all linekey settings. **Fix:** Two-part: 1. Create `{$mac}.boot` template in `/var/www/fusionpbx/resources/templates/provision/yealink/t48s/` containing: ``` #!version:1.0.0.1 include:config "y000000000065.cfg" include:config "{$mac}.cfg" overwrite_mode = 1 ``` 2. Change 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;` This makes `{mac}.boot` return a 164-byte boot file with includes. Phone then fetches `{mac}.cfg` as a `.cfg` file, applies ALL settings including DSS/BLF keys. **After provisioning on firmware 66.86.0.15:** Phone requires a physical power cycle to register and show BLF buttons. `Update Now` downloads the config but doesn't auto-reboot on this firmware. --- **Other critical lessons:** **1. overwrite_mode = 1 is required** — default is 0, phone ignores all config changes after first provision. - Set in `{$mac}.boot` template (and all `y000000000000.boot` templates) **2. Factory reset clears the provisioning URL** — must re-enter manually: - Menu > Settings > Advanced (password: admin) > Auto Provision - Server URL: `https://fusion.orbishosting.com/app/provision/` - Username: `provision-master`, Password: `Joker1974!!!` - Then: Update Now → power cycle **3. BLF type = 16 in FusionPBX** (confirmed). NOT type=2 (Speed Dial), NOT type=3. - FusionPBX template uses type=16 for BLF (requires `pickup_value` field) - `{if type == "1" || type == "16"}` → pickup_value in `{$mac}.cfg` template confirms this **4. features.auto_linekeys.enable = 0** in `y000000000065.cfg` template — prevents phone firmware from auto-assigning SIP account over BLF keys. **5. External sofia profile: manage-presence = passive** (not true). - Internal profile: manage-presence = true (already correct in FusionPBX default) - External profile must be passive so BLF SUBSCRIBEs from phones on port 5080 delegate to internal - 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 **6. git safe.directory for www-data** — Fix: `git config --system --add safe.directory /var/www/fusionpbx` **7. After manual provision (Update Now):** phone may not register until power cycled, especially firmware 66.86.0.15. **How to apply:** When BLF buttons don't appear despite config downloading correctly, check: (1) is {mac}.boot returning 164 bytes or 122KB? (2) is external sofia profile passive? (3) did the phone power cycle after provisioning?