Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The NOTIFY XML body must contain the necessary information for the UAC to perform state translation and visualization.

Requirements

#

Requirement title

Functionality 

ImportanceImplementation status
1

D8XX:PFK-mapping:BLF-XML:General-Functionality

On D8xx IP phones, any PFK (programmable function key - physical or virtual) can be assigned to a key type called "BLF-XML", and a key number, which corresponds to a SIP extension on another IP phone in the same VoIP environment. The following specific functionality is required:

  • Monitoring states of the configured SIP extension
  • Quick-dial to the configured SIP extension in idle state
  • Pick-up an incoming call to the configured SIP extension


Status
colourGreen
titleESSENTIAL

Status
colourGreen
titleFULLY IMPLEMENTED

2

D8XX:PFK-mapping:BLF-XML:Configuration

The 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).

Status
colourGreen
titleESSENTIAL

Status
colourGreen
titleFULLY IMPLEMENTED

3

D8XX:PFK-mapping:BLF-XML:Subscription

The assignment shall initiate the SIP subscription process according to RFC 3265.

Status
colourGreen
titleESSENTIAL

Status
colourGreen
titleFULLY IMPLEMENTED

4

D8XX:PFK-mapping:BLF-XML:Monitoring:Translation

Dialog states of the configured SIP extension shall be monitored, processed, and translated according to its direction. 

UAS stateDialog state (NOTIFY)DirectionTranslated state
idle modeterminated/none of the below mentioned-idle

offhook

trying

initiatoroffhook
incoming call ringing

early/proceeding

recipientringing

incoming call accepted

confirmed

recipienttalking

outgoing call ringing

early/proceeding

initiatorcalling

outgoing call accepted

confirmed

initiatortalking


Status
colourGreen
titleESSENTIAL

Status
colourYellow
titlePartLY IMPLEMENTED

5

D8XX:PFK-mapping:BLF-XML:Actions

When the PFK is pressed, the following actions are allowed according to the translated state

Translated stateidleoffhookcallingringingtalking
Allowed actionsQuick-dial??Pick-up?


Status
colourGreen
titleESSENTIAL

Status
colourYellow
titlePartLY IMPLEMENTED

6

D8XX:PFK-mapping:BLF-XML:Monitoring:Visualization

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

Status
colourGreen
titleESSENTIAL

Status
colourGreen
titleFULLY IMPLEMENTED

7

D8XX:PFK-mapping:BLF-XML:Monitoring:Visualization:LED

The PFK LED behaviour and colour shall be according to the translated state:

Translated stateidleoffhookcallingringingtalking
LED behaviouroffononblinkingon
LED colour-redredredred


Status
colourGreen
titleESSENTIAL

Status
colourYellow
titlePartLY IMPLEMENTED

8

D8XX:PFK-mapping:BLF-XML:Monitoring:Visualization:Label:Areas

The PFK label shall be composed of 3 areas:

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


Status
colourGreen
titleESSENTIAL

Status
colourGreen
titleFULLY IMPLEMENTED

9

D8XX:PFK-mapping:BLF-XML:Monitoring:Visualization:Label:icon-area

The label icon area (A) shall contain an icon and colouraccording to the translated state

Translated stateidleoffhookcallingringingtalking
Icon (suggestion from fkey_icons)
Name
kIconTypeFkeyBlfIdle
kIconTypeFkeyBlfOffhook
kIconTypeFkeyBlfCalling
kIconTypeFkeyBlfRinging
kIconTypeFkeyBlfTalking
Colourgrey/whiteredredyellowred


Status
colourGreen
titleESSENTIAL

Status
colourYellow
titlePartLY IMPLEMENTED

10

D8XX:PFK-mapping:BLF-XML:Monitoring:Visualization:Label:name-area

The label name area (B) shall contain a text derived from display name or number (configurable) according to translated state and direction. Depending on the available space, the text shall be scrolled.

Translated stateidleoffhookcallingringingtalking
Direction-initiatorinitiatorrecipientinitiatorrecipient
Text (based on target)locallocal >local > remoteremote > localremote <> locallocal <> remote
Text colourwhitewhitewhitewhitewhitewhite
Example (using number)101101 > 

101 > 102102 > 101102 <> 101

101 <> 102

Example (using display name)AlexAlex >Alex > AliceAlice > AlexAlice <> AlexAlex <> Alice


Status
colourGreen
titleESSENTIAL

Status
colourYellow
titlePartLY IMPLEMENTED

11

D8XX:PFK-mapping:BLF-XML:Monitoring:Visualization:Label:state-area

The label state area (C) shall contain a text and colour representing the translated state

Translated stateidleoffhookcallingringingtalking
textidleoffhookcallingringingtalking
colourwhitewhitewhitewhitewhite


Status
colourGreen
titleESSENTIAL

Status
colourYellow
titlePartLY IMPLEMENTED

...

InteractionsSIP NOTIFY XML bodyXML definitionDisplay
UASUAS => UACUAC translation rulesComplete rule setPFK LED & label (number)PFK LED & label (display name)
goes offhook

