Page properties |
---|
Target release | 1.0 |
---|
Epic | Jira |
---|
server | snom JIRA |
---|
columnIds | issuekey,summary,issuetype,created,updated,duedate,assignee,reporter,priority,status,resolution |
---|
columns | key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution |
---|
serverId | 259a02d7-50a2-3329-858b-24ea240b0b75 |
---|
key | XQI-2015 |
---|
|
|
---|
Document status | |
---|
Document owner | |
---|
Designer | |
---|
Developers | |
---|
QA | |
---|
|
Goals
- Align The current BLF and Extension behavior for PFKs on Snom desk phones by using XML definitions instead mapping implementations for D8xx IP phone series are similar, but with a few differences and partly erroneous behaviour. Therefore, it is desired to align both implementations by using XML definitions instead. Furthermore, the requirements should be re-defined to communicate a clear result.
- Avoid confusion for customers
- Improve user experience
- Improve performance
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.
...
Use cases
- Use case#1: A secretary's phone shall display the call status of the boss's line, allowing the secretary to know whether the boss is on a phone call or not. This will enable the secretary to make the decision to put the new caller on hold or let them through to the boss.
- Use case#2: Call centers and customer support groups have also a need for BLF: it enables employees to see if their colleagues are free to take a support call or if their supervisor is on another line and unable to help another customer.
- Use case#3: BLF is needed by teams working on a specific project: supervisors can monitor team members' extensions and vice versa so all team members are aware of each other's current status.
Requirements
...
Requirement title
...
Functionality
...
Preconditions
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/proceeding
- from any state => confirmed
The NOTIFY XML body must contain the necessary information for the UAC to perform state translation and visualization.
Requirements
# | Requirement title | Functionality | Importance | Implementation status |
---|
1 | D8XX:PFK-mapping:BLF-XML:General-Functionality |
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) key type called "BLF-XML", and a key number, which corresponds to a SIP extension on another IP phone |
. This function shall be called "BLF-XML". The following in the same VoIP environment. The following specific functionality is required: |
monitored SIP extension (UAS) shall be processed and translated depending on the call direction:UAS state | Dialog state (NOTIFY) | Direction | Translated state |
---|
idle mode | terminated | - | idle |
offhook / dialling | trying | initiator | offhook |
incoming call ringing | early/proceeding | recipient | ringing |
incoming call accepted | confirmed | recipient | talking |
outgoing call ringing | early/proceeding | initiator | calling |
outgoing call accepted | confirmed | initiator | talking |
Must Have | Partly implemented | 3 | D8XX_BLF-XML_FR-3 | The assignment shall be configured either manually via web user interface (WUI) and/or Must Have | Fully implemented | 4 | D8XX_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 | |
5 | D8XX_BLF-XML_FR-1-1-1 | The PFK LED behaviour and colour shall be according to this table
Dialog state | terminated | trying | early/proceeding | confirmed |
---|
Translated state | idle | offhook | calling | ringing | talking |
---|
Direction | - | initiator | initiator | recipient | initiator/recipient |
---|
LED behaviour | off | on | on | blinking | on |
---|
LED colour | - | red | red | red | red |
---|
Must Have | | 6 | D8XX_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 | | 7 | D8XX_BLF-XML_FR-1-1-2-1 | The label icon area (A) shall contain the following graphical symbol and colour
Dialog state | terminated | trying | early/proceeding | confirmed |
---|
- configured SIP extension
- Quick-dial to the configured SIP extension in idle state
- Pick-up an incoming call to the configured SIP extension
| Status |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Green |
---|
title | FULLY 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 |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Green |
---|
title | FULLY IMPLEMENTED |
---|
|
|
3 | D8XX:PFK-mapping:BLF-XML:Subscription | The assignment shall initiate the SIP subscription process according to RFC 3265. | Status |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Green |
---|
title | FULLY 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 state | Dialog state (NOTIFY) | Direction | Translated state |
---|
idle mode | terminated/none of the below mentioned | - | idle |
---|
offhook | trying | initiator | offhook |
---|
incoming call ringing | early/proceeding | recipient | ringing |
---|
incoming call accepted | confirmed | recipient | talking |
---|
outgoing call ringing | early/proceeding | initiator | calling |
---|
outgoing call accepted | confirmed | initiator | talking |
---|
| Status |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Yellow |
---|
title | PartLY IMPLEMENTED |
---|
|
|
5 | D8XX:PFK-mapping:BLF-XML:Actions | When the PFK is pressed, the following actions are allowed according to the translated state |
Translated state | idle | offhook | calling | ringing | talking |
---|
|
DirectionAllowed actions | Quick-dial |
---|
|
initiatorinitiatorrecipient | initiator/recipient | Graphical symbol | Image Removed | Image Removed | Image Removed | Image Removed | Image Removed |
---|
Colour | white/green | white/orange | white/orange | white/orange | white/red |
---|
Must Have | | 8 | D8XX_BLF-XML_FR-1-1-2-2 | The label name area (B) shall contain a text using either the display name or number (configurable) of the monitored / calling party. Depending on the available space, the text shall be scrolled.
Dialog state | terminated | trying | early/proceeding | confirmed |
---|
Translated state | idle | offhook | calling | ringing | talking |
---|
Direction | - | initiator | initiator | recipient | initiator | recipient |
---|
Text (using target) | local | local > | local > remote | remote > local | remote <> local | local <> remote |
---|
Text colour | white | white | white | white | white | white |
---|
Example (using number) | 101 | 101 > 101 > 102 | 102 > 101 | 102 <> 101101 <> 102Example (using display name) | Alex | Alex > | Alex > Alice | Alice > Alex | Alice <> Alex | Alex <> Alice |
---|
Must Have | | 9 | D8XX_BLF-XML_FR-1-1-2-3 | The label state area (C) shall contain a text and colour representing the translated state
Dialog state | terminated | trying | early/proceeding | confirmed |
---|
Translated state | idle | offhook | calling | ringing | talking |
---|
Direction | - | initiator | initiator | recipient | initiator/recipient |
---|
text |
| Status |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Yellow |
---|
title | PartLY 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 |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Green |
---|
title | FULLY IMPLEMENTED |
---|
|
|
7 | D8XX:PFK-mapping:BLF-XML:Monitoring:Visualization:LED | The PFK LED behaviour and colour shall be according to the translated state: Translated state | idle | offhook | calling | ringing | talking |
---|
LED behaviour | off | on | on | blinking | on |
---|
LED colour | - | red | red | red | red |
---|
| Status |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Yellow |
---|
title | PartLY 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 |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Green |
---|
title | FULLY 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 |
idle | offhook | calling | ringing | talking |
---|
|
colour | white | white | white | white | white |
---|
Must Have | Partly implemented | User interaction and design
Icon (suggestion from fkey_icons) | Image Added | Image Added | Image Added | Image Added | Image Added |
---|
Name | kIconTypeFkeyBlfIdle | kIconTypeFkeyBlfOffhook | kIconTypeFkeyBlfCalling | kIconTypeFkeyBlfRinging | kIconTypeFkeyBlfTalking |
---|
Colour | grey/white | red | red | yellow | red |
---|
| Status |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Yellow |
---|
title | PartLY 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 state | idle | offhook | calling | ringing | talking |
---|
Direction | - | initiator | initiator | recipient | initiator | recipient |
---|
Text (based on target) | local | local > | local > remote | remote > local | remote <> local | local <> remote |
---|
Text colour | white | white | white | white | white | white |
---|
Example (using number) | 101 | 101 >
| 101 > 102 | 102 > 101 | 102 <> 101
| 101 <> 102
|
---|
Example (using display name) | Alex | Alex > | Alex > Alice | Alice > Alex | Alice <> Alex | Alex <> Alice |
---|
| Status |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Yellow |
---|
title | PartLY 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 state | idle | offhook | calling | ringing | talking |
---|
text | idle | offhook | calling | ringing | talking |
---|
colour | white | white | white | white | white |
---|
| Status |
---|
| |
---|
colour | Green |
---|
title | ESSENTIAL |
---|
|
| Status |
---|
| |
---|
colour | Yellow |
---|
title | PartLY IMPLEMENTED |
---|
|
|
Software Requirement Specification (SRS)
Based on user interactions, the UAS sends SIP NOTIFY messages to the UAC. By means of XML definitions, the information in the SIP NOTIFY XML body are translated into variables, that are known to the UAC phone application and can be processed to show the desired results.
Interactions | SIP NOTIFY XML body | XML definition | Display |
---|
UAS | UAS => UAC | UAC translation rules | Complete rule set | PFK LED & label (number) | PFK LED & label (display name) |
---|
goes offhook | dialog state => trying Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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 |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| ...
<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 |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| <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: Szolt decided to allow it only in idle state -->
<invite target="$(ui_argument)" when="on press" states="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> |
|
🔴 | Image Added | 101 > | offhook |
|
🔴 | Image Added | Alex > | offhook |
|
---|
goes onhook | dialog state => terminated Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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 |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| ...
<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> |
|
⚪️ | Image Added | 101 | idle |
|
⚪️ | Image Added | Alex | idle |
|
---|
incoming call ringing | dialog state => early/proceeding Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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 |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| ...
<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> |
|
🟠 | Image Added | 102 > 101 | ringing |
|
🟠 | Image Added | Alice > Alex | ringing |
|
---|
incoming call accepted | dialog state => confirmed Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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 |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| ...
<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> |
|
🔴 | Image Added | 102 <> 101 | talking |
|
🔴 | Image Added | Alice <> Alex | talking |
|
---|
Incoming call terminated | dialog state => terminated Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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 |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| ...
<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> |
|
⚪️ | Image Added | 101 | idle |
|
⚪️ | Image Added | Alex | idle |
|
---|
Outgoing call ringing | dialog state => early/proceeding Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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 |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| ...
<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> |
|
🔴 | Image Added | 101 > 103 | calling |
|
🔴 | Image Added | Alex > Tita | calling |
|
---|
Outgoing call accepted | dialog state => confirmed |
---|
User interaction | SIP message | XML definition | Visual result |
---|
UAS | UAC | UAS => NOTIFY => UAC | UAC NOTIFY parsing rules | PFK LED | PFK label |
---|
goes offhook | monitoring quick dial allowed | <state>trying</state>
Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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> |
Code Block |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
|
...
<NotifyParsingRules type="state">
...
<level3 translates_to="offhook">/dialog-info/dialog/state[.="trying"]</level3>
...
</NotifyParsingRules>
<action>
<invite target="$(subscr_uri)" when="on press" states="calling, talking, offhook, idle"/>
...
</action> |
---|
Image Removed | 101 > |
offhook |
goes onhook | monitoring quick dial allowed | <state>terminated</state>
Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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> |
Code Block |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
|
...
<NotifyParsingRules type="state">
...
<level5 translates_to="idle"/>
</NotifyParsingRules>
...
<action>
<invite target="$(subscr_uri)" when="on press" states="calling, talking, offhook, idle"/>
...
</action> |
Image Removed | 101 |
idle |
incoming call ringing | monitoring pick up allowed | <state>early</state>
<state>proceeding</state>
Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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> |
Code Block |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
|
...
<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="calling, talking, offhook, 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> |
Image Removed | 102 > 101 |
ringing |
incoming call accepted | monitoring quick dial allowed | <state>confirmed</state>
Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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> |
Code Block |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
|
...
<NotifyParsingRules type="state">
...
<level4 translates_to="talking">/dialog-info/dialog/state[.="confirmed"]</level4> </NotifyParsingRules>
...
<action>
<invite target="$(subscr_uri)" when="on press" states="calling, talking, offhook, idle"/>
...
</action> |
Image Removed | 102 <> 101 |
talking |
Incoming call terminated | monitoring quick dial allowed | <state>terminated</state> Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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 uriversion="..."
state="full"
entity="sip:101@192101@.168.245.251:60158;line=caioqij3">
<dialog
<param pname="x-line-id" pval="0" />..."
</target>
</local>direction='initiator'
<remote>call-id='...'
<identity display="C">sip:102@192.168.245.1</identity>
<target uri="sip:102@192.168.245.1"/local-tag="..."
remote-tag="...">
<<state>confirmed</remote>state>
</dialog>
</dialog-info> |
Code Block |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| ...
<NotifyParsingRules type="state">
...
<level5 translates_to="idle"/>
</NotifyParsingRules>
...
<action>
<invite target="$(subscr_uri)" when="on press" states="calling, talking, offhook, idle"/>
...
</action> |
| Image Removed | 101 |
idle |
Outgoing call ringing | monitoring quick dial allowed | <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 |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
|
<state>early</state> Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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> |
Code Block |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| ...
<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="calling, talking, offhook, idle"/>
...
</action> |
| Image Removed | 101 > 103 |
calling |
Outgoing call accepted | monitoring quick dial allowed | <state>confirmed</state>
Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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> |
Code Block |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
|
...
<NotifyParsingRules type="state">
...
<level4 translates_to="talking">/dialog-info/dialog/state[.="confirmed"]</level4> </NotifyParsingRules>
...
<action>
<invite target="$(subscr_uri)" when="on press" states="calling, talking, offhook, idle"/>
...
</action> |
Image Removed | 101 <> 103 |
talking |
Outgoing call terminated | monitoring quick dial allowed | <state>terminated</state>
Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
|
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> |
Code Block |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
|
...
<NotifyParsingRules type="state">
...
<level5 translates_to="idle"/>
</NotifyParsingRules>
...
<action>
<invite target="$(subscr_uri)" when="on press" states="calling, talking, offhook, idle"/>
...
</action> |
Image Removed | 101 |
idle |
Questions
Below is a list of questions to be addressed as a result of this requirements document:
<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> |
|
🔴 | Image Added | 101 <> 103 | talking |
|
🔴 | Image Added | Alex <> Tita | talking |
|
Outgoing call terminated | dialog state => terminated Code Block |
---|
language | xml |
---|
title | NOTIFY |
---|
linenumbers | true |
---|
collapse | true |
---|
| 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 |
---|
language | xml |
---|
theme | Confluence |
---|
title | XML definition |
---|
linenumbers | true |
---|
collapse | true |
---|
| ...
<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> |
|
⚪️ | Image Added | 101 | idle |
|
⚪️ | Image Added | Alex | idle |
|
---|
|
|
|
|
|
|
---|
Questions
Below is a list of questions to be addressed as a result of this requirements document:
Question | Outcome |
---|
Shall we visualize all possible translation states? | Alexander Feldt I'd agree, for these reasons: - Snom phones (acting as UAS) already provide all information in NOTIFY body
- It's cleaner, e.g. when the UAS goes offhook or calls somebody, currently "talking" is visualized, which is not true.
- It could be an advanced sales feature?
|
Shall we allow quick dial only in idle state? | Alexander Feldt Technically, we could allow quick dial in any state, except ringing...
Zsolt Erdei Quick dial → Dial the configured extension happens only in Idle state; in Calling state does the button nothing to do, in connected state, when the party is different, the blf might blind transfer the call
|
Shall we create new icons or reuse those already existing ones? | Alexander Feldt I really question icons, that are so small, that there is no visible difference to the user, like Image Added and Image Added, therefore - if we use them at all - I vote for better distinguishable icons.
Zsolt Erdei If possible reuse
|
How can a specific LED behaviour be addressed using XML definitions? | Alexander Feldt Currently not within XML definitions, it has to be configured via settings.
Zsolt Erdei Using a new statename; that new name is added in xml definition to "state" variable and the string is configured in the led settings.
|
How can a specific label be addressed using XML definitions? | Alexander Feldt see label, but I haven't figured out how to define it correctly Zsolt Erdei with the label variable Initialisation:
< variable name = "label" value = "Clock on" /> During XML evaluation:
< assign when = "on press" >
< source value = "Hello" />
< destination id = "label" />
</ assign >
|
How can a specific icon be addressed using XML definitions? | Alexander Feldt see icon, but I haven't figured out how to define it correctly
Zsolt Erdei As I remember, same as label, value name is icon.
|
How shall the Label area be configured to use either number or display name? | Alexander Feldt The topic is even more complex: I assume the PFK label is generally too short to show longer extension number or names, i.e. some kind of scrolling must be used. But is this really helpful for the customer at all?
Zsolt Erdei It is shorted by an ellipse in QT; I think it is enough if we display the label value and the state.
|
From the UX point of view: which visual aid is more important for the customer: LED or PFK label? | Alexander Feldt - The colour of the LED and if it is blinking => very important
- The label icon => basically not important, the LED is already showing everything, also the PFK label is not even shown by default
- The label name => important when it comes to call pickup, less important for other scenarios, so is it worth adding scrolling or should we keep it simpler?
- The label state => It is definitely an additional information, which cannot be shown with LED only, e.g. the difference between offhook, calling and talking
Zsolt Erdei I say led + status on pfkey label
|
Tita Petre Is the above list of requirements enough input to create a proper testplan? |
|
Clemens Cramer As the decision to move the default blf & extension configuration to a xml definition is based on customer requests to modify the behavior, guides with working examples on how to change the labels, icons, led behavior, and handled dialog states should probably be a requirement (and as such covered by tests). | Question | Outcome |
|
---|
Not Doing