Jan 23, 2015 Update
Polycom Phones have multiple ways to interact with different SIP Platforms.
The Guide below ilustrates how to use the attendantResourceList functionality to create a Busy Lamp Field (BLF) with Asterisk.
The Phone will use the dialog-info+xml method.
Another method with limited functionality could also be the Buddy Watch facility described in this guide => here <=.
NOTE: Please be aware that this guide is a proof of concept and requires your Asterisk Digium SIP server to support the functionality. This has been tested against Asterisk 1.6.2.20 and a Polycom SoundPoint IP 650 running UCS 3.3.2. Please consult Digium Support for any queries regarding Asterisk.
The Parameter used on the supported Phones to enable monitoring of the Extension Status is within the <resourceList/>
The attendant.resourceList.x.address, x is the maximum monitored user number.
An configuration example for two monitored Extensions may look like this:
<attendant attendant.resourceList.1.address="sip:3013@10.252.75.119"
attendant.resourceList.1.label="3013"
attendant.resourceList.2.address="sip:3079@10.252.75.119"
attendant.resourceList.2.label="3079" />
Or Utilities > Line Key Configuration (Depending on the phone model supporting this!):
In order to enable a directed call pickup you may also want to add:
<call call.directedCallPickupMethod="legacy" call.directedCallPickupString="*97" />
The string used above must match the Digium Asterisk features.conf entry for pickupexten:
... ;xfersound = beep ; to indicate an attended transfer is complete ;xferfailsound = beeperr ; to indicate a failed transfer pickupexten = *97 ; Configure the pickup extension. (default is *8) ;pickupsound = beep ; to indicate a successful pickup (default: no sound) ;pickupfailsound = beeperr ; to indicate that the pickup failed (default: no sound) ...
The below notifycid=yes causes Asterisk to add a "target uri = callID" to the XML of the SIP NOTIFY. Without this target uri the Polycom phone will not do a directed pickup.
Any other compatible SIP server also needs to utilize this functionality within their SIP NOTIFY.
The Digium Asterisk sip.conf should contain a similar entry to this example:
... notifycid=yes ... [3011]; Extension 3011 domain=0.0.0.0 user=3011 type=friend secret=3011 mailbox=3011 nat=yes host=dynamic callerid="Polycom Demo" <3011> Name being Displayed on the Far End context=polycom allowsubscribe=yes call-limit=10 callgroup=1 pickupgroup=1 [3012]; Extension 3012 domain=0.0.0.0 user=3012 type=friend secret=3012 mailbox=3012 nat=yes host=dynamic callerid="Polycom Demo" <3012> Name being Displayed on the Far End context=polycom allowsubscribe=yes call-limit=10 callgroup=1 pickupgroup=1 [3013]; Extension 3013 domain=0.0.0.0 user=3013 type=friend secret=3013 mailbox=3013 nat=yes host=dynamic callerid="Polycom Demo" <3013> Name being Displayed on the Far End context=polycom allowsubscribe=yes call-limit=10 callgroup=1 pickupgroup=1 ...
NOTE: Please consult an Digium Asterisk Specialist regarding security issues setting up Extensions on a SIP Server.
The Digium Asterisk extensions.conf needs to have the HINT feature enabled.
For a block of extensions this could look like this:
… ;internal 3XXX Extension Range exten => _3XXX,hint,SIP/${EXTEN} exten => _3XXX,1,SIPAddHeader(Alert-Info: ${INTERNAL_HEADER}) exten => _3XXX,2,NoOp(SIP/mypeer ${CALLERID(num)} ext ${EXTEN}) exten => _3XXX,n,GotoIf($["${CALLERID(num)}" = "${EXTEN}"]?vm:vm2) exten => _3XXX,n(vm),VoicemailMain(s${EXTEN}) exten => _3XXX,n(vm2),Dial(SIP/${EXTEN},25,Tt) exten => _3XXX,n,VoiceMail(${EXTEN}) …
In addition the Digium Asterisk extensions.conf needs to have the above defined Pickup Code added to match also the length of the exentsions used:
exten => _*97.,1,SET(GLOBAL(PICKUPMARK)=${EXTEN:4}) exten => _*97.,n,Pickup(${EXTEN:4}@PICKUPMARK)
The above utilizes the standard value for the call.directedCallPickupString (*97) and would remove 4 digits after the *97 code.
MONITORING PHONES
Once the Phone has booted the idle screen shows the monitored Extensions:
An Incoming Call with details is presented like this:
on the VVX after a few rings the screen returns to this:
or
<normal attendant.behaviors.display.spontaneousCallAppearances.normal="0"/>
The above actually stops the phone pop up and simply displays below view.
The Busy State of a monitored Phone is presented like this:
Pressing the relevant monitored Line will show the call details in a scrolling window:
An additional 2nd call to a monitored extension is displayed via a green flashing LED (LED actually flashes green):
You can check your configuration using the Asterisk commands sip show subscriptions and core show hints, as shown below.
sip show subscriptions
Peer User Call ID Extension Last state Type Mailbox Expiry
10.252.75.172 3012 79d64c55-265a0f 3013@local Idle dialog-info+xml <none> 000145
10.252.75.172 3012 b7ca761c-75e02a 3079@local Idle dialog-info+xml <none> 000145
2 active SIP subscriptions
core show hints
-= Registered Asterisk Dial Plan Hints =-
_3XXX@local : SIP/${EXTEN} State:Idle Watchers 0
3079@local : SIP/3079 State:Idle Watchers 1
3013@local : SIP/3013 State:Idle Watchers 1
----------------
- 3 hints registered
Wireshark trace:
Subscribe
Notify (alerting)
SIP at Debug:
0123142658|sip |0|00|<<<Data Received UDP 0123142658|sip |0|00| NOTIFY sip:3080@10.252.149.103 SIP/2.0 0123142658|sip |0|00| Via: SIP/2.0/UDP 10.252.122.122:5060;branch=z9hG4bK4ecf9148;rport 0123142658|sip |0|00| Max-Forwards: 70 0123142658|sip |0|00| From: <sip:3081@10.252.122.122>;tag=as5c89ccfe 0123142658|sip |0|00| To: "3080" <sip:3080@10.252.122.122>;tag=BC6E7859-A9523F8E 0123142658|sip |0|00| Contact: <sip:3081@10.252.122.122:5060> 0123142658|sip |0|00| Call-ID: f65d4915-1f8ff162-d38cd401@10.252.149.103 0123142658|sip |0|00| CSeq: 337 NOTIFY 0123142658|sip |0|00| User-Agent: Steffens Asterisk 10.0.0 0123142658|sip |0|00| Subscription-State: active 0123142658|sip |0|00| Event: dialog 0123142658|sip |0|00| Content-Type: application/dialog-info+xml 0123142658|sip |0|00| Content-Length: 583 0123142658|sip |0|00| 0123142658|sip |0|00| <?xml version="1.0"?><dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="235" state="full" entity="sip:3081@10.252.122.122"><dialog id="3081" call-id="pickup-f65d4915-1f8ff162-d38cd401@10.252.149.103" local-tag="BC6E7859-A9523F8E" remote-tag="as5c89ccfe" direction="recipient"> <remote> <identity display="Spectralink 8030 00907a07c46c">sip:3001@10.252.122.122</identity> <target uri="sip:3001@10.252.122.122"/> </remote> <local> <identity>sip:3081@10.252.122.122</identity> <target uri="sip:308 0123142658|sip |0|00| 1@10.252.122.122"/> </local> <state>early</state> </dialog> </dialog-info>
Notify (Busy state / answered call)
SIP at Debug:
0123142804|sip |0|00|<<<Data Received UDP 0123142804|sip |0|00| NOTIFY sip:3080@10.252.149.103 SIP/2.0 0123142804|sip |0|00| Via: SIP/2.0/UDP 10.252.122.122:5060;branch=z9hG4bK789e4a71;rport 0123142804|sip |0|00| Max-Forwards: 70 0123142804|sip |0|00| From: <sip:3081@10.252.122.122>;tag=as5c89ccfe 0123142804|sip |0|00| To: "3080" <sip:3080@10.252.122.122>;tag=BC6E7859-A9523F8E 0123142804|sip |0|00| Contact: <sip:3081@10.252.122.122:5060> 0123142804|sip |0|00| Call-ID: f65d4915-1f8ff162-d38cd401@10.252.149.103 0123142804|sip |0|00| CSeq: 341 NOTIFY 0123142804|sip |0|00| User-Agent: Steffens Asterisk 10.0.0 0123142804|sip |0|00| Subscription-State: active 0123142804|sip |0|00| Event: dialog 0123142804|sip |0|00| Content-Type: application/dialog-info+xml 0123142804|sip |0|00| Content-Length: 205 0123142804|sip |0|00| 0123142804|sip |0|00| <?xml version="1.0"?><dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="239" state="full" entity="sip:3081@10.252.122.122"><dialog id="3081"><state>confirmed</state> </dialog> </dialog-info>
Notify (clearing call / hanging up)
SIP at Debug:
0123142917|sip |0|00|<<<Data Received UDP 0123142917|sip |0|00| NOTIFY sip:3080@10.252.149.103 SIP/2.0 0123142917|sip |0|00| Via: SIP/2.0/UDP 10.252.122.122:5060;branch=z9hG4bK38447a44;rport 0123142917|sip |0|00| Max-Forwards: 70 0123142917|sip |0|00| From: <sip:3081@10.252.122.122>;tag=as5c89ccfe 0123142917|sip |0|00| To: "3080" <sip:3080@10.252.122.122>;tag=BC6E7859-A9523F8E 0123142917|sip |0|00| Contact: <sip:3081@10.252.122.122:5060> 0123142917|sip |0|00| Call-ID: f65d4915-1f8ff162-d38cd401@10.252.149.103 0123142917|sip |0|00| CSeq: 342 NOTIFY 0123142917|sip |0|00| User-Agent: Steffens Asterisk 10.0.0 0123142917|sip |0|00| Subscription-State: active 0123142917|sip |0|00| Event: dialog 0123142917|sip |0|00| Content-Type: application/dialog-info+xml 0123142917|sip |0|00| Content-Length: 206 0123142917|sip |0|00| 0123142917|sip |0|00| <?xml version="1.0"?><dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="240" state="full" entity="sip:3081@10.252.122.122"><dialog id="3081"><state>terminated</state> </dialog> </dialog-info>
Call Pickup
Resource List Subscriptions (RLS) RFC4662
Since UC Software 5.4.5 or later Polycom partially supports the Asterisk RLS
extensions.conf
pjsip.conf
Polycom Configuration:
<asterisk attendant.uri="sales@10.252.149.247" />
Initial SUBSCRIBE
0919182624|sip |0|00| SUBSCRIBE sip:sales@10.252.149.247 SIP/2.0 0919182624|sip |0|00| Via: SIP/2.0/UDP 10.252.149.106;branch=z9hG4bK44199cd8D82FDCB5 0919182624|sip |0|00| From: "3030" <sip:3030@10.252.149.247>;tag=60F5E2C4-835810E1 0919182624|sip |0|00| To: <sip:sales@10.252.149.247> 0919182624|sip |0|00| CSeq: 1 SUBSCRIBE 0919182624|sip |0|00| Call-ID: 20b64582-36aaac3f-ce2655ec@10.252.149.106 0919182624|sip |0|00| Contact: <sip:3030@10.252.149.106> 0919182624|sip |0|00| Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, INFO, MESSAGE, SUBSCRIBE, NOTIFY, PRACK, UPDATE, REFER 0919182624|sip |0|00| Event: dialog 0919182624|sip |0|00| User-Agent: PolycomVVX-VVX_600-UA/5.4.5.5602 0919182624|sip |0|00| Accept-Language: en 0919182624|sip |0|00| Accept: application/dialog-info+xml,application/rlmi+xml,multipart/related 0919182624|sip |0|00| Supported: eventlist 0919182624|sip |0|00| Max-Forwards: 70 0919182624|sip |0|00| Expires: 3600 0919182624|sip |0|00| Content-Length: 0 0919182624|sip |0|00| 0919182624|sip |0|00|<<< End of data send
Ringing:
0919182624|sip |0|00| NOTIFY sip:3030@10.252.149.106 SIP/2.0 0919182624|sip |0|00| Via: SIP/2.0/UDP 10.252.149.247:5060;rport;branch=z9hG4bKPj2a0121ec-84fa-4c6c-a780-a1874f6ef39e 0919182624|sip |0|00| From: <sip:sales@10.252.149.247>;tag=b9c7d407-eefd-4945-b727-dd3759728dc7 0919182624|sip |0|00| To: "3030" <sip:3030@10.252.149.247>;tag=60F5E2C4-835810E1 0919182624|sip |0|00| Contact: <sip:10.252.149.247:5060> 0919182624|sip |0|00| Call-ID: 20b64582-36aaac3f-ce2655ec@10.252.149.106 0919182624|sip |0|00| CSeq: 5344 NOTIFY 0919182624|sip |0|00| Event: dialog 0919182624|sip |0|00| Subscription-State: active;expires=3600 0919182624|sip |0|00| Allow-Events: presence, dialog, message-summary, refer 0919182624|sip |0|00| Require: eventlist 0919182624|sip |0|00| Max-Forwards: 70 0919182624|sip |0|00| User-Agent: Asterisk PBX 13.11.2 0919182624|sip |0|00| Content-Type: multipart/related;type="application/rlmi+xml";boundary=xdycj 0919182624|sip |0|00| Content-Length: 792 0919182624|sip |0|00| 0919182624|sip |0|00| 0919182624|sip |0|00| --xdycj 0919182624|sip |0|00| Content-ID: <kffvz@10.252.149.247> 0919182624|sip |0|00| Content-Type: application/rlmi+xml 0919182624|sip |0|00| Content-Length: 323 0919182624|sip |0|00| 0919182624|sip |0|00| <?xml version="1.0" encoding="UTF-8"?> <list xmlns="urn:ietf:params:xml:ns:rlmi" uri="sip:sales@10.252.149.247:5060" version="0" fullState="true"> <name>sales</name> <resource uri="sip:3314@10.252.149.247:5060"> <name>3314</name> <instance id="zuibm" state="active" cid="ihlza@10.252.149.247" /> </resource> </list> 0919182624|sip |0|00| --xdycj 0919182624|sip |0|00| Content-ID: <ihlza@10.252.149.247> 0919182624|sip |0|00| Content-Type: application/dialog-info+xml 0919182624|sip |0|00| Content-Length: 233 0919182624|sip |0|00| 0919182624|sip |0|00| <?xml version="1.0" encoding="UTF-8"?> <dialog-info xmlns="urn:ietf:params:xml:ns:dialog-info" version="0" state="full" entity="sip:3314@10.252.149.247:5060"> <dialog id="3314"> <state>terminated</state> </dialog> </dialog-info>