Target release1.0
Epic

Document status
Document owner
Designer
Developers
QA


Goals

Background and strategic fit

BLF is a valuable feature for Snom customers, like enterprises who are looking to assist in connecting their customers to a live, available person as well as save business phone use time. Overall, it enables businesses to streamline their communication and better serve customers. BLF aka Extension monitoring has been utilized in numerous ways by businesses using Snom phone systems with multiple extensions. The current implementation appears to be kind of duplicated, but with a few little differences and erroneous behaviour.

Assumptions

Requirements

#

Requirement title

Functionality 

ImportanceNotes
1

D8XX_BLF-XML_FR-1

On Snom IP phones acting as UAS, any SIP extension having an active subscription of its state changes, shall sent a notification SIP message (NOTIFY) to the UAC, when one of the following state changes occur:

  • from any state => terminated
  • from any state => trying
  • from any state => early
  • from any state => confirmed

Must Have

Fully implemented

2

D8XX_BLF-XML_FR-2

On D8xx IP phones, any PFK (programmable function key - physical or virtual) can be assigned to a function, which allows monitoring state changes of the configured SIP extension (UAS) on another IP phone. This function shall be called "BLF-XML". The following states of the monitored SIP extension (UAS) shall be processed:

UAS stateDialog state (NOTIFY)Processed state
idle modeterminatedidle

line seizing

trying

dialling
incoming call ringing

early

ringing
  • incoming call accepted
  • outgoing call accepted

confirmed

talking


Must Have

Fully implemented

3D8XX_BLF-XML_FR-3The assignment shall be configured either manually via web user interface (WUI) and/or phone user interface (PUI), and automatically via auto-provisioning (HTTP/TFTP setting server), SRAPS, or remote management (TR-069).

Must Have

Fully implemented
4D8XX_BLF-XML_FR-1-1

On D8xx series, during an active subscription, state changes of the monitored SIP extension shall be visualized on both, PFK LED and PFK label.

Must Have

Fully implemented

5D8XX_BLF-XML_FR-1-1-1

The PFK LED behaviour and colour shall be according to this table

Dialog stateterminatedtryingearlyconfirmed
LED behaviouroffonblinkingon
LED colour-redredred


Must Have

Fully implemented

6D8XX_BLF-XML_FR-1-1-2

The PFK label shall be composed of 3 areas:

(A) icon area(B) name area
(C) state area


Must Have

Fully implemented

7D8XX_BLF-XML_FR-1-1-2-1

The label icon area (A) shall contain the following distinguishable graphical symbol, representing the state

Dialog stateterminatedtryingearlyconfirmed
Descriptionperson with a handsetperson with a handset plus an arrow (pointing away from the handset)person with a handset plus an arrow (pointing towards the handset)person with a handset and 2 sound waves (heading away from the handset)
Graphical symbol
Idle
to be done
Ringing
Busy
Colourwhiteredredred


Must Have

Partly implemented

8D8XX_BLF-XML_FR-1-1-2-2

The label name area (B) shall contain the following text representing the display name or number (configurable) of the monitored / calling party

Dialog stateterminatedtryingearlyconfirmed
rolesMonitored partyMonitored party >Calling party > monitored partyCalling party <> monitored party
text101 or Alex101 > or
Alex >
102 > 101 or
Alice > Alex
102 <> 101 or
Alice <> Alex
text colourwhitewhitewhitewhite


Must Have

Partly implemented

9D8XX_BLF-XML_FR-1-1-2-3

The label state area (C) shall contain the following text representing the state

stateidleringingbusy
textidleringingbusy
colourwhitewhitewhite


Must Have

Fully implemented

User interaction and design

User interactionDialog StateSIP messageXML definitionDesign
UASUACUAS => UACUAS => Proxy => UACUACUAC
line seizingmonitoringtrying


NOTIFY
...
<?xml version="1.0"?>
<dialog-info
	xmlns="urn:ietf:params:xml:ns:dialog-info"
	version="..."
	state="full"
	entity="sip:101@...">
	<dialog id="..." >
		<state>trying</state>
	</dialog>
