BLF Hints for Desk Phones
BLF Hints for Desk Phones
Busy Lamp Field (BLF) lets a phone's line keys light up to show whether other extensions are idle, ringing, or on a call. This requires hint definitions in the dialplan that map extensions to their device state.
The Snippet
[hints]
; Extension presence hints - maps extension numbers to PJSIP device state
exten => 100,hint,PJSIP/100
exten => 101,hint,PJSIP/101
exten => 102,hint,PJSIP/102
; Feature code hints (for speed dial buttons with status)
exten => *97,hint,Custom:voicemail
exten => *70,hint,Custom:park
Then include the hints context in your internal context:
[internal]
include => hints
include => dial-extension
include => outbound
include => features
include => parkedcalls
How It Works
A hint line doesn't handle calls, it tells Asterisk to track the state of a device and publish that state via SIP SUBSCRIBE/NOTIFY. When phone B subscribes to extension 100's hint, Asterisk sends state updates whenever extension 100's PJSIP endpoint changes state (idle, ringing, in-use).
Extension hints (PJSIP/100) track the actual device state of that endpoint.
Custom hints (Custom:voicemail) are application-defined states you can set programmatically with:
exten => *78,1,Set(DEVICE_STATE(Custom:dnd-${CALLERID(num)})=BUSY)
PJSIP Endpoint Configuration
For BLF to work, your endpoints need named_call_group and named_pickup_group configured:
[endpoint-internal](!)
type = endpoint
; ... other settings ...
named_call_group = office
named_pickup_group = office
This allows BLF buttons to double as pickup buttons, pressing a lit BLF key while it shows "ringing" will pick up that call.
Verifying Hints
From the Asterisk CLI:
asterisk*CLI> core show hints
-= Registered Asterisk Dial Plan Hints =-
100@hints : PJSIP/100 State:Idle
101@hints : PJSIP/101 State:InUse
102@hints : PJSIP/102 State:Unavailable
*97@hints : Custom:voicemail State:Idle
States you'll see: Idle, InUse, Busy, Unavailable, Ringing, OnHold.
Phone-Side Configuration
On Polycom VVX phones, BLF buttons are configured as "attendant" entries:
attendant.resourceList.1.address="101"
attendant.resourceList.1.label="Bob"
attendant.resourceList.1.type="normal"
The type="normal" tells the phone to subscribe to the hint. The button will show green (idle), red (in-use), or flashing red (ringing).
User Notes
Know a tip or gotcha for this topic? Share it below and help others.
Contribute a note
Share a tip, gotcha, or practical example. Keep it under 2000 characters. No questions (use the Asterisk community forums for support). Wrap code in backticks.