dialog state => trying

Code Block
languagexml
titleNOTIFY
linenumberstrue
collapsetrue
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>


translate state => offhook

  • quick dial not allowed
  • pick-up not allowed
Code Block
languagexml
themeConfluence
titleXML definition
linenumberstrue
collapsetrue
...
<NotifyParsingRules type="state">
	...
  	<level3
		translates_to="offhook">/dialog-info/dialog/state[.="trying"]
	</level3>
  	...
</NotifyParsingRules>
...
<action>
	<invite target="$(subscr_uri)"
		when="on press"
		states="idle"/>
	<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>



Code Block
languagexml
themeConfluence
titleXML definition
linenumberstrue
collapsetrue
<ReplacementPlan>
	<!-- This defines the name of the entry in the Function Keys page under Type -->
	<key id="BLF-new">
	<general type="BLFSampleDefinition" />
		<initialization>
 		<!-- only add the UAS IP here, extension number is replaced from WUI as variable $(ui_argument) -->
		<variable name="subscr_proxy" value="10.110.22.35"/>
		<!-- initial value for the state variable: off means, that after bootup this button has state off -->
		<state value="off"/>
		</initialization>
		<!-- a subscription of event-type dialog will be initiated to the URI defined -->
		<subscription type="dialog" to="<sip:$(ui_argument)@$(subscr_proxy)>" for="$(ui_argument)@$(subscr_proxy)"/>
		<!-- checks if a SIP NOTIFY message belongs to this particular button
		level is ok, if the condition inside the tags is matched -->
		<NotifyParsingRules type="applies">
			<level1 translates_to='OK'>/dialog-info[@entity="sip:$(ui_argument)@$(subscr_proxy)"]</level1>
		</NotifyParsingRules>
		<!-- translates the button state based on the body of the SIP NOTIFY -->
		<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="talking">/dialog-info/dialog/state[.="confirmed"]</level4>
			<level5 translates_to="idle"/>
		</NotifyParsingRules>
		<!-- Call pickup: fetch variable call_id from call-id of NOTIFY body -->
		<NotifyParsingRules type="variable" id="call_id" state="ringing">
			<level1 fetch_attribute="call-id">/dialog-info/dialog[@call-id]</level1>
        </NotifyParsingRules>
		<!-- Call pickup: fetch variable remote_tag from remote-tag of NOTIFY body -->
		<NotifyParsingRules type="variable" id="remote_tag" state="ringing">
			<level1 fetch_attribute="remote-tag">/dialog-info/dialog[@remote-tag]</level1>
		</NotifyParsingRules>
		<!-- Call pickup: fetch variable local_tag from local-tag of NOTIFY body -->
		<NotifyParsingRules type="variable" id="local_tag" state="ringing">
			<level1 fetch_attribute="local-tag">/dialog-info/dialog[@local-tag]</level1>
		</NotifyParsingRules>
		<!-- Call pickup: fetch variable remote_uri from uri of NOTIFY body -->
		<NotifyParsingRules type="variable" id="remote_uri" state="ringing">
			<level1 fetch_attribute="uri">/dialog-info/dialog/remote/target[@uri]</level1>
		</NotifyParsingRules>
		<action>
		 	<!-- Quick dial: dependingSzolt indecided whichto statesallow weit wantonly toin allowidle thisstate action -->
            <invite target="$(ui_argument)" when="on press" states="calling, talking, offhook, idle"/>
 		 	<!-- Pick up --> 
            <invite target="$(remote_name)<$(remote_uri)>" when="on press" state="ringing" request_uri="$(remote_uri)" replaces="$(call_id);to-tag=$(remote_tag);from-tag=$(local_tag)"/>
			<!-- change icon on NOTIFY and translated state idle -->
			<assign when="on notify" state="idle">
   				<source value="kIconTypeFkeyBlfIdle"/>
   				<destination id="icon"/>
 			</assign>
    		 <!-- change icon on NOTIFY and translated state offhook -->
			<assign when="on notify" state="offhook">
   				<source value="kIconTypeFkeyBlfOffhook"/>
   				<destination id="icon"/>
 			</assign> 
			<!-- change icon on NOTIFY and translated state ringing -->
			<assign when="on notify" state="ringing">
   				<source value="kIconTypeFkeyBlfRinging"/>
   				<destination id="icon"/>
			</assign>
   		 	<!-- change icon on NOTIFY and translated state calling -->
			<assign when="on notify" state="calling">
   				<source value="kIconTypeFkeyBlfCalling"/>
   				<destination id="icon"/>
			</assign>
   		 	<!-- change icon on NOTIFY and translated state talking -->
			<assign when="on notify" state="talking">
   				<source value="kIconTypeFkeyBlfTalking"/>
   				<destination id="icon"/>
			</assign>
		</action>
    </key>
</ReplacementPlan>



🔴101 >
offhook



🔴
Alex >
offhook


