# FusionPBX Custom Configs (134.209.72.226)

## Yealink T48S Provisioning — Critical Fixes

### 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.

### 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;

### 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
- 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 (/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