</dialog-info>



<general type="BusyLampField"/>
<initialization>
  <state value="off"/>
  <identity value="2"/>
  <variable name="subscr_uri" value="sip:104@192.168.137.1:5070"/>
</initialization>
<subscription type="dialog" to="<$(subscr_uri)>" for="$(subscr_uri)"/>
<NotifyParsingRules type="applies">
  <level1 translates_to='OK'>/dialog-info[@entity="$(subscr_uri)"]</level1>
</NotifyParsingRules>
<NotifyParsingRules type="state">
  <level1 translates_to="ringing">/dialog-info/dialog/state[.="early"]</level1>
  <level1-1 translates_to="calling">/dialog-info/dialog[@direction="initiator"]</level1-1>
  <level2 translates_to="ringing">/dialog-info/dialog/state[.="proceeding"]</level2>
  <level2-1 translates_to="calling">/dialog-info/dialog[@direction="initiator"]</level2-1>
  <level3 translates_to="offhook">/dialog-info/dialog/state[.="trying"]</level3>
  <level4 translates_to="in_a_call">/dialog-info/dialog/state[.="confirmed"]</level4>
  <level5 translates_to="free"/>
</NotifyParsingRules>
<NotifyParsingRules type="variable" id="call_id" state="ringing">
  <level1 fetch_attribute="call-id">/dialog-info/dialog[@call-id]</level1>
</NotifyParsingRules>
<NotifyParsingRules type="variable" id="remote_tag" state="ringing">
  <level1 fetch_attribute="remote-tag">/dialog-info/dialog[@remote-tag]</level1>
</NotifyParsingRules>
<NotifyParsingRules type="variable" id="local_tag" state="ringing">
  <level1 fetch_attribute="local-tag">/dialog-info/dialog[@local-tag]</level1>
</NotifyParsingRules>
<NotifyParsingRules type="variable" id="remote_uri" state="ringing">
  <level1 fetch_attribute="uri">/dialog-info/dialog/remote/target[@uri]</level1>
</NotifyParsingRules>
<action>
  <invite target="$(subscr_uri)" when="on press" states="calling, in_a_call, offhook, free"/>
  <invite target="$(remote_uri)" when="on press" state="ringing" request_uri="$(remote_uri)" replaces="$(call_id);to-tag=$(remote_tag);from-tag=$(local_tag)"/>
</action>



icon "dialling"101 >
dialling


hangs upmonitoringterminated


NOTIFY
...
<?xml version="1.0"?>
<dialog-info
	xmlns="urn:ietf:params:xml:ns:dialog-info"
	version="..."
	state="full"
	entity="sip:101@192.168.245.1">
	<dialog id="..."
		direction='initiator'
		call-id='...'
		local-tag=""
		remote-tag="">
		<state>terminated</state>
		<local>
			<identity display="B">sip:101@...</identity>
			<target uri="sip:101@...;line=...">
				<param pname="x-line-id" pval="0" />
			</target>
		</local>
	</dialog>
</dialog-info>




icon "idle"101
idle


incoming call ringingmonitoringearly


NOTIFY
...
<?xml version="1.0"?>
<dialog-info
	xmlns="urn:ietf:params:xml:ns:dialog-info"
	version="..."
	state="full" entity="...">
	<dialog
		id="..."
		direction='recipient'
		call-id='...'
		local-tag="..."
		remote-tag="...">
		<state>early</state>
		<local>
			<identity display="B">
				sip:101@...
			</identity>
			<target uri="sip:101@...;line=...">
				<param pname="x-line-id" pval="0" />
			</target>
		</local>
		<remote>
			<identity display="C">
				sip:102@...
			</identity>
			<target uri="sip:102@..."/>
		</remote>
	</dialog>
</dialog-info>




icon "ringing"102 > 101
ringing


incoming call acceptedmonitoringconfirmed