goes onhook

dialog state => terminated

Code Block
languagexml
titleNOTIFY
linenumberstrue
collapsetrue
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>
	</dialog>
</dialog-info>


translate state => idle

  • quick dial allowed
  • pick-up not allowed
Code Block
languagexml
themeConfluence
titleXML definition
linenumberstrue
collapsetrue
...
<NotifyParsingRules type="state">
	...
  	<level5 translates_to="idle"/>
</NotifyParsingRules>
...
<action>
	<invite target="$(subscr_uri)"
		when="on press"
		states="idle"/>
	<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>



⚪️101
idle



⚪️
Alex
idle


incoming call ringing

dialog state => early/proceeding

Code Block
languagexml
titleNOTIFY
linenumberstrue
collapsetrue
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>


translate state => ringing

  • quick dial not allowed
  • pick-up allowed
Code Block
languagexml
themeConfluence
titleXML definition
linenumberstrue
collapsetrue
...
<NotifyParsingRules type="state">
	<level1
		translates_to="ringing">/dialog-info/dialog/state[.="early"]
	</level1>
	...
	<level2
		translates_to="ringing">/dialog-info/dialog/state[.="proceeding"]
	</level2>
  ...
</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="idle"/>
	<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>



🟠102 > 101
ringing



🟠
Alice > Alex
ringing


incoming call accepted

dialog state => confirmed

Code Block
languagexml
titleNOTIFY
linenumberstrue
collapsetrue
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>


translate state => talking

  • quick dial not allowed
  • pick-up not allowed
Code Block
languagexml
themeConfluence
titleXML definition
linenumberstrue
collapsetrue
...
<NotifyParsingRules type="state">
	...
	<level4
		translates_to="talking">/dialog-info/dialog/state[.="confirmed"]
	</level4>
</NotifyParsingRules>
...
<action>
	<invite target="$(subscr_uri)"
		when="on press"
		states="idle"/>
	<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>



🔴102 <> 101
talking



🔴
Alice <> Alex
talking


Incoming call terminated

dialog state => terminated

Code Block
languagexml
titleNOTIFY
linenumberstrue
collapsetrue
NOTIFY
...
<?xml version="1.0"?>
<dialog-info
	xmlns="urn:ietf:params:xml:ns:dialog-info"
	version="8"
	state="full"
	entity="sip:101@...">
	<dialog id="..."
		direction='recipient'
		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="C">sip:102@...</identity>
			<target uri="sip:102@..."/>
		</remote>
	</dialog>
</dialog-info>


translate state => idle

  • quick dial allowed
  • pick-up not allowed
Code Block
languagexml
themeConfluence
titleXML definition
linenumberstrue
collapsetrue
...
<NotifyParsingRules type="state">
  ...
  <level5 translates_to="idle"/>
</NotifyParsingRules>
... 
<action>
	<invite target="$(subscr_uri)"
		when="on press"
		states="idle"/>
	<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>



⚪️101
idle



⚪️
Alex
idle


Outgoing call ringing

dialog state => early/proceeding

Code Block
languagexml
titleNOTIFY
linenumberstrue
collapsetrue
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>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="D">sip:103@...;user=phone</identity>
			<target uri="sip:103@...;user=phone"/>
		</remote>
	</dialog>
</dialog-info>


translate state => calling

  • quick dial not allowed
  • pick-up not allowed
Code Block
languagexml
themeConfluence
titleXML definition
linenumberstrue
collapsetrue
...
<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>
</NotifyParsingRules>
...
<action>
	<invite target="$(subscr_uri)"
		when="on press"
		states="idle"/>
	<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>



🔴101 > 103
calling



🔴
Alex > Tita
calling


Outgoing call accepted

dialog state => confirmed

Code Block
languagexml
titleNOTIFY
linenumberstrue
collapsetrue
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>


translate state => talking

  • quick dial not allowed
  • pick-up not allowed
Code Block
languagexml
themeConfluence
titleXML definition
linenumberstrue
collapsetrue
...
<NotifyParsingRules type="state">
	...
	<level4
		translates_to="talking">/dialog-info/dialog/state[.="confirmed"]
	</level4>
</NotifyParsingRules>
... 
<action>
	<invite target="$(subscr_uri)"
		when="on press"
		states="idle"/>
	<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>



🔴101 <> 103
talking



🔴
Alex <> Tita
talking


Outgoing call terminated

dialog state => terminated

Code Block
languagexml
titleNOTIFY
linenumberstrue
collapsetrue
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>


translate state => idle

  • quick dial allowed
  • pick-up not allowed
Code Block
languagexml
themeConfluence
titleXML definition
linenumberstrue
collapsetrue
...
<NotifyParsingRules type="state">
	...
  	<level5 translates_to="idle"/>
</NotifyParsingRules>
... 
<action>
	<invite target="$(subscr_uri)"
		when="on press"
		states="idle"/>
	<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>



⚪️101
idle



⚪️
Alex
idle








...