NOTIFY
...
<?xml version="1.0"?>
<dialog-info
	xmlns="urn:ietf:params:xml:ns:dialog-info"
	version="..."
	state="full"
	entity="sip:101@...">
	<dialog
		id="..."
		direction='recipient'
		call-id='...'
		local-tag="..."
		remote-tag="...">
		<state>confirmed</state>
		<local>
			<identity display="B">sip:101@...</identity>
			<target uri="sip:101@...;line=...">
				<param pname="x-line-id" pval="0" />
				<param pname="+sip.rendering" pval='yes' />
			</target>
		</local>
			<remote>
				<identity display="C">sip:102@...</identity>
				<target uri="sip:102@..."/>
			</remote>
	</dialog>
</dialog-info>




icon "talking"102 <> 101
talking


Incoming call terminatedmonitoringterminated


NOTIFY
...
<?xml version="1.0"?>
<dialog-info
	xmlns="urn:ietf:params:xml:ns:dialog-info"
	version="8"
	state="full"
	entity="sip:101@192.168.245.1">
	<dialog id="ef358a486677031ad4ecaac68710cef9"
		direction='recipient'
		call-id='b5c0006472bc-8x9sdw8f8qdr'
		local-tag="7196pmgjev"
		remote-tag="nyeqpi7kqy">
		<state>terminated</state>
		<local>
			<identity display="B">sip:101@192.168.245.1</identity>
			<target uri="sip:101@192.168.245.251:60158;line=caioqij3">
				<param pname="x-line-id" pval="0" />
			</target>
		</local>
		<remote>
			<identity display="C">sip:102@192.168.245.1</identity>
			<target uri="sip:102@192.168.245.1"/>
		</remote>
	</dialog>
</dialog-info>




icon "idle"101
idle


Outgoing call ringingmonitoringearly


NOTIFY
...
<?xml version="1.0"?>
<dialog-info
	xmlns="urn:ietf:params:xml:ns:dialog-info"
	version="13"
	state="full"
	entity="sip:101@...">
	<dialog
		id="..."
		direction='initiator'
		call-id='...'
		local-tag="..."
		remote-tag="">
		<state>trying</state>
		<local>
			<identity display="B">sip:101@...</identity>
			<target uri="sip:101@...;line=...">
				<param pname="x-line-id" pval="0" />
			</target>
		</local>
		<remote>
			<identity display="D">sip:103@...;user=phone</identity>
			<target uri="sip:103@...;user=phone"/>
		</remote>
	</dialog>
</dialog-info>




icon "ringing"101 > 103
ringing


Outgoing call acceptedmonitoringconfirmed


NOTIFY
...
<?xml version="1.0"?>
<dialog-info
	xmlns="urn:ietf:params:xml:ns:dialog-info"
	version="..."
	state="full"
	entity="sip:101@...">
	<dialog
		id="..."
		direction='initiator'
		call-id='...'
		local-tag="..."
		remote-tag="...">
		<state>confirmed</state>
		<local>
			<identity display="B">sip:101@...</identity>
			<target uri="sip:101@...;line=...">
				<param pname="x-line-id" pval="0" />
				<param pname="+sip.rendering" pval='yes' />
			</target>
		</local>
		<remote>
			<identity display="D">sip:103@...</identity>
			<target uri="sip:103@..."/>
		</remote>
	</dialog>
</dialog-info>




icon "talking"101 <> 103
talking


Outgoing call terminatedmonitoringterminated


NOTIFY
...
<?xml version="1.0"?>
<dialog-info
	xmlns="urn:ietf:params:xml:ns:dialog-info"
	version="..."
	state="full"
	entity="sip:101@...">
	<dialog
		id="..."
		direction='initiator'
		call-id='...'
		local-tag="..."
		remote-tag="...">
		<state>terminated</state>
		<local>
			<identity display="B">sip:101@...</identity>
			<target uri="sip:101@...;line=...">
				<param pname="x-line-id" pval="0" />
			</target>
		</local>
		<remote>
			<identity display="D">sip:103@...</identity>
			<target uri="sip:103@..."/>
		</remote>
	</dialog>
</dialog-info>




icon "idle"101
idle








Questions

Below is a list of questions to be addressed as a result of this requirements document:

QuestionOutcome
(e.g. How we make users more aware of this feature?)Communicate the decision reached

Not Doing